c4cd8b6f5d
- 新增CurveCache实现Redis曲线数据缓存与分布式锁机制,避免重复请求 - 增加CurveHandler支持目标曲线接口,通过EQ API获取并缓存曲线数据 - Config新增EqualizeConfig配置,支持环境变量动态配置 - Repository新增CurveRepository,按brand和name查询模型与目标曲线数据 - 路由更新,集成/getCurve接口处理目标曲线请求 - OTA模型字段优化,bool类型改为BoolInt,实现数据库int与JSON bool映射 - 统一响应格式,调整response包中OK和Fail函数消息字段命名 - 修改服务端配置默认DB IP,支持Equalize参数传递到路由层 - 新增CSV解析实现,从文件读取测量与目标曲线数据 - 修改OTA处理逻辑,修复定向升级判断bug - Java层新增EqualizeController和ModelService对应功能,保持客户端接口兼容与调用逻辑一致
65 lines
1.6 KiB
Go
65 lines
1.6 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 brand_name = ? AND 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, bass_boost, create_at FROM target WHERE 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.CreateAt,
|
|
)
|
|
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
|
|
} |