generated from liutk/owl-admin-base
182 lines
6.3 KiB
PHP
182 lines
6.3 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Services;
|
|
|
|
use App\Admin\Filters\AppVersionFilter;
|
|
use App\Enums\AppOs;
|
|
use App\Enums\AppUpdateStrategy;
|
|
use App\Models\AppVersion;
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class AppVersionService extends BaseService
|
|
{
|
|
protected string $modelName = AppVersion::class;
|
|
|
|
protected string $modelFilterName = AppVersionFilter::class;
|
|
|
|
public function sortColumn()
|
|
{
|
|
return 'version';
|
|
}
|
|
|
|
public function getEditData($id)
|
|
{
|
|
return tap(parent::getEditData($id), function ($instance) {
|
|
switch ($instance?->os) {
|
|
case AppOs::Android:
|
|
$instance->setAttribute('android', [
|
|
'apk_url' => $instance->apk_url,
|
|
'wgt_url' => $instance->wgt_url,
|
|
]);
|
|
break;
|
|
|
|
case AppOs::Ios:
|
|
$instance->setAttribute('ios', [
|
|
'apk_url' => $instance->apk_url,
|
|
'wgt_url' => $instance->wgt_url,
|
|
]);
|
|
break;
|
|
}
|
|
});
|
|
}
|
|
|
|
public function store($data): bool
|
|
{
|
|
Validator::validate(
|
|
data: $data,
|
|
rules: [
|
|
'name' => ['bail', 'required', 'max:255'],
|
|
'version' => ['bail', 'required', 'int'],
|
|
'title' => ['bail', 'required', 'max:255'],
|
|
'description' => ['bail', 'required'],
|
|
'update_strategy' => ['bail', 'required', Rule::enum(AppUpdateStrategy::class)],
|
|
'is_force' => ['bail', 'required', 'bool'],
|
|
'os' => ['bail', 'required', Rule::enum(AppOs::class)],
|
|
'release_at' => ['bail', 'nullable', 'date_format:Y-m-d H:i:s'],
|
|
],
|
|
attributes: [
|
|
'name' => __('app_version.name'),
|
|
'version' => __('app_version.version'),
|
|
'title' => __('app_version.title'),
|
|
'description' => __('app_version.description'),
|
|
'update_strategy' => __('app_version.update_strategy'),
|
|
'is_force' => __('app_version.is_force'),
|
|
'os' => __('app_version.os'),
|
|
'release_at' => __('app_version.release_at'),
|
|
],
|
|
);
|
|
|
|
// 全量包
|
|
$apkUrl = '';
|
|
// 增量包
|
|
$wgtUrl = '';
|
|
// 更新策略
|
|
$aus = AppUpdateStrategy::from($data['update_strategy']);
|
|
|
|
switch (AppOs::from($data['os'])) {
|
|
case AppOs::Android:
|
|
$apkUrl = (string) Arr::get($data, 'android.apk_url');
|
|
$wgtUrl = (string) Arr::get($data, 'android.wgt_url');
|
|
if ($aus === AppUpdateStrategy::Apk) {
|
|
admin_abort_if($apkUrl === '', '请上传全量包');
|
|
} else {
|
|
admin_abort_if($wgtUrl === '', '请上传增量包');
|
|
}
|
|
break;
|
|
|
|
case AppOs::Ios:
|
|
$apkUrl = (string) Arr::get($data, 'ios.apk_url');
|
|
$wgtUrl = (string) Arr::get($data, 'ios.wgt_url');
|
|
if ($aus === AppUpdateStrategy::Apk) {
|
|
admin_abort_if($apkUrl === '', '苹果应用地址 不能为空。');
|
|
} else {
|
|
admin_abort_if($wgtUrl === '', '请上传增量包');
|
|
}
|
|
break;
|
|
|
|
default:
|
|
admin_abort('未知操作系统');
|
|
break;
|
|
}
|
|
|
|
$model = $this->getModel();
|
|
|
|
$model::create(array_merge($data, [
|
|
'apk_url' => $apkUrl,
|
|
'wgt_url' => $wgtUrl,
|
|
]));
|
|
|
|
return true;
|
|
}
|
|
|
|
public function update($primaryKey, $data): bool
|
|
{
|
|
Validator::validate(
|
|
data: $data,
|
|
rules: [
|
|
'name' => ['bail', 'required', 'max:255'],
|
|
'version' => ['bail', 'required', 'int'],
|
|
'title' => ['bail', 'required', 'max:255'],
|
|
'description' => ['bail', 'required'],
|
|
'update_strategy' => ['bail', 'required', Rule::enum(AppUpdateStrategy::class)],
|
|
'is_force' => ['bail', 'required', 'bool'],
|
|
'os' => ['bail', 'required', Rule::enum(AppOs::class)],
|
|
'release_at' => ['bail', 'nullable', 'date_format:Y-m-d H:i:s'],
|
|
],
|
|
attributes: [
|
|
'name' => __('app_version.name'),
|
|
'version' => __('app_version.version'),
|
|
'title' => __('app_version.title'),
|
|
'description' => __('app_version.description'),
|
|
'update_strategy' => __('app_version.update_strategy'),
|
|
'is_force' => __('app_version.is_force'),
|
|
'os' => __('app_version.os'),
|
|
'release_at' => __('app_version.release_at'),
|
|
],
|
|
);
|
|
|
|
// 全量包
|
|
$apkUrl = '';
|
|
// 增量包
|
|
$wgtUrl = '';
|
|
// 更新策略
|
|
$aus = AppUpdateStrategy::from($data['update_strategy']);
|
|
|
|
switch (AppOs::from($data['os'])) {
|
|
case AppOs::Android:
|
|
$apkUrl = (string) Arr::get($data, 'android.apk_url');
|
|
$wgtUrl = (string) Arr::get($data, 'android.wgt_url');
|
|
if ($aus === AppUpdateStrategy::Apk) {
|
|
admin_abort_if($apkUrl === '', '请上传全量包');
|
|
} else {
|
|
admin_abort_if($wgtUrl === '', '请上传增量包');
|
|
}
|
|
break;
|
|
|
|
case AppOs::Ios:
|
|
$apkUrl = (string) Arr::get($data, 'ios.apk_url');
|
|
$wgtUrl = (string) Arr::get($data, 'ios.wgt_url');
|
|
if ($aus === AppUpdateStrategy::Apk) {
|
|
admin_abort_if($apkUrl === '', '苹果应用地址 不能为空。');
|
|
} else {
|
|
admin_abort_if($wgtUrl === '', '请上传增量包');
|
|
}
|
|
break;
|
|
|
|
default:
|
|
admin_abort('未知操作系统');
|
|
break;
|
|
}
|
|
|
|
$instance = $this->query()->whereKey($primaryKey)->firstOrFail();
|
|
$instance->update(array_merge($data, [
|
|
'apk_url' => $apkUrl,
|
|
'wgt_url' => $wgtUrl,
|
|
]));
|
|
|
|
return true;
|
|
}
|
|
}
|