store-manage/app/Http/Controllers/Api/AppVersionController.php

82 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Enums\AppOs;
use App\Enums\AppUpdateStrategy;
use App\Http\Resources\AppVersionResource;
use App\Models\AppVersion;
use Illuminate\Http\Request;
class AppVersionController extends Controller
{
public function latest(Request $request): array
{
// 客户端系统
$os = AppOs::tryFrom((string) $request->header('app-cli-os'));
// 客户端版本
$version = (int) $request->header('app-cli-version', 0);
$android = AppVersion::onlyReleased()
->where('os', AppOs::Android)
->latest('version')
->first();
$ios = AppVersion::onlyReleased()
->where('os', AppOs::Ios)
->latest('version')
->first();
switch ($os) {
case AppOs::Android:
if ($android->version > $version + 1) {
if (! $android->isApkUpdate()) {
$apkUpdateVersion = AppVersion::onlyReleased()
->where('os', AppOs::Android)
->where('version', '>', $version)
->where('update_strategy', AppUpdateStrategy::Apk)
->latest('version')
->first();
// 全量包更新
if ($apkUpdateVersion) {
if ((string) $android->apk_url !== '') {
$android->update_strategy = AppUpdateStrategy::Apk;
} else {
$android = $apkUpdateVersion;
}
}
}
}
break;
case AppOs::Ios:
if ($ios->version > $version + 1) {
if (! $ios->isApkUpdate()) {
$apkUpdateVersion = AppVersion::onlyReleased()
->where('os', AppOs::Ios)
->where('version', '>', $version)
->where('update_strategy', AppUpdateStrategy::Apk)
->latest('version')
->first();
// 全量包更新
if ($apkUpdateVersion) {
if ((string) $ios->apk_url !== '') {
$ios->update_strategy = AppUpdateStrategy::Apk;
} else {
$ios = $apkUpdateVersion;
}
}
}
}
break;
}
return [
'android' => $android ? AppVersionResource::make($android) : null,
'ios' => $ios ? AppVersionResource::make($ios) : null,
];
}
}