126 lines
4.3 KiB
Go
126 lines
4.3 KiB
Go
package main
|
|
|
|
import "time"
|
|
|
|
type User struct {
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
Username string `gorm:"uniqueIndex;size:64" json:"username"`
|
|
PasswordHash string `json:"-"`
|
|
Role string `gorm:"size:20;index" json:"role"`
|
|
Status string `gorm:"size:20;index" json:"status"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type UserPermission struct {
|
|
ID uint `gorm:"primaryKey"`
|
|
UserID uint `gorm:"uniqueIndex:idx_user_permission" json:"userId"`
|
|
Permission string `gorm:"uniqueIndex:idx_user_permission;size:64" json:"permission"`
|
|
Enabled bool `json:"enabled"`
|
|
}
|
|
|
|
type CreditAccount struct {
|
|
ID uint `gorm:"primaryKey"`
|
|
UserID uint `gorm:"uniqueIndex" json:"userId"`
|
|
Balance int64 `json:"balance"`
|
|
Reserved int64 `json:"reserved"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type CreditTransaction struct {
|
|
ID uint `gorm:"primaryKey"`
|
|
UserID uint `gorm:"index" json:"userId"`
|
|
Type string `gorm:"index;size:32" json:"type"`
|
|
Amount int64 `json:"amount"`
|
|
BalanceAfter int64 `json:"balanceAfter"`
|
|
ReferenceType string `gorm:"size:32" json:"referenceType"`
|
|
ReferenceID string `gorm:"size:64" json:"referenceId"`
|
|
Reason string `json:"reason,omitempty"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
type CreditReservation struct {
|
|
ID uint `gorm:"primaryKey"`
|
|
UserID uint `gorm:"index" json:"userId"`
|
|
TaskID uint `gorm:"uniqueIndex" json:"taskId"`
|
|
Amount int64 `json:"amount"`
|
|
Status string `gorm:"index;size:20" json:"status"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
CompletedAt *time.Time `json:"completedAt,omitempty"`
|
|
}
|
|
|
|
type RedeemBatch struct {
|
|
ID uint `gorm:"primaryKey"`
|
|
Code string `gorm:"uniqueIndex;size:64" json:"code"`
|
|
Credits int64 `json:"credits"`
|
|
Count int `json:"count"`
|
|
ExpiresAt *time.Time `json:"expiresAt,omitempty"`
|
|
Note string `json:"note,omitempty"`
|
|
CreatedBy uint `json:"createdBy"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
type RedeemCode struct {
|
|
ID uint `gorm:"primaryKey"`
|
|
BatchID uint `gorm:"index" json:"batchId"`
|
|
CodeHash string `gorm:"uniqueIndex;size:64" json:"-"`
|
|
Prefix string `gorm:"size:24" json:"prefix"`
|
|
Credits int64 `json:"credits"`
|
|
Status string `gorm:"index;size:20" json:"status"`
|
|
ExpiresAt *time.Time `json:"expiresAt,omitempty"`
|
|
RedeemedBy *uint `json:"redeemedBy,omitempty"`
|
|
RedeemedAt *time.Time `json:"redeemedAt,omitempty"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
type RedeemRecord struct {
|
|
ID uint `gorm:"primaryKey"`
|
|
CodeID uint `gorm:"index" json:"codeId"`
|
|
BatchID uint `gorm:"index" json:"batchId"`
|
|
UserID uint `gorm:"index" json:"userId"`
|
|
Credits int64 `json:"credits"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
type WebDAVConfig struct {
|
|
ID uint `gorm:"primaryKey"`
|
|
UserID uint `gorm:"uniqueIndex" json:"userId"`
|
|
Enabled bool `json:"enabled"`
|
|
URL string `json:"url"`
|
|
Username string `json:"username"`
|
|
Password string `json:"-"`
|
|
RootPath string `json:"rootPath"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type Session struct {
|
|
ID uint `gorm:"primaryKey"`
|
|
UserID uint `gorm:"index" json:"userId"`
|
|
TokenHash string `gorm:"uniqueIndex;size:64" json:"-"`
|
|
ExpiresAt time.Time `gorm:"index" json:"expiresAt"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
type AuditLog struct {
|
|
ID uint `gorm:"primaryKey"`
|
|
OperatorID uint `gorm:"index" json:"operatorId"`
|
|
Action string `gorm:"index;size:64" json:"action"`
|
|
TargetType string `gorm:"size:32" json:"targetType"`
|
|
TargetID string `gorm:"size:64" json:"targetId"`
|
|
Metadata string `json:"metadata,omitempty"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
const (
|
|
RoleAdmin = "admin"
|
|
RolePrivileged = "privileged"
|
|
RoleUser = "user"
|
|
UserActive = "active"
|
|
UserDisabled = "disabled"
|
|
PermDownload = "download"
|
|
PermRedeem = "redeem"
|
|
PermWebDAV = "webdav"
|
|
PermWebDAVConfig = "webdav_config"
|
|
)
|