From 79047b54888c470ef9c2a61c82521e394901451b Mon Sep 17 00:00:00 2001 From: nanxun Date: Sun, 26 Apr 2026 11:03:08 +0800 Subject: [PATCH] feat: add recovery center and daily reviews --- frontend/src/components/layout/MainLayout.vue | 4 +- frontend/src/views/DailyReviewsView.vue | 6 +- frontend/src/views/RecoveryView.vue | 6 +- .../IWebhookNotificationService.cs | 21 + .../Persistence/PersistenceContracts.cs | 2 + .../Scripting/IEventScriptService.cs | 6 +- .../Common/AutoStartDecisionCodes.cs | 16 + .../Models/LiveRooms/LiveRoomModels.cs | 8 + .../Models/RecordTasks/RecordSessionModels.cs | 72 ++ .../Models/Recovery/RecoveryModels.cs | 88 ++ .../Models/Reports/DailyReviewModels.cs | 126 +++ .../Models/Settings/SettingsModels.cs | 95 +++ .../Services/LiveRoomService.cs | 13 + .../Services/LiveRoomStatusService.cs | 4 + .../Services/RecordService.cs | 171 +++- .../Services/RecordSessionService.cs | 21 +- .../Services/SessionAnalyticsService.cs | 805 ++++++++++++++++++ .../Services/SystemSettingsService.cs | 27 + src/LiveRecorder.Domain/Entities/LiveRoom.cs | 20 + .../Persistence/DatabaseInitializer.cs | 13 + .../Persistence/LiveRecorderDbContext.cs | 3 + .../Persistence/Repositories/Repositories.cs | 3 + .../Services/EventScriptService.cs | 330 ++++++- .../Services/FfmpegService.Runtime.cs | 7 + .../LiveRoomPollingBackgroundService.cs | 63 ++ .../Services/RecoveryService.cs | 437 ++++++++++ .../RetentionCleanupBackgroundService.cs | 76 ++ .../Services/RetentionCleanupService.cs | 283 ++++++ .../Services/WebhookNotificationService.cs | 337 ++++++++ .../Controllers/RecoveryController.cs | 37 + .../Controllers/ReportsController.cs | 33 + .../Controllers/SettingsController.cs | 29 +- src/LiveRecorder.WebApi/Program.cs | 5 + 33 files changed, 3127 insertions(+), 40 deletions(-) create mode 100644 src/LiveRecorder.Application/Abstractions/Notifications/IWebhookNotificationService.cs create mode 100644 src/LiveRecorder.Application/Common/AutoStartDecisionCodes.cs create mode 100644 src/LiveRecorder.Application/Models/Recovery/RecoveryModels.cs create mode 100644 src/LiveRecorder.Application/Models/Reports/DailyReviewModels.cs create mode 100644 src/LiveRecorder.Application/Services/SessionAnalyticsService.cs create mode 100644 src/LiveRecorder.Infrastructure/Services/RecoveryService.cs create mode 100644 src/LiveRecorder.Infrastructure/Services/RetentionCleanupBackgroundService.cs create mode 100644 src/LiveRecorder.Infrastructure/Services/RetentionCleanupService.cs create mode 100644 src/LiveRecorder.Infrastructure/Services/WebhookNotificationService.cs create mode 100644 src/LiveRecorder.WebApi/Controllers/RecoveryController.cs create mode 100644 src/LiveRecorder.WebApi/Controllers/ReportsController.cs diff --git a/frontend/src/components/layout/MainLayout.vue b/frontend/src/components/layout/MainLayout.vue index 62f8b5a..f9bdf7d 100644 --- a/frontend/src/components/layout/MainLayout.vue +++ b/frontend/src/components/layout/MainLayout.vue @@ -263,8 +263,8 @@ async function handleLogout() { />
Control Room
-
{{ pageMeta.title }}
-
{{ pageMeta.subtitle }}
+
Live Recorder
+
专业直播录制运维控制台
diff --git a/frontend/src/views/DailyReviewsView.vue b/frontend/src/views/DailyReviewsView.vue index 3213ad5..0cd9dd1 100644 --- a/frontend/src/views/DailyReviewsView.vue +++ b/frontend/src/views/DailyReviewsView.vue @@ -2,6 +2,7 @@ import { computed, onMounted, ref } from "vue"; import { useRouter } from "vue-router"; import { useViewport } from "@/composables/useViewport"; +import axios from "axios"; import apiClient, { getApiErrorMessage } from "@/api/client"; import type { DailyReviewReport } from "@/types"; @@ -28,7 +29,10 @@ async function loadReport() { }); report.value = data; } catch (error) { - loadError.value = getApiErrorMessage(error, "回顾日报加载失败,请稍后重试。"); + loadError.value = + axios.isAxiosError(error) && error.response?.status === 404 + ? "当前后端还没有部署回顾日报接口。请先同步更新并重启后端,再打开这个页面。" + : getApiErrorMessage(error, "回顾日报加载失败,请稍后重试。"); } finally { loading.value = false; } diff --git a/frontend/src/views/RecoveryView.vue b/frontend/src/views/RecoveryView.vue index 673c9e6..eef1a62 100644 --- a/frontend/src/views/RecoveryView.vue +++ b/frontend/src/views/RecoveryView.vue @@ -1,6 +1,7 @@