From 4595650f6e36ff413bcb65f5419daf8f9bfee9de Mon Sep 17 00:00:00 2001 From: crupest Date: Wed, 14 Dec 2022 16:23:31 +0800 Subject: Develop secret api. v40 --- .../CrupestApi.Commons/Crud/CrudService.cs | 15 +++++++++++++++ .../Crud/CrudWebApplicationExtensions.cs | 22 ++++++++++++++++++---- .../CrupestApi.Commons/Crud/EntityJsonHelper.cs | 2 -- .../CrupestApi/CrupestApi.Commons/Json.cs | 8 +++++++- 4 files changed, 40 insertions(+), 7 deletions(-) (limited to 'docker/crupest-api') diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs index 796761e..65085fd 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs @@ -26,6 +26,8 @@ public class CrudService : IDisposable where TEntity : class } } + public EntityJsonHelper JsonHelper => _jsonHelper; + public virtual void DoInitializeDatabase(IDbConnection connection) { using var transaction = connection.BeginTransaction(); @@ -43,4 +45,17 @@ public class CrudService : IDisposable where TEntity : class var result = _table.Select(_dbConnection, null); return result; } + + public TEntity GetByKey(string key) + { + var result = _table.Select(_dbConnection, null, WhereClause.Create().Eq(_table.KeyColumn.ColumnName, key)); + return result.Single(); + } + + public string Create(JsonElement jsonElement) + { + var insertClauses = _jsonHelper.ConvertJsonElementToInsertClauses(jsonElement); + var key = _table.Insert(_dbConnection, insertClauses); + return (string)key; + } } diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudWebApplicationExtensions.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudWebApplicationExtensions.cs index 9f70f35..8df444c 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudWebApplicationExtensions.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudWebApplicationExtensions.cs @@ -7,16 +7,30 @@ public static class CrudWebApplicationExtensions app.MapGet(path, async (context) => { var crudService = context.RequestServices.GetRequiredService>(); - var entityJsonHelper = context.RequestServices.GetRequiredService>(); var allEntities = crudService.GetAll(); - await context.ResponseJsonAsync(allEntities.Select(e => entityJsonHelper.ConvertEntityToDictionary(e))); + await context.ResponseJsonAsync(allEntities.Select(e => crudService.JsonHelper.ConvertEntityToDictionary(e))); + }); + + app.MapGet(path + "/{key}", async (context) => + { + var crudService = context.RequestServices.GetRequiredService>(); + var key = context.Request.RouteValues["key"]?.ToString(); + if (key == null) + { + await context.ResponseMessageAsync("Please specify a key."); + return; + } + + var entity = crudService.GetByKey(key); + await context.ResponseJsonAsync(crudService.JsonHelper.ConvertEntityToDictionary(entity)); }); app.MapPost(path, async (context) => { var crudService = context.RequestServices.GetRequiredService>(); - var entityJsonHelper = context.RequestServices.GetRequiredService>(); - // TODO: Continue here. + var jsonDocument = await context.Request.ReadJsonAsync(); + var key = crudService.Create(jsonDocument.RootElement); + await context.ResponseJsonAsync(crudService.JsonHelper.ConvertEntityToDictionary(crudService.GetByKey(key))); }); return app; diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/EntityJsonHelper.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/EntityJsonHelper.cs index 1e484ef..e893638 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/EntityJsonHelper.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/EntityJsonHelper.cs @@ -1,6 +1,4 @@ -using System.Diagnostics; using System.Text.Json; -using System.Text.Json.Serialization; using Microsoft.Extensions.Options; namespace CrupestApi.Commons.Crud; diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Json.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Json.cs index 60b18e4..dbf020f 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Json.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Json.cs @@ -18,6 +18,12 @@ public static class CrupestApiJsonExtensions return services; } + public static async Task ReadJsonAsync(this HttpRequest request) + { + using var stream = request.Body; + return await JsonDocument.ParseAsync(stream); + } + public static async Task WriteJsonAsync(this HttpResponse response, T bodyObject, int statusCode = 200, HttpResponseAction? beforeWriteBody = null, CancellationToken cancellationToken = default) { var jsonOptions = response.HttpContext.RequestServices.GetRequiredService>(); @@ -47,7 +53,7 @@ public static class CrupestApiJsonExtensions return context.Response.WriteJsonAsync(bodyObject, statusCode, beforeWriteBody, cancellationToken); } - public static Task ResponseMessageAsync(this HttpContext context, string message, int statusCode = 400, HttpResponseAction? beforeWriteBody = null, CancellationToken cancellationToken = default) + public static Task ResponseMessageAsync(this HttpContext context, string message, int statusCode = 400, HttpResponseAction? beforeWriteBody = null, CancellationToken cancellationToken = default) { return context.Response.WriteMessageAsync(message, statusCode, beforeWriteBody, cancellationToken); } -- cgit v1.2.3