package dto import ( "strings" "time" "quyun/v2/app/requests" "quyun/v2/pkg/consts" "go.ipao.vip/gen/types" ) type UserPageFilter struct { requests.Pagination `json:",inline" query:",inline"` requests.SortQueryFilter `json:",inline" query:",inline"` ID *int64 `json:"id,omitempty" query:"id"` Username *string `json:"username,omitempty" query:"username"` Status *consts.UserStatus `json:"status,omitempty" query:"status"` // TenantID filters users by membership in the given tenant. TenantID *int64 `json:"tenant_id,omitempty" query:"tenant_id"` // Role filters users containing a role (user/super_admin). Role *consts.Role `json:"role,omitempty" query:"role"` CreatedAtFrom *time.Time `json:"created_at_from,omitempty" query:"created_at_from"` CreatedAtTo *time.Time `json:"created_at_to,omitempty" query:"created_at_to"` VerifiedAtFrom *time.Time `json:"verified_at_from,omitempty" query:"verified_at_from"` VerifiedAtTo *time.Time `json:"verified_at_to,omitempty" query:"verified_at_to"` } func (f *UserPageFilter) UsernameTrimmed() string { if f == nil || f.Username == nil { return "" } return strings.TrimSpace(*f.Username) } type UserItem struct { ID int64 `json:"id"` Username string `json:"username"` Roles types.Array[consts.Role] `json:"roles"` Status consts.UserStatus `json:"status"` StatusDescription string `json:"status_description,omitempty"` Balance int64 `json:"balance"` BalanceFrozen int64 `json:"balance_frozen"` VerifiedAt time.Time `json:"verified_at"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` OwnedTenantCount int64 `json:"owned_tenant_count"` JoinedTenantCount int64 `json:"joined_tenant_count"` } type UserStatusUpdateForm struct { Status consts.UserStatus `json:"status" validate:"required,oneof=normal disabled"` } type UserStatistics struct { Status consts.UserStatus `json:"status"` StatusDescription string `json:"status_description"` Count int64 `json:"count"` }