dragndrop_hld/oldqc/Backend/qc/graph_connect.go

54 lines
1.6 KiB
Go
Raw Permalink Normal View History

package qc
import (
"encoding/json"
"fmt"
"net/http"
"verofy-backend/models"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
func GraphConnectivityRoute(router *gin.Engine, db *gorm.DB, schema, segmentTable, mapIDCol, zoneCol, idCol, qcFlagCol string) {
router.GET("/api/qc/connectivity", func(c *gin.Context) {
mapID := c.Query("map_id")
zone := c.Query("zone")
if mapID == "" || zone == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "map_id and zone are required"})
return
}
var segments []models.SegmentGeoJSON
table := fmt.Sprintf("%s.%s", schema, segmentTable)
db.Table(table).Select(fmt.Sprintf("id_0, %s, segment_type, segment_status, %s, protection_status, %s, ST_AsGeoJSON(ST_Transform(geom, 4326))::json AS geometry", mapIDCol, idCol, qcFlagCol)).
Where(fmt.Sprintf("%s = ? AND %s = ?", mapIDCol, zoneCol), mapID, zone).
Find(&segments)
features := []map[string]interface{}{}
for _, s := range segments {
var geometry interface{}
if err := json.Unmarshal(s.Geometry, &geometry); err == nil {
features = append(features, map[string]interface{}{
"type": "Feature",
"geometry": geometry,
"properties": map[string]interface{}{
"id_0": s.ID0,
"mapid": s.MapID,
"segment_type": s.SegmentType,
"segment_status": s.SegmentStatus,
"id": s.ID,
"protection_status": s.ProtectionStatus,
},
})
}
}
c.JSON(http.StatusOK, map[string]interface{}{
"type": "FeatureCollection",
"features": features,
})
})
}