package repository import ( "context" "database/sql" "fmt" "github.com/luxsin/app-api/internal/model" ) type CurveRepository struct { db *sql.DB } func NewCurveRepository(db *sql.DB) *CurveRepository { return &CurveRepository{db: db} } // GetModelByBrandAndName 按 brand_name + name 查询 Model(唯一索引) func (r *CurveRepository) GetModelByBrandAndName(ctx context.Context, brandName, name string) (*model.Model, error) { const query = `SELECT id, brand_name, name, form, rig, source, eq_key, create_at FROM model WHERE BINARY brand_name = ? AND BINARY name = ?` var m model.Model var form, rig, source, eqKey sql.NullString err := r.db.QueryRowContext(ctx, query, brandName, name).Scan( &m.ID, &m.BrandName, &m.Name, &form, &rig, &source, &eqKey, &m.CreateAt, ) if err == sql.ErrNoRows { return nil, nil } if err != nil { return nil, fmt.Errorf("query model: %w", err) } m.Form = nullStringPtr(form) m.Rig = nullStringPtr(rig) m.Source = nullStringPtr(source) m.EqKey = nullStringPtr(eqKey) return &m, nil } // GetTargetByLabel 按 label 查询 Target func (r *CurveRepository) GetTargetByLabel(ctx context.Context, label string) (*model.Target, error) { const query = `SELECT id, label, read_csv, file, bassBoost, addtime FROM target WHERE BINARY label = ?` var t model.Target var file, bassBoost sql.NullString err := r.db.QueryRowContext(ctx, query, label).Scan( &t.ID, &t.Label, &t.ReadCSV, &file, &bassBoost, &t.AddTime, ) if err == sql.ErrNoRows { return nil, nil } if err != nil { return nil, fmt.Errorf("query target: %w", err) } t.File = nullStringPtr(file) t.BassBoost = nullStringPtr(bassBoost) return &t, nil }