55 lines
1.9 KiB
TypeScript
55 lines
1.9 KiB
TypeScript
import { Controller, Get, Query } from '@nestjs/common'
|
|
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger'
|
|
import { VersionService } from '../../application/services/version.service'
|
|
import { Platform } from '../../domain/version-management'
|
|
import { CheckUpdateDto } from '../dto/version'
|
|
import { Public } from '../../shared/guards/admin-auth.guard'
|
|
import { SkipTransform } from '../../shared/interceptors/transform.interceptor'
|
|
|
|
/**
|
|
* Mobile App Version API Controller
|
|
* Response format matches mining-app (Flutter) expected format:
|
|
* { hasUpdate: boolean, latestVersion?: { versionCode, versionName, ... } }
|
|
*/
|
|
@ApiTags('Mobile App Version')
|
|
@Controller('api/app/version')
|
|
export class MobileVersionController {
|
|
constructor(private readonly versionService: VersionService) {}
|
|
|
|
private getPlatform(platform: string): Platform {
|
|
const normalized = platform.toLowerCase()
|
|
if (normalized === 'ios') return Platform.IOS
|
|
return Platform.ANDROID
|
|
}
|
|
|
|
@Get('check')
|
|
@Public()
|
|
@SkipTransform()
|
|
@ApiOperation({ summary: '检查更新 (mining-app 专用)' })
|
|
async checkUpdate(@Query() dto: CheckUpdateDto) {
|
|
const platform = this.getPlatform(dto.platform)
|
|
const result = await this.versionService.checkUpdate(platform, dto.versionCode)
|
|
|
|
if (!result.hasUpdate || !result.latestVersion) {
|
|
return { hasUpdate: false }
|
|
}
|
|
|
|
const v = result.latestVersion
|
|
return {
|
|
hasUpdate: true,
|
|
latestVersion: {
|
|
versionCode: v.versionCode,
|
|
versionName: v.versionName,
|
|
buildNumber: v.buildNumber,
|
|
downloadUrl: v.downloadUrl,
|
|
fileSize: Number(BigInt(v.fileSize)),
|
|
fileSha256: v.fileSha256,
|
|
changelog: v.changelog,
|
|
isForceUpdate: result.isForceUpdate,
|
|
minOsVersion: v.minOsVersion ?? null,
|
|
releaseDate: v.releaseDate?.toISOString() ?? null,
|
|
},
|
|
}
|
|
}
|
|
}
|