diff --git a/app/http/endpoints/api/panel/panelcreate.go b/app/http/endpoints/api/panel/panelcreate.go index c47224e..4bb8ae2 100644 --- a/app/http/endpoints/api/panel/panelcreate.go +++ b/app/http/endpoints/api/panel/panelcreate.go @@ -53,6 +53,7 @@ type panelBody struct { UseThreads bool `json:"use_threads"` TicketNotificationChannel *uint64 `json:"ticket_notification_channel,string"` CooldownSeconds int `json:"cooldown_seconds"` + TicketLimit *uint8 `json:"ticket_limit"` } func (p *panelBody) IntoPanelMessageData(customId string, isPremium bool) panelMessageData { @@ -216,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, @@ -245,6 +251,7 @@ func CreatePanel(c *gin.Context) { UseThreads: data.UseThreads, TicketNotificationChannel: data.TicketNotificationChannel, CooldownSeconds: data.CooldownSeconds, + TicketLimit: data.TicketLimit, } createOptions := panelCreateOptions{ diff --git a/app/http/endpoints/api/panel/panelupdate.go b/app/http/endpoints/api/panel/panelupdate.go index b153338..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, @@ -243,6 +248,7 @@ func UpdatePanel(c *gin.Context) { UseThreads: data.UseThreads, TicketNotificationChannel: data.TicketNotificationChannel, CooldownSeconds: data.CooldownSeconds, + 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 2c2f9e8..599aad2 100644 --- a/app/http/endpoints/api/panel/validation.go +++ b/app/http/endpoints/api/panel/validation.go @@ -77,6 +77,7 @@ func panelValidators() []validation.Validator[PanelValidationContext] { validatePendingCategory, validateTicketNotificationChannel, validateCooldownSeconds, + validateTicketLimit, } } @@ -450,3 +451,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 > 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 @@