topfans/backend/pkg/models/peripheral_verify_code.go
2026-07-17 16:53:57 +08:00

33 lines
2.3 KiB
Go

package models
// PeripheralVerifyCode 防伪码主表(stage 1 新增,详见 docs/design/peripheral-verify.md §3.2.3)
//
// 关系:
// - code(明文)与 peripheral_info.code 一对一(扫码时通过 code_hash 反查再 JOIN)
// - code_hash = HMAC-SHA256(SECRET_KEY, code)[:32],URL 中实际出现
// - sign = HMAC-SHA256(SECRET_KEY, code_hash)[:32],URL 中验签参数
//
// 一物一码:每条记录对应一个物理周边的防伪码。
type PeripheralVerifyCode struct {
ID int64 `gorm:"primaryKey;autoIncrement;column:id"`
Code string `gorm:"type:varchar(50);not null;unique;column:code"` // 明文防伪码,内部使用
CodeHash string `gorm:"type:varchar(32);not null;unique;column:code_hash"` // HMAC 密文,URL 对外
BatchID *int64 `gorm:"column:batch_id"` // 所属批次
PeripheralInfoID *int64 `gorm:"column:peripheral_info_id"` // 关联 peripheral_info
SerialNumber string `gorm:"type:varchar(32);not null;default:'';column:serial_number"`
RarityLevel int16 `gorm:"not null;default:1;column:rarity_level"`
Status int16 `gorm:"not null;default:1;column:status"` // 0=待激活 1=已激活 2=已作废 3=已冻结 4=已核销
QRCodeURL string `gorm:"type:varchar(500);not null;default:'';column:qrcode_url"`
H5URL string `gorm:"type:varchar(500);not null;default:'';column:h5_url"`
Sign string `gorm:"type:varchar(64);not null;default:'';column:sign"` // URL HMAC 签名
StatusReason string `gorm:"type:varchar(200);not null;default:'';column:status_reason"`
ExpireAt int64 `gorm:"not null;default:0;column:expire_at"`
FirstScannedAt int64 `gorm:"not null;default:0;column:first_scanned_at"`
LastScannedAt int64 `gorm:"not null;default:0;column:last_scanned_at"`
ScanCount int64 `gorm:"not null;default:0;column:scan_count"`
CreatedBy string `gorm:"type:varchar(64);not null;column:created_by"`
CreatedAt int64 `gorm:"not null;column:created_at"`
UpdatedAt int64 `gorm:"not null;column:updated_at"`
}
func (PeripheralVerifyCode) TableName() string { return "peripheral_verify_code" }