// Package database define database operation functions package database import ( "context" "time" "modelRT/orm" "gorm.io/gorm" "gorm.io/gorm/clause" ) // QueryMeasurementByID return the result of query circuit diagram component measurement info by id from postgresDB func QueryMeasurementByID(ctx context.Context, tx *gorm.DB, id int64) (orm.Measurement, error) { var measurement orm.Measurement // ctx超时判断 cancelCtx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() result := tx.WithContext(cancelCtx). Where("id = ?", id). Clauses(clause.Locking{Strength: "UPDATE"}). First(&measurement) if result.Error != nil { return orm.Measurement{}, result.Error } return measurement, nil } // QueryMeasurementByToken define function query circuit diagram component measurement info by token from postgresDB func QueryMeasurementByToken(ctx context.Context, tx *gorm.DB, token string) (orm.Measurement, error) { // TODO parse token to avoid SQL injection var component orm.Measurement // ctx超时判断 cancelCtx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() result := tx.WithContext(cancelCtx). Where(" = ?", token). Clauses(clause.Locking{Strength: "UPDATE"}). First(&component) if result.Error != nil { return orm.Measurement{}, result.Error } return component, nil } // GetAllMeasurements define func to query all measurement info from postgresDB func GetAllMeasurements(ctx context.Context, tx *gorm.DB) ([]orm.Measurement, error) { var measurements []orm.Measurement // ctx超时判断 cancelCtx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() result := tx.WithContext(cancelCtx).Clauses(clause.Locking{Strength: "UPDATE"}).Find(&measurements) if result.Error != nil { return nil, result.Error } return measurements, nil }