Decouple workflow services from HTTP result types
This commit is contained in:
@@ -7,15 +7,15 @@ namespace GameList.Endpoints;
|
||||
|
||||
internal sealed class ResultsWorkflowService(AppDbContext db)
|
||||
{
|
||||
public async Task<IResult> GetResultsAsync(Guid playerId)
|
||||
public async Task<ServiceResult<IReadOnlyList<ResultItemDto>>> GetResultsAsync(Guid playerId)
|
||||
{
|
||||
var appState = await db.AppState.AsNoTracking().SingleAsync();
|
||||
if (!appState.ResultsOpen)
|
||||
return EndpointHelpers.BadRequestError("Results are locked until the admin enables them.");
|
||||
return ServiceResult<IReadOnlyList<ResultItemDto>>.Failure(ServiceError.BadRequest("Results are locked until the admin enables them."));
|
||||
|
||||
var phase = await EndpointHelpers.GetCurrentPhaseAsync(db, playerId);
|
||||
if (phase != Phase.Results)
|
||||
return EndpointHelpers.PhaseMismatch(Phase.Results, phase);
|
||||
return ServiceResult<IReadOnlyList<ResultItemDto>>.Failure(ServiceError.PhaseMismatch(Phase.Results, phase));
|
||||
|
||||
var results = await db
|
||||
.Suggestions.AsNoTracking()
|
||||
@@ -49,7 +49,7 @@ internal sealed class ResultsWorkflowService(AppDbContext db)
|
||||
var rootIndex = EndpointHelpers.BuildLinkRoots(results.Select(r => (r.Id, r.ParentSuggestionId)));
|
||||
var nameLookup = results.ToDictionary(r => r.Id, r => r.Name);
|
||||
|
||||
var shaped = results.Select(r =>
|
||||
IReadOnlyList<ResultItemDto> shaped = results.Select(r =>
|
||||
{
|
||||
var linkedIds = EndpointHelpers.LinkedIdsFor(r.Id, rootIndex)
|
||||
.Where(id => id != r.Id)
|
||||
@@ -80,8 +80,8 @@ internal sealed class ResultsWorkflowService(AppDbContext db)
|
||||
linkedIds,
|
||||
linkedTitles
|
||||
);
|
||||
});
|
||||
}).ToList();
|
||||
|
||||
return Results.Ok(shaped);
|
||||
return ServiceResult<IReadOnlyList<ResultItemDto>>.Success(shaped);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user