package repository import ( "context" "database/sql" "fmt" "github.com/luxsin/app-api/internal/model" ) type HeadphoneImpedanceRepository struct { db *sql.DB } func NewHeadphoneImpedanceRepository(db *sql.DB) *HeadphoneImpedanceRepository { return &HeadphoneImpedanceRepository{db: db} } func (r *HeadphoneImpedanceRepository) FindByMacAndNorm( ctx context.Context, macAddr, brandNorm, modelNorm string, ) (*model.UserHeadphoneImpedance, error) { const query = ` SELECT id, mac_addr, device_model, impedance_ohm, headphone_brand, headphone_model, headphone_brand_norm, headphone_model_norm, ip_addr, create_at, update_at FROM user_headphone_impedance WHERE mac_addr = ? AND headphone_brand_norm = ? AND headphone_model_norm = ?` var rec model.UserHeadphoneImpedance err := r.db.QueryRowContext(ctx, query, macAddr, brandNorm, modelNorm).Scan( &rec.ID, &rec.MacAddr, &rec.DeviceModel, &rec.ImpedanceOhm, &rec.HeadphoneBrand, &rec.HeadphoneModel, &rec.HeadphoneBrandNorm, &rec.HeadphoneModelNorm, &rec.IpAddr, &rec.CreateAt, &rec.UpdateAt, ) if err == sql.ErrNoRows { return nil, nil } if err != nil { return nil, fmt.Errorf("query user_headphone_impedance: %w", err) } return &rec, nil } func (r *HeadphoneImpedanceRepository) Insert(ctx context.Context, rec model.UserHeadphoneImpedance) error { const query = ` INSERT INTO user_headphone_impedance ( mac_addr, device_model, impedance_ohm, headphone_brand, headphone_model, headphone_brand_norm, headphone_model_norm, ip_addr ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)` _, err := r.db.ExecContext(ctx, query, rec.MacAddr, rec.DeviceModel, rec.ImpedanceOhm, rec.HeadphoneBrand, rec.HeadphoneModel, rec.HeadphoneBrandNorm, rec.HeadphoneModelNorm, rec.IpAddr, ) if err != nil { return fmt.Errorf("insert user_headphone_impedance: %w", err) } return nil } func (r *HeadphoneImpedanceRepository) Update(ctx context.Context, rec model.UserHeadphoneImpedance) error { const query = ` UPDATE user_headphone_impedance SET device_model = ?, impedance_ohm = ?, headphone_brand = ?, headphone_model = ?, ip_addr = ? WHERE id = ?` _, err := r.db.ExecContext(ctx, query, rec.DeviceModel, rec.ImpedanceOhm, rec.HeadphoneBrand, rec.HeadphoneModel, rec.IpAddr, rec.ID, ) if err != nil { return fmt.Errorf("update user_headphone_impedance: %w", err) } return nil }