88 lines
2.6 KiB
Go
88 lines
2.6 KiB
Go
|
|
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
|
||
|
|
}
|