Add new insert endpoint for Lok open hours
This commit is contained in:
@@ -2,11 +2,18 @@ public static class LokEndpoints
|
||||
{
|
||||
public static void MapLokEndpoints(WebApplication app)
|
||||
{
|
||||
app.MapPost("/lok/open-hours", async (LokOpenHours openHours, LokService lokService) =>
|
||||
{
|
||||
var createdOpenHours = await lokService.InsertOpenHours(openHours);
|
||||
return Results.Created("/lok/open-hours", createdOpenHours);
|
||||
})
|
||||
.WithName("CreateLokOpenHours");
|
||||
|
||||
app.MapGet("/lok/open-hours", async (LokService lokService) =>
|
||||
{
|
||||
var openHours = await lokService.GetOpenHoursAsync();
|
||||
var openHours = await lokService.GetOpenHours();
|
||||
|
||||
if (openHours is null)
|
||||
if (openHours.Count == 0)
|
||||
{
|
||||
return Results.NotFound(new
|
||||
{
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
public class LokOpenHours
|
||||
{
|
||||
public DateTime Version { get; set; }
|
||||
|
||||
public string Paragraph1 { get; set; } = string.Empty;
|
||||
|
||||
public string Paragraph2 { get; set; } = string.Empty;
|
||||
|
||||
@@ -44,6 +44,18 @@ public class Program
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
using (var command = connection.CreateCommand())
|
||||
{
|
||||
command.CommandText = "SELECT COUNT(*) FROM pragma_table_info('LokOpenHours') WHERE name = 'version';";
|
||||
var hasVersionColumn = Convert.ToInt32(command.ExecuteScalar()) > 0;
|
||||
|
||||
if (!hasVersionColumn)
|
||||
{
|
||||
command.CommandText = "ALTER TABLE LokOpenHours ADD COLUMN version TEXT NOT NULL DEFAULT '';";
|
||||
command.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (app.Environment.IsDevelopment())
|
||||
|
||||
@@ -10,7 +10,7 @@ public class LokService
|
||||
_connection = connection;
|
||||
}
|
||||
|
||||
public async Task<LokOpenHours?> GetOpenHoursAsync()
|
||||
public async Task<List<LokOpenHours>> GetOpenHours()
|
||||
{
|
||||
if (_connection.State != ConnectionState.Open)
|
||||
{
|
||||
@@ -19,24 +19,72 @@ public class LokService
|
||||
|
||||
await using var command = _connection.CreateCommand();
|
||||
command.CommandText = @"
|
||||
SELECT paragraph1, paragraph2, paragraph3, paragraph4, kitchenNotice
|
||||
SELECT version, paragraph1, paragraph2, paragraph3, paragraph4, kitchenNotice
|
||||
FROM LokOpenHours
|
||||
LIMIT 1";
|
||||
ORDER BY datetime(version) DESC, id DESC
|
||||
LIMIT 5";
|
||||
|
||||
await using var reader = await command.ExecuteReaderAsync();
|
||||
|
||||
if (!await reader.ReadAsync())
|
||||
var openHoursList = new List<LokOpenHours>();
|
||||
|
||||
while (await reader.ReadAsync())
|
||||
{
|
||||
return null;
|
||||
openHoursList.Add(new LokOpenHours
|
||||
{
|
||||
Version = ParseVersion(reader["version"]?.ToString()),
|
||||
Paragraph1 = reader["paragraph1"]?.ToString() ?? string.Empty,
|
||||
Paragraph2 = reader["paragraph2"]?.ToString() ?? string.Empty,
|
||||
Paragraph3 = reader["paragraph3"]?.ToString() ?? string.Empty,
|
||||
Paragraph4 = reader["paragraph4"]?.ToString() ?? string.Empty,
|
||||
KitchenNotice = reader["kitchenNotice"]?.ToString() ?? string.Empty
|
||||
});
|
||||
}
|
||||
|
||||
return openHoursList;
|
||||
}
|
||||
|
||||
public async Task<LokOpenHours> InsertOpenHours(LokOpenHours openHours)
|
||||
{
|
||||
if (_connection.State != ConnectionState.Open)
|
||||
{
|
||||
await _connection.OpenAsync();
|
||||
}
|
||||
|
||||
var version = DateTime.UtcNow;
|
||||
|
||||
await using var command = _connection.CreateCommand();
|
||||
command.CommandText = @"
|
||||
INSERT INTO LokOpenHours (version, paragraph1, paragraph2, paragraph3, paragraph4, kitchenNotice)
|
||||
VALUES (@version, @paragraph1, @paragraph2, @paragraph3, @paragraph4, @kitchenNotice);";
|
||||
|
||||
command.Parameters.AddWithValue("@version", version.ToString("O"));
|
||||
command.Parameters.AddWithValue("@paragraph1", openHours.Paragraph1 ?? string.Empty);
|
||||
command.Parameters.AddWithValue("@paragraph2", openHours.Paragraph2 ?? string.Empty);
|
||||
command.Parameters.AddWithValue("@paragraph3", openHours.Paragraph3 ?? string.Empty);
|
||||
command.Parameters.AddWithValue("@paragraph4", openHours.Paragraph4 ?? string.Empty);
|
||||
command.Parameters.AddWithValue("@kitchenNotice", openHours.KitchenNotice ?? string.Empty);
|
||||
|
||||
await command.ExecuteNonQueryAsync();
|
||||
|
||||
return new LokOpenHours
|
||||
{
|
||||
Paragraph1 = reader["paragraph1"]?.ToString() ?? string.Empty,
|
||||
Paragraph2 = reader["paragraph2"]?.ToString() ?? string.Empty,
|
||||
Paragraph3 = reader["paragraph3"]?.ToString() ?? string.Empty,
|
||||
Paragraph4 = reader["paragraph4"]?.ToString() ?? string.Empty,
|
||||
KitchenNotice = reader["kitchenNotice"]?.ToString() ?? string.Empty
|
||||
Version = version,
|
||||
Paragraph1 = openHours.Paragraph1 ?? string.Empty,
|
||||
Paragraph2 = openHours.Paragraph2 ?? string.Empty,
|
||||
Paragraph3 = openHours.Paragraph3 ?? string.Empty,
|
||||
Paragraph4 = openHours.Paragraph4 ?? string.Empty,
|
||||
KitchenNotice = openHours.KitchenNotice ?? string.Empty
|
||||
};
|
||||
}
|
||||
|
||||
private static DateTime ParseVersion(string? value)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(value) && DateTime.TryParse(value, out var parsed))
|
||||
{
|
||||
return parsed;
|
||||
}
|
||||
|
||||
return DateTime.MinValue;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
CREATE TABLE IF NOT EXISTS LokOpenHours (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
version TEXT NOT NULL,
|
||||
paragraph1 TEXT NOT NULL DEFAULT '',
|
||||
paragraph2 TEXT NOT NULL DEFAULT '',
|
||||
paragraph3 TEXT NOT NULL DEFAULT '',
|
||||
|
||||
Binary file not shown.
135
api/Tests/Http/LokOpenHours.http
Normal file
135
api/Tests/Http/LokOpenHours.http
Normal file
@@ -0,0 +1,135 @@
|
||||
@App_HostAddress = http://localhost:5013
|
||||
|
||||
### Get newest open hours (returns latest 5)
|
||||
GET {{App_HostAddress}}/lok/open-hours
|
||||
Accept: application/json
|
||||
|
||||
### Insert open hours version 1
|
||||
POST {{App_HostAddress}}/lok/open-hours
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
{
|
||||
"paragraph1": "Version 1 paragraph 1",
|
||||
"paragraph2": "Version 1 paragraph 2",
|
||||
"paragraph3": "Version 1 paragraph 3",
|
||||
"paragraph4": "Version 1 paragraph 4",
|
||||
"kitchenNotice": "Kitchen notice 1"
|
||||
}
|
||||
|
||||
### Insert open hours version 2
|
||||
POST {{App_HostAddress}}/lok/open-hours
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
{
|
||||
"paragraph1": "Version 2 paragraph 1",
|
||||
"paragraph2": "Version 2 paragraph 2",
|
||||
"paragraph3": "Version 2 paragraph 3",
|
||||
"paragraph4": "Version 2 paragraph 4",
|
||||
"kitchenNotice": "Kitchen notice 2"
|
||||
}
|
||||
|
||||
### Insert open hours version 3
|
||||
POST {{App_HostAddress}}/lok/open-hours
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
{
|
||||
"paragraph1": "Version 3 paragraph 1",
|
||||
"paragraph2": "Version 3 paragraph 2",
|
||||
"paragraph3": "Version 3 paragraph 3",
|
||||
"paragraph4": "Version 3 paragraph 4",
|
||||
"kitchenNotice": "Kitchen notice 3"
|
||||
}
|
||||
|
||||
### Insert open hours version 4
|
||||
POST {{App_HostAddress}}/lok/open-hours
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
{
|
||||
"paragraph1": "Version 4 paragraph 1",
|
||||
"paragraph2": "Version 4 paragraph 2",
|
||||
"paragraph3": "Version 4 paragraph 3",
|
||||
"paragraph4": "Version 4 paragraph 4",
|
||||
"kitchenNotice": "Kitchen notice 4"
|
||||
}
|
||||
|
||||
### Insert open hours version 5
|
||||
POST {{App_HostAddress}}/lok/open-hours
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
{
|
||||
"paragraph1": "Version 5 paragraph 1",
|
||||
"paragraph2": "Version 5 paragraph 2",
|
||||
"paragraph3": "Version 5 paragraph 3",
|
||||
"paragraph4": "Version 5 paragraph 4",
|
||||
"kitchenNotice": "Kitchen notice 5"
|
||||
}
|
||||
|
||||
### Insert open hours version 6
|
||||
POST {{App_HostAddress}}/lok/open-hours
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
{
|
||||
"paragraph1": "Version 6 paragraph 1",
|
||||
"paragraph2": "Version 6 paragraph 2",
|
||||
"paragraph3": "Version 6 paragraph 3",
|
||||
"paragraph4": "Version 6 paragraph 4",
|
||||
"kitchenNotice": "Kitchen notice 6"
|
||||
}
|
||||
|
||||
### Insert open hours version 7
|
||||
POST {{App_HostAddress}}/lok/open-hours
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
{
|
||||
"paragraph1": "Version 7 paragraph 1",
|
||||
"paragraph2": "Version 7 paragraph 2",
|
||||
"paragraph3": "Version 7 paragraph 3",
|
||||
"paragraph4": "Version 7 paragraph 4",
|
||||
"kitchenNotice": "Kitchen notice 7"
|
||||
}
|
||||
|
||||
### Insert open hours version 8
|
||||
POST {{App_HostAddress}}/lok/open-hours
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
{
|
||||
"paragraph1": "Version 8 paragraph 1",
|
||||
"paragraph2": "Version 8 paragraph 2",
|
||||
"paragraph3": "Version 8 paragraph 3",
|
||||
"paragraph4": "Version 8 paragraph 4",
|
||||
"kitchenNotice": "Kitchen notice 8"
|
||||
}
|
||||
|
||||
### Insert open hours version 9
|
||||
POST {{App_HostAddress}}/lok/open-hours
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
{
|
||||
"paragraph1": "Version 9 paragraph 1",
|
||||
"paragraph2": "Version 9 paragraph 2",
|
||||
"paragraph3": "Version 9 paragraph 3",
|
||||
"paragraph4": "Version 9 paragraph 4",
|
||||
"kitchenNotice": "Kitchen notice 9"
|
||||
}
|
||||
|
||||
### Insert open hours version 10
|
||||
POST {{App_HostAddress}}/lok/open-hours
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
{
|
||||
"paragraph1": "Version 10 paragraph 1",
|
||||
"paragraph2": "Version 10 paragraph 2",
|
||||
"paragraph3": "Version 10 paragraph 3",
|
||||
"paragraph4": "Version 10 paragraph 4",
|
||||
"kitchenNotice": "Kitchen notice 10"
|
||||
}
|
||||
Reference in New Issue
Block a user