Files
quyun-v2/backend/app/http/v1/dto/super.go

203 lines
7.5 KiB
Go

package dto
import (
"quyun/v2/pkg/consts"
)
// SuperUserLite 用于平台用户列表的轻量级用户信息
type SuperUserLite struct {
ID int64 `json:"id"`
Username string `json:"username"`
Roles []consts.Role `json:"roles"`
Status consts.UserStatus `json:"status"`
StatusDescription string `json:"status_description"`
VerifiedAt string `json:"verified_at"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
type UserItem struct {
SuperUserLite
Balance int64 `json:"balance"`
BalanceFrozen int64 `json:"balance_frozen"`
OwnedTenantCount int64 `json:"owned_tenant_count"`
JoinedTenantCount int64 `json:"joined_tenant_count"`
}
type UserStatistics struct {
Status consts.UserStatus `json:"status"`
StatusDescription string `json:"status_description"`
Count int64 `json:"count"`
}
type UserStatusUpdateForm struct {
Status consts.UserStatus `json:"status" validate:"required"`
}
type UserRolesUpdateForm struct {
Roles []consts.Role `json:"roles" validate:"required,min=1"`
}
type UserTenantItem struct {
TenantID int64 `json:"tenant_id"`
TenantStatus consts.TenantStatus `json:"tenant_status"`
TenantStatusDescription string `json:"tenant_status_description"`
Name string `json:"name"`
Code string `json:"code"`
Owner *TenantOwnerUserLite `json:"owner"`
Role []consts.TenantUserRole `json:"role"`
MemberStatus consts.UserStatus `json:"member_status"`
MemberStatusDescription string `json:"member_status_description"`
JoinedAt string `json:"joined_at"`
ExpiredAt string `json:"expired_at"`
}
// Tenant Related
type TenantCreateForm struct {
Name string `json:"name" validate:"required,max=128"`
Code string `json:"code" validate:"required,max=64"`
AdminUserID int64 `json:"admin_user_id" validate:"required"`
Duration int `json:"duration" validate:"required,oneof=7 30 90 180 365"`
}
type TenantItem struct {
ID int64 `json:"id"`
UUID string `json:"uuid"`
Code string `json:"code"`
Name string `json:"name"`
Status consts.TenantStatus `json:"status"`
StatusDescription string `json:"status_description"`
Config []int `json:"config"` // Replace with actual config struct if needed
Owner *TenantOwnerUserLite `json:"owner"`
AdminUsers []*TenantAdminUserLite `json:"admin_users"`
UserCount int64 `json:"user_count"`
IncomeAmountPaidSum int64 `json:"income_amount_paid_sum"`
ExpiredAt string `json:"expired_at"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
UserID int64 `json:"user_id"`
Users []*SuperUserLite `json:"users"`
}
type TenantOwnerUserLite struct {
ID int64 `json:"id"`
Username string `json:"username"`
}
type TenantAdminUserLite struct {
ID int64 `json:"id"`
Username string `json:"username"`
}
type TenantExpireUpdateForm struct {
Duration int `json:"duration" validate:"required,oneof=7 30 90 180 365"`
}
type TenantStatusUpdateForm struct {
Status consts.TenantStatus `json:"status" validate:"required"`
}
type SuperTenantContentItem struct {
Content *ContentItem `json:"content"`
StatusDescription string `json:"status_description"`
VisibilityDescription string `json:"visibility_description"`
Tenant *SuperContentTenantLite `json:"tenant"`
Owner *SuperUserLite `json:"owner"`
Price *ContentPrice `json:"price"` // Reuse or define specific price struct
}
type SuperContentTenantLite struct {
ID int64 `json:"id"`
Code string `json:"code"`
Name string `json:"name"`
}
type SuperTenantContentStatusUpdateForm struct {
Status consts.ContentStatus `json:"status" validate:"required,oneof=unpublished blocked"`
}
type SuperTenantUserItem struct {
User *SuperUserLite `json:"user"`
TenantUser *TenantUser `json:"tenant_user"`
}
type TenantUser struct {
ID int64 `json:"id"`
TenantID int64 `json:"tenant_id"`
UserID int64 `json:"user_id"`
Role []consts.TenantUserRole `json:"role"`
Status consts.UserStatus `json:"status"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
// Order Related
type SuperOrderItem struct {
ID int64 `json:"id"`
Type consts.OrderType `json:"type"`
Status consts.OrderStatus `json:"status"`
StatusDescription string `json:"status_description"`
Currency consts.Currency `json:"currency"`
AmountOriginal int64 `json:"amount_original"`
AmountDiscount int64 `json:"amount_discount"`
AmountPaid int64 `json:"amount_paid"`
Tenant *OrderTenantLite `json:"tenant"`
Buyer *OrderBuyerLite `json:"buyer"`
PaidAt string `json:"paid_at"`
RefundedAt string `json:"refunded_at"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
type OrderTenantLite struct {
ID int64 `json:"id"`
Code string `json:"code"`
Name string `json:"name"`
}
type OrderBuyerLite struct {
ID int64 `json:"id"`
Username string `json:"username"`
}
type OrderStatisticsResponse struct {
TotalCount int64 `json:"total_count"`
TotalAmountPaidSum int64 `json:"total_amount_paid_sum"`
ByStatus []OrderStatisticsRow `json:"by_status"`
}
type OrderStatisticsRow struct {
Status consts.OrderStatus `json:"status"`
StatusDescription string `json:"status_description"`
Count int64 `json:"count"`
AmountPaidSum int64 `json:"amount_paid_sum"`
}
type SuperOrderDetail struct {
Order *SuperOrderItem `json:"order"` // Using SuperOrderItem as base, extend if needed
Tenant *OrderTenantLite `json:"tenant"`
Buyer *OrderBuyerLite `json:"buyer"`
}
type SuperOrderRefundForm struct {
Force bool `json:"force"`
Reason string `json:"reason"`
IdempotencyKey string `json:"idempotency_key"`
}
// AdminContentItem for super admin view
type AdminContentItem struct {
Content *ContentItem `json:"content"`
Owner *AdminContentOwnerLite `json:"owner"`
Price *ContentPrice `json:"price"`
StatusDescription string `json:"status_description"`
VisibilityDescription string `json:"visibility_description"`
}
type AdminContentOwnerLite struct {
ID int64 `json:"id"`
Username string `json:"username"`
Roles []consts.Role `json:"roles"`
Status consts.UserStatus `json:"status"`
}