Added list of last orders to mod menu

This commit is contained in:
2025-10-06 15:03:22 +02:00
parent d38c5ae91b
commit 0e18760e5d
11 changed files with 185 additions and 9 deletions

Binary file not shown.

View File

@@ -3,6 +3,7 @@ package main
import (
"database/sql"
"encoding/json"
"fmt"
"log"
"net/http"
"strconv"
@@ -43,10 +44,16 @@ type Order struct {
Status string `json:"status"`
}
type FinalizedSummary struct {
Pickup []string `json:"pickup"`
Kitchen []string `json:"kitchen"`
}
type App struct {
DB *sql.DB
Broker *Broker
FinalizeUpdate chan struct{} // notify scheduler to reload time
LastSummary *FinalizedSummary
}
type Broker struct {
@@ -875,7 +882,7 @@ func finalizeOrders(app *App) error {
}
// Step 2: send summary (log, email, or message)
sendSummary(summary)
sendSummary(app, summary)
// Step 3: archive
_, err = app.DB.Exec("UPDATE orders SET status = 'history' WHERE status = 'active'")
@@ -886,17 +893,64 @@ func finalizeOrders(app *App) error {
if data, err := json.Marshal(msg); err == nil {
app.Broker.broadcast <- data
}
time.Sleep(20 * time.Millisecond)
}
return err
}
func sendSummary(orders []Order) {
// TODO: replace with email or message
log.Println("Daily summary:")
func sendSummary(app *App, orders []Order) *FinalizedSummary {
// Pickup view
userMap := make(map[string][]string)
for _, o := range orders {
log.Printf("%s: %s, %s, %s", o.Username, o.Soup, o.Main, o.Side)
items := []string{}
if o.Soup != "" {
items = append(items, o.Soup)
}
items = append(items, o.Main, o.Side)
userMap[o.Username] = append(userMap[o.Username], items...)
}
pickup := []string{}
for user, items := range userMap {
pickup = append(pickup, fmt.Sprintf("%s: [%s]", user, strings.Join(items, ", ")))
}
// Kitchen view
kitchenMap := make(map[string]int)
for _, o := range orders {
if o.Soup != "" {
kitchenMap[o.Soup]++
}
kitchenMap[o.Main]++
kitchenMap[o.Side]++
}
kitchen := []string{}
for item, count := range kitchenMap {
kitchen = append(kitchen, fmt.Sprintf("%s: %d", item, count))
}
summary := &FinalizedSummary{Pickup: pickup, Kitchen: kitchen}
app.LastSummary = summary
// Log
log.Println("=== Pickup view ===")
for _, line := range pickup {
log.Println(line)
}
log.Println("=== Kitchen view ===")
for _, line := range kitchen {
log.Println(line)
}
return summary
}
func (app *App) handleGetLastSummary(w http.ResponseWriter, r *http.Request) {
if app.LastSummary == nil {
writeJSON(w, map[string]string{"status": "none"})
return
}
writeJSON(w, app.LastSummary)
}
func server(app *App) *http.Server {
@@ -942,6 +996,7 @@ func server(app *App) *http.Server {
r.Get("/finalize/time", app.handleGetFinalizeTime)
r.Post("/finalize/time", app.handleSetFinalizeTime)
r.Post("/finalize/now", app.handleFinalizeNow)
r.Get("/finalize/last", app.handleGetLastSummary)
})
// Moderators (role <= 50)
@@ -952,6 +1007,7 @@ func server(app *App) *http.Server {
r.Get("/finalize/time", app.handleGetFinalizeTime)
r.Post("/finalize/time", app.handleSetFinalizeTime)
r.Post("/finalize/now", app.handleFinalizeNow)
r.Get("/finalize/last", app.handleGetLastSummary)
})
// Return configured server
@@ -973,12 +1029,11 @@ func main() {
// Create server
srv := server(app)
go startDailyCleanup(app)
log.Println("Server listening on", srv.Addr)
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatal(err)
}
go startDailyCleanup(app)
}

BIN
backend/sqlite3.exe Normal file

Binary file not shown.