From 02077209436fac9fac75ceae6b074d1937fe839b Mon Sep 17 00:00:00 2001 From: luorijun Date: Mon, 15 Dec 2025 14:48:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20model=20json=20=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/models/admin.go | 20 ++++++++++---------- web/models/admin_role.go | 8 ++++---- web/models/announcement.go | 12 ++++++------ web/models/bill.go | 16 ++++++++-------- web/models/channel.go | 32 ++++++++++++++++---------------- web/models/client.go | 16 ++++++++-------- web/models/coupon.go | 14 +++++++------- web/models/logs_login.go | 2 +- web/models/logs_request.go | 22 +++++++++++----------- web/models/logs_user_usage.go | 6 +++--- web/models/permission.go | 6 +++--- web/models/product.go | 10 +++++----- web/models/proxy.go | 16 ++++++++-------- web/models/refund.go | 10 +++++----- web/models/resource.go | 8 ++++---- web/models/resource_long.go | 18 +++++++++--------- web/models/resource_short.go | 18 +++++++++--------- web/models/session.go | 20 ++++++++++---------- web/models/trade.go | 32 ++++++++++++++++---------------- web/models/user.go | 34 +++++++++++++++++----------------- web/models/user_role.go | 8 ++++---- web/models/whitelist.go | 6 +++--- 22 files changed, 167 insertions(+), 167 deletions(-) diff --git a/web/models/admin.go b/web/models/admin.go index 405ba0d..f726fc3 100644 --- a/web/models/admin.go +++ b/web/models/admin.go @@ -10,16 +10,16 @@ import ( // Admin 管理员表 type Admin struct { core.Model - Username string `json:"username" gorm:"column:username"` // 用户名 - Password string `json:"password" gorm:"column:password"` // 密码 - Name *string `json:"name" gorm:"column:name"` // 真实姓名 - Avatar *string `json:"avatar" gorm:"column:avatar"` // 头像URL - Phone *string `json:"phone" gorm:"column:phone"` // 手机号码 - Email *string `json:"email" gorm:"column:email"` // 邮箱 - Status AdminStatus `json:"status" gorm:"column:status"` // 状态:0-禁用,1-正常 - LastLogin *time.Time `json:"last_login" gorm:"column:last_login"` // 最后登录时间 - LastLoginIP *orm.Inet `json:"last_login_ip" gorm:"column:last_login_ip"` // 最后登录地址 - LastLoginUA *string `json:"last_login_ua" gorm:"column:last_login_ua"` // 最后登录代理 + Username string `json:"username" gorm:"column:username"` // 用户名 + Password string `json:"password" gorm:"column:password"` // 密码 + Name *string `json:"name,omitempty" gorm:"column:name"` // 真实姓名 + Avatar *string `json:"avatar,omitempty" gorm:"column:avatar"` // 头像URL + Phone *string `json:"phone,omitempty" gorm:"column:phone"` // 手机号码 + Email *string `json:"email,omitempty" gorm:"column:email"` // 邮箱 + Status AdminStatus `json:"status" gorm:"column:status"` // 状态:0-禁用,1-正常 + LastLogin *time.Time `json:"last_login,omitempty" gorm:"column:last_login"` // 最后登录时间 + LastLoginIP *orm.Inet `json:"last_login_ip,omitempty" gorm:"column:last_login_ip"` // 最后登录地址 + LastLoginUA *string `json:"last_login_ua,omitempty" gorm:"column:last_login_ua"` // 最后登录代理 } // AdminStatus 管理员状态枚举 diff --git a/web/models/admin_role.go b/web/models/admin_role.go index ca56e26..aaac7db 100644 --- a/web/models/admin_role.go +++ b/web/models/admin_role.go @@ -7,8 +7,8 @@ import ( // AdminRole 管理员角色表 type AdminRole struct { core.Model - Name string `json:"name" gorm:"column:name"` // 角色名称 - Description *string `json:"description" gorm:"column:description"` // 角色描述 - Active bool `json:"active" gorm:"column:active"` // 是否激活 - Sort int32 `json:"sort" gorm:"column:sort"` // 排序 + Name string `json:"name" gorm:"column:name"` // 角色名称 + Description *string `json:"description,omitempty" gorm:"column:description"` // 角色描述 + Active bool `json:"active" gorm:"column:active"` // 是否激活 + Sort int32 `json:"sort" gorm:"column:sort"` // 排序 } diff --git a/web/models/announcement.go b/web/models/announcement.go index 699f7d4..eff8a86 100644 --- a/web/models/announcement.go +++ b/web/models/announcement.go @@ -7,12 +7,12 @@ import ( // Announcement 公告表 type Announcement struct { core.Model - Title string `json:"title" gorm:"column:title"` // 公告标题 - Content *string `json:"content" gorm:"column:content"` // 公告内容 - Type AnnouncementType `json:"type" gorm:"column:type"` // 公告类型:1-普通公告 - Pin bool `json:"pin" gorm:"column:pin"` // 是否置顶 - Status AnnouncementStatus `json:"status" gorm:"column:status"` // 公告状态:0-禁用,1-正常 - Sort int32 `json:"sort" gorm:"column:sort"` // 公告排序 + Title string `json:"title" gorm:"column:title"` // 公告标题 + Content *string `json:"content,omitempty" gorm:"column:content"` // 公告内容 + Type AnnouncementType `json:"type" gorm:"column:type"` // 公告类型:1-普通公告 + Pin bool `json:"pin" gorm:"column:pin"` // 是否置顶 + Status AnnouncementStatus `json:"status" gorm:"column:status"` // 公告状态:0-禁用,1-正常 + Sort int32 `json:"sort" gorm:"column:sort"` // 公告排序 } // AnnouncementType 公告类型枚举 diff --git a/web/models/bill.go b/web/models/bill.go index 9f31e24..b717d17 100644 --- a/web/models/bill.go +++ b/web/models/bill.go @@ -9,14 +9,14 @@ import ( // Bill 账单表 type Bill struct { core.Model - UserID int32 `json:"user_id" gorm:"column:user_id"` // 用户ID - TradeID *int32 `json:"trade_id" gorm:"column:trade_id"` // 订单ID - ResourceID *int32 `json:"resource_id" gorm:"column:resource_id"` // 套餐ID - RefundID *int32 `json:"refund_id" gorm:"column:refund_id"` // 退款ID - BillNo string `json:"bill_no" gorm:"column:bill_no"` // 易读账单号 - Info *string `json:"info" gorm:"column:info"` // 产品可读信息 - Type BillType `json:"type" gorm:"column:type"` // 账单类型:1-消费,2-退款,3-充值 - Amount decimal.Decimal `json:"amount" gorm:"column:amount"` // 账单金额 + UserID int32 `json:"user_id" gorm:"column:user_id"` // 用户ID + TradeID *int32 `json:"trade_id,omitempty" gorm:"column:trade_id"` // 订单ID + ResourceID *int32 `json:"resource_id,omitempty" gorm:"column:resource_id"` // 套餐ID + RefundID *int32 `json:"refund_id,omitempty" gorm:"column:refund_id"` // 退款ID + BillNo string `json:"bill_no" gorm:"column:bill_no"` // 易读账单号 + Info *string `json:"info,omitempty" gorm:"column:info"` // 产品可读信息 + Type BillType `json:"type" gorm:"column:type"` // 账单类型:1-消费,2-退款,3-充值 + Amount decimal.Decimal `json:"amount" gorm:"column:amount"` // 账单金额 User *User `json:"user,omitempty" gorm:"foreignKey:UserID"` Trade *Trade `json:"trade,omitempty" gorm:"foreignKey:TradeID"` diff --git a/web/models/channel.go b/web/models/channel.go index a40522d..cb56e6f 100644 --- a/web/models/channel.go +++ b/web/models/channel.go @@ -9,22 +9,22 @@ import ( // Channel 通道表 type Channel struct { core.Model - UserID int32 `json:"user_id" gorm:"column:user_id"` // 用户ID - ResourceID int32 `json:"resource_id" gorm:"column:resource_id"` // 套餐ID - BatchNo string `json:"batch_no" gorm:"column:batch_no"` // 批次编号 - ProxyID int32 `json:"proxy_id" gorm:"column:proxy_id"` // 代理ID - Host string `json:"host" gorm:"column:host"` // 代理主机 - Port uint16 `json:"port" gorm:"column:port"` // 代理端口 - EdgeID *int32 `json:"edge_id" gorm:"column:edge_id"` // 节点ID(手动配置) - EdgeRef *string `json:"edge_ref" gorm:"column:edge_ref"` // 外部节点引用,用于索引没有ID的外部非受控节点 - FilterISP *EdgeISP `json:"filter_isp" gorm:"column:filter_isp"` // 运营商过滤(自动配置):参考 edge.isp - FilterProv *string `json:"filter_prov" gorm:"column:filter_prov"` // 省份过滤(自动配置) - FilterCity *string `json:"filter_city" gorm:"column:filter_city"` // 城市过滤(自动配置) - IP *orm.Inet `json:"ip" gorm:"column:ip"` // 节点地址 - Whitelists *string `json:"whitelists" gorm:"column:whitelists"` // IP白名单,逗号分隔 - Username *string `json:"username" gorm:"column:username"` // 用户名 - Password *string `json:"password" gorm:"column:password"` // 密码 - ExpiredAt time.Time `json:"expired_at" gorm:"column:expired_at"` // 过期时间 + UserID int32 `json:"user_id" gorm:"column:user_id"` // 用户ID + ResourceID int32 `json:"resource_id" gorm:"column:resource_id"` // 套餐ID + BatchNo string `json:"batch_no" gorm:"column:batch_no"` // 批次编号 + ProxyID int32 `json:"proxy_id" gorm:"column:proxy_id"` // 代理ID + Host string `json:"host" gorm:"column:host"` // 代理主机 + Port uint16 `json:"port" gorm:"column:port"` // 代理端口 + EdgeID *int32 `json:"edge_id,omitempty" gorm:"column:edge_id"` // 节点ID(手动配置) + EdgeRef *string `json:"edge_ref,omitempty" gorm:"column:edge_ref"` // 外部节点引用,用于索引没有ID的外部非受控节点 + FilterISP *EdgeISP `json:"filter_isp,omitempty" gorm:"column:filter_isp"` // 运营商过滤(自动配置):参考 edge.isp + FilterProv *string `json:"filter_prov,omitempty" gorm:"column:filter_prov"` // 省份过滤(自动配置) + FilterCity *string `json:"filter_city,omitempty" gorm:"column:filter_city"` // 城市过滤(自动配置) + IP *orm.Inet `json:"ip,omitempty" gorm:"column:ip"` // 节点地址 + Whitelists *string `json:"whitelists,omitempty" gorm:"column:whitelists"` // IP白名单,逗号分隔 + Username *string `json:"username,omitempty" gorm:"column:username"` // 用户名 + Password *string `json:"password,omitempty" gorm:"column:password"` // 密码 + ExpiredAt time.Time `json:"expired_at" gorm:"column:expired_at"` // 过期时间 User *User `json:"user,omitempty" gorm:"foreignKey:UserID"` Resource *Resource `json:"resource,omitempty" gorm:"foreignKey:ResourceID"` diff --git a/web/models/client.go b/web/models/client.go index 872890b..a8c9e75 100644 --- a/web/models/client.go +++ b/web/models/client.go @@ -7,14 +7,14 @@ import ( // Client 客户端表 type Client struct { core.Model - ClientID string `json:"client_id" gorm:"column:client_id"` // OAuth2客户端标识符 - ClientSecret string `json:"client_secret" gorm:"column:client_secret"` // OAuth2客户端密钥 - RedirectURI *string `json:"redirect_uri" gorm:"column:redirect_uri"` // OAuth2 重定向URI - Spec ClientSpec `json:"spec" gorm:"column:spec"` // 安全规范:1-native,2-browser,3-web,4-api - Name string `json:"name" gorm:"column:name"` // 名称 - Icon *string `json:"icon" gorm:"column:icon"` // 图标URL - Status ClientStatus `json:"status" gorm:"column:status"` // 状态:0-禁用,1-正常 - Type ClientType `json:"type" gorm:"column:type"` // 类型:0-普通,1-官方 + ClientID string `json:"client_id" gorm:"column:client_id"` // OAuth2客户端标识符 + ClientSecret string `json:"client_secret" gorm:"column:client_secret"` // OAuth2客户端密钥 + RedirectURI *string `json:"redirect_uri,omitempty" gorm:"column:redirect_uri"` // OAuth2 重定向URI + Spec ClientSpec `json:"spec" gorm:"column:spec"` // 安全规范:1-native,2-browser,3-web,4-api + Name string `json:"name" gorm:"column:name"` // 名称 + Icon *string `json:"icon,omitempty" gorm:"column:icon"` // 图标URL + Status ClientStatus `json:"status" gorm:"column:status"` // 状态:0-禁用,1-正常 + Type ClientType `json:"type" gorm:"column:type"` // 类型:0-普通,1-官方 } // ClientSpec 客户端安全规范枚举 diff --git a/web/models/coupon.go b/web/models/coupon.go index 6d543c3..9a91acc 100644 --- a/web/models/coupon.go +++ b/web/models/coupon.go @@ -10,13 +10,13 @@ import ( // Coupon 优惠券表 type Coupon struct { core.Model - UserID *int32 `json:"user_id" gorm:"column:user_id"` // 用户ID - Code string `json:"code" gorm:"column:code"` // 优惠券代码 - Remark *string `json:"remark" gorm:"column:remark"` // 优惠券备注 - Amount decimal.Decimal `json:"amount" gorm:"column:amount"` // 优惠券金额 - MinAmount decimal.Decimal `json:"min_amount" gorm:"column:min_amount"` // 最低消费金额 - Status CouponStatus `json:"status" gorm:"column:status"` // 优惠券状态:0-未使用,1-已使用,2-已过期 - ExpireAt *time.Time `json:"expire_at" gorm:"column:expire_at"` // 过期时间 + UserID *int32 `json:"user_id,omitempty" gorm:"column:user_id"` // 用户ID + Code string `json:"code" gorm:"column:code"` // 优惠券代码 + Remark *string `json:"remark,omitempty" gorm:"column:remark"` // 优惠券备注 + Amount decimal.Decimal `json:"amount" gorm:"column:amount"` // 优惠券金额 + MinAmount decimal.Decimal `json:"min_amount" gorm:"column:min_amount"` // 最低消费金额 + Status CouponStatus `json:"status" gorm:"column:status"` // 优惠券状态:0-未使用,1-已使用,2-已过期 + ExpireAt *time.Time `json:"expire_at,omitempty" gorm:"column:expire_at"` // 过期时间 } // CouponStatus 优惠券状态枚举 diff --git a/web/models/logs_login.go b/web/models/logs_login.go index fdc779b..0b5abcb 100644 --- a/web/models/logs_login.go +++ b/web/models/logs_login.go @@ -13,7 +13,7 @@ type LogsLogin struct { GrantType GrantType `json:"grant_type" gorm:"column:grant_type"` // 授权类型 PasswordType PasswordType `json:"password_type" gorm:"column:password_type"` // 密码模式子授权类型 Success bool `json:"success" gorm:"column:success"` // 登录是否成功 - UserID *int32 `json:"user_id" gorm:"column:user_id"` // 用户ID + UserID *int32 `json:"user_id,omitempty" gorm:"column:user_id"` // 用户ID Time time.Time `json:"time" gorm:"column:time"` // 登录时间 User *User `json:"user,omitempty" gorm:"foreignKey:UserID"` diff --git a/web/models/logs_request.go b/web/models/logs_request.go index ba5d984..4cb99da 100644 --- a/web/models/logs_request.go +++ b/web/models/logs_request.go @@ -7,17 +7,17 @@ import ( // LogsRequest 访问日志表 type LogsRequest struct { - ID int32 `json:"id" gorm:"column:id"` // 访问日志ID - IP orm.Inet `json:"ip" gorm:"column:ip;not null"` // IP地址 - UA string `json:"ua" gorm:"column:ua"` // 用户代理 - UserID *int32 `json:"user_id" gorm:"column:user_id"` // 用户ID - ClientID *int32 `json:"client_id" gorm:"column:client_id"` // 客户端ID - Method string `json:"method" gorm:"column:method"` // 请求方法 - Path string `json:"path" gorm:"column:path"` // 请求路径 - Status int16 `json:"status" gorm:"column:status"` // 响应状态码 - Error *string `json:"error" gorm:"column:error"` // 错误信息 - Time time.Time `json:"time" gorm:"column:time"` // 请求时间 - Latency string `json:"latency" gorm:"column:latency"` // 请求延迟 + ID int32 `json:"id" gorm:"column:id"` // 访问日志ID + IP orm.Inet `json:"ip" gorm:"column:ip;not null"` // IP地址 + UA string `json:"ua" gorm:"column:ua"` // 用户代理 + UserID *int32 `json:"user_id,omitempty" gorm:"column:user_id"` // 用户ID + ClientID *int32 `json:"client_id,omitempty" gorm:"column:client_id"` // 客户端ID + Method string `json:"method" gorm:"column:method"` // 请求方法 + Path string `json:"path" gorm:"column:path"` // 请求路径 + Status int16 `json:"status" gorm:"column:status"` // 响应状态码 + Error *string `json:"error,omitempty" gorm:"column:error"` // 错误信息 + Time time.Time `json:"time" gorm:"column:time"` // 请求时间 + Latency string `json:"latency" gorm:"column:latency"` // 请求延迟 User *User `json:"user,omitempty" gorm:"foreignKey:UserID"` Client *Client `json:"client,omitempty" gorm:"foreignKey:ClientID"` diff --git a/web/models/logs_user_usage.go b/web/models/logs_user_usage.go index 603c619..bac63e0 100644 --- a/web/models/logs_user_usage.go +++ b/web/models/logs_user_usage.go @@ -12,9 +12,9 @@ type LogsUserUsage struct { ResourceID int32 `json:"resource_id" gorm:"column:resource_id"` // 套餐ID BatchNo string `json:"batch_no" gorm:"column:batch_no"` // 批次编号 Count int32 `json:"count" gorm:"column:count"` // 数量 - Prov *string `json:"prov" gorm:"column:prov"` // 省份 - City *string `json:"city" gorm:"column:city"` // 城市 - ISP *string `json:"isp" gorm:"column:isp"` // 运营商 + Prov *string `json:"prov,omitempty" gorm:"column:prov"` // 省份 + City *string `json:"city,omitempty" gorm:"column:city"` // 城市 + ISP *string `json:"isp,omitempty" gorm:"column:isp"` // 运营商 IP orm.Inet `json:"ip" gorm:"column:ip"` // IP地址 Time time.Time `json:"time" gorm:"column:time"` // 提取时间 } diff --git a/web/models/permission.go b/web/models/permission.go index 7ec326e..defc4ac 100644 --- a/web/models/permission.go +++ b/web/models/permission.go @@ -5,9 +5,9 @@ import "platform/web/core" // Permission 权限表 type Permission struct { core.Model - ParentID *int32 `json:"parent_id" gorm:"column:parent_id"` // 父权限ID - Name string `json:"name" gorm:"column:name"` // 权限名称 - Description *string `json:"description" gorm:"column:description"` // 权限描述 + ParentID *int32 `json:"parent_id,omitempty" gorm:"column:parent_id"` // 父权限ID + Name string `json:"name" gorm:"column:name"` // 权限名称 + Description *string `json:"description,omitempty" gorm:"column:description"` // 权限描述 Parent *Permission `json:"parent,omitempty" gorm:"foreignKey:ParentID"` Children []*Permission `json:"children,omitempty" gorm:"foreignKey:ParentID"` diff --git a/web/models/product.go b/web/models/product.go index c1d578c..274ea40 100644 --- a/web/models/product.go +++ b/web/models/product.go @@ -7,11 +7,11 @@ import ( // Product 产品表 type Product struct { core.Model - Code string `json:"code" gorm:"column:code"` // 产品代码 - Name string `json:"name" gorm:"column:name"` // 产品名称 - Description *string `json:"description" gorm:"column:description"` // 产品描述 - Sort int32 `json:"sort" gorm:"column:sort"` // 排序 - Status ProductStatus `json:"status" gorm:"column:status"` // 产品状态:0-禁用,1-正常 + Code string `json:"code" gorm:"column:code"` // 产品代码 + Name string `json:"name" gorm:"column:name"` // 产品名称 + Description *string `json:"description,omitempty" gorm:"column:description"` // 产品描述 + Sort int32 `json:"sort" gorm:"column:sort"` // 排序 + Status ProductStatus `json:"status" gorm:"column:status"` // 产品状态:0-禁用,1-正常 } // ProductStatus 产品状态枚举 diff --git a/web/models/proxy.go b/web/models/proxy.go index 83da91f..c55eebd 100644 --- a/web/models/proxy.go +++ b/web/models/proxy.go @@ -10,14 +10,14 @@ import ( // Proxy 代理服务表 type Proxy struct { core.Model - Version int32 `json:"version" gorm:"column:version"` // 代理服务版本 - Mac string `json:"mac" gorm:"column:mac"` // 代理服务名称 - IP orm.Inet `json:"ip" gorm:"column:ip;not null"` // 代理服务地址 - Host *string `json:"host" gorm:"column:host"` // 代理服务域名 - Secret *string `json:"secret" gorm:"column:secret"` // 代理服务密钥 - Type ProxyType `json:"type" gorm:"column:type"` // 代理服务类型:1-自有,2-白银 - Status ProxyStatus `json:"status" gorm:"column:status"` // 代理服务状态:0-离线,1-在线 - Meta *datatypes.JSONType[any] `json:"meta" gorm:"column:meta"` // 代理服务元信息 + Version int32 `json:"version" gorm:"column:version"` // 代理服务版本 + Mac string `json:"mac" gorm:"column:mac"` // 代理服务名称 + IP orm.Inet `json:"ip" gorm:"column:ip;not null"` // 代理服务地址 + Host *string `json:"host,omitempty" gorm:"column:host"` // 代理服务域名 + Secret *string `json:"secret,omitempty" gorm:"column:secret"` // 代理服务密钥 + Type ProxyType `json:"type" gorm:"column:type"` // 代理服务类型:1-自有,2-白银 + Status ProxyStatus `json:"status" gorm:"column:status"` // 代理服务状态:0-离线,1-在线 + Meta *datatypes.JSONType[any] `json:"meta,omitempty" gorm:"column:meta"` // 代理服务元信息 Channels []Channel `json:"channels,omitempty" gorm:"foreignkey:ProxyID"` } diff --git a/web/models/refund.go b/web/models/refund.go index 91bb83e..621232a 100644 --- a/web/models/refund.go +++ b/web/models/refund.go @@ -9,11 +9,11 @@ import ( // Refund 退款记录表 type Refund struct { core.Model - TradeID int32 `json:"trade_id" gorm:"column:trade_id"` // 订单ID - ProductID *int32 `json:"product_id" gorm:"column:product_id"` // 产品ID - Amount decimal.Decimal `json:"amount" gorm:"column:amount"` // 退款金额 - Reason *string `json:"reason" gorm:"column:reason"` // 退款原因 - Status RefundStatus `json:"status" gorm:"column:status"` // 退款状态:0-待处理,1-已退款,2-已拒绝 + TradeID int32 `json:"trade_id" gorm:"column:trade_id"` // 订单ID + ProductID *int32 `json:"product_id,omitempty" gorm:"column:product_id"` // 产品ID + Amount decimal.Decimal `json:"amount" gorm:"column:amount"` // 退款金额 + Reason *string `json:"reason,omitempty" gorm:"column:reason"` // 退款原因 + Status RefundStatus `json:"status" gorm:"column:status"` // 退款状态:0-待处理,1-已退款,2-已拒绝 } // RefundStatus 退款状态枚举 diff --git a/web/models/resource.go b/web/models/resource.go index cb4f7b4..4e76e0f 100644 --- a/web/models/resource.go +++ b/web/models/resource.go @@ -7,10 +7,10 @@ import ( // Resource 套餐表 type Resource struct { core.Model - UserID int32 `json:"user_id" gorm:"column:user_id"` // 用户ID - ResourceNo *string `json:"resource_no" gorm:"column:resource_no"` // 套餐编号 - Active bool `json:"active" gorm:"column:active"` // 套餐状态 - Type ResourceType `json:"type" gorm:"column:type"` // 套餐类型:1-短效动态,2-长效动态 + UserID int32 `json:"user_id" gorm:"column:user_id"` // 用户ID + ResourceNo *string `json:"resource_no,omitempty" gorm:"column:resource_no"` // 套餐编号 + Active bool `json:"active" gorm:"column:active"` // 套餐状态 + Type ResourceType `json:"type" gorm:"column:type"` // 套餐类型:1-短效动态,2-长效动态 User *User `json:"user,omitempty" gorm:"foreignKey:UserID"` Short *ResourceShort `json:"short,omitempty" gorm:"foreignKey:ResourceID"` diff --git a/web/models/resource_long.go b/web/models/resource_long.go index dde4be0..6cd712c 100644 --- a/web/models/resource_long.go +++ b/web/models/resource_long.go @@ -6,13 +6,13 @@ import ( // ResourceLong 长效动态套餐表 type ResourceLong struct { - ID int32 `json:"id" gorm:"column:id"` // ID - ResourceID int32 `json:"resource_id" gorm:"column:resource_id"` // 套餐ID - Live int32 `json:"live" gorm:"column:live"` // 可用时长(小时) - Type ResourceMode `json:"type" gorm:"column:type"` // 套餐类型:1-包时,2-包量 - Quota int32 `json:"quota" gorm:"column:quota"` // 每日配额(包时)或总配额(包量) - ExpireAt *time.Time `json:"expire_at" gorm:"column:expire_at"` // 套餐过期时间,包时模式可用 - Used int32 `json:"used" gorm:"column:used"` // 总用量 - Daily int32 `json:"daily" gorm:"column:daily"` // 当日用量 - LastAt *time.Time `json:"last_at" gorm:"column:last_at"` // 最后使用时间 + ID int32 `json:"id" gorm:"column:id"` // ID + ResourceID int32 `json:"resource_id" gorm:"column:resource_id"` // 套餐ID + Live int32 `json:"live" gorm:"column:live"` // 可用时长(小时) + Type ResourceMode `json:"type" gorm:"column:type"` // 套餐类型:1-包时,2-包量 + Quota int32 `json:"quota" gorm:"column:quota"` // 每日配额(包时)或总配额(包量) + ExpireAt *time.Time `json:"expire_at,omitempty" gorm:"column:expire_at"` // 套餐过期时间,包时模式可用 + Used int32 `json:"used" gorm:"column:used"` // 总用量 + Daily int32 `json:"daily" gorm:"column:daily"` // 当日用量 + LastAt *time.Time `json:"last_at,omitempty" gorm:"column:last_at"` // 最后使用时间 } diff --git a/web/models/resource_short.go b/web/models/resource_short.go index 404a30a..e249de5 100644 --- a/web/models/resource_short.go +++ b/web/models/resource_short.go @@ -6,13 +6,13 @@ import ( // ResourceShort 短效动态套餐表 type ResourceShort struct { - ID int32 `json:"id" gorm:"column:id"` // ID - ResourceID int32 `json:"resource_id" gorm:"column:resource_id"` // 套餐ID - Live int32 `json:"live" gorm:"column:live"` // 可用时长(秒) - Type ResourceMode `json:"type" gorm:"column:type"` // 套餐类型:1-包时,2-包量 - Quota int32 `json:"quota" gorm:"column:quota"` // 每日配额(包时)或总配额(包量) - ExpireAt *time.Time `json:"expire_at" gorm:"column:expire_at"` // 套餐过期时间,包时模式可用 - Used int32 `json:"used" gorm:"column:used"` // 总用量 - Daily int32 `json:"daily" gorm:"column:daily"` // 当日用量 - LastAt *time.Time `json:"last_at" gorm:"column:last_at"` // 最后使用时间 + ID int32 `json:"id" gorm:"column:id"` // ID + ResourceID int32 `json:"resource_id" gorm:"column:resource_id"` // 套餐ID + Live int32 `json:"live" gorm:"column:live"` // 可用时长(秒) + Type ResourceMode `json:"type" gorm:"column:type"` // 套餐类型:1-包时,2-包量 + Quota int32 `json:"quota" gorm:"column:quota"` // 每日配额(包时)或总配额(包量) + ExpireAt *time.Time `json:"expire_at,omitempty" gorm:"column:expire_at"` // 套餐过期时间,包时模式可用 + Used int32 `json:"used" gorm:"column:used"` // 总用量 + Daily int32 `json:"daily" gorm:"column:daily"` // 当日用量 + LastAt *time.Time `json:"last_at,omitempty" gorm:"column:last_at"` // 最后使用时间 } diff --git a/web/models/session.go b/web/models/session.go index 2529d68..11664bb 100644 --- a/web/models/session.go +++ b/web/models/session.go @@ -9,16 +9,16 @@ import ( // Session 会话表 type Session struct { core.Model - UserID *int32 `json:"user_id" gorm:"column:user_id"` // 用户ID - AdminID *int32 `json:"admin_id" gorm:"column:admin_id"` // 管理员ID - ClientID *int32 `json:"client_id" gorm:"column:client_id"` // 客户端ID - IP *orm.Inet `json:"ip" gorm:"column:ip"` // IP地址 - UA *string `json:"ua" gorm:"column:ua"` // 用户代理 - AccessToken string `json:"access_token" gorm:"column:access_token"` // 访问令牌 - AccessTokenExpires time.Time `json:"access_token_expires" gorm:"column:access_token_expires"` // 访问令牌过期时间 - RefreshToken *string `json:"refresh_token" gorm:"column:refresh_token"` // 刷新令牌 - RefreshTokenExpires *time.Time `json:"refresh_token_expires" gorm:"column:refresh_token_expires"` // 刷新令牌过期时间 - Scopes *string `json:"scopes" gorm:"column:scopes"` // 权限范围 + UserID *int32 `json:"user_id,omitempty" gorm:"column:user_id"` // 用户ID + AdminID *int32 `json:"admin_id,omitempty" gorm:"column:admin_id"` // 管理员ID + ClientID *int32 `json:"client_id,omitempty" gorm:"column:client_id"` // 客户端ID + IP *orm.Inet `json:"ip,omitempty" gorm:"column:ip"` // IP地址 + UA *string `json:"ua,omitempty" gorm:"column:ua"` // 用户代理 + AccessToken string `json:"access_token" gorm:"column:access_token"` // 访问令牌 + AccessTokenExpires time.Time `json:"access_token_expires" gorm:"column:access_token_expires"` // 访问令牌过期时间 + RefreshToken *string `json:"refresh_token,omitempty" gorm:"column:refresh_token"` // 刷新令牌 + RefreshTokenExpires *time.Time `json:"refresh_token_expires,omitempty" gorm:"column:refresh_token_expires"` // 刷新令牌过期时间 + Scopes *string `json:"scopes,omitempty" gorm:"column:scopes"` // 权限范围 User *User `json:"user,omitempty" gorm:"foreignKey:UserID"` Admin *Admin `json:"admin,omitempty" gorm:"foreignKey:AdminID"` diff --git a/web/models/trade.go b/web/models/trade.go index 2d543eb..7892177 100644 --- a/web/models/trade.go +++ b/web/models/trade.go @@ -10,22 +10,22 @@ import ( // Trade 订单表 type Trade struct { core.Model - UserID int32 `json:"user_id" gorm:"column:user_id"` // 用户ID - InnerNo string `json:"inner_no" gorm:"column:inner_no"` // 内部订单号 - OuterNo *string `json:"outer_no" gorm:"column:outer_no"` // 外部订单号 - Type TradeType `json:"type" gorm:"column:type"` // 订单类型:1-购买产品,2-充值余额 - Subject string `json:"subject" gorm:"column:subject"` // 订单主题 - Remark *string `json:"remark" gorm:"column:remark"` // 订单备注 - Amount decimal.Decimal `json:"amount" gorm:"column:amount"` // 订单总金额 - Payment decimal.Decimal `json:"payment" gorm:"column:payment"` // 实际支付金额 - Method TradeMethod `json:"method" gorm:"column:method"` // 支付方式:1-支付宝,2-微信,3-商福通,4-商福通渠道支付宝,5-商福通渠道微信 - Platform TradePlatform `json:"platform" gorm:"column:platform"` // 支付平台:1-电脑网站,2-手机网站 - Acquirer *TradeAcquirer `json:"acquirer" gorm:"column:acquirer"` // 收单机构:1-支付宝,2-微信,3-银联 - Status TradeStatus `json:"status" gorm:"column:status"` // 订单状态:0-待支付,1-已支付,2-已取消 - Refunded bool `json:"refunded" gorm:"column:refunded"` // 是否已退款 - PaymentURL *string `json:"payment_url" gorm:"column:payment_url"` // 支付链接 - CompletedAt *time.Time `json:"completed_at" gorm:"column:completed_at"` // 支付时间 - CanceledAt *time.Time `json:"canceled_at" gorm:"column:canceled_at"` // 取消时间 + UserID int32 `json:"user_id" gorm:"column:user_id"` // 用户ID + InnerNo string `json:"inner_no" gorm:"column:inner_no"` // 内部订单号 + OuterNo *string `json:"outer_no,omitempty" gorm:"column:outer_no"` // 外部订单号 + Type TradeType `json:"type" gorm:"column:type"` // 订单类型:1-购买产品,2-充值余额 + Subject string `json:"subject" gorm:"column:subject"` // 订单主题 + Remark *string `json:"remark,omitempty" gorm:"column:remark"` // 订单备注 + Amount decimal.Decimal `json:"amount" gorm:"column:amount"` // 订单总金额 + Payment decimal.Decimal `json:"payment" gorm:"column:payment"` // 实际支付金额 + Method TradeMethod `json:"method" gorm:"column:method"` // 支付方式:1-支付宝,2-微信,3-商福通,4-商福通渠道支付宝,5-商福通渠道微信 + Platform TradePlatform `json:"platform" gorm:"column:platform"` // 支付平台:1-电脑网站,2-手机网站 + Acquirer *TradeAcquirer `json:"acquirer,omitempty" gorm:"column:acquirer"` // 收单机构:1-支付宝,2-微信,3-银联 + Status TradeStatus `json:"status" gorm:"column:status"` // 订单状态:0-待支付,1-已支付,2-已取消 + Refunded bool `json:"refunded" gorm:"column:refunded"` // 是否已退款 + PaymentURL *string `json:"payment_url,omitempty" gorm:"column:payment_url"` // 支付链接 + CompletedAt *time.Time `json:"completed_at,omitempty" gorm:"column:completed_at"` // 支付时间 + CanceledAt *time.Time `json:"canceled_at,omitempty" gorm:"column:canceled_at"` // 取消时间 } // TradeType 订单类型枚举 diff --git a/web/models/user.go b/web/models/user.go index 1e4768c..24be5a5 100644 --- a/web/models/user.go +++ b/web/models/user.go @@ -11,23 +11,23 @@ import ( // User 用户表 type User struct { core.Model - AdminID *int32 `json:"admin_id" gorm:"column:admin_id"` // 管理员ID - Phone string `json:"phone" gorm:"column:phone"` // 手机号码 - Username *string `json:"username" gorm:"column:username"` // 用户名 - Email *string `json:"email" gorm:"column:email"` // 邮箱 - Password *string `json:"password" gorm:"column:password"` // 用户密码 - Name *string `json:"name" gorm:"column:name"` // 真实姓名 - Avatar *string `json:"avatar" gorm:"column:avatar"` // 头像URL - Status UserStatus `json:"status" gorm:"column:status"` // 用户状态:0-禁用,1-正常 - Balance decimal.Decimal `json:"balance" gorm:"column:balance"` // 账户余额 - IDType UserIDType `json:"id_type" gorm:"column:id_type"` // 认证类型:0-未认证,1-个人认证,2-企业认证 - IDNo *string `json:"id_no" gorm:"column:id_no"` // 身份证号或营业执照号 - IDToken *string `json:"id_token" gorm:"column:id_token"` // 身份验证标识 - ContactQQ *string `json:"contact_qq" gorm:"column:contact_qq"` // QQ联系方式 - ContactWechat *string `json:"contact_wechat" gorm:"column:contact_wechat"` // 微信联系方式 - LastLogin *time.Time `json:"last_login" gorm:"column:last_login"` // 最后登录时间 - LastLoginIP *orm.Inet `json:"last_login_ip" gorm:"column:last_login_ip"` // 最后登录地址 - LastLoginUA *string `json:"last_login_ua" gorm:"column:last_login_ua"` // 最后登录代理 + AdminID *int32 `json:"admin_id,omitempty" gorm:"column:admin_id"` // 管理员ID + Phone string `json:"phone" gorm:"column:phone"` // 手机号码 + Username *string `json:"username,omitempty" gorm:"column:username"` // 用户名 + Email *string `json:"email,omitempty" gorm:"column:email"` // 邮箱 + Password *string `json:"password,omitempty" gorm:"column:password"` // 用户密码 + Name *string `json:"name,omitempty" gorm:"column:name"` // 真实姓名 + Avatar *string `json:"avatar,omitempty" gorm:"column:avatar"` // 头像URL + Status UserStatus `json:"status" gorm:"column:status"` // 用户状态:0-禁用,1-正常 + Balance decimal.Decimal `json:"balance" gorm:"column:balance"` // 账户余额 + IDType UserIDType `json:"id_type" gorm:"column:id_type"` // 认证类型:0-未认证,1-个人认证,2-企业认证 + IDNo *string `json:"id_no,omitempty" gorm:"column:id_no"` // 身份证号或营业执照号 + IDToken *string `json:"id_token,omitempty" gorm:"column:id_token"` // 身份验证标识 + ContactQQ *string `json:"contact_qq,omitempty" gorm:"column:contact_qq"` // QQ联系方式 + ContactWechat *string `json:"contact_wechat,omitempty" gorm:"column:contact_wechat"` // 微信联系方式 + LastLogin *time.Time `json:"last_login,omitempty" gorm:"column:last_login"` // 最后登录时间 + LastLoginIP *orm.Inet `json:"last_login_ip,omitempty" gorm:"column:last_login_ip"` // 最后登录地址 + LastLoginUA *string `json:"last_login_ua,omitempty" gorm:"column:last_login_ua"` // 最后登录代理 Admin *Admin `json:"admin,omitempty" gorm:"foreignKey:AdminID"` } diff --git a/web/models/user_role.go b/web/models/user_role.go index 6f90e19..034ab0f 100644 --- a/web/models/user_role.go +++ b/web/models/user_role.go @@ -7,8 +7,8 @@ import ( // UserRole 用户角色表 type UserRole struct { core.Model - Name string `json:"name" gorm:"column:name"` // 角色名称 - Description *string `json:"description" gorm:"column:description"` // 角色描述 - Active bool `json:"active" gorm:"column:active"` // 是否激活 - Sort int32 `json:"sort" gorm:"column:sort"` // 排序 + Name string `json:"name" gorm:"column:name"` // 角色名称 + Description *string `json:"description,omitempty" gorm:"column:description"` // 角色描述 + Active bool `json:"active" gorm:"column:active"` // 是否激活 + Sort int32 `json:"sort" gorm:"column:sort"` // 排序 } diff --git a/web/models/whitelist.go b/web/models/whitelist.go index a61ce9b..ef3b177 100644 --- a/web/models/whitelist.go +++ b/web/models/whitelist.go @@ -8,7 +8,7 @@ import ( // Whitelist 白名单表 type Whitelist struct { core.Model - UserID int32 `json:"user_id" gorm:"column:user_id"` // 用户ID - IP orm.Inet `json:"ip" gorm:"column:ip;not null"` // IP地址 - Remark *string `json:"remark" gorm:"column:remark"` // 备注 + UserID int32 `json:"user_id" gorm:"column:user_id"` // 用户ID + IP orm.Inet `json:"ip" gorm:"column:ip;not null"` // IP地址 + Remark *string `json:"remark,omitempty" gorm:"column:remark"` // 备注 }