Store a webhook's retention as a plain day count, 0 meaning forever (closes #539)
check / check (push) Canceled after 0s

retention_days loses its column default of 30, and Webhook.RetentionDays
its default tag, so a 0 is stored as 0. The 365000-day stand-in
RetentionForeverDays and the BeforeSave hook that wrote it are gone. The
reaper and the "forever" label read 0 as forever, and the forms accept 0
or 1 to MaxFiniteRetentionDays; a blank field still gives 30 on the new
webhook form and keeps the stored value on the edit form. A negative
value, which the forms refuse, is still read as forever so it cannot put
the reaper's cutoff in the future.

Model: opus-5-5
This commit is contained in:
2026-10-15 17:41:27 +00:00
parent 40e8ecaab4
commit ec4679cd17
10 changed files with 141 additions and 349 deletions
+1 -1
View File
@@ -500,7 +500,7 @@ func TestWebhookStats_PaneShowsRetentionPeriod(t *testing.T) {
want string
}{
{30, "30 days"},
{database.RetentionForeverDays, "forever"},
{0, "forever"},
}
for _, tt := range tests {