Added list of last orders to mod menu
This commit is contained in:
@@ -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)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user