diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index de9e7b8..2246537 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -6,7 +6,7 @@ on: - main env: - VERSION: 3.5.0 + VERSION: 3.5.1 jobs: # ЧАСТЬ 1: Собираем образы и кладем в Gitea (чтобы делиться с ребятами) diff --git a/Directory.Build.props b/Directory.Build.props index 937db6b..22ecae3 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,6 @@ - 3.5.0 + 3.5.1 net10.0 preview enable diff --git a/README.md b/README.md index 5be80c3..e72f852 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Проект разработан с упором на производительность, архитектуру Vertical Slice, Native AOT (для бота) и удобство развертывания с использованием .NET Aspire. -**Текущая версия:** `v3.5.0`. +**Текущая версия:** `v3.5.1`. --- diff --git a/compose.yaml b/compose.yaml index 167d094..6820840 100644 --- a/compose.yaml +++ b/compose.yaml @@ -49,7 +49,7 @@ services: crond -f bot: - image: git.codeanddice.ru/toutsu/gmrelay-bot:3.5.0 + image: git.codeanddice.ru/toutsu/gmrelay-bot:3.5.1 restart: always depends_on: db: @@ -67,7 +67,7 @@ services: retries: 3 discord: - image: git.codeanddice.ru/toutsu/gmrelay-discord-bot:3.5.0 + image: git.codeanddice.ru/toutsu/gmrelay-discord-bot:3.5.1 restart: always depends_on: db: @@ -84,7 +84,7 @@ services: retries: 3 web: - image: git.codeanddice.ru/toutsu/gmrelay-web:3.5.0 + image: git.codeanddice.ru/toutsu/gmrelay-web:3.5.1 restart: always depends_on: db: diff --git a/src/GmRelay.Web/Components/Layout/NavMenu.razor b/src/GmRelay.Web/Components/Layout/NavMenu.razor index 09c4bba..6383108 100644 --- a/src/GmRelay.Web/Components/Layout/NavMenu.razor +++ b/src/GmRelay.Web/Components/Layout/NavMenu.razor @@ -73,7 +73,7 @@ - + diff --git a/src/GmRelay.Web/Services/SessionService.cs b/src/GmRelay.Web/Services/SessionService.cs index 1472c61..865acdd 100644 --- a/src/GmRelay.Web/Services/SessionService.cs +++ b/src/GmRelay.Web/Services/SessionService.cs @@ -327,7 +327,7 @@ public sealed class SessionService( FROM group_managers gm WHERE gm.group_id = g.id AND gm.role = @OwnerRole - ORDER BY gm.added_at + ORDER BY gm.created_at LIMIT 1 ) owner_manager ON true LEFT JOIN player_links owner_link ON owner_link.secondary_player_id = owner_manager.player_id @@ -394,7 +394,7 @@ public sealed class SessionService( FROM group_managers gm WHERE gm.group_id = g.id AND gm.role = @OwnerRole - ORDER BY gm.added_at + ORDER BY gm.created_at LIMIT 1 ) owner_manager ON true LEFT JOIN player_links owner_link ON owner_link.secondary_player_id = owner_manager.player_id @@ -470,7 +470,7 @@ public sealed class SessionService( FROM group_managers gm WHERE gm.group_id = g.id AND gm.role = @OwnerRole - ORDER BY gm.added_at + ORDER BY gm.created_at LIMIT 1 ) owner_manager ON true LEFT JOIN player_links owner_link ON owner_link.secondary_player_id = owner_manager.player_id @@ -573,7 +573,7 @@ public sealed class SessionService( FROM group_managers gm WHERE gm.group_id = g.id AND gm.role = @OwnerRole - ORDER BY gm.added_at + ORDER BY gm.created_at LIMIT 1 ) owner_manager ON true LEFT JOIN player_links owner_link ON owner_link.secondary_player_id = owner_manager.player_id @@ -2111,7 +2111,7 @@ public sealed class SessionService( FROM group_managers gm WHERE gm.group_id = g.id AND gm.role = @OwnerRole - ORDER BY gm.added_at + ORDER BY gm.created_at LIMIT 1 ) owner_manager ON true LEFT JOIN player_links owner_link ON owner_link.secondary_player_id = owner_manager.player_id diff --git a/tests/GmRelay.Bot.Tests/Web/MasterProfilesTests.cs b/tests/GmRelay.Bot.Tests/Web/MasterProfilesTests.cs index 403eabc..9a0d7b4 100644 --- a/tests/GmRelay.Bot.Tests/Web/MasterProfilesTests.cs +++ b/tests/GmRelay.Bot.Tests/Web/MasterProfilesTests.cs @@ -108,6 +108,18 @@ public sealed class MasterProfilesTests Assert.DoesNotContain("gm.role = @OwnerRole", sessionsQuery, StringComparison.Ordinal); } + [Fact] + public async Task PublicOwnerProfileLinks_ShouldOrderByExistingGroupManagerTimestamp() + { + var migration = await ReadRepositoryFileAsync("src/GmRelay.Bot/Migrations/V008__add_group_managers.sql"); + var sessionService = await ReadRepositoryFileAsync("src/GmRelay.Web/Services/SessionService.cs"); + + Assert.Contains("created_at", migration, StringComparison.Ordinal); + Assert.DoesNotContain("added_at", migration, StringComparison.Ordinal); + Assert.DoesNotContain("gm.added_at", PublicQuerySection(sessionService), StringComparison.Ordinal); + Assert.Contains("gm.created_at", PublicQuerySection(sessionService), StringComparison.Ordinal); + } + private static string RecordSection(string source, string recordName) { var start = source.IndexOf($"record {recordName}", StringComparison.Ordinal);