From 386f051d678ec7882f6f66110a500802f15a933e Mon Sep 17 00:00:00 2001 From: Nedim Date: Tue, 12 Sep 2023 18:28:18 +0200 Subject: [PATCH] Added route for saving device info --- controllers/DevicesController.go | 31 ++++++++++++++++++++++++ main.go | 5 +--- models/device.go | 1 + models/device_info.go | 39 +++++++++++++++++++++++++++++++ routes/publicRoutes.go | 2 +- services/sensor/sensor_service.go | 12 ---------- shared/database.go | 2 +- 7 files changed, 74 insertions(+), 18 deletions(-) create mode 100644 controllers/DevicesController.go create mode 100644 models/device_info.go delete mode 100644 services/sensor/sensor_service.go diff --git a/controllers/DevicesController.go b/controllers/DevicesController.go new file mode 100644 index 0000000..540c848 --- /dev/null +++ b/controllers/DevicesController.go @@ -0,0 +1,31 @@ +package controllers + +import ( + "encoding/json" + "net/http" + + "github.com/gin-gonic/gin" + "gitlab.com/pactual1/backend/models" + "gitlab.com/pactual1/backend/shared" +) + +func SaveDeviceInfofunc(c *gin.Context) { + var deviceInfo models.DeviceInfo + rawData, _ := c.GetRawData() + + // Unmarshal to the important info structure + err := json.Unmarshal(rawData, &deviceInfo) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid JSON payload"}) + return + } + + // Convert raw JSON bytes to string + deviceInfo.RawJSON = string(rawData) + + // Save deviceInfo to your database here + db :=shared.GetDb() + db.Create(&deviceInfo) + + c.JSON(http.StatusOK, gin.H{"message": "Successfully received device info", "data": deviceInfo}) +} diff --git a/main.go b/main.go index a283752..cfb5b3e 100644 --- a/main.go +++ b/main.go @@ -11,7 +11,6 @@ import ( "gitlab.com/pactual1/backend/services/contact" "gitlab.com/pactual1/backend/services/erp" "gitlab.com/pactual1/backend/services/messaging" - "gitlab.com/pactual1/backend/services/sensor" "gitlab.com/pactual1/backend/shared" "github.com/gin-gonic/gin" @@ -44,6 +43,7 @@ func main() { company := Admin.AddResource(&models.Company{}) company.Meta(&admin.Meta{Name: "Users", Config: &admin.SelectManyConfig{SelectMode: "bottom_sheet"}}) company.Meta(&admin.Meta{Name: "Devices", Config: &admin.SelectManyConfig{SelectMode: "bottom_sheet"}}) + // company.Meta(&admin.Meta{Name: "DeviceInfos", Config: &admin.SelectManyConfig{SelectMode: "bottom_sheet"}}) // Add User and Device resources Admin.AddResource(&models.User{}) @@ -63,19 +63,16 @@ func main() { // Initialize channels messagingChannel := make(chan string) erpChannel := make(chan string) - sensorChannel := make(chan string) contactChannel := make(chan string) // Start services and pass the respective channels go messaging.MessagingService(messagingChannel) go erp.ERPService(erpChannel) - go sensor.SensorService(sensorChannel) go contact.ContactService(contactChannel) // Sending messages via channels messagingChannel <- "Send an email" erpChannel <- "Update ERP record" - sensorChannel <- "Trigger sensor" contactChannel <- "Update contact info" // Initialize Gin diff --git a/models/device.go b/models/device.go index 7e03d18..7eebea5 100644 --- a/models/device.go +++ b/models/device.go @@ -7,6 +7,7 @@ type Device struct { DeviceName string DeviceConfiguration string `gorm:"type:json"` CompanyID uint + DeviceInfos []DeviceInfo } func (Device)Update() (bool, error) { diff --git a/models/device_info.go b/models/device_info.go new file mode 100644 index 0000000..8c66742 --- /dev/null +++ b/models/device_info.go @@ -0,0 +1,39 @@ +package models + +import "github.com/jinzhu/gorm" + +// Location holds latitude and longitude. +type Location struct { + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` +} + +// ImportantInfo holds fields that are important for quick access. +type SensorData struct { + IMEI string `json:"imei"` + IMSI string `json:"imsi"` + Timestamp int64 `json:"timestamp"` + Lat float64 `json:"lat"` + Lon float64 `json:"lon"` + WifiLoc Location `json:"wifi_location"` + CellLoc Location `json:"cell_location"` + Temperature float64 `json:"temperature"` +} + + +type DeviceInfo struct { + gorm.Model + RawJSON string `json:"raw_json" gorm:"type:json"` + SensorData + DeviceID uint +} + +func (DeviceInfo)Update() (bool, error) { + return false, nil +} +func (DeviceInfo)Create() (bool, error) { + return false, nil +} +func (DeviceInfo)Delete() (bool, error) { + return false, nil +} diff --git a/routes/publicRoutes.go b/routes/publicRoutes.go index c26c1a8..9069c1b 100644 --- a/routes/publicRoutes.go +++ b/routes/publicRoutes.go @@ -9,6 +9,6 @@ import ( func RegisterPublicRoutes(r *gin.Engine){ r.GET("/publicmessage", controllers.GetPublicText) - // r.GET("/companies", controllers.Ge) + r.POST("/device_info", controllers.SaveDeviceInfofunc) } diff --git a/services/sensor/sensor_service.go b/services/sensor/sensor_service.go deleted file mode 100644 index 829e248..0000000 --- a/services/sensor/sensor_service.go +++ /dev/null @@ -1,12 +0,0 @@ -package sensor - -import ( - "fmt" -) - -func SensorService(ch chan string) { - for msg := range ch { - fmt.Println("Sensor Service: ", msg) - - } -} diff --git a/shared/database.go b/shared/database.go index e070c8d..7bf023e 100644 --- a/shared/database.go +++ b/shared/database.go @@ -34,7 +34,7 @@ func Init() error{ return err } //TODO AUTOMIGRATE models once we have them - db.AutoMigrate(&models.User{}, &models.Company{}, &models.Device{}) + db.AutoMigrate(&models.User{}, &models.Company{}, &models.Device{}, &models.DeviceInfo{}) return nil