75 lines
1.4 KiB
Go
75 lines
1.4 KiB
Go
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")
|
|
}
|
|
|