diff options
| author | crupest <crupest@outlook.com> | 2022-12-14 16:23:31 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2022-12-20 20:32:53 +0800 | 
| commit | 106e7492d8e8d07ccf50f2d13b5685f5838a52d8 (patch) | |
| tree | 65639071646120768668149d40cff208bfee39b2 | |
| parent | 3af36448bed4f825331dc359615f8c4acf825f58 (diff) | |
| download | crupest-106e7492d8e8d07ccf50f2d13b5685f5838a52d8.tar.gz crupest-106e7492d8e8d07ccf50f2d13b5685f5838a52d8.tar.bz2 crupest-106e7492d8e8d07ccf50f2d13b5685f5838a52d8.zip | |
Develop secret api. v40
4 files changed, 40 insertions, 7 deletions
| 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<TEntity> : IDisposable where TEntity : class          }      } +    public EntityJsonHelper<TEntity> JsonHelper => _jsonHelper; +      public virtual void DoInitializeDatabase(IDbConnection connection)      {          using var transaction = connection.BeginTransaction(); @@ -43,4 +45,17 @@ public class CrudService<TEntity> : IDisposable where TEntity : class          var result = _table.Select<TEntity>(_dbConnection, null);          return result;      } + +    public TEntity GetByKey(string key) +    { +        var result = _table.Select<TEntity>(_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<CrudService<TEntity>>(); -            var entityJsonHelper = context.RequestServices.GetRequiredService<EntityJsonHelper<TEntity>>();              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<CrudService<TEntity>>(); +            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<CrudService<TEntity>>(); -            var entityJsonHelper = context.RequestServices.GetRequiredService<EntityJsonHelper<TEntity>>(); -            // 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<JsonDocument> ReadJsonAsync(this HttpRequest request) +    { +        using var stream = request.Body; +        return await JsonDocument.ParseAsync(stream); +    } +      public static async Task WriteJsonAsync<T>(this HttpResponse response, T bodyObject, int statusCode = 200, HttpResponseAction? beforeWriteBody = null, CancellationToken cancellationToken = default)      {          var jsonOptions = response.HttpContext.RequestServices.GetRequiredService<IOptionsSnapshot<JsonSerializerOptions>>(); @@ -47,7 +53,7 @@ public static class CrupestApiJsonExtensions          return context.Response.WriteJsonAsync<T>(bodyObject, statusCode, beforeWriteBody, cancellationToken);      } -    public static Task ResponseMessageAsync<T>(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);      } | 
