From e5c64fd8e83b43a7b81fbb1f845f43e02a969622 Mon Sep 17 00:00:00 2001 From: biast12 Date: Sat, 31 Jan 2026 23:20:20 +0100 Subject: [PATCH 1/3] RM-14: Per panel ticket limit --- app/http/endpoints/api/panel/panelcreate.go | 2 ++ app/http/endpoints/api/panel/panelupdate.go | 1 + app/http/endpoints/api/panel/validation.go | 15 +++++++++++++++ .../components/manage/PanelCreationForm.svelte | 8 ++++++++ 4 files changed, 26 insertions(+) diff --git a/app/http/endpoints/api/panel/panelcreate.go b/app/http/endpoints/api/panel/panelcreate.go index 0768e6c..f449a81 100644 --- a/app/http/endpoints/api/panel/panelcreate.go +++ b/app/http/endpoints/api/panel/panelcreate.go @@ -51,6 +51,7 @@ type panelBody struct { TranscriptChannelId *uint64 `json:"transcript_channel_id,string"` UseThreads bool `json:"use_threads"` TicketNotificationChannel *uint64 `json:"ticket_notification_channel,string"` + TicketLimit *uint8 `json:"ticket_limit"` } func (p *panelBody) IntoPanelMessageData(customId string, isPremium bool) panelMessageData { @@ -241,6 +242,7 @@ func CreatePanel(c *gin.Context) { TranscriptChannelId: data.TranscriptChannelId, UseThreads: data.UseThreads, TicketNotificationChannel: data.TicketNotificationChannel, + TicketLimit: data.TicketLimit, } createOptions := panelCreateOptions{ diff --git a/app/http/endpoints/api/panel/panelupdate.go b/app/http/endpoints/api/panel/panelupdate.go index 45f1484..8eeca2f 100644 --- a/app/http/endpoints/api/panel/panelupdate.go +++ b/app/http/endpoints/api/panel/panelupdate.go @@ -240,6 +240,7 @@ func UpdatePanel(c *gin.Context) { TranscriptChannelId: data.TranscriptChannelId, UseThreads: data.UseThreads, TicketNotificationChannel: data.TicketNotificationChannel, + TicketLimit: data.TicketLimit, } // insert mention data diff --git a/app/http/endpoints/api/panel/validation.go b/app/http/endpoints/api/panel/validation.go index 23c53e2..09f7572 100644 --- a/app/http/endpoints/api/panel/validation.go +++ b/app/http/endpoints/api/panel/validation.go @@ -76,6 +76,7 @@ func panelValidators() []validation.Validator[PanelValidationContext] { validateAccessControlList, validatePendingCategory, validateTicketNotificationChannel, + validateTicketLimit, } } @@ -440,3 +441,17 @@ func validateTicketNotificationChannel(ctx PanelValidationContext) validation.Va return nil } } + +func validateTicketLimit(ctx PanelValidationContext) validation.ValidationFunc { + return func() error { + if ctx.Data.TicketLimit == nil { + return nil + } + + if *ctx.Data.TicketLimit < 1 || *ctx.Data.TicketLimit > 10 { + return validation.NewInvalidInputError("Ticket limit must be between 1 and 10") + } + + return nil + } +} diff --git a/frontend/src/components/manage/PanelCreationForm.svelte b/frontend/src/components/manage/PanelCreationForm.svelte index acf4072..eee9c38 100644 --- a/frontend/src/components/manage/PanelCreationForm.svelte +++ b/frontend/src/components/manage/PanelCreationForm.svelte @@ -327,6 +327,14 @@ bind:value={data.category_id} /> + + + {#each Array.from({ length: 10 }, (_, i) => i + 1) as n} + + {/each} + + +
{#each forms as form} From 452942bbc0754ceb7fbc4e0bf4337b67f9c7c150 Mon Sep 17 00:00:00 2001 From: Ben Date: Tue, 17 Feb 2026 11:37:30 +0000 Subject: [PATCH 2/3] bump db Signed-off-by: Ben --- go.mod | 4 +++- go.sum | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 11cc5aa..0a53d89 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,8 @@ toolchain go1.24.2 //replace github.com/TicketsBot-cloud/database => ../database +//replace github.com/TicketsBot-cloud/common => ../common + //replace github.com/TicketsBot-cloud/gdl => ../gdl //replace github.com/TicketsBot-cloud/logarchiver => ../logarchiver @@ -20,7 +22,7 @@ require ( github.com/BurntSushi/toml v1.2.1 github.com/TicketsBot-cloud/archiverclient v0.0.0-20251015181023-f0b66a074704 github.com/TicketsBot-cloud/common v0.0.0-20260210203202-54154661338e - github.com/TicketsBot-cloud/database v0.0.0-20260215113825-54c67fb267fc + github.com/TicketsBot-cloud/database v0.0.0-20260217113520-9cc86e3b374b github.com/TicketsBot-cloud/gdl v0.0.0-20260213180045-11af01c262ca github.com/TicketsBot-cloud/logarchiver v0.0.0-20251018211319-7a7df5cacbdc github.com/TicketsBot-cloud/worker v0.0.0-20251212162840-a9cc9bbf5692 diff --git a/go.sum b/go.sum index 7be4e99..a44202f 100644 --- a/go.sum +++ b/go.sum @@ -47,8 +47,8 @@ github.com/TicketsBot-cloud/archiverclient v0.0.0-20251015181023-f0b66a074704 h1 github.com/TicketsBot-cloud/archiverclient v0.0.0-20251015181023-f0b66a074704/go.mod h1:Mux1bEPpOHwRw1wo6Fa6qJLJH9Erk9qv1yAIfLi1Wmw= github.com/TicketsBot-cloud/common v0.0.0-20260210203202-54154661338e h1:nFKV7yEm8MWbCP7dtsJ88+agcxDUD0YKIotVHMVvytw= github.com/TicketsBot-cloud/common v0.0.0-20260210203202-54154661338e/go.mod h1:tGrTHFz09OM3eDWF+62hIi9ELpT4igCFi868FKSvKBg= -github.com/TicketsBot-cloud/database v0.0.0-20260215113825-54c67fb267fc h1:9fQmqYQN7Hc85ds+uklaNU1ab199NAhpT5A3fQ3P8g8= -github.com/TicketsBot-cloud/database v0.0.0-20260215113825-54c67fb267fc/go.mod h1:HQXAgmNSm7/FmBYwcsa6qpZqMrDhbLoEl+AyqFQ+RwY= +github.com/TicketsBot-cloud/database v0.0.0-20260217113520-9cc86e3b374b h1:nE8VAv13rUPOSMTnULKsuCDHXlWnbst7DmocviUN6I8= +github.com/TicketsBot-cloud/database v0.0.0-20260217113520-9cc86e3b374b/go.mod h1:HQXAgmNSm7/FmBYwcsa6qpZqMrDhbLoEl+AyqFQ+RwY= github.com/TicketsBot-cloud/gdl v0.0.0-20260213180045-11af01c262ca h1:/HRqcgOPfv6d9NzE6CqHXN4U1QgElyJ9DcxNNT8kV6g= github.com/TicketsBot-cloud/gdl v0.0.0-20260213180045-11af01c262ca/go.mod h1:CdwBR2egPtxUXjD2CgC9ZwfuB8dz9HPePM8nuG6dt7Y= github.com/TicketsBot-cloud/logarchiver v0.0.0-20251018211319-7a7df5cacbdc h1:qTLNpCvIqM7UwZ6MdWQ9EztcDsIJfHh+VJdG+ULLEaA= From 19918975b3e1b2967f87362bec09a3c60885512a Mon Sep 17 00:00:00 2001 From: Ben Date: Tue, 17 Feb 2026 11:52:44 +0000 Subject: [PATCH 3/3] convert to number component Signed-off-by: Ben --- app/http/endpoints/api/panel/panelcreate.go | 5 +++ app/http/endpoints/api/panel/panelupdate.go | 5 +++ app/http/endpoints/api/panel/validation.go | 4 +- frontend/src/components/form/Number.svelte | 44 ++++++++++++++++++- .../manage/PanelCreationForm.svelte | 18 +++++--- 5 files changed, 67 insertions(+), 9 deletions(-) diff --git a/app/http/endpoints/api/panel/panelcreate.go b/app/http/endpoints/api/panel/panelcreate.go index 05fb8b4..4bb8ae2 100644 --- a/app/http/endpoints/api/panel/panelcreate.go +++ b/app/http/endpoints/api/panel/panelcreate.go @@ -217,6 +217,11 @@ func CreatePanel(c *gin.Context) { welcomeMessageEmbed = &id } + // If ticket limit is 0, treat it as use global setting + if data.TicketLimit == utils.Ptr(uint8(0)) { + data.TicketLimit = nil + } + // Store in DB panel := database.Panel{ MessageId: msgId, diff --git a/app/http/endpoints/api/panel/panelupdate.go b/app/http/endpoints/api/panel/panelupdate.go index 0fddeea..a9d09f8 100644 --- a/app/http/endpoints/api/panel/panelupdate.go +++ b/app/http/endpoints/api/panel/panelupdate.go @@ -213,6 +213,11 @@ func UpdatePanel(c *gin.Context) { } } + // If ticket limit is 0, treat it as use global setting + if data.TicketLimit == utils.Ptr(uint8(0)) { + data.TicketLimit = nil + } + // Store in DB panel := database.Panel{ PanelId: panelId, diff --git a/app/http/endpoints/api/panel/validation.go b/app/http/endpoints/api/panel/validation.go index 9aa8d31..599aad2 100644 --- a/app/http/endpoints/api/panel/validation.go +++ b/app/http/endpoints/api/panel/validation.go @@ -458,8 +458,8 @@ func validateTicketLimit(ctx PanelValidationContext) validation.ValidationFunc { return nil } - if *ctx.Data.TicketLimit < 1 || *ctx.Data.TicketLimit > 10 { - return validation.NewInvalidInputError("Ticket limit must be between 1 and 10") + if *ctx.Data.TicketLimit > 10 { + return validation.NewInvalidInputError("Ticket limit must be at most 11") } return nil diff --git a/frontend/src/components/form/Number.svelte b/frontend/src/components/form/Number.svelte index c5bd6b9..951806b 100644 --- a/frontend/src/components/form/Number.svelte +++ b/frontend/src/components/form/Number.svelte @@ -1,4 +1,5 @@