2024-11-22 16:41:04 +08:00
// Package database define database operation functions
package database
import (
"context"
"time"
"modelRT/orm"
"go.uber.org/zap"
"gorm.io/gorm/clause"
)
// QueryAllPages return the all page info of the circuit diagram query by grid_id and zone_id and station_id
func QueryAllPages ( ctx context . Context , logger * zap . Logger , gridID , zoneID , stationID int64 ) ( [ ] orm . Page , error ) {
var pages [ ] orm . Page
// ctx超时判断
cancelCtx , cancel := context . WithTimeout ( ctx , 5 * time . Second )
defer cancel ( )
2025-01-08 16:37:18 +08:00
// TODO 将 for update 操作放到事务中
2025-01-06 17:00:58 +08:00
result := _globalPostgresClient . Model ( & orm . Page { } ) . WithContext ( cancelCtx ) . Clauses ( clause . Locking { Strength : "UPDATE" } ) . Select ( ` "page".id, "page".Name, "page".status,"page".context ` ) . Joins ( ` inner join "station" on "station".id = "page".station_id ` ) . Joins ( ` inner join "zone" on "zone".id = "station".zone_id ` ) . Joins ( ` inner join "grid" on "grid".id = "zone".grid_id ` ) . Where ( ` "grid".id = ? and "zone".id = ? and "station".id = ? ` , gridID , zoneID , stationID ) . Scan ( & pages )
2024-11-22 16:41:04 +08:00
if result . Error != nil {
logger . Error ( "query circuit diagram pages by gridID and zoneID and stationID failed" , zap . Int64 ( "grid_id" , gridID ) , zap . Int64 ( "zone_id" , zoneID ) , zap . Int64 ( "station_id" , stationID ) , zap . Error ( result . Error ) )
return nil , result . Error
}
return pages , nil
}