package main import ( "log" "github.com/gin-gonic/gin" "net/http" "locsrv/database" ) /* { "trigger":"enter", "device":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "device_model":"iPhone13,1", "timestamp":"1705162497.0", "latitude":"51.0", "id":"test", "longitude":"7.0", "device_type":"iPhone" } */ type locativeEvent struct { Trigger string `json:"trigger"` Device string `json:"device"` Id string `json:"id"` } func main() { router := gin.Default() ch := make(chan locativeEvent) dbh := database.New() go func() { for { select { case event := <- ch: log.Printf("Trigger: %s, Device: %s, Id: %s", event.Trigger, event.Device, event.Id) person, err := dbh.GetPersonById(event.Device) if err != nil { log.Printf("Person unknown: %v", err) } else { log.Printf("Person: %s", person) } } } }() router.POST("/location", func(c *gin.Context) { var body locativeEvent err := c.ShouldBindJSON(&body) if err != nil { c.JSON(http.StatusBadRequest, gin.H { "error": err.Error() }) return } var message string select { case ch <- body: message = "message forwarded" default: log.Println("Channel full, message lost") message = "message lost" } c.JSON(http.StatusOK, gin.H { "message": message }) }) router.Run(":8080") }