// Package sysin // @Link https://github.com/bufanyun/hotgo // @Copyright Copyright (c) 2026 HotGo // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE package sysin import ( "context" "hotgo/internal/consts" "hotgo/internal/library/dict" "hotgo/internal/library/hgorm/hook" "hotgo/internal/model/entity" "hotgo/internal/model/input/form" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gtime" ) // ImTenantUpdateFields 修改IM租户字段过滤 type ImTenantUpdateFields struct { Code string `json:"code" dc:"租户编码"` Name string `json:"name" dc:"租户名称"` TenantDesc string `json:"tenantDesc" dc:"租户描述"` DbName string `json:"dbName" dc:"业务库名"` DbDsn string `json:"dbDsn" dc:"独立连接串"` State int `json:"state" dc:"状态"` UpdatedBy int64 `json:"updatedBy" dc:"更新者"` } // ImTenantInsertFields 新增IM租户字段过滤 type ImTenantInsertFields struct { Code string `json:"code" dc:"租户编码"` Name string `json:"name" dc:"租户名称"` TenantDesc string `json:"tenantDesc" dc:"租户描述"` DbName string `json:"dbName" dc:"业务库名"` DbDsn string `json:"dbDsn" dc:"独立连接串"` State int `json:"state" dc:"状态"` CreatedBy int64 `json:"createdBy" dc:"创建者"` } // ImTenantConfigUpdateFields 修改IM租户配置字段过滤 type ImTenantConfigUpdateFields struct { MaxUsers uint64 `json:"maxUsers" dc:"最大用户数"` MaxGroups uint64 `json:"maxGroups" dc:"最大群组数"` MaxGroupMembers uint `json:"maxGroupMembers" dc:"最大群成员数"` UpdatedBy int64 `json:"updatedBy" dc:"更新者"` } // ImTenantConfigInsertFields 新增IM租户配置字段过滤 type ImTenantConfigInsertFields struct { TenantId int64 `json:"tenantId" dc:"租户ID"` MaxUsers uint64 `json:"maxUsers" dc:"最大用户数"` MaxGroups uint64 `json:"maxGroups" dc:"最大群组数"` MaxGroupMembers uint `json:"maxGroupMembers" dc:"最大群成员数"` CreatedBy int64 `json:"createdBy" dc:"创建者"` } // ImTenantEditInp 修改/新增IM租户 type ImTenantEditInp struct { entity.ImTenant MaxUsers uint64 `json:"maxUsers" dc:"最大用户数"` MaxGroups uint64 `json:"maxGroups" dc:"最大群组数"` MaxGroupMembers uint `json:"maxGroupMembers" dc:"最大群成员数"` } func (in *ImTenantEditInp) Filter(ctx context.Context) (err error) { if e := g.Validator().Rules("required|length:2,64").Data(in.Code).Messages("租户编码不能为空|租户编码长度应为2到64个字符").Run(ctx); e != nil { return e.Current() } if e := g.Validator().Rules("required|max-length:128").Data(in.Name).Messages("租户名称不能为空|租户名称不能超过128个字符").Run(ctx); e != nil { return e.Current() } if in.DbName == "" && in.DbDsn == "" { return gerror.New("业务库名和独立连接串至少填写一个") } if !dict.HasOptionKey(consts.ImTenantStateOptions, in.State) { return gerror.New("租户状态不正确") } return } type ImTenantEditModel struct{} // ImTenantViewInp 获取指定IM租户信息 type ImTenantViewInp struct { Id int64 `json:"id" v:"required#ID不能为空" dc:"ID"` } func (in *ImTenantViewInp) Filter(ctx context.Context) (err error) { return } type ImTenantViewModel struct { entity.ImTenant MaxUsers uint64 `json:"maxUsers" dc:"最大用户数"` MaxGroups uint64 `json:"maxGroups" dc:"最大群组数"` MaxGroupMembers uint `json:"maxGroupMembers" dc:"最大群成员数"` CreatedBySumma *hook.MemberSumma `json:"createdBySumma" dc:"创建者摘要信息"` UpdatedBySumma *hook.MemberSumma `json:"updatedBySumma" dc:"更新者摘要信息"` DbDsnConfigured bool `json:"dbDsnConfigured" dc:"是否配置独立连接串"` TenantDbReachable bool `json:"tenantDbReachable" dc:"业务库是否可达"` TenantDbCheckError string `json:"tenantDbCheckError" dc:"业务库检查错误"` } // ImTenantListInp 获取IM租户列表 type ImTenantListInp struct { form.PageReq Id int64 `json:"id" dc:"ID"` Code string `json:"code" dc:"租户编码"` Name string `json:"name" dc:"租户名称"` DbName string `json:"dbName" dc:"业务库名"` State *int `json:"state" dc:"状态"` CreatedAt []*gtime.Time `json:"createdAt" dc:"创建时间"` } func (in *ImTenantListInp) Filter(ctx context.Context) (err error) { return } type ImTenantListModel struct { Id int64 `json:"id" dc:"ID"` Code string `json:"code" dc:"租户编码"` Name string `json:"name" dc:"租户名称"` TenantDesc string `json:"tenantDesc" dc:"租户描述"` DbName string `json:"dbName" dc:"业务库名"` State int `json:"state" dc:"状态"` MaxUsers uint64 `json:"maxUsers" dc:"最大用户数"` MaxGroups uint64 `json:"maxGroups" dc:"最大群组数"` MaxGroupMembers uint `json:"maxGroupMembers" dc:"最大群成员数"` DbDsnConfigured bool `json:"dbDsnConfigured" dc:"是否配置独立连接串"` CreatedBy int64 `json:"createdBy" dc:"创建者"` CreatedBySumma *hook.MemberSumma `json:"createdBySumma" dc:"创建者摘要信息"` UpdatedBy int64 `json:"updatedBy" dc:"更新者"` UpdatedBySumma *hook.MemberSumma `json:"updatedBySumma" dc:"更新者摘要信息"` CreatedAt *gtime.Time `json:"createdAt" dc:"创建时间"` UpdatedAt *gtime.Time `json:"updatedAt" dc:"修改时间"` } // ImTenantStatusInp 更新IM租户状态 type ImTenantStatusInp struct { Id int64 `json:"id" v:"required#ID不能为空" dc:"ID"` State int `json:"state" dc:"状态"` } func (in *ImTenantStatusInp) Filter(ctx context.Context) (err error) { if in.Id <= 0 { return gerror.New("ID不能为空") } if !dict.HasOptionKey(consts.ImTenantStateOptions, in.State) { return gerror.New("租户状态不正确") } return } type ImTenantStatusModel struct{}