// Package database define database operation functions package database import ( "context" "time" "modelRT/logger" "modelRT/orm" "github.com/gofrs/uuid" "gorm.io/gorm" "gorm.io/gorm/clause" ) // QueryBayByUUID returns the Bay record matching bayUUID. func QueryBayByUUID(ctx context.Context, tx *gorm.DB, bayUUID uuid.UUID) (*orm.Bay, error) { var bay orm.Bay cancelCtx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() result := tx.WithContext(cancelCtx). Where("bay_uuid = ?", bayUUID). Clauses(clause.Locking{Strength: "UPDATE"}). First(&bay) if result.Error != nil { return nil, result.Error } return &bay, nil } // QueryBaysByUUIDs returns Bay records matching the given UUIDs in a single query. // The returned slice preserves database order; unmatched UUIDs are silently omitted. func QueryBaysByUUIDs(ctx context.Context, tx *gorm.DB, bayUUIDs []uuid.UUID) ([]orm.Bay, error) { if len(bayUUIDs) == 0 { return nil, nil } var bays []orm.Bay cancelCtx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() result := tx.WithContext(cancelCtx). Where("bay_uuid IN ?", bayUUIDs). Clauses(clause.Locking{Strength: "UPDATE"}). Find(&bays) if result.Error != nil { logger.Error(ctx, "query bays by uuids failed", "error", result.Error) return nil, result.Error } return bays, nil }