120 lines
2.9 KiB
Go
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
|
|
}
|