2026-07-02 14:22:37 +08:00

120 lines
2.9 KiB
Go

package hostwithdrawal
import (
"errors"
"strings"
)
const (
recordTypeSalaryTransfer = "salary_transfer"
recordTypeWithdrawal = "withdrawal"
statusCompleted = "completed"
statusPending = "pending"
statusApproved = "approved"
statusRejected = "rejected"
assetCoinSellerCoin = "COIN_SELLER_COIN"
bizSalaryTransfer = "salary_transfer_to_coin_seller"
transactionSucceeded = "succeeded"
assetHostSalary = "HOST_SALARY_USD"
assetAgencySalary = "AGENCY_SALARY_USD"
assetBDSalary = "BD_SALARY_USD"
assetAdminSalary = "ADMIN_SALARY_USD"
)
var errInvalidArgument = errors.New("invalid argument")
type listQuery struct {
Page int
PageSize int
AppCode string
RecordType string
Identity string
SalaryAssetType string
Status string
Keyword string
StartAtMS int64
EndAtMS int64
}
func normalizeListQuery(query listQuery) (listQuery, error) {
if query.Page < 1 {
query.Page = 1
}
if query.PageSize < 1 {
query.PageSize = 20
}
if query.PageSize > 100 {
query.PageSize = 100
}
query.AppCode = strings.ToLower(strings.TrimSpace(query.AppCode))
query.RecordType = strings.TrimSpace(query.RecordType)
query.Identity = strings.TrimSpace(query.Identity)
query.Status = strings.TrimSpace(query.Status)
query.Keyword = strings.TrimSpace(query.Keyword)
if query.StartAtMS > 0 && query.EndAtMS > 0 && query.StartAtMS >= query.EndAtMS {
return listQuery{}, errInvalidArgument
}
switch strings.ToLower(query.RecordType) {
case "", "all":
query.RecordType = ""
case recordTypeSalaryTransfer:
query.RecordType = recordTypeSalaryTransfer
case recordTypeWithdrawal:
query.RecordType = recordTypeWithdrawal
default:
return listQuery{}, errInvalidArgument
}
salaryAssetType, identity, err := normalizeIdentity(query.Identity)
if err != nil {
return listQuery{}, err
}
query.SalaryAssetType = salaryAssetType
query.Identity = identity
switch strings.ToLower(query.Status) {
case "", "all":
query.Status = ""
case statusCompleted:
query.Status = statusCompleted
case statusPending:
query.Status = statusPending
case statusApproved:
query.Status = statusApproved
case statusRejected:
query.Status = statusRejected
default:
return listQuery{}, errInvalidArgument
}
return query, nil
}
func normalizeIdentity(value string) (string, string, error) {
switch strings.ToUpper(strings.TrimSpace(value)) {
case "", "ALL":
return "", "", nil
case "HOST", assetHostSalary:
return assetHostSalary, "host", nil
case "AGENCY", assetAgencySalary:
return assetAgencySalary, "agency", nil
case "BD", assetBDSalary:
return assetBDSalary, "bd", nil
case "ADMIN", "BD_LEADER", "BD_LEADER_ADMIN", assetAdminSalary:
return assetAdminSalary, "bd_leader_admin", nil
default:
return "", "", errInvalidArgument
}
}
func identityFromAsset(assetType string) string {
_, identity, err := normalizeIdentity(assetType)
if err != nil {
return ""
}
return identity
}