save each lane as it finishes

main
DustyP 9 months ago
parent 0d0591cccb
commit 60b6117f07

@ -325,6 +325,42 @@ func (db *DB) SetCurrentHeatNumber(groupID int64, heatNum int) error {
return err
}
func (db *DB) SaveLaneResult(groupID int64, heatNum int, lane int, time float64, position int) error {
db.logger.Info("Saving lane result", "groupID", groupID, "heatNum", heatNum, "lane", lane, "time", time, "position", position)
var count int
err := db.QueryRow("SELECT COUNT(*) FROM heat_results WHERE group_id = ? AND heat_number = ?",
groupID, heatNum).Scan(&count)
if err != nil {
return err
}
if count > 0 {
switch lane {
case 1:
_, err = db.Exec("UPDATE heat_results SET lane1_time = ?, lane1_position = ? WHERE group_id = ? AND heat_number = ?", time, position, groupID, heatNum)
case 2:
_, err = db.Exec("UPDATE heat_results SET lane2_time = ?, lane2_position = ? WHERE group_id = ? AND heat_number = ?", time, position, groupID, heatNum)
case 3:
_, err = db.Exec("UPDATE heat_results SET lane3_time = ?, lane3_position = ? WHERE group_id = ? AND heat_number = ?", time, position, groupID, heatNum)
case 4:
_, err = db.Exec("UPDATE heat_results SET lane4_time = ?, lane4_position = ? WHERE group_id = ? AND heat_number = ?", time, position, groupID, heatNum)
}
} else {
switch lane {
case 1:
_, err = db.Exec("INSERT INTO heat_results (group_id, heat_number, lane1_time, lane1_position) VALUES (?, ?, ?, ?)", groupID, heatNum, time, position)
case 2:
_, err = db.Exec("INSERT INTO heat_results (group_id, heat_number, lane2_time, lane2_position) VALUES (?, ?, ?, ?)", groupID, heatNum, time, position)
case 3:
_, err = db.Exec("INSERT INTO heat_results (group_id, heat_number, lane3_time, lane3_position) VALUES (?, ?, ?, ?)", groupID, heatNum, time, position)
case 4:
_, err = db.Exec("INSERT INTO heat_results (group_id, heat_number, lane4_time, lane4_position) VALUES (?, ?, ?, ?)", groupID, heatNum, time, position)
}
}
db.logger.Info("Saved lane result", "groupID", groupID, "heatNum", heatNum, "lane", lane, "time", time, "position", position)
return err
}
// SaveHeatResult saves the result of a heat
func (db *DB) SaveHeatResult(result models.HeatResult) error {
db.logger.Info("Saving heat result", "result", result)

@ -421,14 +421,10 @@ func (s *Server) forwardEvents() {
// broadcastRaceEvent sends a race event to all connected clients
func (s *Server) broadcastRaceEvent(event derby.Event) {
var heatResult models.HeatResult
switch event.Type {
case derby.EventRaceStart:
s.logger.Info("Broadcasting race start event")
s.sendRaceEventToAllClients("event: race-status\ndata: <div id='status-indicator' class='w-25 h-100 d-inline-flex align-items-center justify-content-center badge bg-success'>Race Running</div>\n\n")
heatGroup, _ := s.db.GetCurrentRacingGroup()
heatResult.GroupID = heatGroup.ID
heatResult.HeatNumber, _ = s.db.GetCurrentHeatNumber(heatGroup.ID)
case derby.EventLaneFinish:
s.logger.Info("Broadcasting lane finish event",
@ -436,27 +432,16 @@ func (s *Server) broadcastRaceEvent(event derby.Event) {
"time", event.Result.Time,
"place", event.Result.FinishPlace)
switch event.Result.Lane {
case 1:
heatResult.Lane1Time = event.Result.Time
heatResult.Lane1Position = event.Result.FinishPlace
case 2:
heatResult.Lane2Time = event.Result.Time
heatResult.Lane2Position = event.Result.FinishPlace
case 3:
heatResult.Lane3Time = event.Result.Time
heatResult.Lane3Position = event.Result.FinishPlace
case 4:
heatResult.Lane4Time = event.Result.Time
heatResult.Lane4Position = event.Result.FinishPlace
}
heatGroup, _ := s.db.GetCurrentRacingGroup()
heatNum, _ := s.db.GetCurrentHeatNumber(heatGroup.ID)
s.db.SaveLaneResult(heatGroup.ID, heatNum, event.Result.Lane, event.Result.Time, event.Result.FinishPlace)
s.sendRaceEventToAllClients(fmt.Sprintf("event: lane-%d-time\ndata: %.3f\n\n", event.Result.Lane, event.Result.Time))
s.sendRaceEventToAllClients(fmt.Sprintf("event: lane-%d-position\ndata: %d\n\n", event.Result.Lane, event.Result.FinishPlace))
case derby.EventRaceComplete:
s.logger.Info("Broadcasting race complete event")
s.sendRaceEventToAllClients("event: race-status\ndata: <div id='status-indicator' class='w-25 h-100 d-inline-flex align-items-center justify-content-center badge bg-warning'>Race Complete</div>\n\n")
s.db.SaveHeatResult(heatResult)
}
}

Loading…
Cancel
Save