-
Notifications
You must be signed in to change notification settings - Fork 68
/
channel_points_rewards.go
116 lines (101 loc) · 4.62 KB
/
channel_points_rewards.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package database
import (
"database/sql"
)
type ChannelPointsReward struct {
ID string `db:"id" json:"id" dbs:"cpr.id"`
BroadcasterID string `db:"broadcaster_id" json:"broadcaster_id"`
BroadcasterLogin string `db:"broadcaster_login" dbi:"false" json:"broadcaster_login"`
BroadcasterName string `db:"broadcaster_name" dbi:"false" json:"broadcaster_name"`
RewardImage sql.NullString `db:"reward_image" json:"-"`
RealRewardImage *string `json:"image"`
BackgroundColor string `db:"background_color" json:"background_color"`
IsEnabled *bool `db:"is_enabled" json:"is_enabled"`
Cost *int `db:"cost" json:"cost"`
Title string `db:"title" dbs:"cpr.title" json:"title"`
RewardPrompt string `db:"reward_prompt" json:"prompt"`
IsUserInputRequired bool `db:"is_user_input_required" json:"is_user_input_required"`
MaxPerStream `json:"max_per_stream_setting"`
MaxPerUserPerStream `json:"max_per_user_per_stream_setting"`
GlobalCooldown `json:"global_cooldown_setting"`
IsPaused bool `db:"is_paused" json:"is_paused"`
IsInStock bool `db:"is_in_stock" json:"is_in_stock"`
DefaultImage `dbi:"false" json:"default_image"`
ShouldRedemptionsSkipQueue bool `db:"should_redemptions_skip_queue" json:"should_redemptions_skip_request_queue"`
RedemptionsRedeemedCurrentStream *int `db:"redemptions_redeemed_current_stream" json:"redemptions_redeemed_current_stream"`
CooldownExpiresAt sql.NullString `db:"cooldown_expires_at" json:"-"`
RealCooldownExpiresAt *string `json:"cooldown_expires_at"`
}
type MaxPerStream struct {
StreamMaxEnabled bool `db:"stream_max_enabled" json:"is_enabled" dbi:"force"`
StreamMaxCount *int `db:"stream_max_count" json:"max_per_stream"`
}
type MaxPerUserPerStream struct {
StreamUserMaxEnabled bool `db:"stream_user_max_enabled" json:"is_enabled" dbi:"force"`
StreamMUserMaxCount *int `db:"stream_user_max_count" json:"max_per_user_per_stream"`
}
type GlobalCooldown struct {
GlobalCooldownEnabled bool `db:"global_cooldown_enabled" json:"is_enabled" dbi:"force"`
GlobalCooldownSeconds *int `db:"global_cooldown_seconds" json:"global_cooldown_seconds"`
}
type DefaultImage struct {
URL1x string `json:"url_1x"`
URL2x string `json:"url_2x"`
URL4x string `json:"url_4x"`
}
func (q *Query) GetChannelPointsReward(cpr ChannelPointsReward) (*DBResponse, error) {
var r []ChannelPointsReward
sql := generateSQL("select cpr.*, u1.user_login as broadcaster_login, u1.display_name as broadcaster_name from channel_points_rewards cpr join users u1 on cpr.broadcaster_id = u1.id", cpr, SEP_AND)
rows, err := q.DB.NamedQuery(sql+q.SQL, cpr)
if err != nil {
return nil, err
}
for rows.Next() {
var cpr ChannelPointsReward
err := rows.StructScan(&cpr)
if err != nil {
return nil, err
}
if cpr.CooldownExpiresAt.Valid {
cpr.RealCooldownExpiresAt = &cpr.CooldownExpiresAt.String
}
if cpr.RewardImage.Valid {
cpr.RealRewardImage = &cpr.RewardImage.String
}
cpr.DefaultImage = DefaultImage{
URL1x: "https://static-cdn.jtvnw.net/custom-reward-images/default-1.png",
URL2x: "https://static-cdn.jtvnw.net/custom-reward-images/default-2.png",
URL4x: "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png",
}
r = append(r, cpr)
}
dbr := DBResponse{
Data: r,
Limit: q.Limit,
Total: len(r),
}
if len(r) != q.Limit {
q.PaginationCursor = ""
}
dbr.Cursor = q.PaginationCursor
return &dbr, err
}
func (q *Query) InsertChannelPointsReward(r ChannelPointsReward) error {
sql := generateInsertSQL("channel_points_rewards", "", r, false)
_, err := q.DB.NamedExec(sql, r)
return err
}
func (q *Query) UpdateChannelPointsReward(r ChannelPointsReward) error {
sql := generateUpdateSQL("channel_points_rewards", []string{"id"}, r)
_, err := q.DB.NamedExec(sql, r)
return err
}
func (q *Query) DeleteChannelPointsReward(id string) error {
tx := q.DB.MustBegin()
tx.Exec("delete from channel_points_rewards where id=$1", id)
tx.Exec("update channel_points_redemptions set redemption_status='FULFILLED' where redemption_status='UNFULFILLED' and reward_id=$1", id)
err := tx.Commit()
return err
}