From 06b864da4d32e5efaf717fc7f64ddb5c71d52485 Mon Sep 17 00:00:00 2001 From: ze0s <43699394+zze0s@users.noreply.github.com> Date: Mon, 16 Oct 2023 20:27:15 +0200 Subject: [PATCH] fix(releases): search with postgres (#1181) * fix(releases): search with postgres * fix: validate release push status from filters * fix: add missing import * fix: validate push status if not empty --- internal/database/release.go | 4 +++- internal/domain/release.go | 15 +++++++++++++++ internal/http/release.go | 11 +++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/internal/database/release.go b/internal/database/release.go index 48a93ff..ac3e80b 100644 --- a/internal/database/release.go +++ b/internal/database/release.go @@ -200,7 +200,9 @@ func (repo *ReleaseRepo) findReleases(ctx context.Context, tx *Tx, params domain if params.Filters.PushStatus != "" { subQueryBuilder = subQueryBuilder.InnerJoin("release_action_status ras ON r.id = ras.release_id").Where(sq.Eq{"ras.status": params.Filters.PushStatus}) - countQuery = countQuery.InnerJoin("release_action_status ras ON r.id = ras.release_id").Where(sq.Eq{"ras.status": params.Filters.PushStatus}) + + // using sq.Eq for countQuery breaks search with Postgres. + countQuery = countQuery.InnerJoin("release_action_status ras ON r.id = ras.release_id").Where("ras.status = '" + params.Filters.PushStatus + `'`) } subQuery, subArgs, err := subQueryBuilder.ToSql() diff --git a/internal/domain/release.go b/internal/domain/release.go index 6db37de..5b624ea 100644 --- a/internal/domain/release.go +++ b/internal/domain/release.go @@ -176,6 +176,21 @@ func (r ReleasePushStatus) String() string { } } +func ValidReleasePushStatus(s string) bool { + switch s { + case string(ReleasePushStatusPending): + return true + case string(ReleasePushStatusApproved): + return true + case string(ReleasePushStatusRejected): + return true + case string(ReleasePushStatusErr): + return true + default: + return false + } +} + type ReleaseFilterStatus string const ( diff --git a/internal/http/release.go b/internal/http/release.go index 57e1215..ba8eeb0 100644 --- a/internal/http/release.go +++ b/internal/http/release.go @@ -5,6 +5,7 @@ package http import ( "context" + "fmt" "net/http" "net/url" "strconv" @@ -97,6 +98,16 @@ func (h releaseHandler) findReleases(w http.ResponseWriter, r *http.Request) { indexer := vals["indexer"] pushStatus := r.URL.Query().Get("push_status") + if pushStatus != "" { + if !domain.ValidReleasePushStatus(pushStatus) { + h.encoder.StatusResponse(w, http.StatusBadRequest, map[string]interface{}{ + "code": "BAD_REQUEST_PARAMS", + "message": fmt.Sprintf("push_status parameter is of invalid type: %v", pushStatus), + }) + return + } + } + search := r.URL.Query().Get("q") query := domain.ReleaseQueryParams{