diff --git a/internal/pkg/service/beacon_service.go b/internal/pkg/service/beacon_service.go index 14e25f3..3f542ba 100644 --- a/internal/pkg/service/beacon_service.go +++ b/internal/pkg/service/beacon_service.go @@ -101,7 +101,7 @@ func LocationToBeaconService(msg model.HTTPLocation, db *gorm.DB, writer *kafka. return } - err = db.Where("id = ?", msg.ID).Updates(model.Tracker{Position: gw.ID, X: gw.X, Y: gw.Y}).Error + err = db.Where("id = ?", msg.ID).Updates(model.Tracker{Position: gw.ID, X: gw.X, Y: gw.Y, Floor: floor.ID}).Error if err != nil { msg := fmt.Sprintf("Error in updating tracker: %v", err) slog.Error(msg) @@ -139,10 +139,29 @@ func LocationToBeaconServiceAI(msg model.HTTPLocation, db *gorm.DB, writer *kafk return } - err = db.Where("id = ?", tracker.ID).Updates(model.Tracker{Position: gw.ID, X: msg.X, Y: msg.Y}).Error + var floor model.Floor + floorFound := msg.Z >= 0 + if floorFound { + if err := db.Where("floor_number = ?", int(msg.Z)).First(&floor).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + slog.Warn(fmt.Sprintf("Floor not found for floor number: %f, skipping floor update", msg.Z)) + floorFound = false + } else { + slog.Error(fmt.Sprintf("Error querying floor for floor number: %f: %v", msg.Z, err)) + return + } + } + } + + var trackerUpdate model.Tracker + if floorFound { + trackerUpdate = model.Tracker{Position: gw.ID, X: msg.X, Y: msg.Y, Floor: floor.ID} + } else { + trackerUpdate = model.Tracker{Position: gw.ID, X: msg.X, Y: msg.Y} + } + err = db.Where("id = ?", tracker.ID).Updates(trackerUpdate).Error if err != nil { - msg := fmt.Sprintf("Error in updating tracker: %v", err) - slog.Error(msg) + slog.Error(fmt.Sprintf("Error in updating tracker: %v", err)) return } diff --git a/location b/location index 4a8ea01..14dc7e9 100755 Binary files a/location and b/location differ diff --git a/server b/server index 2d4436b..ee06424 100755 Binary files a/server and b/server differ