go-twitch/api/entitlements/update_drops_entitlements.go

78 lines
2.5 KiB
Go
Raw 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 entitlements
import (
"context"
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
)
type UpdateDropsEntitlementsRequest struct {
// A list of IDs that identify the entitlements to update. You may specify a maximum of 100 IDs.
EntitlementIDs *[]string `json:"entitlement_ids,omitempty"`
// The fulfillment status to set the entitlements to.
FulfillmentStatus *FulfillmentStatus `json:"fulfillment_status,omitempty"`
}
type UpdateDropsEntitlementsResponse struct {
// A list that indicates which entitlements were successfully updated and those that werent.
Data []UpdateDropsEntitlementsData `json:"data"`
}
type UpdateDropsEntitlementsData struct {
// A string that indicates whether the status of the entitlements in the ids field were successfully updated.
Status UpdateStatus `json:"status"`
// The list of entitlements that the status in the status field applies to.
IDs []string `json:"ids"`
}
// Updates the Drop entitlements fulfillment status.
//
// The following table identifies which entitlements are updated based on the type of access token used.
// Access token type | Data thats updated
// ------------------|------------------------------------------------------------------------------------------------------------------------------------------
// App | Updates all entitlements with benefits owned by the organization in the access token.
// User | Updates all entitlements owned by the user in the access token and where the benefits are owned by the organization in the access token.
//
// Requires an app access token or user access token. The client ID in the access token must own the game.
func (c *Entitlements) UpdateDropsEntitlements(ctx context.Context, request *UpdateDropsEntitlementsRequest) (*UpdateDropsEntitlementsResponse, error) {
endpoint := c.baseUrl.ResolveReference(&url.URL{Path: "entitlements/drops"})
r, w := io.Pipe()
go func() {
if err := json.NewEncoder(w).Encode(request); err != nil {
w.CloseWithError(err)
} else {
w.Close()
}
}()
req, err := http.NewRequestWithContext(ctx, http.MethodPatch, endpoint.String(), r)
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 update drops entitlements (%d)", res.StatusCode)
}
var data UpdateDropsEntitlementsResponse
if err := json.NewDecoder(res.Body).Decode(&data); err != nil {
return nil, err
}
return &data, nil
}