| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package repository
- import (
- "errors"
- "fmt"
- "time"
- "gorm.io/gorm"
- "wails-app/internal/dao"
- "wails-app/internal/global"
- )
- // Repository 封装设备接入记录读写,避免 API 层直接拼接 GORM 条件。
- type Repository struct{}
- func New() *Repository { return &Repository{} }
- func (r *Repository) db() *gorm.DB { return global.GVA_DB }
- func (r *Repository) CreateDiscovery(record *dao.DeviceDiscovery) error {
- if r.db() == nil {
- return errors.New("数据库未初始化")
- }
- return r.db().Create(record).Error
- }
- func (r *Repository) LatestDiscovery(deviceID string) (*dao.DeviceDiscovery, error) {
- return r.latestDiscovery(deviceID, "")
- }
- func (r *Repository) LatestDiscoveryByMethod(deviceID, method string) (*dao.DeviceDiscovery, error) {
- return r.latestDiscovery(deviceID, method)
- }
- func (r *Repository) latestDiscovery(deviceID, method string) (*dao.DeviceDiscovery, error) {
- if r.db() == nil {
- return nil, errors.New("数据库未初始化")
- }
- var record dao.DeviceDiscovery
- query := r.db().Where("device_id = ?", deviceID)
- if method != "" {
- query = query.Where("provision_method = ?", method)
- }
- result := query.Order("created_at DESC").First(&record)
- if errors.Is(result.Error, gorm.ErrRecordNotFound) {
- return nil, fmt.Errorf("设备身份不存在或已过期")
- }
- if result.Error != nil {
- return nil, result.Error
- }
- if time.Now().After(record.ExpiredAt) {
- return nil, fmt.Errorf("设备身份记录已过期,请重新读取")
- }
- return &record, nil
- }
- func (r *Repository) SaveDiscovery(record *dao.DeviceDiscovery) error {
- if r.db() == nil {
- return errors.New("数据库未初始化")
- }
- return r.db().Save(record).Error
- }
- func (r *Repository) ActiveDiscoveries() ([]dao.DeviceDiscovery, error) {
- if r.db() == nil {
- return nil, errors.New("数据库未初始化")
- }
- var records []dao.DeviceDiscovery
- result := r.db().Where("expired_at > ? AND provision_method = ?", time.Now(), "auto_udp").Order("created_at DESC").Find(&records)
- return records, result.Error
- }
- func (r *Repository) ReaderByDeviceID(deviceID string) (*dao.UHFReader, error) {
- if r.db() == nil {
- return nil, errors.New("数据库未初始化")
- }
- var reader dao.UHFReader
- result := r.db().Where("device_id = ?", deviceID).First(&reader)
- if errors.Is(result.Error, gorm.ErrRecordNotFound) {
- return nil, nil
- }
- return &reader, result.Error
- }
|