diff options
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud')
3 files changed, 22 insertions, 10 deletions
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<TEntity> : IDisposable where TEntity : class _jsonHelper = jsonHelper; _logger = loggerFactory.CreateLogger<CrudService<TEntity>>(); - if (!_table.CheckExistence(_dbConnection)) - { - DoInitializeDatabase(_dbConnection); - } + CheckDatabase(_dbConnection); } public EntityJsonHelper<TEntity> 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<TEntity> : 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<TEntity>(this IServiceCollection services) where TEntity : class + public static IServiceCollection AddCrud<TEntity, TCrudService>(this IServiceCollection services) where TEntity : class where TCrudService : CrudService<TEntity> { AddCrudCore(services); - services.TryAddScoped<CrudService<TEntity>>(); + services.TryAddScoped<CrudService<TEntity>, TCrudService>(); services.TryAddScoped<EntityJsonHelper<TEntity>>(); return services; } + + public static IServiceCollection AddCrud<TEntity>(this IServiceCollection services) where TEntity : class + { + return services.AddCrud<TEntity, CrudService<TEntity>>(); + } + } 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<TEntity>(this WebApplication app, string path) where TEntity : class + public static WebApplication UseCrud<TEntity>(this WebApplication app, string path, string? key) where TEntity : class { app.MapGet(path, async (context) => { + var crudService = context.RequestServices.GetRequiredService<CrudService<TEntity>>(); 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))); }); |