179 lines
3.6 KiB
Go
179 lines
3.6 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
scribble "github.com/nanobox-io/golang-scribble"
|
|
)
|
|
|
|
type Surfer struct {
|
|
Name string `json:"name"`
|
|
Category string `json:"category"`
|
|
Color string `json:"color"`
|
|
Priority string `json:"priority"`
|
|
Score string `json:"score"`
|
|
}
|
|
|
|
type Heat struct {
|
|
Round string `json:"round"`
|
|
Category string `json:"category"`
|
|
Number int `json:"number"`
|
|
Timer int `json:"timer"`
|
|
Status string `json:"status"`
|
|
Surfers []Surfer `json:"surfers"`
|
|
}
|
|
|
|
func heatName(heat Heat) string {
|
|
str := fmt.Sprintf("%s.%d.%s", heat.Round, heat.Number, heat.Category)
|
|
str = strings.ReplaceAll(str, " ", "_")
|
|
return str
|
|
}
|
|
|
|
func (app *App) SaveHeat(c *gin.Context) {
|
|
var heat Heat
|
|
|
|
// body, _ := io.ReadAll(c.Request.Body)
|
|
|
|
// log.Printf("save: %+v", string(body))
|
|
|
|
err := c.ShouldBind(&heat)
|
|
|
|
if err != nil {
|
|
log.Printf("req error: %+v", err)
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
log.Printf("heat: %+v", heat)
|
|
|
|
heat.Status = "idle"
|
|
|
|
err = app.DB.Write("Heat", heatName(heat), heat)
|
|
if err != nil {
|
|
log.Printf("set error: %+v", err)
|
|
c.JSON(http.StatusInternalServerError, gin.H{"status": fmt.Sprintf("Error: %+v", err)})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{"status": "saved"})
|
|
}
|
|
|
|
func (app *App) LoadHeats(c *gin.Context) {
|
|
heats := app.DB.loadHeats()
|
|
|
|
c.JSON(http.StatusOK, heats)
|
|
|
|
log.Printf("heats: %+v", heats)
|
|
}
|
|
|
|
func (app *App) DeleteHeat(c *gin.Context) {
|
|
var heat Heat
|
|
|
|
err := c.ShouldBind(&heat)
|
|
|
|
if err != nil {
|
|
log.Printf("req error: %+v", err)
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
log.Printf("heat: %+v", heat)
|
|
|
|
err = app.DB.Delete("Heat", heatName(heat))
|
|
if err != nil {
|
|
log.Printf("set error: %+v", err)
|
|
c.JSON(http.StatusInternalServerError, gin.H{"status": fmt.Sprintf("Error: %+v", err)})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{"status": "deleted"})
|
|
}
|
|
|
|
func (app *App) StartHeatTimer(c *gin.Context) {
|
|
var msg Message
|
|
var err error
|
|
var timer time.Duration
|
|
|
|
if app.Stream.HeatRunning {
|
|
c.JSON(http.StatusOK, "running")
|
|
return
|
|
}
|
|
|
|
err = c.ShouldBind(&msg)
|
|
if err != nil {
|
|
log.Printf("req error: %+v", err)
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
|
|
heat := &Heat{}
|
|
|
|
json.Unmarshal([]byte(msg.Data), heat)
|
|
|
|
log.Printf("msg: %+v", msg)
|
|
log.Printf("heat: %+v", heat)
|
|
|
|
timer, err = time.ParseDuration(strconv.Itoa(heat.Timer) + "m")
|
|
if err != nil {
|
|
log.Printf("req error: %+v", err)
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
app.Stream.HeatTimer = timer
|
|
app.Stream.HeatRunning = true
|
|
|
|
// app.startHeat()
|
|
|
|
log.Printf("start timer %s - received %s", app.Stream.HeatTimer, heat.Timer)
|
|
c.JSON(http.StatusOK, app.Stream.HeatRunning)
|
|
}
|
|
|
|
// func (app *App) StopHeatTimer(c *gin.Context) {
|
|
// if !app.Stream.Start {
|
|
// c.JSON(http.StatusOK, app.Stream.Duration)
|
|
// return
|
|
// }
|
|
|
|
// stopHeat(app.DB, *app.Stream.Heat)
|
|
// app.Stream.Start = false
|
|
// app.Stream.Duration = 0
|
|
|
|
// log.Printf("start timer %s", app.Stream.Duration)
|
|
// c.JSON(http.StatusOK, app.Stream.Duration)
|
|
// }
|
|
|
|
func (app *App) startHeat(heat Heat) error {
|
|
log.Printf("heat: %+v", heat)
|
|
|
|
heat.Status = "running"
|
|
|
|
err := app.DB.Write("Heat", heatName(heat), heat)
|
|
if err != nil {
|
|
log.Printf("set error: %+v", err)
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func stopHeat(db *scribble.Driver, heat Heat) error {
|
|
|
|
log.Printf("heat: %+v", heat)
|
|
|
|
heat.Status = "ended"
|
|
|
|
err := db.Write("Heat", heatName(heat), heat)
|
|
if err != nil {
|
|
log.Printf("set error: %+v", err)
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|