diff --git a/cmd/fill/main.go b/cmd/fill/main.go index 26cf268..4a0261d 100644 --- a/cmd/fill/main.go +++ b/cmd/fill/main.go @@ -9,6 +9,7 @@ import ( "log/slog" "platform/pkg/env" "platform/pkg/logs" + "platform/pkg/u" client2 "platform/web/domains/client" proxy2 "platform/web/domains/proxy" m "platform/web/models" @@ -48,13 +49,13 @@ func main() { Name: "7a17e8b4-cdc3-4500-bf16-4a665991a7f6", Host: "110.40.82.248", Type: int32(proxy2.TypeSelfHosted), - Secret: "api:123456", + Secret: u.P("api:123456"), }, &m.Proxy{ Version: 1, Name: "58e03f38-4cef-429c-8bb8-530142d0a745", Host: "123.6.147.241", Type: int32(proxy2.TypeThirdParty), - Secret: "api:123456", + Secret: u.P("api:123456"), }) if err != nil { return err diff --git a/cmd/gen/main.go b/cmd/gen/main.go index 928d3e5..c72e10c 100644 --- a/cmd/gen/main.go +++ b/cmd/gen/main.go @@ -26,6 +26,8 @@ func main() { g = gen.NewGenerator(gen.Config{ OutPath: "web/queries", ModelPkgPath: "models", + FieldNullable: true, + FieldSignable: true, FieldWithTypeTag: true, Mode: gen.WithDefaultQuery | gen.WithoutContext, }) @@ -34,10 +36,12 @@ func main() { // 公共参数 common := []gen.ModelOpt{ gen.FieldModify(func(field gen.Field) gen.Field { - if field.Type == "time.Time" { + switch { + case field.Type == "*time.Time": + field.Type = "*orm.LocalDateTime" + case field.Type == "time.Time": field.Type = "orm.LocalDateTime" - } - if strings.Contains(field.Tags(), "numeric") { + case strings.Contains(field.Tags(), "numeric"): field.Type = "decimal.Decimal" } return field diff --git a/pkg/u/u.go b/pkg/u/u.go index cf7574e..30378a6 100644 --- a/pkg/u/u.go +++ b/pkg/u/u.go @@ -11,3 +11,11 @@ func Today() time.Time { var now = time.Now() return time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()) } + +func Z[T any](v *T) T { + if v == nil { + var zero T + return zero + } + return *v +} diff --git a/scripts/sql/init.sql b/scripts/sql/init.sql index 56a43ad..fc4eb35 100644 --- a/scripts/sql/init.sql +++ b/scripts/sql/init.sql @@ -605,15 +605,15 @@ create table channel ( user_id int not null references "user" (id) on update cascade on delete cascade, - proxy_id int not null references proxy (id) -- - on update cascade -- + proxy_id int not null references proxy (id) -- + on update cascade -- on delete set null, - edge_id int references edge (id) -- - on update cascade -- - on delete set null, - resource_id int references resource (id) -- - on update cascade -- + edge_id int references edge (id) -- + on update cascade -- on delete set null, + resource_id int not null references resource (id) -- + on update cascade -- + on delete set null, proxy_host varchar(255) not null default '', proxy_port int not null, edge_host varchar(255), @@ -729,8 +729,8 @@ create table resource_short ( resource_id int not null references resource (id) on update cascade on delete cascade, - type int, - live int, + type int not null, + live int not null, expire timestamp, quota int, used int not null default 0, @@ -760,8 +760,8 @@ create table resource_long ( resource_id int not null references resource (id) on update cascade on delete cascade, - type int, - live int, + type int not null, + live int not null, expire timestamp, quota int, used int not null default 0, diff --git a/web/auth/context.go b/web/auth/context.go index 7907ac4..3f8f7a3 100644 --- a/web/auth/context.go +++ b/web/auth/context.go @@ -41,7 +41,7 @@ type Payload struct { Id int32 `json:"id,omitempty"` Type PayloadType `json:"type,omitempty"` Name string `json:"name,omitempty"` - Avatar string `json:"avatar,omitempty"` + Avatar *string `json:"avatar,omitempty"` } type PayloadType int diff --git a/web/handlers/auth.go b/web/handlers/auth.go index c61744b..f7298e6 100644 --- a/web/handlers/auth.go +++ b/web/handlers/auth.go @@ -4,6 +4,7 @@ import ( "encoding/base64" "errors" "log/slog" + "platform/pkg/u" auth2 "platform/web/auth" client2 "platform/web/domains/client" m "platform/web/models" @@ -328,8 +329,8 @@ func Introspect(c *fiber.Ctx) error { if profile.Phone != "" { profile.Phone = maskPhone(profile.Phone) } - if profile.IDNo != "" { - profile.IDNo = maskIdNo(profile.IDNo) + if profile.IDNo != nil && *profile.IDNo != "" { + profile.IDNo = u.P(maskIdNo(*profile.IDNo)) } return c.JSON(IntrospectResp{*profile}) } diff --git a/web/handlers/channel.go b/web/handlers/channel.go index 2407d62..b193e5e 100644 --- a/web/handlers/channel.go +++ b/web/handlers/channel.go @@ -122,7 +122,7 @@ func CreateChannel(c *fiber.Ctx) error { if err != nil { return err } - if user.IDToken == "" { + if user.IDToken == nil || *user.IDToken == "" { return fiber.NewError(fiber.StatusForbidden, "账号未实名") } @@ -178,8 +178,8 @@ func CreateChannel(c *fiber.Ctx) error { Port: channel.ProxyPort, } if req.AuthType == s.ChannelAuthTypePass { - resp[i].Username = &channel.Username - resp[i].Password = &channel.Password + resp[i].Username = channel.Username + resp[i].Password = channel.Password } } return c.JSON(resp) diff --git a/web/handlers/edge.go b/web/handlers/edge.go index eec336e..a9fe26c 100644 --- a/web/handlers/edge.go +++ b/web/handlers/edge.go @@ -1,6 +1,7 @@ package handlers import ( + "platform/pkg/u" "platform/web/auth" edge2 "platform/web/domains/edge" proxy2 "platform/web/domains/proxy" @@ -57,7 +58,7 @@ func OnlineEdge(c *fiber.Ctx) (err error) { Isp: int32(req.ISP), Prov: req.Prov, City: req.City, - ProxyID: fwd.ID, + ProxyID: &fwd.ID, Type: int32(edge2.TypeSelfHosted), Status: 1, } @@ -138,7 +139,7 @@ func AllEdgesAvailable(c *fiber.Ctx) (err error) { for i, info := range infos { edges[i] = AllEdgesAvailableRespItem{ Ip: info.Host, - Port: info.ProxyPort, + Port: u.Z(info.ProxyPort), Isp: edge2.ISPToStr(edge2.ISP(info.Isp)), Prov: info.Prov, City: info.City, diff --git a/web/handlers/iden.go b/web/handlers/iden.go index ee21909..4b1b243 100644 --- a/web/handlers/iden.go +++ b/web/handlers/iden.go @@ -47,7 +47,7 @@ func Identify(c *fiber.Ctx) error { if err != nil { return err } - if user.IDToken != "" { + if user.IDToken != nil && *user.IDToken != "" { // 用户已实名认证 return c.JSON(IdentifyRes{ Identified: true, @@ -170,9 +170,9 @@ func IdentifyCallback(c *fiber.Ctx) error { ). Updates(m.User{ IDType: info.Type, - IDNo: info.IdNo, - IDToken: info.Token, - Name: info.Name, + IDNo: &info.IdNo, + IDToken: &info.Token, + Name: &info.Name, }) if err != nil { return err diff --git a/web/handlers/proxy.go b/web/handlers/proxy.go index b6a3210..844ad48 100644 --- a/web/handlers/proxy.go +++ b/web/handlers/proxy.go @@ -7,6 +7,7 @@ import ( "log/slog" "platform/pkg/u" auth2 "platform/web/auth" + "platform/web/core" proxy2 "platform/web/domains/proxy" g "platform/web/globals" "platform/web/globals/orm" @@ -65,7 +66,7 @@ func OnlineProxy(c *fiber.Ctx) (err error) { Version: int32(req.Version), Type: int32(proxy2.TypeSelfHosted), Host: ip.String(), - Secret: secret, + Secret: &secret, Status: 1, } err = q.Proxy. @@ -90,12 +91,15 @@ func OnlineProxy(c *fiber.Ctx) (err error) { var permits []ProxyPermit for _, channel := range channels { + if channel.EdgeID == nil { + return core.NewBizErr("通道未分配边缘节点") + } permit := ProxyPermit{ - Id: channel.EdgeID, + Id: *channel.EdgeID, Expire: time.Time(channel.Expiration), - Whitelists: u.P(strings.Split(channel.Whitelists, ",")), - Username: &channel.Username, - Password: &channel.Password, + Whitelists: u.P(strings.Split(u.Z(channel.Whitelists), ",")), + Username: channel.Username, + Password: channel.Password, } permits = append(permits, permit) } diff --git a/web/handlers/user.go b/web/handlers/user.go index d8dbf58..6ae55a1 100644 --- a/web/handlers/user.go +++ b/web/handlers/user.go @@ -39,10 +39,10 @@ func UpdateUser(c *fiber.Ctx) error { _, err = q.User. Where(q.User.ID.Eq(authCtx.Payload.Id)). Updates(m.User{ - Username: req.Username, - Email: req.Email, - ContactQQ: req.ContactQQ, - ContactWechat: req.ContactWechat, + Username: &req.Username, + Email: &req.Email, + ContactQQ: &req.ContactQQ, + ContactWechat: &req.ContactWechat, }) if err != nil { return err @@ -78,8 +78,8 @@ func UpdateAccount(c *fiber.Ctx) error { _, err = q.User. Where(q.User.ID.Eq(authCtx.Payload.Id)). Updates(m.User{ - Username: req.Username, - Password: req.Password, + Username: &req.Username, + Password: &req.Password, }) if err != nil { return err diff --git a/web/handlers/whitelist.go b/web/handlers/whitelist.go index 9a602ce..f3ea4e9 100644 --- a/web/handlers/whitelist.go +++ b/web/handlers/whitelist.go @@ -98,7 +98,7 @@ func CreateWhitelist(c *fiber.Ctx) error { err = q.Whitelist.Create(&m.Whitelist{ UserID: authContext.Payload.Id, Host: req.Host, - Remark: req.Remark, + Remark: &req.Remark, }) return nil } @@ -134,7 +134,7 @@ func UpdateWhitelist(c *fiber.Ctx) error { Updates(&m.Whitelist{ ID: req.ID, Host: req.Host, - Remark: req.Remark, + Remark: &req.Remark, }) if err != nil { return err diff --git a/web/models/admin.gen.go b/web/models/admin.gen.go index 7fbc853..e5df0ae 100644 --- a/web/models/admin.gen.go +++ b/web/models/admin.gen.go @@ -14,20 +14,20 @@ const TableNameAdmin = "admin" // Admin mapped from table type Admin struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:管理员ID" json:"id"` // 管理员ID - Username string `gorm:"column:username;type:character varying(255);not null;comment:用户名" json:"username"` // 用户名 - Password string `gorm:"column:password;type:character varying(255);not null;comment:密码" json:"password"` // 密码 - Name string `gorm:"column:name;type:character varying(255);comment:真实姓名" json:"name"` // 真实姓名 - Avatar string `gorm:"column:avatar;type:character varying(255);comment:头像URL" json:"avatar"` // 头像URL - Phone string `gorm:"column:phone;type:character varying(255);comment:手机号码" json:"phone"` // 手机号码 - Email string `gorm:"column:email;type:character varying(255);comment:邮箱" json:"email"` // 邮箱 - Status int32 `gorm:"column:status;type:integer;not null;default:1;comment:状态:0-禁用,1-正常" json:"status"` // 状态:0-禁用,1-正常 - LastLogin orm.LocalDateTime `gorm:"column:last_login;type:timestamp without time zone;comment:最后登录时间" json:"last_login"` // 最后登录时间 - LastLoginHost string `gorm:"column:last_login_host;type:character varying(45);comment:最后登录地址" json:"last_login_host"` // 最后登录地址 - LastLoginAgent string `gorm:"column:last_login_agent;type:character varying(255);comment:最后登录代理" json:"last_login_agent"` // 最后登录代理 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:管理员ID" json:"id"` // 管理员ID + Username string `gorm:"column:username;type:character varying(255);not null;comment:用户名" json:"username"` // 用户名 + Password string `gorm:"column:password;type:character varying(255);not null;comment:密码" json:"password"` // 密码 + Name *string `gorm:"column:name;type:character varying(255);comment:真实姓名" json:"name"` // 真实姓名 + Avatar *string `gorm:"column:avatar;type:character varying(255);comment:头像URL" json:"avatar"` // 头像URL + Phone *string `gorm:"column:phone;type:character varying(255);comment:手机号码" json:"phone"` // 手机号码 + Email *string `gorm:"column:email;type:character varying(255);comment:邮箱" json:"email"` // 邮箱 + Status int32 `gorm:"column:status;type:integer;not null;default:1;comment:状态:0-禁用,1-正常" json:"status"` // 状态:0-禁用,1-正常 + LastLogin *orm.LocalDateTime `gorm:"column:last_login;type:timestamp without time zone;comment:最后登录时间" json:"last_login"` // 最后登录时间 + LastLoginHost *string `gorm:"column:last_login_host;type:character varying(45);comment:最后登录地址" json:"last_login_host"` // 最后登录地址 + LastLoginAgent *string `gorm:"column:last_login_agent;type:character varying(255);comment:最后登录代理" json:"last_login_agent"` // 最后登录代理 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Admin's table name diff --git a/web/models/admin_role.gen.go b/web/models/admin_role.gen.go index e20c680..f1c543a 100644 --- a/web/models/admin_role.gen.go +++ b/web/models/admin_role.gen.go @@ -14,14 +14,14 @@ const TableNameAdminRole = "admin_role" // AdminRole mapped from table type AdminRole struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:管理员角色ID" json:"id"` // 管理员角色ID - Name string `gorm:"column:name;type:character varying(255);not null;comment:角色名称" json:"name"` // 角色名称 - Description string `gorm:"column:description;type:character varying(255);comment:角色描述" json:"description"` // 角色描述 - Active bool `gorm:"column:active;type:boolean;default:true;comment:是否激活" json:"active"` // 是否激活 - Sort int32 `gorm:"column:sort;type:integer;comment:排序" json:"sort"` // 排序 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:管理员角色ID" json:"id"` // 管理员角色ID + Name string `gorm:"column:name;type:character varying(255);not null;comment:角色名称" json:"name"` // 角色名称 + Description *string `gorm:"column:description;type:character varying(255);comment:角色描述" json:"description"` // 角色描述 + Active *bool `gorm:"column:active;type:boolean;default:true;comment:是否激活" json:"active"` // 是否激活 + Sort *int32 `gorm:"column:sort;type:integer;comment:排序" json:"sort"` // 排序 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName AdminRole's table name diff --git a/web/models/admin_role_link.gen.go b/web/models/admin_role_link.gen.go index 33c0102..969a406 100644 --- a/web/models/admin_role_link.gen.go +++ b/web/models/admin_role_link.gen.go @@ -14,12 +14,12 @@ const TableNameAdminRoleLink = "admin_role_link" // AdminRoleLink mapped from table type AdminRoleLink struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:关联ID" json:"id"` // 关联ID - AdminID int32 `gorm:"column:admin_id;type:integer;not null;comment:管理员ID" json:"admin_id"` // 管理员ID - RoleID int32 `gorm:"column:role_id;type:integer;not null;comment:角色ID" json:"role_id"` // 角色ID - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:关联ID" json:"id"` // 关联ID + AdminID int32 `gorm:"column:admin_id;type:integer;not null;comment:管理员ID" json:"admin_id"` // 管理员ID + RoleID int32 `gorm:"column:role_id;type:integer;not null;comment:角色ID" json:"role_id"` // 角色ID + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName AdminRoleLink's table name diff --git a/web/models/admin_role_permission_link.gen.go b/web/models/admin_role_permission_link.gen.go index 9e5f0bf..b613a05 100644 --- a/web/models/admin_role_permission_link.gen.go +++ b/web/models/admin_role_permission_link.gen.go @@ -14,12 +14,12 @@ const TableNameAdminRolePermissionLink = "admin_role_permission_link" // AdminRolePermissionLink mapped from table type AdminRolePermissionLink struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:关联ID" json:"id"` // 关联ID - RoleID int32 `gorm:"column:role_id;type:integer;not null;comment:角色ID" json:"role_id"` // 角色ID - PermissionID int32 `gorm:"column:permission_id;type:integer;not null;comment:权限ID" json:"permission_id"` // 权限ID - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:关联ID" json:"id"` // 关联ID + RoleID int32 `gorm:"column:role_id;type:integer;not null;comment:角色ID" json:"role_id"` // 角色ID + PermissionID int32 `gorm:"column:permission_id;type:integer;not null;comment:权限ID" json:"permission_id"` // 权限ID + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName AdminRolePermissionLink's table name diff --git a/web/models/announcement.gen.go b/web/models/announcement.gen.go index 9946cb5..55d3fbf 100644 --- a/web/models/announcement.gen.go +++ b/web/models/announcement.gen.go @@ -14,16 +14,16 @@ const TableNameAnnouncement = "announcement" // Announcement mapped from table type Announcement struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:公告ID" json:"id"` // 公告ID - Title string `gorm:"column:title;type:character varying(255);not null;comment:公告标题" json:"title"` // 公告标题 - Content string `gorm:"column:content;type:text;comment:公告内容" json:"content"` // 公告内容 - Type int32 `gorm:"column:type;type:integer;not null;default:1;comment:公告类型:1-普通公告" json:"type"` // 公告类型:1-普通公告 - Pin bool `gorm:"column:pin;type:boolean;not null;comment:是否置顶" json:"pin"` // 是否置顶 - Status int32 `gorm:"column:status;type:integer;not null;default:1;comment:公告状态:0-禁用,1-正常" json:"status"` // 公告状态:0-禁用,1-正常 - Sort int32 `gorm:"column:sort;type:integer;not null;comment:公告排序" json:"sort"` // 公告排序 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:公告ID" json:"id"` // 公告ID + Title string `gorm:"column:title;type:character varying(255);not null;comment:公告标题" json:"title"` // 公告标题 + Content *string `gorm:"column:content;type:text;comment:公告内容" json:"content"` // 公告内容 + Type int32 `gorm:"column:type;type:integer;not null;default:1;comment:公告类型:1-普通公告" json:"type"` // 公告类型:1-普通公告 + Pin bool `gorm:"column:pin;type:boolean;not null;comment:是否置顶" json:"pin"` // 是否置顶 + Status int32 `gorm:"column:status;type:integer;not null;default:1;comment:公告状态:0-禁用,1-正常" json:"status"` // 公告状态:0-禁用,1-正常 + Sort int32 `gorm:"column:sort;type:integer;not null;comment:公告排序" json:"sort"` // 公告排序 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Announcement's table name diff --git a/web/models/bill.gen.go b/web/models/bill.gen.go index 3e531f2..7ddec98 100644 --- a/web/models/bill.gen.go +++ b/web/models/bill.gen.go @@ -15,21 +15,21 @@ const TableNameBill = "bill" // Bill mapped from table type Bill struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:账单ID" json:"id"` // 账单ID - UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID - TradeID int32 `gorm:"column:trade_id;type:integer;comment:订单ID" json:"trade_id"` // 订单ID - ResourceID int32 `gorm:"column:resource_id;type:integer;comment:套餐ID" json:"resource_id"` // 套餐ID - RefundID int32 `gorm:"column:refund_id;type:integer;comment:退款ID" json:"refund_id"` // 退款ID - BillNo string `gorm:"column:bill_no;type:character varying(255);not null;comment:易读账单号" json:"bill_no"` // 易读账单号 - Info string `gorm:"column:info;type:character varying(255);comment:产品可读信息" json:"info"` // 产品可读信息 - Type int32 `gorm:"column:type;type:integer;not null;comment:账单类型:1-消费,2-退款,3-充值" json:"type"` // 账单类型:1-消费,2-退款,3-充值 - Amount decimal.Decimal `gorm:"column:amount;type:numeric(12,2);not null;comment:账单金额" json:"amount"` // 账单金额 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 - Trade *Trade `gorm:"foreignKey:TradeID" json:"trade"` - Refund *Refund `gorm:"foreignKey:RefundID" json:"refund"` - Resource *Resource `gorm:"foreignKey:ResourceID" json:"resource"` + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:账单ID" json:"id"` // 账单ID + UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID + TradeID *int32 `gorm:"column:trade_id;type:integer;comment:订单ID" json:"trade_id"` // 订单ID + ResourceID *int32 `gorm:"column:resource_id;type:integer;comment:套餐ID" json:"resource_id"` // 套餐ID + RefundID *int32 `gorm:"column:refund_id;type:integer;comment:退款ID" json:"refund_id"` // 退款ID + BillNo string `gorm:"column:bill_no;type:character varying(255);not null;comment:易读账单号" json:"bill_no"` // 易读账单号 + Info *string `gorm:"column:info;type:character varying(255);comment:产品可读信息" json:"info"` // 产品可读信息 + Type int32 `gorm:"column:type;type:integer;not null;comment:账单类型:1-消费,2-退款,3-充值" json:"type"` // 账单类型:1-消费,2-退款,3-充值 + Amount decimal.Decimal `gorm:"column:amount;type:numeric(12,2);not null;comment:账单金额" json:"amount"` // 账单金额 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + Trade *Trade `gorm:"foreignKey:TradeID" json:"trade"` + Refund *Refund `gorm:"foreignKey:RefundID" json:"refund"` + Resource *Resource `gorm:"foreignKey:ResourceID" json:"resource"` } // TableName Bill's table name diff --git a/web/models/channel.gen.go b/web/models/channel.gen.go index c0c81bf..8c66ac9 100644 --- a/web/models/channel.gen.go +++ b/web/models/channel.gen.go @@ -14,24 +14,24 @@ const TableNameChannel = "channel" // Channel mapped from table type Channel struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:通道ID" json:"id"` // 通道ID - UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID - ProxyID int32 `gorm:"column:proxy_id;type:integer;not null;comment:代理ID" json:"proxy_id"` // 代理ID - ProxyHost string `gorm:"column:proxy_host;type:character varying(255);not null;comment:代理地址" json:"proxy_host"` // 代理地址 - ProxyPort int32 `gorm:"column:proxy_port;type:integer;not null;comment:转发端口" json:"proxy_port"` // 转发端口 - Protocol int32 `gorm:"column:protocol;type:integer;comment:协议类型:1-http,2-https,3-socks5" json:"protocol"` // 协议类型:1-http,2-https,3-socks5 - AuthIP bool `gorm:"column:auth_ip;type:boolean;not null;comment:IP认证" json:"auth_ip"` // IP认证 - AuthPass bool `gorm:"column:auth_pass;type:boolean;not null;comment:密码认证" json:"auth_pass"` // 密码认证 - Username string `gorm:"column:username;type:character varying(255);comment:用户名" json:"username"` // 用户名 - Password string `gorm:"column:password;type:character varying(255);comment:密码" json:"password"` // 密码 - Expiration orm.LocalDateTime `gorm:"column:expiration;type:timestamp without time zone;not null;comment:过期时间" json:"expiration"` // 过期时间 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 - EdgeHost string `gorm:"column:edge_host;type:character varying(255);comment:节点地址" json:"edge_host"` // 节点地址 - EdgeID int32 `gorm:"column:edge_id;type:integer;comment:节点ID" json:"edge_id"` // 节点ID - Whitelists string `gorm:"column:whitelists;type:text;comment:IP白名单,逗号分隔" json:"whitelists"` // IP白名单,逗号分隔 - ResourceID int32 `gorm:"column:resource_id;type:integer;comment:套餐ID" json:"resource_id"` // 套餐ID + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:通道ID" json:"id"` // 通道ID + UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID + ProxyID int32 `gorm:"column:proxy_id;type:integer;not null;comment:代理ID" json:"proxy_id"` // 代理ID + ProxyHost string `gorm:"column:proxy_host;type:character varying(255);not null;comment:代理地址" json:"proxy_host"` // 代理地址 + ProxyPort int32 `gorm:"column:proxy_port;type:integer;not null;comment:转发端口" json:"proxy_port"` // 转发端口 + Protocol *int32 `gorm:"column:protocol;type:integer;comment:协议类型:1-http,2-https,3-socks5" json:"protocol"` // 协议类型:1-http,2-https,3-socks5 + AuthIP bool `gorm:"column:auth_ip;type:boolean;not null;comment:IP认证" json:"auth_ip"` // IP认证 + AuthPass bool `gorm:"column:auth_pass;type:boolean;not null;comment:密码认证" json:"auth_pass"` // 密码认证 + Username *string `gorm:"column:username;type:character varying(255);comment:用户名" json:"username"` // 用户名 + Password *string `gorm:"column:password;type:character varying(255);comment:密码" json:"password"` // 密码 + Expiration orm.LocalDateTime `gorm:"column:expiration;type:timestamp without time zone;not null;comment:过期时间" json:"expiration"` // 过期时间 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + EdgeHost *string `gorm:"column:edge_host;type:character varying(255);comment:节点地址" json:"edge_host"` // 节点地址 + EdgeID *int32 `gorm:"column:edge_id;type:integer;comment:节点ID" json:"edge_id"` // 节点ID + Whitelists *string `gorm:"column:whitelists;type:text;comment:IP白名单,逗号分隔" json:"whitelists"` // IP白名单,逗号分隔 + ResourceID int32 `gorm:"column:resource_id;type:integer;not null;comment:套餐ID" json:"resource_id"` // 套餐ID } // TableName Channel's table name diff --git a/web/models/client.gen.go b/web/models/client.gen.go index 5e922c4..d386e40 100644 --- a/web/models/client.gen.go +++ b/web/models/client.gen.go @@ -14,21 +14,21 @@ const TableNameClient = "client" // Client mapped from table type Client struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:客户端ID" json:"id"` // 客户端ID - ClientID string `gorm:"column:client_id;type:character varying(255);not null;comment:OAuth2客户端标识符" json:"client_id"` // OAuth2客户端标识符 - ClientSecret string `gorm:"column:client_secret;type:character varying(255);not null;comment:OAuth2客户端密钥" json:"client_secret"` // OAuth2客户端密钥 - RedirectURI string `gorm:"column:redirect_uri;type:character varying(255);comment:OAuth2 重定向URI" json:"redirect_uri"` // OAuth2 重定向URI - GrantCode bool `gorm:"column:grant_code;type:boolean;not null;comment:允许授权码授予" json:"grant_code"` // 允许授权码授予 - GrantClient bool `gorm:"column:grant_client;type:boolean;not null;comment:允许客户端凭证授予" json:"grant_client"` // 允许客户端凭证授予 - GrantRefresh bool `gorm:"column:grant_refresh;type:boolean;not null;comment:允许刷新令牌授予" json:"grant_refresh"` // 允许刷新令牌授予 - GrantPassword bool `gorm:"column:grant_password;type:boolean;not null;comment:允许密码授予" json:"grant_password"` // 允许密码授予 - Spec int32 `gorm:"column:spec;type:integer;not null;comment:安全规范:1-native,2-browser,3-web,4-trusted" json:"spec"` // 安全规范:1-native,2-browser,3-web,4-trusted - Name string `gorm:"column:name;type:character varying(255);not null;comment:名称" json:"name"` // 名称 - Icon string `gorm:"column:icon;type:character varying(255);comment:图标URL" json:"icon"` // 图标URL - Status int32 `gorm:"column:status;type:integer;not null;default:1;comment:状态:0-禁用,1-正常" json:"status"` // 状态:0-禁用,1-正常 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:客户端ID" json:"id"` // 客户端ID + ClientID string `gorm:"column:client_id;type:character varying(255);not null;comment:OAuth2客户端标识符" json:"client_id"` // OAuth2客户端标识符 + ClientSecret string `gorm:"column:client_secret;type:character varying(255);not null;comment:OAuth2客户端密钥" json:"client_secret"` // OAuth2客户端密钥 + RedirectURI *string `gorm:"column:redirect_uri;type:character varying(255);comment:OAuth2 重定向URI" json:"redirect_uri"` // OAuth2 重定向URI + GrantCode bool `gorm:"column:grant_code;type:boolean;not null;comment:允许授权码授予" json:"grant_code"` // 允许授权码授予 + GrantClient bool `gorm:"column:grant_client;type:boolean;not null;comment:允许客户端凭证授予" json:"grant_client"` // 允许客户端凭证授予 + GrantRefresh bool `gorm:"column:grant_refresh;type:boolean;not null;comment:允许刷新令牌授予" json:"grant_refresh"` // 允许刷新令牌授予 + GrantPassword bool `gorm:"column:grant_password;type:boolean;not null;comment:允许密码授予" json:"grant_password"` // 允许密码授予 + Spec int32 `gorm:"column:spec;type:integer;not null;comment:安全规范:1-native,2-browser,3-web,4-trusted" json:"spec"` // 安全规范:1-native,2-browser,3-web,4-trusted + Name string `gorm:"column:name;type:character varying(255);not null;comment:名称" json:"name"` // 名称 + Icon *string `gorm:"column:icon;type:character varying(255);comment:图标URL" json:"icon"` // 图标URL + Status int32 `gorm:"column:status;type:integer;not null;default:1;comment:状态:0-禁用,1-正常" json:"status"` // 状态:0-禁用,1-正常 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Client's table name diff --git a/web/models/client_permission_link.gen.go b/web/models/client_permission_link.gen.go index 153aeac..767972e 100644 --- a/web/models/client_permission_link.gen.go +++ b/web/models/client_permission_link.gen.go @@ -14,12 +14,12 @@ const TableNameClientPermissionLink = "client_permission_link" // ClientPermissionLink mapped from table type ClientPermissionLink struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:关联ID" json:"id"` // 关联ID - ClientID int32 `gorm:"column:client_id;type:integer;not null;comment:客户端ID" json:"client_id"` // 客户端ID - PermissionID int32 `gorm:"column:permission_id;type:integer;not null;comment:权限ID" json:"permission_id"` // 权限ID - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:关联ID" json:"id"` // 关联ID + ClientID int32 `gorm:"column:client_id;type:integer;not null;comment:客户端ID" json:"client_id"` // 客户端ID + PermissionID int32 `gorm:"column:permission_id;type:integer;not null;comment:权限ID" json:"permission_id"` // 权限ID + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName ClientPermissionLink's table name diff --git a/web/models/coupon.gen.go b/web/models/coupon.gen.go index 8877c59..3990297 100644 --- a/web/models/coupon.gen.go +++ b/web/models/coupon.gen.go @@ -15,17 +15,17 @@ const TableNameCoupon = "coupon" // Coupon mapped from table type Coupon struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:优惠券ID" json:"id"` // 优惠券ID - UserID int32 `gorm:"column:user_id;type:integer;comment:用户ID" json:"user_id"` // 用户ID - Code string `gorm:"column:code;type:character varying(255);not null;comment:优惠券代码" json:"code"` // 优惠券代码 - Remark string `gorm:"column:remark;type:character varying(255);comment:优惠券备注" json:"remark"` // 优惠券备注 - Amount decimal.Decimal `gorm:"column:amount;type:numeric(12,2);not null;comment:优惠券金额" json:"amount"` // 优惠券金额 - MinAmount decimal.Decimal `gorm:"column:min_amount;type:numeric(12,2);not null;comment:最低消费金额" json:"min_amount"` // 最低消费金额 - Status int32 `gorm:"column:status;type:integer;not null;comment:优惠券状态:0-未使用,1-已使用,2-已过期" json:"status"` // 优惠券状态:0-未使用,1-已使用,2-已过期 - ExpireAt orm.LocalDateTime `gorm:"column:expire_at;type:timestamp without time zone;comment:过期时间" json:"expire_at"` // 过期时间 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:优惠券ID" json:"id"` // 优惠券ID + UserID *int32 `gorm:"column:user_id;type:integer;comment:用户ID" json:"user_id"` // 用户ID + Code string `gorm:"column:code;type:character varying(255);not null;comment:优惠券代码" json:"code"` // 优惠券代码 + Remark *string `gorm:"column:remark;type:character varying(255);comment:优惠券备注" json:"remark"` // 优惠券备注 + Amount decimal.Decimal `gorm:"column:amount;type:numeric(12,2);not null;comment:优惠券金额" json:"amount"` // 优惠券金额 + MinAmount decimal.Decimal `gorm:"column:min_amount;type:numeric(12,2);not null;comment:最低消费金额" json:"min_amount"` // 最低消费金额 + Status int32 `gorm:"column:status;type:integer;not null;comment:优惠券状态:0-未使用,1-已使用,2-已过期" json:"status"` // 优惠券状态:0-未使用,1-已使用,2-已过期 + ExpireAt *orm.LocalDateTime `gorm:"column:expire_at;type:timestamp without time zone;comment:过期时间" json:"expire_at"` // 过期时间 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Coupon's table name diff --git a/web/models/edge.gen.go b/web/models/edge.gen.go index d937fcf..747c07f 100644 --- a/web/models/edge.gen.go +++ b/web/models/edge.gen.go @@ -14,22 +14,22 @@ const TableNameEdge = "edge" // Edge mapped from table type Edge struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:节点ID" json:"id"` // 节点ID - ProxyID int32 `gorm:"column:proxy_id;type:integer;comment:代理ID" json:"proxy_id"` // 代理ID - Type int32 `gorm:"column:type;type:integer;not null;comment:节点类型:1-自建" json:"type"` // 节点类型:1-自建 - Version int32 `gorm:"column:version;type:integer;not null;comment:节点版本" json:"version"` // 节点版本 - Name string `gorm:"column:name;type:character varying(255);not null;comment:节点名称" json:"name"` // 节点名称 - Host string `gorm:"column:host;type:character varying(255);not null;comment:节点地址" json:"host"` // 节点地址 - Isp int32 `gorm:"column:isp;type:integer;not null;comment:运营商:0-未知,1-电信,2-联通,3-移动" json:"isp"` // 运营商:0-未知,1-电信,2-联通,3-移动 - Prov string `gorm:"column:prov;type:character varying(255);not null;comment:省份" json:"prov"` // 省份 - City string `gorm:"column:city;type:character varying(255);not null;comment:城市" json:"city"` // 城市 - ProxyPort int32 `gorm:"column:proxy_port;type:integer;comment:代理端口" json:"proxy_port"` // 代理端口 - Status int32 `gorm:"column:status;type:integer;not null;comment:节点状态:0-离线,1-正常" json:"status"` // 节点状态:0-离线,1-正常 - Rtt int32 `gorm:"column:rtt;type:integer;comment:最近平均延迟" json:"rtt"` // 最近平均延迟 - Loss int32 `gorm:"column:loss;type:integer;comment:最近丢包率" json:"loss"` // 最近丢包率 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:节点ID" json:"id"` // 节点ID + ProxyID *int32 `gorm:"column:proxy_id;type:integer;comment:代理ID" json:"proxy_id"` // 代理ID + Type int32 `gorm:"column:type;type:integer;not null;comment:节点类型:1-自建" json:"type"` // 节点类型:1-自建 + Version int32 `gorm:"column:version;type:integer;not null;comment:节点版本" json:"version"` // 节点版本 + Name string `gorm:"column:name;type:character varying(255);not null;comment:节点名称" json:"name"` // 节点名称 + Host string `gorm:"column:host;type:character varying(255);not null;comment:节点地址" json:"host"` // 节点地址 + Isp int32 `gorm:"column:isp;type:integer;not null;comment:运营商:0-未知,1-电信,2-联通,3-移动" json:"isp"` // 运营商:0-未知,1-电信,2-联通,3-移动 + Prov string `gorm:"column:prov;type:character varying(255);not null;comment:省份" json:"prov"` // 省份 + City string `gorm:"column:city;type:character varying(255);not null;comment:城市" json:"city"` // 城市 + ProxyPort *int32 `gorm:"column:proxy_port;type:integer;comment:代理端口" json:"proxy_port"` // 代理端口 + Status int32 `gorm:"column:status;type:integer;not null;comment:节点状态:0-离线,1-正常" json:"status"` // 节点状态:0-离线,1-正常 + Rtt *int32 `gorm:"column:rtt;type:integer;comment:最近平均延迟" json:"rtt"` // 最近平均延迟 + Loss *int32 `gorm:"column:loss;type:integer;comment:最近丢包率" json:"loss"` // 最近丢包率 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Edge's table name diff --git a/web/models/logs_request.gen.go b/web/models/logs_request.gen.go index 3f531e2..6b4e437 100644 --- a/web/models/logs_request.gen.go +++ b/web/models/logs_request.gen.go @@ -10,17 +10,17 @@ const TableNameLogsRequest = "logs_request" // LogsRequest mapped from table type LogsRequest struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:访问日志ID" json:"id"` // 访问日志ID - Identity int32 `gorm:"column:identity;type:integer;comment:访客身份:0-游客,1-用户,2-管理员,3-公共服务,4-安全服务,5-内部服务" json:"identity"` // 访客身份:0-游客,1-用户,2-管理员,3-公共服务,4-安全服务,5-内部服务 - Visitor int32 `gorm:"column:visitor;type:integer;comment:访客ID" json:"visitor"` // 访客ID - IP string `gorm:"column:ip;type:character varying(45);not null;comment:IP地址" json:"ip"` // IP地址 - Ua string `gorm:"column:ua;type:character varying(255);comment:用户代理" json:"ua"` // 用户代理 - Method string `gorm:"column:method;type:character varying(10);not null;comment:请求方法" json:"method"` // 请求方法 - Path string `gorm:"column:path;type:character varying(255);not null;comment:请求路径" json:"path"` // 请求路径 - Latency string `gorm:"column:latency;type:character varying(255);comment:请求延迟" json:"latency"` // 请求延迟 - Status int32 `gorm:"column:status;type:integer;not null;comment:响应状态码" json:"status"` // 响应状态码 - Error string `gorm:"column:error;type:character varying(255);comment:错误信息" json:"error"` // 错误信息 - Time orm.LocalDateTime `gorm:"column:time;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:请求时间" json:"time"` // 请求时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:访问日志ID" json:"id"` // 访问日志ID + Identity *int32 `gorm:"column:identity;type:integer;comment:访客身份:0-游客,1-用户,2-管理员,3-公共服务,4-安全服务,5-内部服务" json:"identity"` // 访客身份:0-游客,1-用户,2-管理员,3-公共服务,4-安全服务,5-内部服务 + Visitor *int32 `gorm:"column:visitor;type:integer;comment:访客ID" json:"visitor"` // 访客ID + IP string `gorm:"column:ip;type:character varying(45);not null;comment:IP地址" json:"ip"` // IP地址 + Ua *string `gorm:"column:ua;type:character varying(255);comment:用户代理" json:"ua"` // 用户代理 + Method string `gorm:"column:method;type:character varying(10);not null;comment:请求方法" json:"method"` // 请求方法 + Path string `gorm:"column:path;type:character varying(255);not null;comment:请求路径" json:"path"` // 请求路径 + Latency *string `gorm:"column:latency;type:character varying(255);comment:请求延迟" json:"latency"` // 请求延迟 + Status int32 `gorm:"column:status;type:integer;not null;comment:响应状态码" json:"status"` // 响应状态码 + Error *string `gorm:"column:error;type:character varying(255);comment:错误信息" json:"error"` // 错误信息 + Time *orm.LocalDateTime `gorm:"column:time;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:请求时间" json:"time"` // 请求时间 } // TableName LogsRequest's table name diff --git a/web/models/permission.gen.go b/web/models/permission.gen.go index 1b16483..0f30db7 100644 --- a/web/models/permission.gen.go +++ b/web/models/permission.gen.go @@ -14,13 +14,13 @@ const TableNamePermission = "permission" // Permission mapped from table type Permission struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:权限ID" json:"id"` // 权限ID - ParentID int32 `gorm:"column:parent_id;type:integer;comment:父权限ID" json:"parent_id"` // 父权限ID - Name string `gorm:"column:name;type:character varying(255);not null;comment:权限名称" json:"name"` // 权限名称 - Description string `gorm:"column:description;type:character varying(255);comment:权限描述" json:"description"` // 权限描述 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:权限ID" json:"id"` // 权限ID + ParentID *int32 `gorm:"column:parent_id;type:integer;comment:父权限ID" json:"parent_id"` // 父权限ID + Name string `gorm:"column:name;type:character varying(255);not null;comment:权限名称" json:"name"` // 权限名称 + Description *string `gorm:"column:description;type:character varying(255);comment:权限描述" json:"description"` // 权限描述 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Permission's table name diff --git a/web/models/product.gen.go b/web/models/product.gen.go index cf08a2e..a8bf6e9 100644 --- a/web/models/product.gen.go +++ b/web/models/product.gen.go @@ -14,15 +14,15 @@ const TableNameProduct = "product" // Product mapped from table type Product struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:产品ID" json:"id"` // 产品ID - Code string `gorm:"column:code;type:character varying(255);not null;comment:产品代码" json:"code"` // 产品代码 - Name string `gorm:"column:name;type:character varying(255);not null;comment:产品名称" json:"name"` // 产品名称 - Description string `gorm:"column:description;type:character varying(255);comment:产品描述" json:"description"` // 产品描述 - Sort int32 `gorm:"column:sort;type:integer;not null;comment:排序" json:"sort"` // 排序 - Status int32 `gorm:"column:status;type:integer;not null;default:1;comment:产品状态:0-禁用,1-正常" json:"status"` // 产品状态:0-禁用,1-正常 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:产品ID" json:"id"` // 产品ID + Code string `gorm:"column:code;type:character varying(255);not null;comment:产品代码" json:"code"` // 产品代码 + Name string `gorm:"column:name;type:character varying(255);not null;comment:产品名称" json:"name"` // 产品名称 + Description *string `gorm:"column:description;type:character varying(255);comment:产品描述" json:"description"` // 产品描述 + Sort int32 `gorm:"column:sort;type:integer;not null;comment:排序" json:"sort"` // 排序 + Status int32 `gorm:"column:status;type:integer;not null;default:1;comment:产品状态:0-禁用,1-正常" json:"status"` // 产品状态:0-禁用,1-正常 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Product's table name diff --git a/web/models/proxy.gen.go b/web/models/proxy.gen.go index 1c18f66..d4e3783 100644 --- a/web/models/proxy.gen.go +++ b/web/models/proxy.gen.go @@ -14,17 +14,17 @@ const TableNameProxy = "proxy" // Proxy mapped from table type Proxy struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:代理服务ID" json:"id"` // 代理服务ID - Version int32 `gorm:"column:version;type:integer;not null;comment:代理服务版本" json:"version"` // 代理服务版本 - Name string `gorm:"column:name;type:character varying(255);not null;comment:代理服务名称" json:"name"` // 代理服务名称 - Host string `gorm:"column:host;type:character varying(255);not null;comment:代理服务地址" json:"host"` // 代理服务地址 - Type int32 `gorm:"column:type;type:integer;not null;comment:代理服务类型:1-三方,2-自有" json:"type"` // 代理服务类型:1-三方,2-自有 - Secret string `gorm:"column:secret;type:character varying(255);comment:代理服务密钥" json:"secret"` // 代理服务密钥 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 - Status int32 `gorm:"column:status;type:integer;not null;comment:代理服务状态:0-离线,1-在线" json:"status"` // 代理服务状态:0-离线,1-在线 - Edges []Edge `gorm:"foreignKey:ProxyID;references:ID" json:"edges"` + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:代理服务ID" json:"id"` // 代理服务ID + Version int32 `gorm:"column:version;type:integer;not null;comment:代理服务版本" json:"version"` // 代理服务版本 + Name string `gorm:"column:name;type:character varying(255);not null;comment:代理服务名称" json:"name"` // 代理服务名称 + Host string `gorm:"column:host;type:character varying(255);not null;comment:代理服务地址" json:"host"` // 代理服务地址 + Type int32 `gorm:"column:type;type:integer;not null;comment:代理服务类型:1-三方,2-自有" json:"type"` // 代理服务类型:1-三方,2-自有 + Secret *string `gorm:"column:secret;type:character varying(255);comment:代理服务密钥" json:"secret"` // 代理服务密钥 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + Status int32 `gorm:"column:status;type:integer;not null;comment:代理服务状态:0-离线,1-在线" json:"status"` // 代理服务状态:0-离线,1-在线 + Edges []Edge `gorm:"foreignKey:ProxyID;references:ID" json:"edges"` } // TableName Proxy's table name diff --git a/web/models/refund.gen.go b/web/models/refund.gen.go index 7328ba7..3fa488c 100644 --- a/web/models/refund.gen.go +++ b/web/models/refund.gen.go @@ -15,15 +15,15 @@ const TableNameRefund = "refund" // Refund mapped from table type Refund struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:退款ID" json:"id"` // 退款ID - TradeID int32 `gorm:"column:trade_id;type:integer;not null;comment:订单ID" json:"trade_id"` // 订单ID - ProductID int32 `gorm:"column:product_id;type:integer;comment:产品ID" json:"product_id"` // 产品ID - Amount decimal.Decimal `gorm:"column:amount;type:numeric(12,2);not null;comment:退款金额" json:"amount"` // 退款金额 - Reason string `gorm:"column:reason;type:character varying(255);comment:退款原因" json:"reason"` // 退款原因 - Status int32 `gorm:"column:status;type:integer;not null;comment:退款状态:0-待处理,1-已退款,2-已拒绝" json:"status"` // 退款状态:0-待处理,1-已退款,2-已拒绝 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:退款ID" json:"id"` // 退款ID + TradeID int32 `gorm:"column:trade_id;type:integer;not null;comment:订单ID" json:"trade_id"` // 订单ID + ProductID *int32 `gorm:"column:product_id;type:integer;comment:产品ID" json:"product_id"` // 产品ID + Amount decimal.Decimal `gorm:"column:amount;type:numeric(12,2);not null;comment:退款金额" json:"amount"` // 退款金额 + Reason *string `gorm:"column:reason;type:character varying(255);comment:退款原因" json:"reason"` // 退款原因 + Status int32 `gorm:"column:status;type:integer;not null;comment:退款状态:0-待处理,1-已退款,2-已拒绝" json:"status"` // 退款状态:0-待处理,1-已退款,2-已拒绝 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Refund's table name diff --git a/web/models/resource.gen.go b/web/models/resource.gen.go index 013513b..57534a8 100644 --- a/web/models/resource.gen.go +++ b/web/models/resource.gen.go @@ -14,16 +14,16 @@ const TableNameResource = "resource" // Resource mapped from table type Resource struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:套餐ID" json:"id"` // 套餐ID - UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID - ResourceNo string `gorm:"column:resource_no;type:character varying(255);comment:套餐编号" json:"resource_no"` // 套餐编号 - Active bool `gorm:"column:active;type:boolean;not null;default:true;comment:套餐状态" json:"active"` // 套餐状态 - Type int32 `gorm:"column:type;type:integer;not null;comment:套餐类型:1-短效动态,2-长效动态" json:"type"` // 套餐类型:1-短效动态,2-长效动态 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 - Short *ResourceShort `gorm:"foreignKey:ResourceID;references:ID" json:"short"` - Long *ResourceLong `gorm:"foreignKey:ResourceID;references:ID" json:"long"` + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:套餐ID" json:"id"` // 套餐ID + UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID + ResourceNo *string `gorm:"column:resource_no;type:character varying(255);comment:套餐编号" json:"resource_no"` // 套餐编号 + Active bool `gorm:"column:active;type:boolean;not null;default:true;comment:套餐状态" json:"active"` // 套餐状态 + Type int32 `gorm:"column:type;type:integer;not null;comment:套餐类型:1-短效动态,2-长效动态" json:"type"` // 套餐类型:1-短效动态,2-长效动态 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + Short *ResourceShort `gorm:"foreignKey:ResourceID;references:ID" json:"short"` + Long *ResourceLong `gorm:"foreignKey:ResourceID;references:ID" json:"long"` } // TableName Resource's table name diff --git a/web/models/resource_long.gen.go b/web/models/resource_long.gen.go index 6bc950c..67ab73f 100644 --- a/web/models/resource_long.gen.go +++ b/web/models/resource_long.gen.go @@ -10,16 +10,16 @@ const TableNameResourceLong = "resource_long" // ResourceLong mapped from table type ResourceLong struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:ID" json:"id"` // ID - ResourceID int32 `gorm:"column:resource_id;type:integer;not null;comment:套餐ID" json:"resource_id"` // 套餐ID - Type int32 `gorm:"column:type;type:integer;comment:套餐类型:1-包时,2-包量" json:"type"` // 套餐类型:1-包时,2-包量 - Live int32 `gorm:"column:live;type:integer;comment:可用时长(天)" json:"live"` // 可用时长(天) - Expire orm.LocalDateTime `gorm:"column:expire;type:timestamp without time zone;comment:过期时间" json:"expire"` // 过期时间 - Quota int32 `gorm:"column:quota;type:integer;comment:配额数量" json:"quota"` // 配额数量 - Used int32 `gorm:"column:used;type:integer;not null;comment:已用数量" json:"used"` // 已用数量 - DailyLimit int32 `gorm:"column:daily_limit;type:integer;not null;comment:每日限制" json:"daily_limit"` // 每日限制 - DailyUsed int32 `gorm:"column:daily_used;type:integer;not null;comment:今日已用数量" json:"daily_used"` // 今日已用数量 - DailyLast orm.LocalDateTime `gorm:"column:daily_last;type:timestamp without time zone;comment:今日最后使用时间" json:"daily_last"` // 今日最后使用时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:ID" json:"id"` // ID + ResourceID int32 `gorm:"column:resource_id;type:integer;not null;comment:套餐ID" json:"resource_id"` // 套餐ID + Type int32 `gorm:"column:type;type:integer;not null;comment:套餐类型:1-包时,2-包量" json:"type"` // 套餐类型:1-包时,2-包量 + Live int32 `gorm:"column:live;type:integer;not null;comment:可用时长(天)" json:"live"` // 可用时长(天) + Expire *orm.LocalDateTime `gorm:"column:expire;type:timestamp without time zone;comment:过期时间" json:"expire"` // 过期时间 + Quota *int32 `gorm:"column:quota;type:integer;comment:配额数量" json:"quota"` // 配额数量 + Used int32 `gorm:"column:used;type:integer;not null;comment:已用数量" json:"used"` // 已用数量 + DailyLimit int32 `gorm:"column:daily_limit;type:integer;not null;comment:每日限制" json:"daily_limit"` // 每日限制 + DailyUsed int32 `gorm:"column:daily_used;type:integer;not null;comment:今日已用数量" json:"daily_used"` // 今日已用数量 + DailyLast *orm.LocalDateTime `gorm:"column:daily_last;type:timestamp without time zone;comment:今日最后使用时间" json:"daily_last"` // 今日最后使用时间 } // TableName ResourceLong's table name diff --git a/web/models/resource_short.gen.go b/web/models/resource_short.gen.go index 418ae30..2d92af5 100644 --- a/web/models/resource_short.gen.go +++ b/web/models/resource_short.gen.go @@ -10,16 +10,16 @@ const TableNameResourceShort = "resource_short" // ResourceShort mapped from table type ResourceShort struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:ID" json:"id"` // ID - ResourceID int32 `gorm:"column:resource_id;type:integer;not null;comment:套餐ID" json:"resource_id"` // 套餐ID - Type int32 `gorm:"column:type;type:integer;comment:套餐类型:1-包时,2-包量" json:"type"` // 套餐类型:1-包时,2-包量 - Live int32 `gorm:"column:live;type:integer;comment:可用时长(秒)" json:"live"` // 可用时长(秒) - Expire orm.LocalDateTime `gorm:"column:expire;type:timestamp without time zone;comment:过期时间" json:"expire"` // 过期时间 - Quota int32 `gorm:"column:quota;type:integer;comment:配额数量" json:"quota"` // 配额数量 - Used int32 `gorm:"column:used;type:integer;not null;comment:已用数量" json:"used"` // 已用数量 - DailyLimit int32 `gorm:"column:daily_limit;type:integer;not null;comment:每日限制" json:"daily_limit"` // 每日限制 - DailyUsed int32 `gorm:"column:daily_used;type:integer;not null;comment:今日已用数量" json:"daily_used"` // 今日已用数量 - DailyLast orm.LocalDateTime `gorm:"column:daily_last;type:timestamp without time zone;comment:今日最后使用时间" json:"daily_last"` // 今日最后使用时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:ID" json:"id"` // ID + ResourceID int32 `gorm:"column:resource_id;type:integer;not null;comment:套餐ID" json:"resource_id"` // 套餐ID + Type int32 `gorm:"column:type;type:integer;not null;comment:套餐类型:1-包时,2-包量" json:"type"` // 套餐类型:1-包时,2-包量 + Live int32 `gorm:"column:live;type:integer;not null;comment:可用时长(秒)" json:"live"` // 可用时长(秒) + Expire *orm.LocalDateTime `gorm:"column:expire;type:timestamp without time zone;comment:过期时间" json:"expire"` // 过期时间 + Quota *int32 `gorm:"column:quota;type:integer;comment:配额数量" json:"quota"` // 配额数量 + Used int32 `gorm:"column:used;type:integer;not null;comment:已用数量" json:"used"` // 已用数量 + DailyLimit int32 `gorm:"column:daily_limit;type:integer;not null;comment:每日限制" json:"daily_limit"` // 每日限制 + DailyUsed int32 `gorm:"column:daily_used;type:integer;not null;comment:今日已用数量" json:"daily_used"` // 今日已用数量 + DailyLast *orm.LocalDateTime `gorm:"column:daily_last;type:timestamp without time zone;comment:今日最后使用时间" json:"daily_last"` // 今日最后使用时间 } // TableName ResourceShort's table name diff --git a/web/models/session.gen.go b/web/models/session.gen.go index 41b93ef..8fa1d05 100644 --- a/web/models/session.gen.go +++ b/web/models/session.gen.go @@ -14,20 +14,20 @@ const TableNameSession = "session" // Session mapped from table type Session struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:会话ID" json:"id"` // 会话ID - UserID int32 `gorm:"column:user_id;type:integer;comment:用户ID" json:"user_id"` // 用户ID - ClientID int32 `gorm:"column:client_id;type:integer;comment:客户端ID" json:"client_id"` // 客户端ID - IP string `gorm:"column:ip;type:character varying(45);comment:IP地址" json:"ip"` // IP地址 - Ua string `gorm:"column:ua;type:character varying(255);comment:用户代理" json:"ua"` // 用户代理 - GrantType string `gorm:"column:grant_type;type:character varying(255);not null;default:0;comment:授权类型:authorization_code-授权码模式,client_credentials-客户端凭证模式,refresh_token-刷新令牌模式,password-密码模式" json:"grant_type"` // 授权类型:authorization_code-授权码模式,client_credentials-客户端凭证模式,refresh_token-刷新令牌模式,password-密码模式 - AccessToken string `gorm:"column:access_token;type:character varying(255);not null;comment:访问令牌" json:"access_token"` // 访问令牌 - AccessTokenExpires orm.LocalDateTime `gorm:"column:access_token_expires;type:timestamp without time zone;not null;comment:访问令牌过期时间" json:"access_token_expires"` // 访问令牌过期时间 - RefreshToken string `gorm:"column:refresh_token;type:character varying(255);comment:刷新令牌" json:"refresh_token"` // 刷新令牌 - RefreshTokenExpires orm.LocalDateTime `gorm:"column:refresh_token_expires;type:timestamp without time zone;comment:刷新令牌过期时间" json:"refresh_token_expires"` // 刷新令牌过期时间 - Scopes_ string `gorm:"column:scopes;type:character varying(255);comment:权限范围" json:"scopes"` // 权限范围 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:会话ID" json:"id"` // 会话ID + UserID *int32 `gorm:"column:user_id;type:integer;comment:用户ID" json:"user_id"` // 用户ID + ClientID *int32 `gorm:"column:client_id;type:integer;comment:客户端ID" json:"client_id"` // 客户端ID + IP *string `gorm:"column:ip;type:character varying(45);comment:IP地址" json:"ip"` // IP地址 + Ua *string `gorm:"column:ua;type:character varying(255);comment:用户代理" json:"ua"` // 用户代理 + GrantType string `gorm:"column:grant_type;type:character varying(255);not null;default:0;comment:授权类型:authorization_code-授权码模式,client_credentials-客户端凭证模式,refresh_token-刷新令牌模式,password-密码模式" json:"grant_type"` // 授权类型:authorization_code-授权码模式,client_credentials-客户端凭证模式,refresh_token-刷新令牌模式,password-密码模式 + AccessToken string `gorm:"column:access_token;type:character varying(255);not null;comment:访问令牌" json:"access_token"` // 访问令牌 + AccessTokenExpires orm.LocalDateTime `gorm:"column:access_token_expires;type:timestamp without time zone;not null;comment:访问令牌过期时间" json:"access_token_expires"` // 访问令牌过期时间 + RefreshToken *string `gorm:"column:refresh_token;type:character varying(255);comment:刷新令牌" json:"refresh_token"` // 刷新令牌 + RefreshTokenExpires *orm.LocalDateTime `gorm:"column:refresh_token_expires;type:timestamp without time zone;comment:刷新令牌过期时间" json:"refresh_token_expires"` // 刷新令牌过期时间 + Scopes_ *string `gorm:"column:scopes;type:character varying(255);comment:权限范围" json:"scopes"` // 权限范围 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Session's table name diff --git a/web/models/trade.gen.go b/web/models/trade.gen.go index ad92f4b..d16c175 100644 --- a/web/models/trade.gen.go +++ b/web/models/trade.gen.go @@ -15,23 +15,23 @@ const TableNameTrade = "trade" // Trade mapped from table type Trade struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:订单ID" json:"id"` // 订单ID - UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID - InnerNo string `gorm:"column:inner_no;type:character varying(255);not null;comment:内部订单号" json:"inner_no"` // 内部订单号 - OuterNo string `gorm:"column:outer_no;type:character varying(255);comment:外部订单号" json:"outer_no"` // 外部订单号 - Type int32 `gorm:"column:type;type:integer;not null;comment:订单类型:1-购买产品,2-充值余额" json:"type"` // 订单类型:1-购买产品,2-充值余额 - Subject string `gorm:"column:subject;type:character varying(255);not null;comment:订单主题" json:"subject"` // 订单主题 - Remark string `gorm:"column:remark;type:character varying(255);comment:订单备注" json:"remark"` // 订单备注 - Amount decimal.Decimal `gorm:"column:amount;type:numeric(12,2);not null;comment:订单总金额" json:"amount"` // 订单总金额 - Payment decimal.Decimal `gorm:"column:payment;type:numeric(12,2);not null;comment:支付金额" json:"payment"` // 支付金额 - Method int32 `gorm:"column:method;type:integer;not null;comment:支付方式:1-支付宝,2-微信" json:"method"` // 支付方式:1-支付宝,2-微信 - Status int32 `gorm:"column:status;type:integer;not null;comment:订单状态:0-待支付,1-已支付,2-已取消,3-已退款" json:"status"` // 订单状态:0-待支付,1-已支付,2-已取消,3-已退款 - PayURL string `gorm:"column:pay_url;type:text;comment:支付链接" json:"pay_url"` // 支付链接 - PaidAt orm.LocalDateTime `gorm:"column:paid_at;type:timestamp without time zone;comment:支付时间" json:"paid_at"` // 支付时间 - CancelAt orm.LocalDateTime `gorm:"column:cancel_at;type:timestamp without time zone;comment:取消时间" json:"cancel_at"` // 取消时间 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:订单ID" json:"id"` // 订单ID + UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID + InnerNo string `gorm:"column:inner_no;type:character varying(255);not null;comment:内部订单号" json:"inner_no"` // 内部订单号 + OuterNo *string `gorm:"column:outer_no;type:character varying(255);comment:外部订单号" json:"outer_no"` // 外部订单号 + Type int32 `gorm:"column:type;type:integer;not null;comment:订单类型:1-购买产品,2-充值余额" json:"type"` // 订单类型:1-购买产品,2-充值余额 + Subject string `gorm:"column:subject;type:character varying(255);not null;comment:订单主题" json:"subject"` // 订单主题 + Remark *string `gorm:"column:remark;type:character varying(255);comment:订单备注" json:"remark"` // 订单备注 + Amount decimal.Decimal `gorm:"column:amount;type:numeric(12,2);not null;comment:订单总金额" json:"amount"` // 订单总金额 + Payment decimal.Decimal `gorm:"column:payment;type:numeric(12,2);not null;comment:支付金额" json:"payment"` // 支付金额 + Method int32 `gorm:"column:method;type:integer;not null;comment:支付方式:1-支付宝,2-微信" json:"method"` // 支付方式:1-支付宝,2-微信 + Status int32 `gorm:"column:status;type:integer;not null;comment:订单状态:0-待支付,1-已支付,2-已取消,3-已退款" json:"status"` // 订单状态:0-待支付,1-已支付,2-已取消,3-已退款 + PayURL *string `gorm:"column:pay_url;type:text;comment:支付链接" json:"pay_url"` // 支付链接 + PaidAt *orm.LocalDateTime `gorm:"column:paid_at;type:timestamp without time zone;comment:支付时间" json:"paid_at"` // 支付时间 + CancelAt *orm.LocalDateTime `gorm:"column:cancel_at;type:timestamp without time zone;comment:取消时间" json:"cancel_at"` // 取消时间 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Trade's table name diff --git a/web/models/user.gen.go b/web/models/user.gen.go index 70402f7..d034b5f 100644 --- a/web/models/user.gen.go +++ b/web/models/user.gen.go @@ -15,27 +15,27 @@ const TableNameUser = "user" // User mapped from table type User struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:用户ID" json:"id"` // 用户ID - AdminID int32 `gorm:"column:admin_id;type:integer;comment:管理员ID" json:"admin_id"` // 管理员ID - Phone string `gorm:"column:phone;type:character varying(255);not null;comment:手机号码" json:"phone"` // 手机号码 - Username string `gorm:"column:username;type:character varying(255);comment:用户名" json:"username"` // 用户名 - Email string `gorm:"column:email;type:character varying(255)" json:"email"` - Password string `gorm:"column:password;type:character varying(255);comment:用户密码" json:"password"` // 用户密码 - Name string `gorm:"column:name;type:character varying(255);comment:真实姓名" json:"name"` // 真实姓名 - Avatar string `gorm:"column:avatar;type:character varying(255);comment:头像URL" json:"avatar"` // 头像URL - Status int32 `gorm:"column:status;type:integer;not null;default:1;comment:用户状态:0-禁用,1-正常" json:"status"` // 用户状态:0-禁用,1-正常 - Balance decimal.Decimal `gorm:"column:balance;type:numeric(12,2);not null;comment:账户余额" json:"balance"` // 账户余额 - IDType int32 `gorm:"column:id_type;type:integer;not null;comment:认证类型:0-未认证,1-个人认证,2-企业认证" json:"id_type"` // 认证类型:0-未认证,1-个人认证,2-企业认证 - IDNo string `gorm:"column:id_no;type:character varying(255);comment:身份证号或营业执照号" json:"id_no"` // 身份证号或营业执照号 - IDToken string `gorm:"column:id_token;type:character varying(255);comment:身份验证标识" json:"id_token"` // 身份验证标识 - ContactQQ string `gorm:"column:contact_qq;type:character varying(255);comment:QQ联系方式" json:"contact_qq"` // QQ联系方式 - ContactWechat string `gorm:"column:contact_wechat;type:character varying(255);comment:微信联系方式" json:"contact_wechat"` // 微信联系方式 - LastLogin orm.LocalDateTime `gorm:"column:last_login;type:timestamp without time zone;comment:最后登录时间" json:"last_login"` // 最后登录时间 - LastLoginHost string `gorm:"column:last_login_host;type:character varying(45);comment:最后登录地址" json:"last_login_host"` // 最后登录地址 - LastLoginAgent string `gorm:"column:last_login_agent;type:character varying(255);comment:最后登录代理" json:"last_login_agent"` // 最后登录代理 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:用户ID" json:"id"` // 用户ID + AdminID *int32 `gorm:"column:admin_id;type:integer;comment:管理员ID" json:"admin_id"` // 管理员ID + Phone string `gorm:"column:phone;type:character varying(255);not null;comment:手机号码" json:"phone"` // 手机号码 + Username *string `gorm:"column:username;type:character varying(255);comment:用户名" json:"username"` // 用户名 + Email *string `gorm:"column:email;type:character varying(255)" json:"email"` + Password *string `gorm:"column:password;type:character varying(255);comment:用户密码" json:"password"` // 用户密码 + Name *string `gorm:"column:name;type:character varying(255);comment:真实姓名" json:"name"` // 真实姓名 + Avatar *string `gorm:"column:avatar;type:character varying(255);comment:头像URL" json:"avatar"` // 头像URL + Status int32 `gorm:"column:status;type:integer;not null;default:1;comment:用户状态:0-禁用,1-正常" json:"status"` // 用户状态:0-禁用,1-正常 + Balance decimal.Decimal `gorm:"column:balance;type:numeric(12,2);not null;comment:账户余额" json:"balance"` // 账户余额 + IDType int32 `gorm:"column:id_type;type:integer;not null;comment:认证类型:0-未认证,1-个人认证,2-企业认证" json:"id_type"` // 认证类型:0-未认证,1-个人认证,2-企业认证 + IDNo *string `gorm:"column:id_no;type:character varying(255);comment:身份证号或营业执照号" json:"id_no"` // 身份证号或营业执照号 + IDToken *string `gorm:"column:id_token;type:character varying(255);comment:身份验证标识" json:"id_token"` // 身份验证标识 + ContactQQ *string `gorm:"column:contact_qq;type:character varying(255);comment:QQ联系方式" json:"contact_qq"` // QQ联系方式 + ContactWechat *string `gorm:"column:contact_wechat;type:character varying(255);comment:微信联系方式" json:"contact_wechat"` // 微信联系方式 + LastLogin *orm.LocalDateTime `gorm:"column:last_login;type:timestamp without time zone;comment:最后登录时间" json:"last_login"` // 最后登录时间 + LastLoginHost *string `gorm:"column:last_login_host;type:character varying(45);comment:最后登录地址" json:"last_login_host"` // 最后登录地址 + LastLoginAgent *string `gorm:"column:last_login_agent;type:character varying(255);comment:最后登录代理" json:"last_login_agent"` // 最后登录代理 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName User's table name diff --git a/web/models/user_role.gen.go b/web/models/user_role.gen.go index d64b5ae..ef8fa21 100644 --- a/web/models/user_role.gen.go +++ b/web/models/user_role.gen.go @@ -14,14 +14,14 @@ const TableNameUserRole = "user_role" // UserRole mapped from table type UserRole struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:角色ID" json:"id"` // 角色ID - Name string `gorm:"column:name;type:character varying(255);not null;comment:角色名称" json:"name"` // 角色名称 - Description string `gorm:"column:description;type:character varying(255);comment:角色描述" json:"description"` // 角色描述 - Active bool `gorm:"column:active;type:boolean;default:true;comment:是否激活" json:"active"` // 是否激活 - Sort int32 `gorm:"column:sort;type:integer;comment:排序" json:"sort"` // 排序 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:角色ID" json:"id"` // 角色ID + Name string `gorm:"column:name;type:character varying(255);not null;comment:角色名称" json:"name"` // 角色名称 + Description *string `gorm:"column:description;type:character varying(255);comment:角色描述" json:"description"` // 角色描述 + Active *bool `gorm:"column:active;type:boolean;default:true;comment:是否激活" json:"active"` // 是否激活 + Sort *int32 `gorm:"column:sort;type:integer;comment:排序" json:"sort"` // 排序 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName UserRole's table name diff --git a/web/models/user_role_link.gen.go b/web/models/user_role_link.gen.go index c62dac0..3ef421f 100644 --- a/web/models/user_role_link.gen.go +++ b/web/models/user_role_link.gen.go @@ -14,12 +14,12 @@ const TableNameUserRoleLink = "user_role_link" // UserRoleLink mapped from table type UserRoleLink struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:关联ID" json:"id"` // 关联ID - UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID - RoleID int32 `gorm:"column:role_id;type:integer;not null;comment:角色ID" json:"role_id"` // 角色ID - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:关联ID" json:"id"` // 关联ID + UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID + RoleID int32 `gorm:"column:role_id;type:integer;not null;comment:角色ID" json:"role_id"` // 角色ID + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName UserRoleLink's table name diff --git a/web/models/user_role_permission_link.gen.go b/web/models/user_role_permission_link.gen.go index 6930006..c7181fb 100644 --- a/web/models/user_role_permission_link.gen.go +++ b/web/models/user_role_permission_link.gen.go @@ -14,12 +14,12 @@ const TableNameUserRolePermissionLink = "user_role_permission_link" // UserRolePermissionLink mapped from table type UserRolePermissionLink struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:关联ID" json:"id"` // 关联ID - RoleID int32 `gorm:"column:role_id;type:integer;not null;comment:角色ID" json:"role_id"` // 角色ID - PermissionID int32 `gorm:"column:permission_id;type:integer;not null;comment:权限ID" json:"permission_id"` // 权限ID - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:关联ID" json:"id"` // 关联ID + RoleID int32 `gorm:"column:role_id;type:integer;not null;comment:角色ID" json:"role_id"` // 角色ID + PermissionID int32 `gorm:"column:permission_id;type:integer;not null;comment:权限ID" json:"permission_id"` // 权限ID + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName UserRolePermissionLink's table name diff --git a/web/models/whitelist.gen.go b/web/models/whitelist.gen.go index c7d41ad..b6c4517 100644 --- a/web/models/whitelist.gen.go +++ b/web/models/whitelist.gen.go @@ -14,13 +14,13 @@ const TableNameWhitelist = "whitelist" // Whitelist mapped from table type Whitelist struct { - ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:白名单ID" json:"id"` // 白名单ID - UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID - Host string `gorm:"column:host;type:character varying(45);not null;comment:IP地址" json:"host"` // IP地址 - Remark string `gorm:"column:remark;type:character varying(255);comment:备注" json:"remark"` // 备注 - CreatedAt orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;type:integer;primaryKey;autoIncrement:true;comment:白名单ID" json:"id"` // 白名单ID + UserID int32 `gorm:"column:user_id;type:integer;not null;comment:用户ID" json:"user_id"` // 用户ID + Host string `gorm:"column:host;type:character varying(45);not null;comment:IP地址" json:"host"` // IP地址 + Remark *string `gorm:"column:remark;type:character varying(255);comment:备注" json:"remark"` // 备注 + CreatedAt *orm.LocalDateTime `gorm:"column:created_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt *orm.LocalDateTime `gorm:"column:updated_at;type:timestamp without time zone;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;type:timestamp without time zone;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Whitelist's table name diff --git a/web/services/auth.go b/web/services/auth.go index bfdd00d..a21fdf7 100644 --- a/web/services/auth.go +++ b/web/services/auth.go @@ -3,6 +3,7 @@ package services import ( "context" "errors" + "platform/pkg/u" auth2 "platform/web/auth" client2 "platform/web/domains/client" "platform/web/globals/orm" @@ -108,14 +109,14 @@ func (s *authService) OauthPassword(ctx context.Context, _ *m.Client, data *Gran if user == nil { user = &m.User{ Phone: data.Username, - Username: data.Username, + Username: u.P(data.Username), } } // 更新用户的登录时间 - user.LastLogin = orm.LocalDateTime(time.Now()) - user.LastLoginHost = ip - user.LastLoginAgent = agent + user.LastLogin = u.P(orm.LocalDateTime(time.Now())) + user.LastLoginHost = u.P(ip) + user.LastLoginAgent = u.P(agent) if err := tx.User.Omit(q.User.AdminID).Save(user); err != nil { return err } @@ -127,11 +128,15 @@ func (s *authService) OauthPassword(ctx context.Context, _ *m.Client, data *Gran } // 保存到会话 + var name = "" + if user.Name != nil { + name = *user.Name + } authCtx := auth2.Context{ Payload: auth2.Payload{ Id: user.ID, Type: auth2.PayloadUser, - Name: user.Name, + Name: name, Avatar: user.Avatar, }, } diff --git a/web/services/channel.go b/web/services/channel.go index b0e0821..57692f3 100644 --- a/web/services/channel.go +++ b/web/services/channel.go @@ -163,8 +163,11 @@ func removeShortChannelExternal(proxies []*m.Proxy, channels []*m.Channel) error if !ok { return core.NewBizErr("代理不存在") } + if proxy.Secret == nil { + return core.NewBizErr("代理未配置密钥") + } - var secret = strings.Split(proxy.Secret, ":") + var secret = strings.Split(*proxy.Secret, ":") gateway := g.NewGateway( proxy.Host, secret[0], @@ -322,27 +325,53 @@ func findResource(q *q.Query, resourceId int32, userId int32, count int, now tim Active: resource.Active, Type: resource2.Type(resource.Type), } + switch resource2.Type(resource.Type) { case resource2.TypeShort: var sub = resource.Short + var dailyLast = time.Time{} + if sub.DailyLast != nil { + dailyLast = time.Time(*sub.DailyLast) + } + var expire = time.Time{} + if sub.Expire != nil { + expire = time.Time(*sub.Expire) + } + var quota int32 + if sub.Quota != nil { + quota = *sub.Quota + } info.Mode = resource2.Mode(sub.Type) info.Live = sub.Live info.DailyLimit = sub.DailyLimit info.DailyUsed = sub.DailyUsed - info.DailyLast = time.Time(sub.DailyLast) - info.Quota = sub.Quota + info.DailyLast = dailyLast + info.Expire = expire + info.Quota = quota info.Used = sub.Used - info.Expire = time.Time(sub.Expire) + case resource2.TypeLong: var sub = resource.Long + var dailyLast = time.Time{} + if sub.DailyLast != nil { + dailyLast = time.Time(*sub.DailyLast) + } + var expire = time.Time{} + if sub.Expire != nil { + expire = time.Time(*sub.Expire) + } + var quota int32 + if sub.Quota != nil { + quota = *sub.Quota + } info.Mode = resource2.Mode(sub.Type) info.Live = sub.Live info.DailyLimit = sub.DailyLimit info.DailyUsed = sub.DailyUsed - info.DailyLast = time.Time(sub.DailyLast) - info.Quota = sub.Quota + info.DailyLast = dailyLast + info.Expire = expire + info.Quota = quota info.Used = sub.Used - info.Expire = time.Time(sub.Expire) } // 检查套餐状态 @@ -544,22 +573,22 @@ func assignShortChannels(q *q.Query, userId int32, resourceId int32, count int, ResourceID: resourceId, ProxyHost: proxy.Host, ProxyPort: int32(port), - Protocol: int32(config.Protocol), + Protocol: u.P(int32(config.Protocol)), Expiration: orm.LocalDateTime(config.Expiration), } if config.AuthIp { portConf.Whitelist = &config.Whitelists newChannel.AuthIP = true - newChannel.Whitelists = strings.Join(config.Whitelists, ",") + newChannel.Whitelists = u.P(strings.Join(config.Whitelists, ",")) } if config.AuthPass { username, password := genPassPair() portConf.Userpass = u.P(fmt.Sprintf("%s:%s", username, password)) newChannel.AuthPass = true - newChannel.Username = username - newChannel.Password = password + newChannel.Username = &username + newChannel.Password = &password } portConfigs = append(portConfigs, portConf) @@ -572,8 +601,10 @@ func assignShortChannels(q *q.Query, userId int32, resourceId int32, count int, // 提交端口配置 if env.DebugExternalChange { var step = time.Now() - - var secret = strings.Split(proxy.Secret, ":") + if proxy.Secret == nil { + return nil, core.NewBizErr("代理未配置密钥") + } + var secret = strings.Split(*proxy.Secret, ":") gateway := g.NewGateway( proxy.Host, secret[0], @@ -648,11 +679,14 @@ func assignLongChannels(q *q.Query, userId int32, resourceId int32, count int, c var proxies = make(map[int32]*m.Proxy) var reqs = make(map[int32][]*g.ProxyPermitConfig) for _, edge := range edges { - if _, ok := proxies[edge.ProxyID]; !ok { - proxies[edge.ProxyID] = &m.Proxy{ - ID: edge.ProxyID, + if edge.ProxyID == nil || edge.ProxyPort == nil { + return nil, core.NewBizErr("节点配置不完整,缺少代理信息") + } + if _, ok := proxies[*edge.ProxyID]; !ok { + proxies[*edge.ProxyID] = &m.Proxy{ + ID: *edge.ProxyID, Host: edge.ProxyHost, - Secret: edge.ProxySecret, + Secret: &edge.ProxySecret, } } @@ -668,28 +702,28 @@ func assignLongChannels(q *q.Query, userId int32, resourceId int32, count int, c for range acc { var channel = &m.Channel{ UserID: userId, - ProxyID: edge.ProxyID, - EdgeID: edge.ID, + ProxyID: *edge.ProxyID, + EdgeID: &edge.ID, ResourceID: resourceId, - Protocol: int32(config.Protocol), + Protocol: u.P(int32(config.Protocol)), AuthIP: config.AuthIp, AuthPass: config.AuthPass, Expiration: orm.LocalDateTime(config.Expiration), ProxyHost: edge.ProxyHost, - ProxyPort: edge.ProxyPort, + ProxyPort: *edge.ProxyPort, } if config.AuthIp { - channel.Whitelists = strings.Join(config.Whitelists, ",") + channel.Whitelists = u.P(strings.Join(config.Whitelists, ",")) } if config.AuthPass { username, password := genPassPair() - channel.Username = username - channel.Password = password + channel.Username = &username + channel.Password = &password } channels = append(channels, channel) req := &g.ProxyPermitConfig{ - Id: channel.EdgeID, + Id: *channel.EdgeID, Expire: time.Time(channel.Expiration), } @@ -698,11 +732,11 @@ func assignLongChannels(q *q.Query, userId int32, resourceId int32, count int, c } if channel.AuthPass { - req.Username = &channel.Username - req.Password = &channel.Password + req.Username = channel.Username + req.Password = channel.Password } - reqs[edge.ProxyID] = append(reqs[edge.ProxyID], req) + reqs[*edge.ProxyID] = append(reqs[*edge.ProxyID], req) } } @@ -711,7 +745,7 @@ func assignLongChannels(q *q.Query, userId int32, resourceId int32, count int, c var step = time.Now() for id, reqs := range reqs { proxy := proxies[id] - err := g.Proxy.Permit(proxy.Host, proxy.Secret, reqs) + err := g.Proxy.Permit(proxy.Host, *proxy.Secret, reqs) if err != nil { return nil, core.NewBizErr("提交端口配置失败", err) } diff --git a/web/services/resource.go b/web/services/resource.go index 66c4da6..8aa347e 100644 --- a/web/services/resource.go +++ b/web/services/resource.go @@ -5,6 +5,7 @@ import ( "database/sql" "encoding/json" "fmt" + "platform/pkg/u" bill2 "platform/web/domains/bill" resource2 "platform/web/domains/resource" trade2 "platform/web/domains/trade" @@ -56,9 +57,9 @@ func (s *resourceService) CreateResource(uid int32, now time.Time, ser *CreateRe // 生成账单 bill := m.Bill{ UserID: uid, - ResourceID: resource.ID, + ResourceID: &resource.ID, BillNo: ID.GenReadable("bil"), - Info: "购买套餐 - " + name, + Info: u.P("购买套餐 - " + name), Type: int32(bill2.TypeConsume), Amount: amount, } @@ -185,7 +186,7 @@ func (s *resourceService) CompleteResource(tradeNo string, now time.Time, opResu Select(q.Bill.ResourceID). Updates(&m.Bill{ ID: cache.BillId, - ResourceID: resource.ID, + ResourceID: &resource.ID, }) if err != nil { return err @@ -248,7 +249,7 @@ func createResource(q *q.Query, uid int32, now time.Time, data CreateResourceDat // 套餐基本信息 var resource = m.Resource{ UserID: uid, - ResourceNo: ID.GenReadable("res"), + ResourceNo: u.P(ID.GenReadable("res")), Active: true, } @@ -261,8 +262,8 @@ func createResource(q *q.Query, uid int32, now time.Time, data CreateResourceDat resource.Short = &m.ResourceShort{ Type: data.Mode, Live: data.Live, - Quota: data.Quota, - Expire: orm.LocalDateTime(now.Add(duration)), + Quota: &data.Quota, + Expire: u.P(orm.LocalDateTime(now.Add(duration))), DailyLimit: data.DailyLimit, } @@ -273,8 +274,8 @@ func createResource(q *q.Query, uid int32, now time.Time, data CreateResourceDat resource.Long = &m.ResourceLong{ Type: data.Mode, Live: data.Live, - Quota: data.Quota, - Expire: orm.LocalDateTime(now.Add(duration)), + Quota: &data.Quota, + Expire: u.P(orm.LocalDateTime(now.Add(duration))), DailyLimit: data.DailyLimit, } default: diff --git a/web/services/transaction.go b/web/services/transaction.go index 4538c07..00debd0 100644 --- a/web/services/transaction.go +++ b/web/services/transaction.go @@ -56,7 +56,7 @@ func (s *transactionService) PrepareTransaction(q *q.Query, uid int32, now time. return nil, err } - var expireAt = time.Time(coupon.ExpireAt) + var expireAt = time.Time(u.Z(coupon.ExpireAt)) if !expireAt.IsZero() && expireAt.Before(now) { _, err = q.Coupon. Where(q.Coupon.ID.Eq(coupon.ID)). @@ -71,26 +71,26 @@ func (s *transactionService) PrepareTransaction(q *q.Query, uid int32, now time. return nil, errors.New("订单金额未达到使用优惠券的条件") } - switch { - // 该优惠券不属于当前用户 - default: - return nil, errors.New("优惠券不属于当前用户") - - // 公开优惠券 - case coupon.UserID == 0: - amount = amount.Sub(coupon.Amount) - - // 指定用户的优惠券 - case coupon.UserID == uid: - amount = amount.Sub(coupon.Amount) - if time.Time(coupon.ExpireAt).IsZero() { - _, err = q.Coupon. - Where(q.Coupon.ID.Eq(coupon.ID)). - Update(q.Coupon.Status, int32(coupon2.StatusUsed)) - if err != nil { - return nil, err + if coupon.UserID != nil { + switch *coupon.UserID { + // 指定用户的优惠券 + case uid: + amount = amount.Sub(coupon.Amount) + if expireAt.IsZero() { + _, err = q.Coupon. + Where(q.Coupon.ID.Eq(coupon.ID)). + Update(q.Coupon.Status, int32(coupon2.StatusUsed)) + if err != nil { + return nil, err + } } + // 该优惠券不属于当前用户 + default: + return nil, errors.New("优惠券不属于当前用户") } + } else { + // 公开优惠券 + amount = amount.Sub(coupon.Amount) } } @@ -161,7 +161,7 @@ func (s *transactionService) PrepareTransaction(q *q.Query, uid int32, now time. Method: int32(method), Type: int32(tType), Amount: amount, - PayURL: payUrl, + PayURL: &payUrl, } err = q.Trade.Create(&trade) if err != nil { @@ -172,8 +172,8 @@ func (s *transactionService) PrepareTransaction(q *q.Query, uid int32, now time. var bill = m.Bill{ BillNo: ID.GenReadable("bil"), UserID: uid, - TradeID: trade.ID, - Info: subject, + TradeID: &trade.ID, + Info: &subject, Type: int32(billType), Amount: amount, } @@ -284,10 +284,10 @@ func (s *transactionService) CompleteTransaction(q *q.Query, data *TransactionCo // 如果是未支付,则更新支付状态 case trade2.StatusPending: trade.Status = int32(trade2.StatusSuccess) - trade.OuterNo = transId + trade.OuterNo = &transId trade.Payment = payment - trade.PaidAt = orm.LocalDateTime(paidAt) - trade.PayURL = "" + trade.PaidAt = u.P(orm.LocalDateTime(paidAt)) + trade.PayURL = u.P("") _, err = q.Trade.Updates(trade) if err != nil { return nil, err @@ -340,8 +340,8 @@ func (s *transactionService) FinishTransaction(q *q.Query, tradeNo string, now t Select(q.Trade.Status, q.Trade.CancelAt, q.Trade.PayURL). Updates(m.Trade{ Status: int32(trade2.StatusCanceled), - CancelAt: orm.LocalDateTime(now), - PayURL: "", + CancelAt: u.P(orm.LocalDateTime(now)), + PayURL: u.P(""), }) if err != nil { return err diff --git a/web/web.go b/web/web.go index 2b3016f..5d73271 100644 --- a/web/web.go +++ b/web/web.go @@ -10,6 +10,7 @@ import ( "log/slog" "net/http" _ "net/http/pprof" + "platform/pkg/u" "platform/web/auth" g "platform/web/globals" "platform/web/globals/orm" @@ -149,19 +150,19 @@ func newLogger() fiber.Handler { var item = &m.LogsRequest{ IP: c.IP(), - Ua: c.Get("User-Agent"), + Ua: u.P(c.Get("User-Agent")), Method: c.Method(), Path: c.Path(), - Latency: latency, + Latency: &latency, Status: int32(c.Response().StatusCode()), - Error: errStr, - Time: orm.LocalDateTime(reqTime), + Error: &errStr, + Time: u.P(orm.LocalDateTime(reqTime)), } if authType != auth.PayloadNone { - item.Identity = int32(authType) + item.Identity = u.P(int32(authType)) } if authID != 0 { - item.Visitor = int32(authID) + item.Visitor = u.P(int32(authID)) } err = q.LogsRequest.Create(item)