93 lines
2.8 KiB
Go
93 lines
2.8 KiB
Go
package dto
|
||
|
||
import (
|
||
"errors"
|
||
"strings"
|
||
"time"
|
||
|
||
"quyun/v2/app/requests"
|
||
"quyun/v2/database/models"
|
||
"quyun/v2/pkg/consts"
|
||
)
|
||
|
||
type TenantFilter struct {
|
||
// Pagination page/limit.
|
||
requests.Pagination `json:",inline" query:",inline"`
|
||
|
||
// SortQueryFilter defines asc/desc ordering.
|
||
requests.SortQueryFilter `json:",inline" query:",inline"`
|
||
|
||
Name *string `json:"name,omitempty" query:"name"`
|
||
Code *string `json:"code,omitempty" query:"code"`
|
||
ID *int64 `json:"id,omitempty" query:"id"`
|
||
UserID *int64 `json:"user_id,omitempty" query:"user_id"`
|
||
Status *consts.TenantStatus `json:"status,omitempty" query:"status"`
|
||
|
||
ExpiredAtFrom *time.Time `json:"expired_at_from,omitempty" query:"expired_at_from"`
|
||
ExpiredAtTo *time.Time `json:"expired_at_to,omitempty" query:"expired_at_to"`
|
||
|
||
CreatedAtFrom *time.Time `json:"created_at_from,omitempty" query:"created_at_from"`
|
||
CreatedAtTo *time.Time `json:"created_at_to,omitempty" query:"created_at_to"`
|
||
}
|
||
|
||
func (f *TenantFilter) NameTrimmed() string {
|
||
if f == nil || f.Name == nil {
|
||
return ""
|
||
}
|
||
return strings.TrimSpace(*f.Name)
|
||
}
|
||
|
||
func (f *TenantFilter) CodeTrimmed() string {
|
||
if f == nil || f.Code == nil {
|
||
return ""
|
||
}
|
||
return strings.ToLower(strings.TrimSpace(*f.Code))
|
||
}
|
||
|
||
type TenantItem struct {
|
||
*models.Tenant
|
||
|
||
UserCount int64 `json:"user_count"`
|
||
// IncomeAmountPaidSum 累计收入金额(单位:分,CNY):按 orders 聚合得到的已支付净收入(不含退款中/已退款订单)。
|
||
IncomeAmountPaidSum int64 `json:"income_amount_paid_sum"`
|
||
StatusDescription string `json:"status_description"`
|
||
|
||
Owner *TenantOwnerUserLite `json:"owner,omitempty"`
|
||
AdminUsers []*TenantAdminUserLite `json:"admin_users,omitempty"`
|
||
}
|
||
|
||
type TenantOwnerUserLite struct {
|
||
ID int64 `json:"id"`
|
||
Username string `json:"username"`
|
||
}
|
||
|
||
type TenantAdminUserLite struct {
|
||
ID int64 `json:"id"`
|
||
Username string `json:"username"`
|
||
}
|
||
|
||
type TenantCreateForm struct {
|
||
Code string `json:"code" validate:"required,max=64"`
|
||
Name string `json:"name" validate:"required,max=128"`
|
||
AdminUserID int64 `json:"admin_user_id" validate:"required,gt=0"`
|
||
// Duration 租户有效期(天),从“创建时刻”起算;与续期接口保持一致。
|
||
Duration int `json:"duration" validate:"required,oneof=7 30 90 180 365"`
|
||
}
|
||
|
||
type TenantExpireUpdateForm struct {
|
||
Duration int `json:"duration" validate:"required,oneof=7 30 90 180 365"`
|
||
}
|
||
|
||
// Duration
|
||
func (form *TenantExpireUpdateForm) ParseDuration() (time.Duration, error) {
|
||
duration := time.Duration(form.Duration) * 24 * time.Hour
|
||
if duration == 0 {
|
||
return 0, errors.New("invalid parsed duration")
|
||
}
|
||
return duration, nil
|
||
}
|
||
|
||
type TenantStatusUpdateForm struct {
|
||
Status consts.TenantStatus `json:"status" validate:"required,oneof=normal disabled"`
|
||
}
|