feat(web): search releases (#302)

* feat(releases): search in ui

* refactor(releases): optimize query recent releases
This commit is contained in:
Ludvig Lundgren 2022-06-14 01:51:33 +02:00 committed by GitHub
parent 38addb99e6
commit 258754643d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 153 additions and 13 deletions

View file

@ -10,7 +10,7 @@ type encoder struct{}
type errorResponse struct {
Message string `json:"message"`
Status int `json:"status"`
Status int `json:"status,omitempty"`
}
func (e encoder) StatusResponse(ctx context.Context, w http.ResponseWriter, response interface{}, status int) {

View file

@ -12,6 +12,7 @@ import (
type releaseService interface {
Find(ctx context.Context, query domain.ReleaseQueryParams) (res []*domain.Release, nextCursor int64, count int64, err error)
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
@ -31,6 +32,7 @@ func newReleaseHandler(encoder encoder, service releaseService) *releaseHandler
func (h releaseHandler) Routes(r chi.Router) {
r.Get("/", h.findReleases)
r.Get("/recent", h.findRecentReleases)
r.Get("/stats", h.getStats)
r.Get("/indexers", h.getIndexerOptions)
r.Delete("/all", h.deleteReleases)
@ -86,6 +88,7 @@ func (h releaseHandler) findReleases(w http.ResponseWriter, r *http.Request) {
indexer := vals["indexer"]
pushStatus := r.URL.Query().Get("push_status")
search := r.URL.Query().Get("q")
query := domain.ReleaseQueryParams{
Limit: uint64(limit),
@ -96,6 +99,7 @@ func (h releaseHandler) findReleases(w http.ResponseWriter, r *http.Request) {
Indexers []string
PushStatus string
}{Indexers: indexer, PushStatus: pushStatus},
Search: search,
}
releases, nextCursor, count, err := h.service.Find(r.Context(), query)
@ -117,6 +121,23 @@ func (h releaseHandler) findReleases(w http.ResponseWriter, r *http.Request) {
h.encoder.StatusResponse(r.Context(), w, ret, http.StatusOK)
}
func (h releaseHandler) findRecentReleases(w http.ResponseWriter, r *http.Request) {
releases, err := h.service.FindRecent(r.Context())
if err != nil {
h.encoder.StatusNotFound(r.Context(), w)
return
}
ret := struct {
Data []*domain.Release `json:"data"`
}{
Data: releases,
}
h.encoder.StatusResponse(r.Context(), w, ret, http.StatusOK)
}
func (h releaseHandler) getIndexerOptions(w http.ResponseWriter, r *http.Request) {
stats, err := h.service.GetIndexerOptions(r.Context())
if err != nil {