From 3da0f0d8069b133bd2e785ad79f215efe764a01b Mon Sep 17 00:00:00 2001
From: ltx <1006158920@qq.com>
Date: Thu, 5 Nov 2026 15:00:57 +0800
Subject: [PATCH] =?UTF-8?q?update=EF=BC=9A=E8=A3=81=E5=88=A4=E7=AB=AFapp?=
=?UTF-8?q?=E7=89=88=E6=9C=AC=E6=8E=A7=E5=88=B6&=E8=BF=9C=E7=A8=8B?=
=?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../AppUpdate/AppUpdateController.cs | 207 ++++++++++++++++++
YD_Event.Core/Entities/JudgeAppRelease.cs | 26 +++
二期需求/dbo.sql | 30 +++
二期需求/上线/dbo_add.sql | 29 +++
4 files changed, 292 insertions(+)
create mode 100644 YD_Event.Application/AppUpdate/AppUpdateController.cs
create mode 100644 YD_Event.Core/Entities/JudgeAppRelease.cs
diff --git a/YD_Event.Application/AppUpdate/AppUpdateController.cs b/YD_Event.Application/AppUpdate/AppUpdateController.cs
new file mode 100644
index 0000000..ba1dbbc
--- /dev/null
+++ b/YD_Event.Application/AppUpdate/AppUpdateController.cs
@@ -0,0 +1,207 @@
+using System.Diagnostics;
+using System.Security.Cryptography;
+using YD_Event.Application.Auth;
+using YD_Event.Application.Common;
+
+namespace YD_Event.Application.AppUpdate;
+
+/// 内部 Android 裁判端 APK 发布与升级检查。
+[ApiDescriptionSettings("裁判端升级")]
+[Route("api/app-updates")]
+[Authorize]
+public class AppUpdateController : IDynamicApiController
+{
+ private const string PackageName = "com.yd.event.yd_pattern_scoring_system";
+ private const long MaxApkSize = 200L * 1024 * 1024;
+ private readonly ISqlSugarRepository _releases;
+ private readonly AuthManager _auth;
+ private readonly IIdGenerator _ids;
+ private readonly FileService _files;
+ private readonly string _channel;
+
+ public AppUpdateController(ISqlSugarRepository releases,
+ AuthManager auth, IIdGenerator ids, FileService files)
+ {
+ _releases = releases;
+ _auth = auth;
+ _ids = ids;
+ _files = files;
+ _channel = Environment.GetEnvironmentVariable("APP_UPDATE_CHANNEL")?.Trim().ToLowerInvariant() ?? "production";
+ }
+
+ /// 登录前即可查询当前环境的最新 APK。
+ [HttpGet("latest")]
+ [AllowAnonymous]
+ public async Task