Compare commits

...

3 Commits

11 changed files with 221 additions and 16 deletions

4
.vscode/launch.json vendored
View File

@@ -9,9 +9,9 @@
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build App API",
"program": "${workspaceFolder}/api/Public/bin/Debug/net10.0/App.dll",
"program": "${workspaceFolder}/api/App/bin/Debug/net10.0/App.dll",
"args": [],
"cwd": "${workspaceFolder}/api/Public",
"cwd": "${workspaceFolder}/api/App",
"stopAtEntry": false,
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"

2
.vscode/tasks.json vendored
View File

@@ -5,7 +5,7 @@
"label": "build App API",
"type": "process",
"command": "dotnet",
"args": ["build", "${workspaceFolder}/api/Public/App.csproj"],
"args": ["build", "${workspaceFolder}/api/App/App.csproj"],
"problemMatcher": "$msCompile",
"group": {
"kind": "build",

View File

@@ -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
{

View File

@@ -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;

View File

@@ -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())

View File

@@ -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;
}
}

View File

@@ -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.

View 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"
}

View File

@@ -34,7 +34,7 @@ ensure_app_window() {
start_or_restart_services() {
ensure_app_window
tmux respawn-pane -k -t "$SESSION_NAME":app.0 -c "$UI_DIR" "bun dev"
tmux respawn-pane -k -t "$SESSION_NAME":app.1 -c "$API_DIR" "dotnet run --project $API_DIR/Public/App.csproj"
tmux respawn-pane -k -t "$SESSION_NAME":app.1 -c "$API_DIR" "dotnet run --project $API_DIR/App/App.csproj"
tmux select-pane -t "$SESSION_NAME":app.0
tmux select-window -t "$SESSION_NAME":app
}