// ============================================ // db/gps_links.go // Génération de liens GPS vers différentes plateformes // ============================================ package db import ( "fmt" ) // MapLinks contient les liens vers différentes plateformes de cartographie type MapLinks struct { GoogleMaps string `json:"google_maps"` GoogleMapsApp string `json:"google_maps_app"` Waze string `json:"waze"` WazeApp string `json:"waze_app"` AppleMaps string `json:"apple_maps"` OpenStreetMap string `json:"openstreetmap"` BingMaps string `json:"bing_maps"` HereMaps string `json:"here_maps"` } func wazeAppLink(lat, lon float64) string { return fmt.Sprintf("waze://?ll=%.6f,%.6f&navigate=yes", lat, lon) } func (d *Database) GenerateMapLinks(lat, lon float64, label string) MapLinks { return MapLinks{ WazeApp: wazeAppLink(lat, lon), } } func (d *Database) GenerateNavigationLink(fromLat, fromLon, toLat, toLon float64, platform string) string { return wazeAppLink(toLat, toLon) } func (d *Database) GenerateMapLinksForCommand(commandID int, deliverymanUsername string) (map[string]string, error) { _, _, err := d.GetDeliveryPersonLocation(deliverymanUsername) if err != nil { return nil, fmt.Errorf("position livreur non disponible: %w", err) } command, err := d.GetCommandByID(commandID) if err != nil { return nil, fmt.Errorf("commande non trouvée: %w", err) } var destLat, destLon float64 if v, ok := command["dest_latitude"].(float64); ok { destLat = v } if v, ok := command["dest_longitude"].(float64); ok { destLon = v } if destLat == 0 && destLon == 0 { return nil, fmt.Errorf("coordonnées destination invalides") } return map[string]string{ "waze_app": wazeAppLink(destLat, destLon), }, nil }