go-twitch/api/charity/get_charity_campaign_donati...

88 lines
3.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package charity
import (
"context"
"encoding/json"
"fmt"
"net/http"
"github.com/google/go-querystring/query"
"go.fifitido.net/twitch/api/endpoint"
"go.fifitido.net/twitch/api/types"
)
type GetCharityCampaignDonationsParams struct {
// The ID of the broadcaster thats currently running a charity campaign. This ID must match the user ID in the access token.
BroadcasterID string `json:"broadcaster_id"`
// The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100. The default is 20.
First *int `url:"first,omitempty"`
// The cursor used to get the next page of results. The Pagination object in the response contains the cursors value.
// Read more: https://dev.twitch.tv/docs/api/guide#pagination
After *types.Cursor `url:"after,omitempty"`
}
type GetCharityCampaignDonationsResponse struct {
// A list that contains the donations that users have made to the broadcasters charity campaign.
// The list is empty if the broadcaster is not currently running a charity campaign.
// The donation information is not available after the campaign ends.
Data []CharityCampaignDonation `json:"data"`
// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through.
// Read more: https://dev.twitch.tv/docs/api/guide#pagination
Pagination types.Pagination `json:"pagination"`
}
type CharityCampaignDonation struct {
// An ID that identifies the donation. The ID is unique across campaigns
ID string `json:"id"`
// An ID that identifies the charity campaign that the donation applies to.
CampaignID string `json:"campaign_id"`
// An ID that identifies a user that donated money to the campaign.
UserID string `json:"user_id"`
// The users login name.
UserLogin string `json:"user_login"`
// The users display name.
UserName string `json:"user_name"`
// An object that contains the amount of money that the user donated.
Amount types.CurrencyAmount `json:"amount"`
}
// Gets the list of donations that users have made to the broadcasters active charity campaign.
//
// To receive events as donations occur, subscribe to the channel.charity_campaign.donate subscription type.
//
// Requires a user access token that includes the channel:read:charity scope.
func (c *Charity) GetCharityCampaignDonations(ctx context.Context, params *GetCharityCampaignDonationsParams) (*GetCharityCampaignDonationsResponse, error) {
v, _ := query.Values(params)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint.Make(c.baseUrl, "charity/campaigns/donations", v), nil)
if err != nil {
return nil, err
}
res, err := c.client.Do(req)
if err != nil {
return nil, err
}
defer res.Body.Close()
statusOK := res.StatusCode >= 200 && res.StatusCode < 300
if !statusOK {
return nil, fmt.Errorf("failed to get charity campaign donations (%d)", res.StatusCode)
}
var respBody GetCharityCampaignDonationsResponse
if err := json.NewDecoder(res.Body).Decode(&respBody); err != nil {
return nil, err
}
return &respBody, nil
}