44 lines
1.8 KiB
C#
44 lines
1.8 KiB
C#
using System.Net;
|
|
using ParadoxSaveParser.WebAPI.Database;
|
|
using ParadoxSaveParser.WebAPI.HttpHelpers;
|
|
|
|
namespace ParadoxSaveParser.WebAPI.Routes;
|
|
|
|
internal class GetSaveDataHandler : RouteHandlerBase
|
|
{
|
|
public GetSaveDataHandler(CancellationToken cancelAllToken)
|
|
: base(cancelAllToken)
|
|
{
|
|
}
|
|
|
|
public override async Task<HttpStatusCode> HandleRequest(
|
|
HttpListenerContext ctx, ContextLogger requestLogger)
|
|
{
|
|
var idOrError = RequestHelper.GetQueryValue(ctx, "id");
|
|
if (idOrError.HasError)
|
|
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken, idOrError.Error!);
|
|
string id = idOrError.Value!;
|
|
|
|
var meta = await Program.DB.GetMetadata(id);
|
|
if(meta is null)
|
|
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken,
|
|
new ErrorMessage(HttpStatusCode.NotFound,
|
|
$"Save with id {id} not found"));
|
|
if(meta.status != SaveFileProcessingStatus.Done)
|
|
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken,
|
|
new ErrorMessage(HttpStatusCode.BadRequest,
|
|
$"Save with id {id} has status {meta.status}"));
|
|
|
|
IOPath dataFilePath = meta.GetParsedDataPath();
|
|
if (!File.Exists(dataFilePath))
|
|
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken,
|
|
new ErrorMessage(HttpStatusCode.InternalServerError,
|
|
$"Save with id {id} not found")
|
|
);
|
|
|
|
await using var dataFile = File.OpenRead(dataFilePath);
|
|
|
|
return await ReturnHelper.ResponseStream(ctx, requestLogger, _cancelAllToken,
|
|
dataFile, contentType: "application/json");
|
|
}
|
|
} |