Update release notes and deploy workspace
CI - Build & Verify / Build, Typecheck & Hygiene (push) Successful in 59s
CI - Build & Verify / Deploy to award.noveria.net (push) Failing after 53s

This commit is contained in:
AzuTear
2026-06-29 17:49:54 +02:00
parent c466348d18
commit 441ef2b850
196 changed files with 9279 additions and 39292 deletions
@@ -73,6 +73,7 @@ public static partial class AdminSeasonManagementEndpoints
}
}
var season = await db.Seasons.FirstOrDefaultAsync(item => item.Id == seasonId);
var existingResult = await db.Results.FirstOrDefaultAsync(item =>
item.SeasonId == seasonId
&& item.CategoryId == request.CategoryId);
@@ -94,6 +95,13 @@ public static partial class AdminSeasonManagementEndpoints
existingResult.CategoryName = category.Name;
}
var wasPublished = season?.WinnersPublishedAt is not null;
if (wasPublished && season is not null)
{
season.WinnersPublishedAt = null;
season.WinnersPublishedByTwitchId = null;
}
adminAuditService.AddEntry(
session.TwitchUserId,
"result.set",
@@ -106,6 +114,7 @@ public static partial class AdminSeasonManagementEndpoints
categoryId = request.CategoryId,
candidateId = request.CandidateId,
candidateName = candidate.DisplayName,
unpublishedWinners = wasPublished,
},
RequestMetadataReader.Read(context));
@@ -130,12 +139,20 @@ public static partial class AdminSeasonManagementEndpoints
var result = await db.Results
.Include(item => item.Category)
.Include(item => item.Candidate)
.Include(item => item.Season)
.FirstOrDefaultAsync(item => item.Id == resultId);
if (result is null)
{
return Results.NotFound();
}
var wasPublished = result.Season.WinnersPublishedAt is not null;
if (wasPublished)
{
result.Season.WinnersPublishedAt = null;
result.Season.WinnersPublishedByTwitchId = null;
}
db.Results.Remove(result);
adminAuditService.AddEntry(
session.TwitchUserId,
@@ -149,10 +166,98 @@ public static partial class AdminSeasonManagementEndpoints
result.CategoryId,
result.CandidateId,
candidateName = result.Candidate.DisplayName,
unpublishedWinners = wasPublished,
},
RequestMetadataReader.Read(context));
await db.SaveChangesAsync(context.RequestAborted);
return Results.Ok(new { deleted = true, resultId });
}
private static async Task<IResult> PublishWinners(
HttpContext context,
int seasonId,
AwardsDbContext db,
IAdminAuditService adminAuditService)
{
var session = AdminEndpointConventions.CurrentSession(context);
var season = await db.Seasons.FirstOrDefaultAsync(item => item.Id == seasonId, context.RequestAborted);
if (season is null)
{
return Results.NotFound();
}
var issues = await BuildWinnerPublicationIssuesAsync(db, seasonId, context.RequestAborted);
if (issues.Length > 0)
{
return CreateWinnerPublicationError(issues);
}
season.WinnersPublishedAt = DateTimeOffset.UtcNow;
season.WinnersPublishedByTwitchId = session.TwitchUserId;
adminAuditService.AddEntry(
session.TwitchUserId,
"winners.publish",
"season",
season.Id.ToString(),
$"Gewinner für {season.Year} wurden veröffentlicht.",
new
{
seasonId,
season.Year,
season.WinnersPublishedAt,
},
RequestMetadataReader.Read(context));
await db.SaveChangesAsync(context.RequestAborted);
return Results.Ok(new
{
saved = true,
seasonId,
winnersPublishedAt = season.WinnersPublishedAt,
winnersPublishedByTwitchId = season.WinnersPublishedByTwitchId,
});
}
private static async Task<IResult> UnpublishWinners(
HttpContext context,
int seasonId,
AwardsDbContext db,
IAdminAuditService adminAuditService)
{
var session = AdminEndpointConventions.CurrentSession(context);
var season = await db.Seasons.FirstOrDefaultAsync(item => item.Id == seasonId, context.RequestAborted);
if (season is null)
{
return Results.NotFound();
}
var previousPublishedAt = season.WinnersPublishedAt;
season.WinnersPublishedAt = null;
season.WinnersPublishedByTwitchId = null;
adminAuditService.AddEntry(
session.TwitchUserId,
"winners.unpublish",
"season",
season.Id.ToString(),
$"Gewinner für {season.Year} wurden von der Landingpage zurückgenommen.",
new
{
seasonId,
season.Year,
previousPublishedAt,
},
RequestMetadataReader.Read(context));
await db.SaveChangesAsync(context.RequestAborted);
return Results.Ok(new
{
saved = true,
seasonId,
winnersPublishedAt = season.WinnersPublishedAt,
winnersPublishedByTwitchId = season.WinnersPublishedByTwitchId,
});
}
}