From f73342cb6b0592d3a6310f9a12fd40b4bf218e5c Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 18 Dec 2022 20:07:29 +0800 Subject: Develop secret api. v42 --- .../CrupestApi/CrupestApi.Commons/Crud/CrudService.cs | 17 +++++++++++------ .../Crud/CrudServiceCollectionExtensions.cs | 10 ++++++++-- .../Crud/CrudWebApplicationExtensions.cs | 5 +++-- 3 files changed, 22 insertions(+), 10 deletions(-) (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud') diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs index d371c84..184ac0a 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs @@ -20,15 +20,20 @@ public class CrudService : IDisposable where TEntity : class _jsonHelper = jsonHelper; _logger = loggerFactory.CreateLogger>(); - if (!_table.CheckExistence(_dbConnection)) - { - DoInitializeDatabase(_dbConnection); - } + CheckDatabase(_dbConnection); } public EntityJsonHelper JsonHelper => _jsonHelper; - public virtual void DoInitializeDatabase(IDbConnection connection) + protected virtual void CheckDatabase(IDbConnection dbConnection) + { + if (!_table.CheckExistence(dbConnection)) + { + DoInitializeDatabase(dbConnection); + } + } + + private void DoInitializeDatabase(IDbConnection connection) { using var transaction = connection.BeginTransaction(); connection.Execute(_table.GenerateCreateTableSql(), transaction: transaction); @@ -59,7 +64,7 @@ public class CrudService : IDisposable where TEntity : class return (string)key; } - public void Update(object key, JsonElement jsonElement) + public void UpdateByKey(object key, JsonElement jsonElement) { var updateClauses = _jsonHelper.ConvertJsonElementToUpdateClause(jsonElement); _table.Update(_dbConnection, WhereClause.Create().Eq(_table.KeyColumn.ColumnName, key), updateClauses); diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudServiceCollectionExtensions.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudServiceCollectionExtensions.cs index 8854976..d51c0a1 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudServiceCollectionExtensions.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudServiceCollectionExtensions.cs @@ -12,13 +12,19 @@ public static class CrudServiceCollectionExtensions return services; } - public static IServiceCollection AddCrud(this IServiceCollection services) where TEntity : class + public static IServiceCollection AddCrud(this IServiceCollection services) where TEntity : class where TCrudService : CrudService { AddCrudCore(services); - services.TryAddScoped>(); + services.TryAddScoped, TCrudService>(); services.TryAddScoped>(); return services; } + + public static IServiceCollection AddCrud(this IServiceCollection services) where TEntity : class + { + return services.AddCrud>(); + } + } diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudWebApplicationExtensions.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudWebApplicationExtensions.cs index 7331273..9e85c68 100644 --- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudWebApplicationExtensions.cs +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudWebApplicationExtensions.cs @@ -2,10 +2,11 @@ namespace CrupestApi.Commons.Crud; public static class CrudWebApplicationExtensions { - public static WebApplication UseCrud(this WebApplication app, string path) where TEntity : class + public static WebApplication UseCrud(this WebApplication app, string path, string? key) where TEntity : class { app.MapGet(path, async (context) => { + var crudService = context.RequestServices.GetRequiredService>(); var allEntities = crudService.GetAll(); await context.ResponseJsonAsync(allEntities.Select(e => crudService.JsonHelper.ConvertEntityToDictionary(e))); @@ -44,7 +45,7 @@ public static class CrudWebApplicationExtensions } var jsonDocument = await context.Request.ReadJsonAsync(); - crudService.Update(key, jsonDocument.RootElement); + crudService.UpdateByKey(key, jsonDocument.RootElement); await context.ResponseJsonAsync(crudService.JsonHelper.ConvertEntityToDictionary(crudService.GetByKey(key))); }); -- cgit v1.2.3