added database to store metadata
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.Net;
|
||||
using ParadoxSaveParser.WebAPI.Database;
|
||||
using ParadoxSaveParser.WebAPI.HttpHelpers;
|
||||
|
||||
namespace ParadoxSaveParser.WebAPI.Routes;
|
||||
@@ -18,7 +19,8 @@ internal class GetSaveDataHandler : RouteHandlerBase
|
||||
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken, idOrError.Error!);
|
||||
string id = idOrError.Value!;
|
||||
|
||||
if(!Program._saveMetadataStorage.TryGetValue(id, out var meta))
|
||||
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"));
|
||||
@@ -27,7 +29,7 @@ internal class GetSaveDataHandler : RouteHandlerBase
|
||||
new ErrorMessage(HttpStatusCode.BadRequest,
|
||||
$"Save with id {id} has status {meta.status}"));
|
||||
|
||||
IOPath dataFilePath = PathHelper.GetParsedSaveFilePath(id);
|
||||
IOPath dataFilePath = meta.GetParsedDataPath();
|
||||
if (!File.Exists(dataFilePath))
|
||||
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken,
|
||||
new ErrorMessage(HttpStatusCode.InternalServerError,
|
||||
|
||||
@@ -17,8 +17,9 @@ internal class GetSaveStatusHandler : RouteHandlerBase
|
||||
if (idOrError.HasError)
|
||||
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken, idOrError.Error!);
|
||||
string id = idOrError.Value!;
|
||||
|
||||
if (!Program._saveMetadataStorage.TryGetValue(id, out var meta))
|
||||
|
||||
var meta = await Program.DB.GetMetadata(id);
|
||||
if (meta is null)
|
||||
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken,
|
||||
new ErrorMessage(HttpStatusCode.InternalServerError,
|
||||
$"Save with id {id} not found")
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Reflection.Metadata;
|
||||
using ParadoxSaveParser.WebAPI.BackgroundTasks;
|
||||
using ParadoxSaveParser.WebAPI.Database;
|
||||
using ParadoxSaveParser.WebAPI.HttpHelpers;
|
||||
using ParadoxSaveParser.WebAPI.SaveDataFilters;
|
||||
|
||||
@@ -28,34 +30,28 @@ public class UploadSaveHandler : RouteHandlerBase
|
||||
if (contentType != "application/octet-stream")
|
||||
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken,
|
||||
new ErrorMessage(HttpStatusCode.BadRequest,
|
||||
$"Invalid request Content-Type: '{contentType}'")
|
||||
);
|
||||
$"Invalid request Content-Type: '{contentType}'"));
|
||||
|
||||
string saveId = Guid.NewGuid().ToString();
|
||||
var metaFilePath = PathHelper.GetMetaFilePath(saveId);
|
||||
if (File.Exists(metaFilePath))
|
||||
var gameStrOrError = RequestHelper.GetQueryValue(ctx, "game");
|
||||
if (gameStrOrError.HasError)
|
||||
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken, gameStrOrError.Error!);
|
||||
|
||||
if (!Enum.TryParse(gameStrOrError.Value, ignoreCase: true, out Game game))
|
||||
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken,
|
||||
new ErrorMessage(HttpStatusCode.InternalServerError,
|
||||
$"Guid collision! file' {metaFilePath}' already exists.")
|
||||
);
|
||||
new ErrorMessage(HttpStatusCode.BadRequest,
|
||||
$"Invalid requested game: '{gameStrOrError.Value}'"));
|
||||
var meta = await Program.DB.CreateMetadata(game);
|
||||
|
||||
var meta = new SaveFileMetadata
|
||||
{ id = saveId, game = Game.EU4, status = SaveFileProcessingStatus.Initialized };
|
||||
if (!Program._saveMetadataStorage.TryAdd(saveId, meta))
|
||||
return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken,
|
||||
new ErrorMessage(HttpStatusCode.InternalServerError,
|
||||
$"Guid collision! Can't create metadata with id {saveId}")
|
||||
);
|
||||
|
||||
meta.status = SaveFileProcessingStatus.Uploading;
|
||||
var saveFilePath = PathHelper.GetSaveFilePath(meta.id);
|
||||
await using var saveFile = File.OpenWrite(saveFilePath);
|
||||
await using var remoteStream = ctx.Request.InputStream;
|
||||
await remoteStream.CopyToAsync(saveFile, _cancelAllToken);
|
||||
meta.status = SaveFileProcessingStatus.Uploaded;
|
||||
var saveFilePath = meta.GetSaveFilePath();
|
||||
await using (var saveFile = File.OpenWrite(saveFilePath))
|
||||
{
|
||||
await using (var remoteStream = ctx.Request.InputStream)
|
||||
await remoteStream.CopyToAsync(saveFile, _cancelAllToken);
|
||||
}
|
||||
await Program.DB.UpdateMetadataStatus(meta, SaveFileProcessingStatus.Uploaded);
|
||||
|
||||
_bgJobManager.StartNewParsingOperation(meta, _saveFilters[meta.game], _cancelAllToken);
|
||||
dynamic responseData = new { saveId };
|
||||
dynamic responseData = new { meta.id };
|
||||
return await ReturnHelper.ResponseJson(ctx, requestLogger, _cancelAllToken, responseData);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user