Files
app-api/internal/repository/device.go
T

88 lines
2.6 KiB
Go
Raw Normal View History

package repository
import (
"context"
"database/sql"
"fmt"
"github.com/luxsin/app-api/internal/model"
)
type DeviceRepository struct {
db *sql.DB
}
func NewDeviceRepository(db *sql.DB) *DeviceRepository {
return &DeviceRepository{db: db}
}
func (r *DeviceRepository) FindDeviceByMac(ctx context.Context, macAddr string) (*model.UserDevice, error) {
const query = `SELECT id, mac_addr, model, add_time, ver FROM user_device WHERE mac_addr = ?`
var d model.UserDevice
var ver sql.NullString
err := r.db.QueryRowContext(ctx, query, macAddr).Scan(&d.ID, &d.MacAddr, &d.Model, &d.AddTime, &ver)
if err == sql.ErrNoRows {
return nil, nil
}
if err != nil {
return nil, fmt.Errorf("query user_device: %w", err)
}
if ver.Valid {
d.Ver = &ver.String
}
return &d, nil
}
func (r *DeviceRepository) InsertDevice(ctx context.Context, d model.UserDevice) error {
const query = `INSERT INTO user_device (mac_addr, model, ver) VALUES (?, ?, ?)`
_, err := r.db.ExecContext(ctx, query, d.MacAddr, d.Model, d.Ver)
if err != nil {
return fmt.Errorf("insert user_device: %w", err)
}
return nil
}
func (r *DeviceRepository) UpdateDeviceVer(ctx context.Context, id int, ver *string) error {
const query = `UPDATE user_device SET ver = ? WHERE id = ?`
_, err := r.db.ExecContext(ctx, query, ver, id)
if err != nil {
return fmt.Errorf("update user_device: %w", err)
}
return nil
}
func (r *DeviceRepository) FindActiveByMacAndDate(ctx context.Context, macAddr, activeDate string) (*model.UserActive, error) {
const query = `SELECT id, mac_addr, model, active_date, ip_addr, create_at FROM user_active WHERE mac_addr = ? AND active_date = ?`
var a model.UserActive
err := r.db.QueryRowContext(ctx, query, macAddr, activeDate).Scan(&a.ID, &a.MacAddr, &a.Model, &a.ActiveDate, &a.IpAddr, &a.CreateAt)
if err == sql.ErrNoRows {
return nil, nil
}
if err != nil {
return nil, fmt.Errorf("query user_active: %w", err)
}
return &a, nil
}
func (r *DeviceRepository) InsertActive(ctx context.Context, a model.UserActive) error {
const query = `INSERT INTO user_active (mac_addr, model, active_date, ip_addr) VALUES (?, ?, ?, ?)`
_, err := r.db.ExecContext(ctx, query, a.MacAddr, a.Model, a.ActiveDate, a.IpAddr)
if err != nil {
return fmt.Errorf("insert user_active: %w", err)
}
return nil
}
func (r *DeviceRepository) UpdateActiveIp(ctx context.Context, id int, ipAddr string) error {
const query = `UPDATE user_active SET ip_addr = ? WHERE id = ?`
_, err := r.db.ExecContext(ctx, query, ipAddr, id)
if err != nil {
return fmt.Errorf("update user_active: %w", err)
}
return nil
}