fix(releases): delete older than X (#993)

* fix(release): DeleteOlder func for zero duration

resolves a bug in the `DeleteOlder` function where recent 24-hour data wasn't deleted when set to `delete everything`. We now correctly set the olderThanTimestamp to a future date when duration is zero, ensuring complete deletion of all records.

* fix(releases): delete older

---------

Co-authored-by: ze0s <ze0s@riseup.net>
This commit is contained in:
soup 2023-07-22 14:49:28 +02:00 committed by GitHub
parent 56d3603505
commit e6f32596a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 56 additions and 71 deletions

View file

@ -19,8 +19,7 @@ type releaseService interface {
FindRecent(ctx context.Context) (res []*domain.Release, err error)
GetIndexerOptions(ctx context.Context) ([]string, error)
Stats(ctx context.Context) (*domain.ReleaseStats, error)
Delete(ctx context.Context) error
DeleteOlder(ctx context.Context, duration int) error
Delete(ctx context.Context, req *domain.DeleteReleaseRequest) error
Retry(ctx context.Context, req *domain.ReleaseActionRetryReq) error
}
@ -41,8 +40,7 @@ func (h releaseHandler) Routes(r chi.Router) {
r.Get("/recent", h.findRecentReleases)
r.Get("/stats", h.getStats)
r.Get("/indexers", h.getIndexerOptions)
r.Delete("/all", h.deleteReleases)
r.Delete("/older-than/{duration}", h.deleteOlder)
r.Delete("/", h.deleteReleases)
r.Route("/{releaseId}", func(r chi.Router) {
r.Post("/actions/{actionStatusId}/retry", h.retryAction)
@ -183,34 +181,23 @@ func (h releaseHandler) getStats(w http.ResponseWriter, r *http.Request) {
}
func (h releaseHandler) deleteReleases(w http.ResponseWriter, r *http.Request) {
err := h.service.Delete(r.Context())
if err != nil {
h.encoder.StatusResponse(w, http.StatusInternalServerError, map[string]interface{}{
"code": "INTERNAL_SERVER_ERROR",
"message": err.Error(),
})
return
req := domain.DeleteReleaseRequest{}
olderThanParam := r.URL.Query().Get("olderThan")
if olderThanParam != "" {
duration, err := strconv.Atoi(olderThanParam)
if err != nil {
h.encoder.StatusResponse(w, http.StatusBadRequest, map[string]interface{}{
"code": "BAD_REQUEST_PARAMS",
"message": "olderThan parameter is invalid",
})
return
}
req.OlderThan = duration
}
h.encoder.NoContent(w)
}
func (h releaseHandler) deleteOlder(w http.ResponseWriter, r *http.Request) {
durationStr := chi.URLParam(r, "duration")
duration, err := strconv.Atoi(durationStr)
if err != nil {
h.encoder.StatusResponse(w, http.StatusBadRequest, map[string]interface{}{
"code": "BAD_REQUEST_PARAMS",
"message": "Invalid duration",
})
return
}
if err := h.service.DeleteOlder(r.Context(), duration); err != nil {
h.encoder.StatusResponse(w, http.StatusInternalServerError, map[string]interface{}{
"code": "INTERNAL_SERVER_ERROR",
"message": err.Error(),
})
if err := h.service.Delete(r.Context(), &req); err != nil {
h.encoder.Error(w, err)
return
}