From 55bc0dedb7e75137044d1a9939dad2cb6b31013f Mon Sep 17 00:00:00 2001 From: Toutsu Date: Fri, 17 Apr 2026 15:13:57 +0300 Subject: [PATCH] fix: resolve session edit crashes and rendering mode bugs --- src/GmRelay.Web/Components/App.razor | 4 ++-- src/GmRelay.Web/Dockerfile | 1 + src/GmRelay.Web/Services/SessionService.cs | 20 ++++++++++---------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/GmRelay.Web/Components/App.razor b/src/GmRelay.Web/Components/App.razor index 9f67545..3a15a29 100644 --- a/src/GmRelay.Web/Components/App.razor +++ b/src/GmRelay.Web/Components/App.razor @@ -11,11 +11,11 @@ - + - + diff --git a/src/GmRelay.Web/Dockerfile b/src/GmRelay.Web/Dockerfile index 26410ea..7a6f163 100644 --- a/src/GmRelay.Web/Dockerfile +++ b/src/GmRelay.Web/Dockerfile @@ -18,6 +18,7 @@ RUN dotnet publish "GmRelay.Web.csproj" -c Release -o /app/publish /p:UseAppHost # Stage 2: Runtime FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble AS final WORKDIR /app +RUN apt-get update && apt-get install -y libgssapi-krb5-2 && rm -rf /var/lib/apt/lists/* COPY --from=build /app/publish . ENV ASPNETCORE_URLS=http://+:8080 EXPOSE 8080 diff --git a/src/GmRelay.Web/Services/SessionService.cs b/src/GmRelay.Web/Services/SessionService.cs index ec0fba5..423501a 100644 --- a/src/GmRelay.Web/Services/SessionService.cs +++ b/src/GmRelay.Web/Services/SessionService.cs @@ -53,23 +53,23 @@ public sealed class SessionService( await using var conn = await dataSource.OpenConnectionAsync(); await using var transaction = await conn.BeginTransactionAsync(); - // 1. Update Session + // 1. Fetch current session with all required columns for WebSession record var oldSession = await conn.QuerySingleAsync( - "SELECT title, scheduled_at AS ScheduledAt, join_link AS JoinLink, batch_id AS BatchId, batch_message_id AS BatchMessageId FROM sessions WHERE id = @Id", + @"SELECT s.id, s.group_id AS GroupId, s.title, s.scheduled_at AS ScheduledAt, s.status, s.join_link AS JoinLink, + s.batch_id AS BatchId, s.batch_message_id AS BatchMessageId, + g.telegram_chat_id AS TelegramChatId + FROM sessions s + JOIN game_groups g ON g.id = s.group_id + WHERE s.id = @Id", new { Id = sessionId }, transaction); + // 2. Update Session await conn.ExecuteAsync( @"UPDATE sessions SET title = @Title, scheduled_at = @ScheduledAt, join_link = @JoinLink, updated_at = now() WHERE id = @Id", new { Id = sessionId, Title = title, ScheduledAt = scheduledAt, JoinLink = joinLink }, transaction); - // 2. Fetch context for notification - var group = await conn.QuerySingleAsync( - @"SELECT telegram_chat_id AS TelegramChatId FROM game_groups g - JOIN sessions s ON s.group_id = g.id WHERE s.id = @Id", - new { Id = sessionId }, transaction); - // 3. Update all sessions in the same batch with new title (optional, usually batch shares title) await conn.ExecuteAsync( "UPDATE sessions SET title = @Title WHERE batch_id = @BatchId", @@ -84,12 +84,12 @@ public sealed class SessionService( $"📌 {System.Net.WebUtility.HtmlEncode(title)}\n" + $"📅 Время: {scheduledAt.FormatMoscow()} (МСК)" + (timeChanged ? " (изменено)" : ""); - await bot.SendMessage(group.TelegramChatId, notification, parseMode: Telegram.Bot.Types.Enums.ParseMode.Html); + await bot.SendMessage(oldSession.TelegramChatId, notification, parseMode: Telegram.Bot.Types.Enums.ParseMode.Html); // 5. Update Original Batch Message if (oldSession.BatchMessageId.HasValue) { - await TryUpdateBatchMessageAsync(oldSession.BatchId, group.TelegramChatId, oldSession.BatchMessageId.Value, title); + await TryUpdateBatchMessageAsync(oldSession.BatchId, oldSession.TelegramChatId, oldSession.BatchMessageId.Value, title); } }