/// <summary> /// Uses the storage /// </summary> /// <param name="appBuilder">The application builder.</param> /// <param name="sqliteConnection">Sqlitedb connection</param> public async static void UseBlocklySqliteStorage(this IApplicationBuilder appBuilder, string sqliteConnection = "Data Source=blocklySqlite.db") { using var cn = new blocklyCategContext(sqliteConnection); await cn.CreateDb(); mapStorage(appBuilder); mapEndpoints(appBuilder, sqliteConnection); }
private static void mapEndpoints(IApplicationBuilder appBuilder, string sqliteConnection) { appBuilder.Map("/blocklyStorageLength", app => { app.Run(async cnt => { using var cn = new blocklyCategContext(sqliteConnection); var res = (await cn.Length()).ToString(); byte[] result = Encoding.UTF8.GetBytes(res); var m = new ReadOnlyMemory <byte>(result); await cnt.Response.BodyWriter.WriteAsync(m); }); }); appBuilder.Map("/blocklyStoragedata", app => { app.Run(async cnt => { using var cn = new blocklyCategContext(sqliteConnection); var data = await cn.data(); foreach (var item in data) { item.CleanSerialize(); } var res = JsonSerializer.Serialize(data, new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); byte[] result = Encoding.UTF8.GetBytes(res); var m = new ReadOnlyMemory <byte>(result); await cnt.Response.BodyWriter.WriteAsync(m); }); }); appBuilder.Map("/blocklyStorageget", app => { app.Run(async cnt => { var data = cnt.Request.Query["key"]; if (string.IsNullOrWhiteSpace(data.ToString())) { await WriteString(cnt.Response.BodyWriter, "please add query string ?key=..."); return; } using var cn = new blocklyCategContext(sqliteConnection); var block = await cn.Get(data); if (block == null) { return; } var res = JsonSerializer.Serialize(block.CleanSerialize(), new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); await WriteString(cnt.Response.BodyWriter, res); }); }); appBuilder.Map("/blocklyStorageset", app => { app.Run(async cnt => { var data = cnt.Request.Query["key"]; if (string.IsNullOrWhiteSpace(data.ToString())) { await WriteString(cnt.Response.BodyWriter, "please add query string ?key=..."); return; } ReadOnlySequence <byte> buffer; while (true) { var blockData = await cnt.Request.BodyReader.ReadAsync(); buffer = blockData.Buffer; cnt.Request.BodyReader.AdvanceTo(buffer.Start, buffer.End); if (blockData.IsCompleted) { break; } } var doc = JsonSerializer.Deserialize <Blocks>(buffer.FirstSpan, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); using var cn = new blocklyCategContext(sqliteConnection); var block = await cn.Set(data, doc); var res = JsonSerializer.Serialize(block.CleanSerialize(), new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); await WriteString(cnt.Response.BodyWriter, res); }); }); }