Пример #1
0
        /// <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);
        }
Пример #2
0
        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);
                });
            });
        }