-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcustom_integration_guilds.go
More file actions
139 lines (115 loc) · 3.85 KB
/
Copy pathcustom_integration_guilds.go
File metadata and controls
139 lines (115 loc) · 3.85 KB
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package database
import (
"context"
"github.com/jackc/pgx/v4/pgxpool"
)
type CustomIntegrationGuildsTable struct {
*pgxpool.Pool
}
func newCustomIntegrationGuildsTable(db *pgxpool.Pool) *CustomIntegrationGuildsTable {
return &CustomIntegrationGuildsTable{
db,
}
}
func (i CustomIntegrationGuildsTable) Schema() string {
return `
CREATE TABLE IF NOT EXISTS custom_integration_guilds(
"integration_id" int NOT NULL,
"guild_id" int8 NOT NULL,
FOREIGN KEY("integration_id") REFERENCES custom_integrations("id") ON DELETE CASCADE,
PRIMARY KEY("integration_id", "guild_id")
);
CREATE INDEX IF NOT EXISTS custom_integration_guilds_guild_id ON custom_integration_guilds("guild_id");
`
}
func (i *CustomIntegrationGuildsTable) GetGuildIntegrations(ctx context.Context, guildId uint64) ([]CustomIntegration, error) {
query := `
SELECT integrations.id, integrations.owner_id, integrations.webhook_url, integrations.http_method, integrations.name, integrations.description, integrations.image_url, integrations.privacy_policy_url, integrations.public, integrations.approved
FROM custom_integration_guilds
INNER JOIN custom_integrations AS integrations ON custom_integration_guilds.integration_id = integrations.id
WHERE custom_integration_guilds.guild_id = $1;
`
rows, err := i.Query(ctx, query, guildId)
if err != nil {
return nil, err
}
var integrations []CustomIntegration
for rows.Next() {
var integration CustomIntegration
err := rows.Scan(
&integration.Id,
&integration.OwnerId,
&integration.WebhookUrl,
&integration.HttpMethod,
&integration.Name,
&integration.Description,
&integration.ImageUrl,
&integration.PrivacyPolicyUrl,
&integration.Public,
&integration.Approved,
)
if err != nil {
return nil, err
}
integrations = append(integrations, integration)
}
return integrations, nil
}
func (i *CustomIntegrationGuildsTable) GetGuildIntegrationCount(ctx context.Context, guildId uint64) (count int, err error) {
query := `SELECT COUNT(*) FROM custom_integration_guilds WHERE "guild_id" = $1;`
err = i.QueryRow(ctx, query, guildId).Scan(&count)
return
}
func (i *CustomIntegrationGuildsTable) IsActive(ctx context.Context, integrationId int, guildId uint64) (isActive bool, err error) {
query := `
SELECT EXISTS(
SELECT 1
FROM custom_integration_guilds
WHERE "integration_id" = $1 AND "guild_id" = $2
);`
err = i.QueryRow(ctx, query, integrationId, guildId).Scan(&isActive)
return
}
func (i *CustomIntegrationGuildsTable) AddToGuild(ctx context.Context, integrationId int, guildId uint64) error {
query := `
INSERT INTO custom_integration_guilds("integration_id", "guild_id")
VALUES ($1, $2)
ON CONFLICT ("integration_id", "guild_id") DO NOTHING;`
_, err := i.Exec(ctx, query, integrationId, guildId)
return err
}
func (i *CustomIntegrationGuildsTable) AddToGuildWithSecrets(ctx context.Context, integrationId int, guildId uint64, secrets map[int]string) error {
tx, err := i.Begin(ctx)
if err != nil {
return err
}
defer tx.Rollback(ctx)
// Add integration to guild
{
query := `
INSERT INTO custom_integration_guilds("integration_id", "guild_id")
VALUES ($1, $2)
ON CONFLICT ("integration_id", "guild_id") DO NOTHING;`
if _, err := tx.Exec(ctx, query, integrationId, guildId); err != nil {
return err
}
}
// Add secrets to guild
for secretId, value := range secrets {
query := `
INSERT INTO custom_integration_secret_values("secret_id", "integration_id", "guild_id", "value")
VALUES($1, $2, $3, $4);
`
if _, err := tx.Exec(ctx, query, secretId, integrationId, guildId, value); err != nil {
return err
}
}
return tx.Commit(ctx)
}
func (i *CustomIntegrationGuildsTable) RemoveFromGuild(ctx context.Context, integrationId int, guildId uint64) (err error) {
query := `
DELETE FROM custom_integration_guilds
WHERE "integration_id" = $1 AND "guild_id" = $2;`
_, err = i.Exec(ctx, query, integrationId, guildId)
return
}