package repository import ( "time" "gorm.io/gorm" "wails-app/internal/dao" "wails-app/internal/global" ) type Repository struct{} func New() *Repository { return &Repository{} } func (r *Repository) FindDeviceByUsername(username string) (*dao.CentralPaymentDevice, error) { var device dao.CentralPaymentDevice if err := global.GVA_DB.Where("username = ?", username).First(&device).Error; err != nil { return nil, err } return &device, nil } func (r *Repository) FindDeviceByTokenHash(hash string, now time.Time) (*dao.CentralPaymentDevice, error) { var token dao.CentralPaymentToken if err := global.GVA_DB.Where("token_hash = ? AND expire_at > ?", hash, now).First(&token).Error; err != nil { return nil, err } var device dao.CentralPaymentDevice if err := global.GVA_DB.Where("device_id = ? AND enabled = ?", token.DeviceID, true).First(&device).Error; err != nil { return nil, err } return &device, nil } func (r *Repository) ReplaceTokens(deviceID string, token *dao.CentralPaymentToken) error { return global.GVA_DB.Transaction(func(tx *gorm.DB) error { if err := tx.Where("device_id = ?", deviceID).Delete(&dao.CentralPaymentToken{}).Error; err != nil { return err } return tx.Create(token).Error }) } func (r *Repository) FindTicket(ticketNo string) (*dao.DigitalTicket, error) { var ticket dao.DigitalTicket if err := global.GVA_DB.Where("ticket_no = ?", ticketNo).First(&ticket).Error; err != nil { return nil, err } return &ticket, nil } func (r *Repository) FindVehicleRecord(id uint) (*dao.VehicleRecord, error) { var record dao.VehicleRecord if err := global.GVA_DB.First(&record, id).Error; err != nil { return nil, err } return &record, nil } func (r *Repository) FindLatestPayment(recordID uint, entry string) (*dao.PaymentRecord, error) { var payment dao.PaymentRecord if err := global.GVA_DB.Where("record_id = ? AND payment_entry = ?", recordID, entry).Order("id DESC").First(&payment).Error; err != nil { return nil, err } return &payment, nil } func (r *Repository) Log(log *dao.CentralPaymentRequestLog) { if global.GVA_DB != nil { _ = global.GVA_DB.Create(log).Error } }