fix: filter list toggle (#55)

This commit is contained in:
Ludvig Lundgren 2021-12-27 16:10:15 +01:00 committed by GitHub
parent e1ef47e09a
commit 48155e5f82
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 73 additions and 2 deletions

View file

@ -390,6 +390,25 @@ func (r *FilterRepo) Update(ctx context.Context, filter domain.Filter) (*domain.
return &filter, nil
}
func (r *FilterRepo) ToggleEnabled(ctx context.Context, filterID int, enabled bool) error {
var err error
_, err = r.db.ExecContext(ctx, `
UPDATE filter SET
enabled = ?,
updated_at = CURRENT_TIMESTAMP
WHERE id = ?`,
enabled,
filterID,
)
if err != nil {
log.Error().Stack().Err(err).Msg("error executing query")
return err
}
return nil
}
func (r *FilterRepo) StoreIndexerConnections(ctx context.Context, filterID int, indexers []domain.Indexer) error {
tx, err := r.db.BeginTx(ctx, nil)

View file

@ -17,6 +17,7 @@ type FilterRepo interface {
ListFilters() ([]Filter, error)
Store(filter Filter) (*Filter, error)
Update(ctx context.Context, filter Filter) (*Filter, error)
ToggleEnabled(ctx context.Context, filterID int, enabled bool) error
Delete(ctx context.Context, filterID int) error
StoreIndexerConnection(ctx context.Context, filterID int, indexerID int) error
StoreIndexerConnections(ctx context.Context, filterID int, indexers []Indexer) error

View file

@ -17,6 +17,7 @@ type Service interface {
ListFilters() ([]domain.Filter, error)
Store(filter domain.Filter) (*domain.Filter, error)
Update(ctx context.Context, filter domain.Filter) (*domain.Filter, error)
ToggleEnabled(ctx context.Context, filterID int, enabled bool) error
Delete(ctx context.Context, filterID int) error
}
@ -136,6 +137,17 @@ func (s *service) Update(ctx context.Context, filter domain.Filter) (*domain.Fil
return f, nil
}
func (s *service) ToggleEnabled(ctx context.Context, filterID int, enabled bool) error {
if err := s.repo.ToggleEnabled(ctx, filterID, enabled); err != nil {
log.Error().Err(err).Msg("could not update filter enabled")
return err
}
log.Debug().Msgf("filter.toggle_enabled: update filter '%v' to '%v'", filterID, enabled)
return nil
}
func (s *service) Delete(ctx context.Context, filterID int) error {
if filterID == 0 {
return nil

View file

@ -17,6 +17,7 @@ type filterService interface {
Store(filter domain.Filter) (*domain.Filter, error)
Delete(ctx context.Context, filterID int) error
Update(ctx context.Context, filter domain.Filter) (*domain.Filter, error)
ToggleEnabled(ctx context.Context, filterID int, enabled bool) error
}
type filterHandler struct {
@ -36,6 +37,7 @@ func (h filterHandler) Routes(r chi.Router) {
r.Get("/{filterID}", h.getByID)
r.Post("/", h.store)
r.Put("/{filterID}", h.update)
r.Put("/{filterID}/enabled", h.toggleEnabled)
r.Delete("/{filterID}", h.delete)
}
@ -123,6 +125,31 @@ func (h filterHandler) update(w http.ResponseWriter, r *http.Request) {
h.encoder.StatusResponse(ctx, w, filter, http.StatusOK)
}
func (h filterHandler) toggleEnabled(w http.ResponseWriter, r *http.Request) {
var (
ctx = r.Context()
filterID = chi.URLParam(r, "filterID")
data struct {
Enabled bool `json:"enabled"`
}
)
id, _ := strconv.Atoi(filterID)
if err := json.NewDecoder(r.Body).Decode(&data); err != nil {
// encode error
return
}
err := h.service.ToggleEnabled(ctx, id, data.Enabled)
if err != nil {
// encode error
return
}
h.encoder.StatusResponse(ctx, w, nil, http.StatusNoContent)
}
func (h filterHandler) delete(w http.ResponseWriter, r *http.Request) {
var (
ctx = r.Context()