-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathsettings.go
More file actions
128 lines (113 loc) · 3.14 KB
/
Copy pathsettings.go
File metadata and controls
128 lines (113 loc) · 3.14 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
package database
import (
"context"
"github.com/jackc/pgx/v4"
"github.com/jackc/pgx/v4/pgxpool"
)
const DefaultTicketLimit uint8 = 10
type Settings struct {
ContextMenuPermissionLevel int `json:"context_menu_permission_level,string"`
ContextMenuAddSender bool `json:"context_menu_add_sender"`
ContextMenuPanel *int `json:"context_menu_panel"`
AnonymiseDashboardResponses bool `json:"anonymise_dashboard_responses"`
TicketLimit uint8 `json:"ticket_limit"`
}
func defaultSettings() Settings {
return Settings{
ContextMenuPermissionLevel: 0,
ContextMenuAddSender: true,
ContextMenuPanel: nil,
AnonymiseDashboardResponses: false,
TicketLimit: DefaultTicketLimit,
}
}
type SettingsTable struct {
*pgxpool.Pool
}
func newSettingsTable(db *pgxpool.Pool) *SettingsTable {
return &SettingsTable{
db,
}
}
func (s SettingsTable) Schema() string {
return `
CREATE TABLE IF NOT EXISTS settings(
"guild_id" int8 NOT NULL,
"context_menu_permission_level" int DEFAULT '0',
"context_menu_add_sender" bool DEFAULT 't',
"context_menu_panel" int DEFAULT NULL,
"anonymise_dashboard_responses" bool DEFAULT 'f',
"ticket_limit" int2 NOT NULL DEFAULT 10,
FOREIGN KEY("context_menu_panel") REFERENCES panels("panel_id") ON DELETE SET NULL,
PRIMARY KEY("guild_id")
);
ALTER TABLE settings ADD COLUMN IF NOT EXISTS "ticket_limit" int2 NOT NULL DEFAULT 10;
`
}
func (s *SettingsTable) Get(ctx context.Context, guildId uint64) (Settings, error) {
query := `
SELECT
"context_menu_permission_level",
"context_menu_add_sender",
"context_menu_panel",
"anonymise_dashboard_responses",
"ticket_limit"
FROM settings
WHERE "guild_id" = $1;
`
var settings Settings
err := s.QueryRow(ctx, query, guildId).Scan(
&settings.ContextMenuPermissionLevel,
&settings.ContextMenuAddSender,
&settings.ContextMenuPanel,
&settings.AnonymiseDashboardResponses,
&settings.TicketLimit,
)
if err == nil {
return settings, nil
} else if err == pgx.ErrNoRows {
return defaultSettings(), nil
} else {
return settings, err
}
}
func (s *SettingsTable) Set(ctx context.Context, guildId uint64, settings Settings) (err error) {
query := `
INSERT INTO settings(
"guild_id",
"context_menu_permission_level",
"context_menu_add_sender",
"context_menu_panel",
"anonymise_dashboard_responses",
"ticket_limit"
)
VALUES($1, $2, $3, $4, $5, $6)
ON CONFLICT("guild_id")
DO UPDATE SET
"context_menu_permission_level" = $2,
"context_menu_add_sender" = $3,
"context_menu_panel" = $4,
"anonymise_dashboard_responses" = $5,
"ticket_limit" = $6
;
`
_, err = s.Exec(ctx, query,
guildId,
settings.ContextMenuPermissionLevel,
settings.ContextMenuAddSender,
settings.ContextMenuPanel,
settings.AnonymiseDashboardResponses,
settings.TicketLimit,
)
return
}
func (s *SettingsTable) SetContextMenuPermissionLevel(ctx context.Context, guildId uint64, permissionLevel int) (err error) {
query := `
INSERT INTO settings("guild_id", "context_menu_permission_level")
VALUES($1, $2)
ON CONFLICT("guild_id")
DO UPDATE SET "context_menu_permission_level" = $2;
`
_, err = s.Exec(ctx, query, guildId, permissionLevel)
return
}