using System.Text.Json.Serialization; namespace ParadoxSaveParser.WebAPI.Database; public enum SaveFileProcessingStatus { Initialized, Uploaded, Parsing, SavingResults, Done, Error, } public enum OriginalFileType { Text, Zip, } public class LowerCaseEnumConverter() : JsonStringEnumConverter(JsonNamingPolicy.SnakeCaseLower) where T : struct, Enum; public class SaveFileMetadata { [SQLite.PrimaryKey] [SQLite.NotNull] public string id { get; init; } = null!; [JsonConverter(typeof(JsonStringEnumConverter))] [SQLite.NotNull] public Game game { get; init; } [JsonConverter(typeof(LowerCaseEnumConverter))] [SQLite.NotNull] public SaveFileProcessingStatus status { get; set; } [SQLite.NotNull] public DateTime uploadDateTime { get; set; } [JsonConverter(typeof(LowerCaseEnumConverter))] [SQLite.NotNull] public OriginalFileType originalFileType { get; init; } [SQLite.NotNull] public string originalFileName { get; init; } = null!; // if error occured during parsing, it's message is saved here // status stays the same as when error occured public string? errorMessage { get; set; } public IOPath GetSaveFilePath() => Path.Concat(PathHelper.SAVES_DIR, id + ".tar.zst"); public IOPath GetParsedDataPath() => Path.Concat(PathHelper.PARSED_DIR, id + ".parsed.json.zstd"); public bool AssociatedFilesExist() { return File.Exists(GetSaveFilePath()) && File.Exists(GetParsedDataPath()); } }