Files
locative-service/src/locsrv/main.go
Wolfgang Hottgenroth b6622a5921
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
still database stuff, fix
2024-01-13 18:49:53 +01:00

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")
}