537 lines
28 KiB
Go
537 lines
28 KiB
Go
package model
|
|
|
|
import "time"
|
|
|
|
type TaskStatus string
|
|
type SessionStatus string
|
|
type UserRole string
|
|
type UserStatus string
|
|
type ChannelScope string
|
|
type ChannelInterfaceType string
|
|
type ApiCallStatus string
|
|
type ResourceStatus string
|
|
type BillingStatus string
|
|
type CreditLedgerType string
|
|
type RedeemCodeStatus string
|
|
type AnnouncementStatus string
|
|
type AnnouncementLevel string
|
|
|
|
// AdminAuditEvent 只允许追加,用于还原管理员写操作,禁止作为可编辑业务状态使用。
|
|
type AdminAuditEvent struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
ActorUserID string `json:"actorUserId" gorm:"index;size:36"`
|
|
Action string `json:"action" gorm:"index;size:80"`
|
|
TargetType string `json:"targetType" gorm:"index;size:40"`
|
|
TargetID string `json:"targetId" gorm:"index;size:160"`
|
|
Summary string `json:"summary" gorm:"size:500"`
|
|
MetadataJSON string `json:"metadataJson" gorm:"type:text"`
|
|
CreatedAt time.Time `json:"createdAt" gorm:"index"`
|
|
}
|
|
|
|
const (
|
|
TaskStatusQueued TaskStatus = "queued"
|
|
TaskStatusRunning TaskStatus = "running"
|
|
TaskStatusSucceeded TaskStatus = "succeeded"
|
|
TaskStatusFailed TaskStatus = "failed"
|
|
TaskStatusCancelled TaskStatus = "cancelled"
|
|
|
|
SessionStatusActive SessionStatus = "active"
|
|
SessionStatusCompleted SessionStatus = "completed"
|
|
SessionStatusFailed SessionStatus = "failed"
|
|
|
|
UserRoleAdmin UserRole = "admin"
|
|
UserRoleUser UserRole = "user"
|
|
|
|
UserStatusActive UserStatus = "active"
|
|
UserStatusDisabled UserStatus = "disabled"
|
|
|
|
ChannelScopeSystem ChannelScope = "system"
|
|
ChannelScopeUser ChannelScope = "user"
|
|
|
|
ChannelInterfaceChatCompletion ChannelInterfaceType = "chat-completion"
|
|
ChannelInterfaceOpenAIResponse ChannelInterfaceType = "openai-response"
|
|
ChannelInterfaceOpenAIImage ChannelInterfaceType = "openai-image"
|
|
ChannelInterfaceNewAPIVideo ChannelInterfaceType = "newapi"
|
|
ChannelInterfaceNewAPIChannel1 ChannelInterfaceType = "newapi-channel-1"
|
|
ChannelInterfaceNewAPIChannel2 ChannelInterfaceType = "newapi-channel-2"
|
|
ChannelInterfaceXAIVideo ChannelInterfaceType = "xai-video"
|
|
|
|
ApiCallStatusSucceeded ApiCallStatus = "succeeded"
|
|
ApiCallStatusFailed ApiCallStatus = "failed"
|
|
|
|
ResourceStatusPending ResourceStatus = "pending"
|
|
ResourceStatusReady ResourceStatus = "ready"
|
|
ResourceStatusFailed ResourceStatus = "failed"
|
|
ResourceStatusDeleted ResourceStatus = "deleted"
|
|
|
|
BillingStatusReserved BillingStatus = "reserved"
|
|
BillingStatusRunning BillingStatus = "running"
|
|
BillingStatusSettled BillingStatus = "settled"
|
|
BillingStatusRefunded BillingStatus = "refunded"
|
|
BillingStatusUncertain BillingStatus = "uncertain"
|
|
|
|
CreditLedgerRedeem CreditLedgerType = "redeem"
|
|
CreditLedgerAdminGrant CreditLedgerType = "admin_grant"
|
|
CreditLedgerReserve CreditLedgerType = "reserve"
|
|
CreditLedgerConsume CreditLedgerType = "consume"
|
|
CreditLedgerRefund CreditLedgerType = "refund"
|
|
CreditLedgerAdminAdjust CreditLedgerType = "admin_adjustment"
|
|
CreditLedgerSignupBonus CreditLedgerType = "signup_bonus"
|
|
CreditLedgerCheckinBonus CreditLedgerType = "checkin_bonus"
|
|
|
|
RedeemCodeUnused RedeemCodeStatus = "unused"
|
|
RedeemCodeRedeemed RedeemCodeStatus = "redeemed"
|
|
RedeemCodeDisabled RedeemCodeStatus = "disabled"
|
|
|
|
AnnouncementStatusActive AnnouncementStatus = "active"
|
|
AnnouncementStatusClosed AnnouncementStatus = "closed"
|
|
|
|
AnnouncementLevelInfo AnnouncementLevel = "info"
|
|
AnnouncementLevelSuccess AnnouncementLevel = "success"
|
|
AnnouncementLevelWarning AnnouncementLevel = "warning"
|
|
AnnouncementLevelCritical AnnouncementLevel = "critical"
|
|
)
|
|
|
|
type User struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
Username string `json:"username" gorm:"uniqueIndex;size:80"`
|
|
Email string `json:"email,omitempty" gorm:"size:160"`
|
|
DisplayName string `json:"displayName" gorm:"size:80"`
|
|
Role UserRole `json:"role" gorm:"index;size:24"`
|
|
Status UserStatus `json:"status" gorm:"index;size:24"`
|
|
PasswordHash string `json:"-"`
|
|
LastLoginAt *time.Time `json:"lastLoginAt"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type AuthSession struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36"`
|
|
TokenHash string `json:"-"`
|
|
ExpiresAt time.Time `json:"expiresAt" gorm:"index"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type UserIdentity struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36"`
|
|
Provider string `json:"provider" gorm:"size:32;uniqueIndex:idx_user_identity_provider_subject,priority:1"`
|
|
Subject string `json:"subject" gorm:"size:160;uniqueIndex:idx_user_identity_provider_subject,priority:2"`
|
|
ProviderUsername string `json:"providerUsername" gorm:"size:160"`
|
|
AvatarURL string `json:"avatarUrl"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type OAuthState struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
Provider string `json:"provider" gorm:"index;size:32"`
|
|
StateHash string `json:"-" gorm:"uniqueIndex;size:64"`
|
|
CodeVerifier string `json:"-" gorm:"size:160"`
|
|
NextPath string `json:"nextPath"`
|
|
ExpiresAt time.Time `json:"expiresAt" gorm:"index"`
|
|
UsedAt *time.Time `json:"usedAt" gorm:"index"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
type EmailVerificationCode struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
Email string `json:"email" gorm:"index;size:160"`
|
|
CodeHash string `json:"-" gorm:"size:64"`
|
|
Purpose string `json:"purpose" gorm:"index;size:32"`
|
|
ExpiresAt time.Time `json:"expiresAt" gorm:"index"`
|
|
UsedAt *time.Time `json:"usedAt" gorm:"index"`
|
|
CreatedAt time.Time `json:"createdAt" gorm:"index"`
|
|
}
|
|
|
|
type ModelChannel struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36"`
|
|
Scope ChannelScope `json:"scope" gorm:"index;size:24"`
|
|
Enabled bool `json:"enabled" gorm:"index"`
|
|
Name string `json:"name" gorm:"size:80"`
|
|
BaseURL string `json:"baseUrl"`
|
|
APIKey string `json:"-"`
|
|
APIFormat string `json:"apiFormat" gorm:"size:24"`
|
|
InterfaceType ChannelInterfaceType `json:"interfaceType" gorm:"size:32"`
|
|
ConcurrencyLimit int `json:"concurrencyLimit"`
|
|
ModelsJSON string `json:"modelsJson" gorm:"type:text"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type ChannelModel struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
ChannelID string `json:"channelId" gorm:"size:36;index;uniqueIndex:idx_channel_model_key,priority:1"`
|
|
ModelKey string `json:"modelKey" gorm:"size:120;uniqueIndex:idx_channel_model_key,priority:2"`
|
|
DisplayName string `json:"displayName" gorm:"size:160"`
|
|
Capability string `json:"capability" gorm:"size:32;index"`
|
|
BillingMode string `json:"billingMode" gorm:"size:32"`
|
|
UnitPriceMicrocredits int64 `json:"unitPriceMicrocredits"`
|
|
PriceConfigured bool `json:"priceConfigured" gorm:"index"`
|
|
Enabled bool `json:"enabled" gorm:"index"`
|
|
PriceVersion int64 `json:"priceVersion"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type ApiCallLog struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36;index:idx_api_logs_user_created,priority:1"`
|
|
ChannelID string `json:"channelId" gorm:"index;size:36;index:idx_api_logs_channel_created,priority:1"`
|
|
ChannelName string `json:"channelName" gorm:"-"`
|
|
TaskID string `json:"taskId,omitempty" gorm:"index;size:36"`
|
|
BillingOrderID string `json:"billingOrderId,omitempty" gorm:"index;size:36"`
|
|
Source string `json:"source" gorm:"index;size:64"`
|
|
Capability string `json:"capability" gorm:"index;size:32"`
|
|
Operation string `json:"operation" gorm:"size:64"`
|
|
RequestKind string `json:"requestKind" gorm:"index;size:24"`
|
|
Billable bool `json:"billable" gorm:"index"`
|
|
APIFormat string `json:"apiFormat" gorm:"size:24"`
|
|
Method string `json:"method" gorm:"size:16"`
|
|
Path string `json:"path"`
|
|
Model string `json:"model" gorm:"size:120;index:idx_api_logs_model_created,priority:1"`
|
|
Status ApiCallStatus `json:"status" gorm:"index;size:24;index:idx_api_logs_status_created,priority:1"`
|
|
StatusCode int `json:"statusCode"`
|
|
DurationMs int64 `json:"durationMs"`
|
|
InputTokens int64 `json:"inputTokens"`
|
|
OutputTokens int64 `json:"outputTokens"`
|
|
CachedTokens int64 `json:"cachedTokens"`
|
|
UsageAvailable bool `json:"usageAvailable"`
|
|
MediaCount int `json:"mediaCount"`
|
|
VideoSeconds int `json:"videoSeconds"`
|
|
ProviderRequestID string `json:"providerRequestId" gorm:"size:160"`
|
|
EstimatedCostMicros int64 `json:"estimatedCostMicros"`
|
|
CostAvailable bool `json:"costAvailable"`
|
|
Currency string `json:"currency" gorm:"size:12"`
|
|
ErrorCode string `json:"errorCode,omitempty" gorm:"index;size:80"`
|
|
Error string `json:"error"`
|
|
ConcurrencyLimit int `json:"concurrencyLimit"`
|
|
UpstreamURL string `json:"upstreamUrl"`
|
|
CreatedAt time.Time `json:"createdAt" gorm:"index;index:idx_api_logs_user_created,priority:2;index:idx_api_logs_channel_created,priority:2;index:idx_api_logs_model_created,priority:2;index:idx_api_logs_status_created,priority:2"`
|
|
}
|
|
|
|
type CreditAccount struct {
|
|
UserID string `json:"userId" gorm:"primaryKey;size:36"`
|
|
AvailableMicrocredits int64 `json:"availableMicrocredits"`
|
|
ReservedMicrocredits int64 `json:"reservedMicrocredits"`
|
|
Version int64 `json:"version"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type CreditLedgerEntry struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"size:36;index;index:idx_credit_ledger_user_created,priority:1"`
|
|
Type CreditLedgerType `json:"type" gorm:"size:32;index"`
|
|
AmountMicrocredits int64 `json:"amountMicrocredits"`
|
|
AvailableDeltaMicrocredits int64 `json:"availableDeltaMicrocredits"`
|
|
ReservedDeltaMicrocredits int64 `json:"reservedDeltaMicrocredits"`
|
|
AvailableAfterMicrocredits int64 `json:"availableAfterMicrocredits"`
|
|
ReservedAfterMicrocredits int64 `json:"reservedAfterMicrocredits"`
|
|
BillingOrderID string `json:"billingOrderId,omitempty" gorm:"index;size:36"`
|
|
RedeemCodeID string `json:"redeemCodeId,omitempty" gorm:"index;size:36"`
|
|
ActorUserID string `json:"actorUserId,omitempty" gorm:"index;size:36"`
|
|
Model string `json:"model,omitempty" gorm:"size:120;index"`
|
|
ChannelID string `json:"channelId,omitempty" gorm:"size:36;index"`
|
|
Scene string `json:"scene,omitempty" gorm:"size:80;index"`
|
|
Note string `json:"note,omitempty" gorm:"size:500"`
|
|
ReferenceKey *string `json:"referenceKey,omitempty" gorm:"size:180;uniqueIndex"`
|
|
CreatedAt time.Time `json:"createdAt" gorm:"index:idx_credit_ledger_user_created,priority:2"`
|
|
}
|
|
|
|
type BillingOrder struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"size:36;index;uniqueIndex:idx_billing_user_idempotency,priority:1"`
|
|
IdempotencyKey string `json:"idempotencyKey" gorm:"size:160;uniqueIndex:idx_billing_user_idempotency,priority:2"`
|
|
TaskID string `json:"taskId,omitempty" gorm:"index;size:36"`
|
|
ChannelID string `json:"channelId" gorm:"index;size:36"`
|
|
ChannelModelID string `json:"channelModelId" gorm:"index;size:36"`
|
|
Model string `json:"model" gorm:"index;size:120"`
|
|
Capability string `json:"capability" gorm:"index;size:32"`
|
|
Scene string `json:"scene" gorm:"index;size:80"`
|
|
BillingMode string `json:"billingMode" gorm:"size:32"`
|
|
PriceVersion int64 `json:"priceVersion"`
|
|
UnitPriceMicrocredits int64 `json:"unitPriceMicrocredits"`
|
|
MultiplierBasisPoints int64 `json:"multiplierBasisPoints"`
|
|
Quantity int64 `json:"quantity"`
|
|
AmountMicrocredits int64 `json:"amountMicrocredits"`
|
|
Status BillingStatus `json:"status" gorm:"index;size:24"`
|
|
ProviderRequestID string `json:"providerRequestId,omitempty" gorm:"index;size:160"`
|
|
Error string `json:"error,omitempty" gorm:"size:1000"`
|
|
ResolvedBy string `json:"resolvedBy,omitempty" gorm:"index;size:36"`
|
|
ResolutionNote string `json:"resolutionNote,omitempty" gorm:"size:500"`
|
|
StartedAt *time.Time `json:"startedAt"`
|
|
SettledAt *time.Time `json:"settledAt"`
|
|
RefundedAt *time.Time `json:"refundedAt"`
|
|
CreatedAt time.Time `json:"createdAt" gorm:"index"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type RedeemBatch struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
AmountMicrocredits int64 `json:"amountMicrocredits"`
|
|
Count int `json:"count"`
|
|
Note string `json:"note" gorm:"size:500"`
|
|
CreatedBy string `json:"createdBy" gorm:"index;size:36"`
|
|
CodesCipher string `json:"-" gorm:"type:text"`
|
|
ExpiresAt *time.Time `json:"expiresAt" gorm:"index"`
|
|
CreatedAt time.Time `json:"createdAt" gorm:"index"`
|
|
AvailableCount int64 `json:"availableCount" gorm:"->;-:migration"`
|
|
RedeemedCount int64 `json:"redeemedCount" gorm:"->;-:migration"`
|
|
DisabledCount int64 `json:"disabledCount" gorm:"->;-:migration"`
|
|
ExpiredCount int64 `json:"expiredCount" gorm:"->;-:migration"`
|
|
}
|
|
|
|
type RedeemCode struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
BatchID string `json:"batchId" gorm:"index;size:36;index:idx_redeem_codes_batch_status,priority:1;index:idx_redeem_codes_batch_created,priority:1"`
|
|
CodeHash string `json:"-" gorm:"uniqueIndex;size:64"`
|
|
CodeSuffix string `json:"codeSuffix" gorm:"size:4"`
|
|
AmountMicrocredits int64 `json:"amountMicrocredits"`
|
|
Status RedeemCodeStatus `json:"status" gorm:"index;size:24;index:idx_redeem_codes_batch_status,priority:2"`
|
|
RedeemedBy string `json:"redeemedBy,omitempty" gorm:"index;size:36"`
|
|
RedeemedAt *time.Time `json:"redeemedAt"`
|
|
RedeemedIP string `json:"redeemedIp,omitempty" gorm:"size:64"`
|
|
ExpiresAt *time.Time `json:"expiresAt" gorm:"index"`
|
|
CreatedAt time.Time `json:"createdAt" gorm:"index:idx_redeem_codes_batch_created,priority:2"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type ModelPricing struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
ChannelID string `json:"channelId" gorm:"size:36;uniqueIndex:idx_model_pricing_scope,priority:1"`
|
|
Model string `json:"model" gorm:"size:120;uniqueIndex:idx_model_pricing_scope,priority:2"`
|
|
Capability string `json:"capability" gorm:"size:32;uniqueIndex:idx_model_pricing_scope,priority:3"`
|
|
Currency string `json:"currency" gorm:"size:12"`
|
|
InputPerMillionMicros int64 `json:"inputPerMillionMicros"`
|
|
OutputPerMillionMicros int64 `json:"outputPerMillionMicros"`
|
|
CachedPerMillionMicros int64 `json:"cachedPerMillionMicros"`
|
|
PerRequestMicros int64 `json:"perRequestMicros"`
|
|
PerMediaMicros int64 `json:"perMediaMicros"`
|
|
PerVideoSecondMicros int64 `json:"perVideoSecondMicros"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type UserDailyActivity struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:64"`
|
|
Day time.Time `json:"day" gorm:"type:date;uniqueIndex:idx_user_daily_activity_day_user,priority:1;index"`
|
|
UserID string `json:"userId" gorm:"size:36;uniqueIndex:idx_user_daily_activity_day_user,priority:2;index"`
|
|
FirstActiveAt *time.Time `json:"firstActiveAt"`
|
|
LastActiveAt *time.Time `json:"lastActiveAt"`
|
|
LoginCount int `json:"loginCount"`
|
|
TaskCount int `json:"taskCount"`
|
|
AgentMessageCount int `json:"agentMessageCount"`
|
|
CanvasActive bool `json:"canvasActive"`
|
|
AssetCount int `json:"assetCount"`
|
|
ResourceCount int `json:"resourceCount"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type SystemSetting struct {
|
|
Key string `json:"key" gorm:"primaryKey;size:80"`
|
|
ValueJSON string `json:"valueJson" gorm:"type:text"`
|
|
UpdatedBy string `json:"updatedBy" gorm:"index;size:36"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type UserOSSSetting struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36;index:idx_user_oss_settings_user_created,priority:1"`
|
|
Enabled bool `json:"enabled" gorm:"index"`
|
|
ValueJSON string `json:"-" gorm:"type:text"`
|
|
CreatedAt time.Time `json:"createdAt" gorm:"index:idx_user_oss_settings_user_created,priority:2"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type UserDailyUploadUsage struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:64"`
|
|
UserID string `json:"userId" gorm:"size:36;index;uniqueIndex:idx_user_daily_upload_day,priority:1"`
|
|
Day string `json:"day" gorm:"size:10;index;uniqueIndex:idx_user_daily_upload_day,priority:2"`
|
|
Bytes int64 `json:"bytes"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type UserSkillState struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36;uniqueIndex:idx_user_skill_state_user_dir,priority:1"`
|
|
SkillDir string `json:"skillDir" gorm:"size:180;index;uniqueIndex:idx_user_skill_state_user_dir,priority:2"`
|
|
Activated bool `json:"activated" gorm:"index"`
|
|
Liked bool `json:"liked" gorm:"index"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type Resource struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36;index:idx_resources_user_created,priority:1"`
|
|
Kind string `json:"kind" gorm:"index;size:24"`
|
|
Status ResourceStatus `json:"status" gorm:"index;size:24"`
|
|
Provider string `json:"provider" gorm:"size:24"`
|
|
Endpoint string `json:"endpoint"`
|
|
Bucket string `json:"bucket" gorm:"size:160"`
|
|
// 用户 OSS 每次修改都会生成新版本,资源固定引用创建时的版本,避免历史资源因换密钥失效。
|
|
StorageSettingID string `json:"-" gorm:"index;size:36"`
|
|
ObjectKey string `json:"objectKey" gorm:"index"`
|
|
PublicURL string `json:"publicUrl"`
|
|
MimeType string `json:"mimeType" gorm:"size:120"`
|
|
Size int64 `json:"size"`
|
|
Width int `json:"width"`
|
|
Height int `json:"height"`
|
|
DurationMs int64 `json:"durationMs"`
|
|
ETag string `json:"etag" gorm:"size:160"`
|
|
Error string `json:"error"`
|
|
CreatedAt time.Time `json:"createdAt" gorm:"index:idx_resources_user_created,priority:2"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type Asset struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36;index:idx_assets_user_updated,priority:1"`
|
|
Kind string `json:"kind" gorm:"index;size:24"`
|
|
Title string `json:"title" gorm:"size:240"`
|
|
PayloadJSON string `json:"payloadJson" gorm:"type:text"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt" gorm:"index:idx_assets_user_updated,priority:2"`
|
|
}
|
|
|
|
type CanvasProject struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:80"`
|
|
UserID string `json:"userId" gorm:"index;size:36;index:idx_canvas_projects_user_updated,priority:1"`
|
|
Title string `json:"title" gorm:"size:240"`
|
|
PayloadJSON string `json:"payloadJson" gorm:"type:text"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt" gorm:"index:idx_canvas_projects_user_updated,priority:2"`
|
|
}
|
|
|
|
type CanvasShare struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36;uniqueIndex:idx_canvas_share_owner_project,priority:1"`
|
|
ProjectID string `json:"projectId" gorm:"index;size:80;uniqueIndex:idx_canvas_share_owner_project,priority:2"`
|
|
TokenHash string `json:"-" gorm:"uniqueIndex;size:64"`
|
|
TokenCipher string `json:"-" gorm:"type:text"`
|
|
Enabled bool `json:"enabled" gorm:"index"`
|
|
ExpiresAt *time.Time `json:"expiresAt" gorm:"index"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type StoryboardPromptTemplate struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
Name string `json:"name" gorm:"size:120"`
|
|
Content string `json:"content" gorm:"type:text"`
|
|
Enabled bool `json:"enabled" gorm:"index"`
|
|
CreatedBy string `json:"createdBy" gorm:"index;size:36"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type Announcement struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
Title string `json:"title" gorm:"size:120"`
|
|
Content string `json:"content" gorm:"type:text"`
|
|
Level AnnouncementLevel `json:"level" gorm:"index;size:24"`
|
|
Status AnnouncementStatus `json:"status" gorm:"index;size:24;index:idx_announcements_status_published,priority:1"`
|
|
CreatedBy string `json:"createdBy" gorm:"index;size:36"`
|
|
PublishedAt time.Time `json:"publishedAt" gorm:"index:idx_announcements_status_published,priority:2"`
|
|
ClosedAt *time.Time `json:"closedAt"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type UserAnnouncementRead struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36;uniqueIndex:idx_user_announcement_read,priority:1"`
|
|
AnnouncementID string `json:"announcementId" gorm:"index;size:36;uniqueIndex:idx_user_announcement_read,priority:2"`
|
|
ReadAt time.Time `json:"readAt"`
|
|
}
|
|
|
|
type Task struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36;index:idx_tasks_user_created,priority:1"`
|
|
SessionID string `json:"sessionId" gorm:"index;size:36"`
|
|
ProjectID string `json:"projectId" gorm:"index;size:80"`
|
|
Type string `json:"type" gorm:"index;size:64"`
|
|
Status TaskStatus `json:"status" gorm:"index;size:24;index:idx_tasks_status_created,priority:1;index:idx_tasks_claim,priority:1"`
|
|
Stage string `json:"stage" gorm:"size:80"`
|
|
Progress int `json:"progress"`
|
|
Prompt string `json:"prompt"`
|
|
Operation string `json:"operation" gorm:"size:64"`
|
|
Provider string `json:"provider" gorm:"size:64"`
|
|
Model string `json:"model" gorm:"size:120"`
|
|
BillingOrderID string `json:"billingOrderId,omitempty" gorm:"index;size:36"`
|
|
ProviderRequestID string `json:"providerRequestId,omitempty" gorm:"index;size:160"`
|
|
PollStage string `json:"pollStage,omitempty" gorm:"size:32"`
|
|
NextPollAt *time.Time `json:"nextPollAt,omitempty" gorm:"index"`
|
|
LeaseOwner string `json:"-" gorm:"index;size:120"`
|
|
LeaseExpiresAt *time.Time `json:"-" gorm:"index;index:idx_tasks_claim,priority:2"`
|
|
InputJSON string `json:"inputJson" gorm:"type:text"`
|
|
ResultJSON string `json:"resultJson" gorm:"type:text"`
|
|
Error string `json:"error"`
|
|
Attempts int `json:"attempts"`
|
|
StartedAt *time.Time `json:"startedAt"`
|
|
CompletedAt *time.Time `json:"completedAt"`
|
|
CreatedAt time.Time `json:"createdAt" gorm:"index:idx_tasks_user_created,priority:2;index:idx_tasks_status_created,priority:2;index:idx_tasks_claim,priority:3"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type Session struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36"`
|
|
ProjectID string `json:"projectId" gorm:"index;size:80"`
|
|
Status SessionStatus `json:"status" gorm:"index;size:24"`
|
|
Prompt string `json:"prompt"`
|
|
CanvasSnapshotJSON string `json:"canvasSnapshotJson" gorm:"type:text"`
|
|
CanvasOpsJSON string `json:"canvasOpsJson" gorm:"type:text"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
type Message struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36"`
|
|
SessionID string `json:"sessionId" gorm:"index;size:36"`
|
|
Role string `json:"role" gorm:"size:24"`
|
|
Content string `json:"content"`
|
|
Payload string `json:"payload" gorm:"type:text"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
type TaskLog struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36"`
|
|
TaskID string `json:"taskId" gorm:"index;size:36"`
|
|
Level string `json:"level" gorm:"size:24"`
|
|
Message string `json:"message"`
|
|
Payload string `json:"payload" gorm:"type:text"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
type SessionFile struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36"`
|
|
SessionID string `json:"sessionId" gorm:"index;size:36"`
|
|
FileName string `json:"fileName"`
|
|
MimeType string `json:"mimeType"`
|
|
Path string `json:"-"`
|
|
Size int64 `json:"size"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
type Result struct {
|
|
ID string `json:"id" gorm:"primaryKey;size:36"`
|
|
UserID string `json:"userId" gorm:"index;size:36"`
|
|
TaskID string `json:"taskId" gorm:"index;size:36"`
|
|
SessionID string `json:"sessionId" gorm:"index;size:36"`
|
|
Kind string `json:"kind" gorm:"size:64"`
|
|
URL string `json:"url"`
|
|
Payload string `json:"payload" gorm:"type:text"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|