From d02f1d447cde044b22022791777dd41d7ab6a72a Mon Sep 17 00:00:00 2001 From: nugroho Date: Fri, 27 Jun 2025 00:08:52 +0700 Subject: [PATCH] worked up to evidence uploads --- APIHandler.cs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/APIHandler.cs b/APIHandler.cs index ec60227..6c8c137 100644 --- a/APIHandler.cs +++ b/APIHandler.cs @@ -578,11 +578,36 @@ public static partial class APIHandler await runner.WriteJsonResponse(StatusCodes.Status202Accepted, "Proker draft submitted.", PKIDList); }); }) - .Map("/pushproker", proker => + .Map("/pkevidence", proker => { proker.Run(async runner => { - await runner.WriteJsonResponse(StatusCodes.Status501NotImplemented, "Not yet finished."); + if (!await runner.RequestValidated(3, "POST", true) || !Auth.TryGetUser(runner, out SafeUser CurrUser) || + await runner.TryGetBodyJsonAsync(["prokerid", "notes", "evidence"], CTS.Token) is not Dictionary InElement) return; + if ( + InElement["prokerid"].GetString() is not string ProkerID || ProkerID.Equals(string.Empty) || + InElement["notes"].GetString() is not string Notes || Notes.Equals(string.Empty) || + InElement["evidence"].GetString() is not string Evidence || Evidence.Equals(string.Empty) + ) + { + await runner.WriteJsonResponse(StatusCodes.Status400BadRequest, "Required property values is invalid or out of allowed range."); + return; + } + byte[] PDFBytes = Convert.FromBase64String(Evidence); + string FileName = $"{Crc32.Compute(PDFBytes):X8}.pdf"; + string FilePath = Path.Combine(AppContext.BaseDirectory , "wwwroot/uploads/dokumen" , FileName); + if (!File.Exists(FilePath)) await File.WriteAllBytesAsync(FilePath, PDFBytes, CTS.Token); + await RunNonQueryAsync(CS, "INSERT INTO [proker_journal] VALUES (@pjid, @pkid, @owid, 4, @nots, @docs, @tstp)", Query => + { + DateTime Now = DateTime.Now; + Query.Parameters.AddWithValue("@pjid", GenerateUuidV7(Now)); + Query.Parameters.AddWithValue("@pkid", ProkerID); + Query.Parameters.AddWithValue("@owid", CurrUser.AgentID); + Query.Parameters.AddWithValue("@nots", Notes); + Query.Parameters.AddWithValue("@docs", FileName); + Query.Parameters.AddWithValue("@tstp", Now); + }, CTS.Token); + await runner.WriteJsonResponse(StatusCodes.Status201Created, "Proker evidence accepted. Journal created successfully."); }); }) .Map("/evalproker", proker=>