43 lines
1.4 KiB
C#
43 lines
1.4 KiB
C#
using NeonSprawl.Server.Game.PositionState;
|
|
|
|
namespace NeonSprawl.Server.Game.Quests;
|
|
|
|
/// <summary>Dev-only route to seed quest progress for Bruno and manual QA (NEO-137).</summary>
|
|
public static class QuestFixtureApi
|
|
{
|
|
public static WebApplication MapQuestFixtureApi(this WebApplication app)
|
|
{
|
|
app.MapPost(
|
|
"/game/players/{id}/__dev/quest-fixture",
|
|
(string id, QuestFixtureRequest? body, IPositionStateStore positions,
|
|
IQuestDefinitionRegistry questRegistry, IPlayerQuestStateStore progressStore,
|
|
TimeProvider timeProvider) =>
|
|
{
|
|
if (body is null || body.SchemaVersion != QuestFixtureRequest.CurrentSchemaVersion)
|
|
{
|
|
return Results.BadRequest();
|
|
}
|
|
|
|
var trimmedId = id.Trim();
|
|
if (trimmedId.Length == 0 || !positions.TryGetPosition(trimmedId, out _))
|
|
{
|
|
return Results.NotFound();
|
|
}
|
|
|
|
if (!QuestFixtureOperations.TryApply(
|
|
trimmedId,
|
|
body,
|
|
questRegistry,
|
|
progressStore,
|
|
timeProvider))
|
|
{
|
|
return Results.NotFound();
|
|
}
|
|
|
|
return Results.Json(new QuestFixtureResponse { Applied = true });
|
|
});
|
|
|
|
return app;
|
|
}
|
|
}
|