fix(web): restore public game pages
PR Checks / test-and-build (pull_request) Successful in 11m56s

Use the existing group_managers.created_at column when picking owner profile links for public pages.

Bump version -> 3.5.1
This commit is contained in:
2026-05-29 09:27:01 +03:00
parent b32f962f11
commit b52d4000b4
7 changed files with 24 additions and 12 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ on:
- main - main
env: env:
VERSION: 3.5.0 VERSION: 3.5.1
jobs: jobs:
# ЧАСТЬ 1: Собираем образы и кладем в Gitea (чтобы делиться с ребятами) # ЧАСТЬ 1: Собираем образы и кладем в Gitea (чтобы делиться с ребятами)
+1 -1
View File
@@ -1,6 +1,6 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<Version>3.5.0</Version> <Version>3.5.1</Version>
<TargetFramework>net10.0</TargetFramework> <TargetFramework>net10.0</TargetFramework>
<LangVersion>preview</LangVersion> <LangVersion>preview</LangVersion>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
+1 -1
View File
@@ -4,7 +4,7 @@
Проект разработан с упором на производительность, архитектуру Vertical Slice, Native AOT (для бота) и удобство развертывания с использованием .NET Aspire. Проект разработан с упором на производительность, архитектуру Vertical Slice, Native AOT (для бота) и удобство развертывания с использованием .NET Aspire.
**Текущая версия:** `v3.5.0`. **Текущая версия:** `v3.5.1`.
--- ---
+3 -3
View File
@@ -49,7 +49,7 @@ services:
crond -f crond -f
bot: bot:
image: git.codeanddice.ru/toutsu/gmrelay-bot:3.5.0 image: git.codeanddice.ru/toutsu/gmrelay-bot:3.5.1
restart: always restart: always
depends_on: depends_on:
db: db:
@@ -67,7 +67,7 @@ services:
retries: 3 retries: 3
discord: 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 restart: always
depends_on: depends_on:
db: db:
@@ -84,7 +84,7 @@ services:
retries: 3 retries: 3
web: web:
image: git.codeanddice.ru/toutsu/gmrelay-web:3.5.0 image: git.codeanddice.ru/toutsu/gmrelay-web:3.5.1
restart: always restart: always
depends_on: depends_on:
db: db:
@@ -73,7 +73,7 @@
</button> </button>
</form> </form>
<div class="nav-version">v3.5.0</div> <div class="nav-version">v3.5.1</div>
</div> </div>
</Authorized> </Authorized>
<NotAuthorized> <NotAuthorized>
+5 -5
View File
@@ -327,7 +327,7 @@ public sealed class SessionService(
FROM group_managers gm FROM group_managers gm
WHERE gm.group_id = g.id WHERE gm.group_id = g.id
AND gm.role = @OwnerRole AND gm.role = @OwnerRole
ORDER BY gm.added_at ORDER BY gm.created_at
LIMIT 1 LIMIT 1
) owner_manager ON true ) owner_manager ON true
LEFT JOIN player_links owner_link ON owner_link.secondary_player_id = owner_manager.player_id 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 FROM group_managers gm
WHERE gm.group_id = g.id WHERE gm.group_id = g.id
AND gm.role = @OwnerRole AND gm.role = @OwnerRole
ORDER BY gm.added_at ORDER BY gm.created_at
LIMIT 1 LIMIT 1
) owner_manager ON true ) owner_manager ON true
LEFT JOIN player_links owner_link ON owner_link.secondary_player_id = owner_manager.player_id 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 FROM group_managers gm
WHERE gm.group_id = g.id WHERE gm.group_id = g.id
AND gm.role = @OwnerRole AND gm.role = @OwnerRole
ORDER BY gm.added_at ORDER BY gm.created_at
LIMIT 1 LIMIT 1
) owner_manager ON true ) owner_manager ON true
LEFT JOIN player_links owner_link ON owner_link.secondary_player_id = owner_manager.player_id 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 FROM group_managers gm
WHERE gm.group_id = g.id WHERE gm.group_id = g.id
AND gm.role = @OwnerRole AND gm.role = @OwnerRole
ORDER BY gm.added_at ORDER BY gm.created_at
LIMIT 1 LIMIT 1
) owner_manager ON true ) owner_manager ON true
LEFT JOIN player_links owner_link ON owner_link.secondary_player_id = owner_manager.player_id 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 FROM group_managers gm
WHERE gm.group_id = g.id WHERE gm.group_id = g.id
AND gm.role = @OwnerRole AND gm.role = @OwnerRole
ORDER BY gm.added_at ORDER BY gm.created_at
LIMIT 1 LIMIT 1
) owner_manager ON true ) owner_manager ON true
LEFT JOIN player_links owner_link ON owner_link.secondary_player_id = owner_manager.player_id LEFT JOIN player_links owner_link ON owner_link.secondary_player_id = owner_manager.player_id
@@ -108,6 +108,18 @@ public sealed class MasterProfilesTests
Assert.DoesNotContain("gm.role = @OwnerRole", sessionsQuery, StringComparison.Ordinal); 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) private static string RecordSection(string source, string recordName)
{ {
var start = source.IndexOf($"record {recordName}", StringComparison.Ordinal); var start = source.IndexOf($"record {recordName}", StringComparison.Ordinal);