generated from liutk/owl-admin-base
82 lines
2.8 KiB
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,
|
|
];
|
|
}
|
|
}
|