aboutsummaryrefslogtreecommitdiff
path: root/docker/crupest-api
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-12-14 16:23:31 +0800
committercrupest <crupest@outlook.com>2022-12-20 20:32:53 +0800
commit4595650f6e36ff413bcb65f5419daf8f9bfee9de (patch)
tree65639071646120768668149d40cff208bfee39b2 /docker/crupest-api
parent70662b4da01a2daa2ece586e5ba6e78bb7a7eb4d (diff)
downloadcrupest-4595650f6e36ff413bcb65f5419daf8f9bfee9de.tar.gz
crupest-4595650f6e36ff413bcb65f5419daf8f9bfee9de.tar.bz2
crupest-4595650f6e36ff413bcb65f5419daf8f9bfee9de.zip
Develop secret api. v40
Diffstat (limited to 'docker/crupest-api')
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs15
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudWebApplicationExtensions.cs22
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/EntityJsonHelper.cs2
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Json.cs8
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);
}