171 lines
6.5 KiB
Go
171 lines
6.5 KiB
Go
package hostsalarysettlement
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type settlementUserID int64
|
|
|
|
func (v *settlementUserID) UnmarshalJSON(data []byte) error {
|
|
raw := strings.TrimSpace(string(data))
|
|
if raw == "" || raw == "null" {
|
|
*v = 0
|
|
return nil
|
|
}
|
|
if strings.HasPrefix(raw, `"`) {
|
|
var text string
|
|
if err := json.Unmarshal(data, &text); err != nil {
|
|
return err
|
|
}
|
|
raw = strings.TrimSpace(text)
|
|
if raw == "" {
|
|
*v = 0
|
|
return nil
|
|
}
|
|
}
|
|
parsed, err := strconv.ParseInt(raw, 10, 64)
|
|
if err != nil {
|
|
return fmt.Errorf("invalid settlement user id %q", raw)
|
|
}
|
|
*v = settlementUserID(parsed)
|
|
return nil
|
|
}
|
|
|
|
func settlementUserIDValues(items []settlementUserID) []int64 {
|
|
out := make([]int64, 0, len(items))
|
|
for _, item := range items {
|
|
out = append(out, int64(item))
|
|
}
|
|
return out
|
|
}
|
|
|
|
type userDTO struct {
|
|
UserID string `json:"user_id"`
|
|
DisplayUserID string `json:"display_user_id"`
|
|
Username string `json:"username"`
|
|
Avatar string `json:"avatar"`
|
|
}
|
|
|
|
type pendingDTO struct {
|
|
UserID string `json:"user_id"`
|
|
User userDTO `json:"user"`
|
|
AgencyOwnerUserID string `json:"agency_owner_user_id"`
|
|
AgencyOwner userDTO `json:"agency_owner"`
|
|
Role string `json:"role"`
|
|
CycleKey string `json:"cycle_key"`
|
|
RegionID int64 `json:"region_id"`
|
|
RegionName string `json:"region_name"`
|
|
PolicyID uint64 `json:"policy_id"`
|
|
PolicyName string `json:"policy_name"`
|
|
SettlementType string `json:"settlement_type"`
|
|
TriggerMode string `json:"trigger_mode"`
|
|
LevelNo int32 `json:"level_no"`
|
|
RequiredDiamonds int64 `json:"required_diamonds"`
|
|
TotalDiamonds int64 `json:"total_diamonds"`
|
|
HostSalaryUSDMinorTarget int64 `json:"host_salary_usd_minor_target"`
|
|
HostSalaryUSDTarget string `json:"host_salary_usd_target"`
|
|
HostSalaryUSDMinorDelta int64 `json:"host_salary_usd_minor_delta"`
|
|
HostSalaryUSDDelta string `json:"host_salary_usd_delta"`
|
|
HostCoinRewardTarget int64 `json:"host_coin_reward_target"`
|
|
HostCoinRewardDelta int64 `json:"host_coin_reward_delta"`
|
|
AgencySalaryUSDMinorTarget int64 `json:"agency_salary_usd_minor_target"`
|
|
AgencySalaryUSDTarget string `json:"agency_salary_usd_target"`
|
|
AgencySalaryUSDMinorDelta int64 `json:"agency_salary_usd_minor_delta"`
|
|
AgencySalaryUSDDelta string `json:"agency_salary_usd_delta"`
|
|
ResidualUSDMinorDelta int64 `json:"residual_usd_minor_delta"`
|
|
ResidualUSDDelta string `json:"residual_usd_delta"`
|
|
TotalUSDMinorDelta int64 `json:"total_usd_minor_delta"`
|
|
TotalUSDDelta string `json:"total_usd_delta"`
|
|
SettledLevelNo int32 `json:"settled_level_no"`
|
|
SettledHostSalaryUSDMinor int64 `json:"settled_host_salary_usd_minor"`
|
|
SettledHostSalaryUSD string `json:"settled_host_salary_usd"`
|
|
SettledHostCoinReward int64 `json:"settled_host_coin_reward"`
|
|
SettledAgencySalaryUSDMinor int64 `json:"settled_agency_salary_usd_minor"`
|
|
SettledAgencySalaryUSD string `json:"settled_agency_salary_usd"`
|
|
LastSettledTotalDiamonds int64 `json:"last_settled_total_diamonds"`
|
|
ResidualUSDMinor int64 `json:"residual_usd_minor"`
|
|
ResidualUSD string `json:"residual_usd"`
|
|
MonthEndClearedAtMS int64 `json:"month_end_cleared_at_ms"`
|
|
Status string `json:"status"`
|
|
}
|
|
|
|
type settlementDTO struct {
|
|
SettlementID string `json:"settlement_id"`
|
|
CommandID string `json:"command_id"`
|
|
TransactionID string `json:"transaction_id"`
|
|
SettlementType string `json:"settlement_type"`
|
|
TriggerMode string `json:"trigger_mode"`
|
|
SettlementRole string `json:"settlement_role"`
|
|
UserID string `json:"user_id"`
|
|
User userDTO `json:"user"`
|
|
AgencyOwnerUserID string `json:"agency_owner_user_id"`
|
|
AgencyOwner userDTO `json:"agency_owner"`
|
|
CycleKey string `json:"cycle_key"`
|
|
PolicyID uint64 `json:"policy_id"`
|
|
LevelNo int32 `json:"level_no"`
|
|
TotalDiamonds int64 `json:"total_diamonds"`
|
|
HostSalaryUSDMinorDelta int64 `json:"host_salary_usd_minor_delta"`
|
|
HostSalaryUSDDelta string `json:"host_salary_usd_delta"`
|
|
HostCoinRewardDelta int64 `json:"host_coin_reward_delta"`
|
|
AgencySalaryUSDMinorDelta int64 `json:"agency_salary_usd_minor_delta"`
|
|
AgencySalaryUSDDelta string `json:"agency_salary_usd_delta"`
|
|
ResidualUSDMinorDelta int64 `json:"residual_usd_minor_delta"`
|
|
ResidualUSDDelta string `json:"residual_usd_delta"`
|
|
Status string `json:"status"`
|
|
Reason string `json:"reason"`
|
|
CreatedAtMS int64 `json:"created_at_ms"`
|
|
}
|
|
|
|
type query struct {
|
|
Page int
|
|
PageSize int
|
|
CycleKey string
|
|
SettlementType string
|
|
Status string
|
|
UserID int64
|
|
AgencyOwnerUserID int64
|
|
PolicyID uint64
|
|
StartAtMS int64
|
|
EndAtMS int64
|
|
}
|
|
|
|
type pendingQuery struct {
|
|
Page int
|
|
PageSize int
|
|
Role string
|
|
CycleKey string
|
|
SettlementType string
|
|
TriggerMode string
|
|
RegionID int64
|
|
CountryID int64
|
|
CountryCode string
|
|
UserID int64
|
|
}
|
|
|
|
type settleRequest struct {
|
|
Role string `json:"role"`
|
|
CycleKey string `json:"cycle_key"`
|
|
SettlementType string `json:"settlement_type"`
|
|
TriggerMode string `json:"trigger_mode"`
|
|
RegionID int64 `json:"region_id"`
|
|
CountryID int64 `json:"country_id"`
|
|
CountryCode string `json:"country_code"`
|
|
UserIDs []settlementUserID `json:"user_ids"`
|
|
}
|
|
|
|
type settleResultDTO struct {
|
|
Role string `json:"role"`
|
|
CycleKey string `json:"cycle_key"`
|
|
SettlementType string `json:"settlement_type"`
|
|
TriggerMode string `json:"trigger_mode"`
|
|
RequestedCount int `json:"requested_count"`
|
|
ProcessedCount int `json:"processed_count"`
|
|
SuccessCount int `json:"success_count"`
|
|
SkippedCount int `json:"skipped_count"`
|
|
FailureCount int `json:"failure_count"`
|
|
Records []settlementDTO `json:"records"`
|
|
}
|