github.com/bububa/oceanengine/marketing-api@v0.0.0-20210315120513-0b953137f7a6/model/report/liveroom/request.go (about)

     1  package liveroom
     2  
     3  import (
     4  	"encoding/json"
     5  	"net/url"
     6  	"strconv"
     7  	"time"
     8  
     9  	"github.com/bububa/oceanengine/marketing-api/enum"
    10  )
    11  
    12  type Request struct {
    13  	AdvertiserID uint64         `json:"advertiser_id,omitempty"`
    14  	StartTime    time.Time      `json:"start_time,omitempty"`  // 报表开始时间,格式为%Y-%m-%d %H:%M:%S,默认从7天前开始
    15  	EndTime      time.Time      `json:"end_time,omitempty"`    // 报表结束时间,格式为%Y-%m-%d %H:%M:%S,默认为今天,最大时间范围30天
    16  	Fields       []string       `json:"fields,omitempty"`      // 指标字段,默认传入指标"click_product_count", "live_orders_count", "pay_order_gmv", "pay_order_count", "order_convert_rate"
    17  	Filtering    *Filtering     `json:"filtering,omitempty"`   // 筛选字段
    18  	OrderField   string         `json:"order_field,omitempty"` // 排序指标字段,不传默认填空
    19  	OrderType    enum.OrderType `json:"order_type,omitempty"`  // 排序类型;默认值: DESC;允许值: ASC, DESC,不传入order_field时不保证顺序
    20  	Page         int            `json:"page,omitempty"`
    21  	PageSize     int            `json:"page_size,omitempty"` // 页面大小,默认20,不超过100
    22  }
    23  
    24  type Filtering struct {
    25  	ProductIDs []uint64 `json:"product_ids,omitempty"` // 商品id列表,最多传入100
    26  	RoomIDs    []uint64 `json:"room_ids,omitempty"`    // 直播间id列表,最多传入100
    27  }
    28  
    29  func (r Request) Encode() string {
    30  	values := &url.Values{}
    31  	values.Set("advertiser_id", strconv.FormatUint(r.AdvertiserID, 10))
    32  	if !r.StartTime.IsZero() {
    33  		values.Set("start_time", r.StartTime.Format("2006-01-02 15:04:05"))
    34  	}
    35  	if !r.EndTime.IsZero() {
    36  		values.Set("end_time", r.EndTime.Format("2006-01-02 15:04:05"))
    37  	}
    38  	if r.Fields != nil {
    39  		fields, _ := json.Marshal(r.Fields)
    40  		values.Set("fields", string(fields))
    41  	}
    42  	if r.Filtering != nil {
    43  		filtering, _ := json.Marshal(r.Filtering)
    44  		values.Set("filtering", string(filtering))
    45  	}
    46  	if r.OrderField != "" {
    47  		values.Set("order_field", r.OrderField)
    48  	}
    49  	if r.OrderType != "" {
    50  		values.Set("order_type", string(r.OrderType))
    51  	}
    52  	if r.Page > 0 {
    53  		values.Set("page", strconv.Itoa(r.Page))
    54  	}
    55  	if r.PageSize > 0 {
    56  		values.Set("page_size", strconv.Itoa(r.PageSize))
    57  	}
    58  	return values.Encode()
    59  }