Compare commits
3 Commits
46bdad7296
...
49bf808c1d
| Author | SHA1 | Date | |
|---|---|---|---|
| 49bf808c1d | |||
| 7fba6ccc17 | |||
| c4c054a0c6 |
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@@ -9,9 +9,9 @@
|
|||||||
"type": "coreclr",
|
"type": "coreclr",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"preLaunchTask": "build App API",
|
"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": [],
|
"args": [],
|
||||||
"cwd": "${workspaceFolder}/api/Public",
|
"cwd": "${workspaceFolder}/api/App",
|
||||||
"stopAtEntry": false,
|
"stopAtEntry": false,
|
||||||
"env": {
|
"env": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
|
|||||||
2
.vscode/tasks.json
vendored
2
.vscode/tasks.json
vendored
@@ -5,7 +5,7 @@
|
|||||||
"label": "build App API",
|
"label": "build App API",
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"command": "dotnet",
|
"command": "dotnet",
|
||||||
"args": ["build", "${workspaceFolder}/api/Public/App.csproj"],
|
"args": ["build", "${workspaceFolder}/api/App/App.csproj"],
|
||||||
"problemMatcher": "$msCompile",
|
"problemMatcher": "$msCompile",
|
||||||
"group": {
|
"group": {
|
||||||
"kind": "build",
|
"kind": "build",
|
||||||
|
|||||||
@@ -2,11 +2,18 @@ public static class LokEndpoints
|
|||||||
{
|
{
|
||||||
public static void MapLokEndpoints(WebApplication app)
|
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) =>
|
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
|
return Results.NotFound(new
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
public class LokOpenHours
|
public class LokOpenHours
|
||||||
{
|
{
|
||||||
|
public DateTime Version { get; set; }
|
||||||
|
|
||||||
public string Paragraph1 { get; set; } = string.Empty;
|
public string Paragraph1 { get; set; } = string.Empty;
|
||||||
|
|
||||||
public string Paragraph2 { 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())
|
if (app.Environment.IsDevelopment())
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public class LokService
|
|||||||
_connection = connection;
|
_connection = connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<LokOpenHours?> GetOpenHoursAsync()
|
public async Task<List<LokOpenHours>> GetOpenHours()
|
||||||
{
|
{
|
||||||
if (_connection.State != ConnectionState.Open)
|
if (_connection.State != ConnectionState.Open)
|
||||||
{
|
{
|
||||||
@@ -19,24 +19,72 @@ public class LokService
|
|||||||
|
|
||||||
await using var command = _connection.CreateCommand();
|
await using var command = _connection.CreateCommand();
|
||||||
command.CommandText = @"
|
command.CommandText = @"
|
||||||
SELECT paragraph1, paragraph2, paragraph3, paragraph4, kitchenNotice
|
SELECT version, paragraph1, paragraph2, paragraph3, paragraph4, kitchenNotice
|
||||||
FROM LokOpenHours
|
FROM LokOpenHours
|
||||||
LIMIT 1";
|
ORDER BY datetime(version) DESC, id DESC
|
||||||
|
LIMIT 5";
|
||||||
|
|
||||||
await using var reader = await command.ExecuteReaderAsync();
|
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
|
return new LokOpenHours
|
||||||
{
|
{
|
||||||
Paragraph1 = reader["paragraph1"]?.ToString() ?? string.Empty,
|
Version = version,
|
||||||
Paragraph2 = reader["paragraph2"]?.ToString() ?? string.Empty,
|
Paragraph1 = openHours.Paragraph1 ?? string.Empty,
|
||||||
Paragraph3 = reader["paragraph3"]?.ToString() ?? string.Empty,
|
Paragraph2 = openHours.Paragraph2 ?? string.Empty,
|
||||||
Paragraph4 = reader["paragraph4"]?.ToString() ?? string.Empty,
|
Paragraph3 = openHours.Paragraph3 ?? string.Empty,
|
||||||
KitchenNotice = reader["kitchenNotice"]?.ToString() ?? 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 (
|
CREATE TABLE IF NOT EXISTS LokOpenHours (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
version TEXT NOT NULL,
|
||||||
paragraph1 TEXT NOT NULL DEFAULT '',
|
paragraph1 TEXT NOT NULL DEFAULT '',
|
||||||
paragraph2 TEXT NOT NULL DEFAULT '',
|
paragraph2 TEXT NOT NULL DEFAULT '',
|
||||||
paragraph3 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"
|
||||||
|
}
|
||||||
2
start.sh
2
start.sh
@@ -34,7 +34,7 @@ ensure_app_window() {
|
|||||||
start_or_restart_services() {
|
start_or_restart_services() {
|
||||||
ensure_app_window
|
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.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-pane -t "$SESSION_NAME":app.0
|
||||||
tmux select-window -t "$SESSION_NAME":app
|
tmux select-window -t "$SESSION_NAME":app
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user