66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
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
|
|
}
|