mirror of
https://github.com/idanoo/autobrr
synced 2025-07-23 16:59:12 +00:00
fix(indexers): delete and clean (#343)
This commit is contained in:
parent
652bd8f6f3
commit
33e3691737
4 changed files with 87 additions and 14 deletions
|
@ -20,7 +20,7 @@ type IndexerRepo struct {
|
|||
|
||||
func NewIndexerRepo(log logger.Logger, db *DB) domain.IndexerRepo {
|
||||
return &IndexerRepo{
|
||||
log: log.With().Str("repo", "indexer").Logger(),
|
||||
log: log.With().Str("module", "database").Str("repo", "indexer").Logger(),
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
@ -114,6 +114,43 @@ func (r *IndexerRepo) List(ctx context.Context) ([]domain.Indexer, error) {
|
|||
return indexers, nil
|
||||
}
|
||||
|
||||
func (r *IndexerRepo) FindByID(ctx context.Context, id int) (*domain.Indexer, error) {
|
||||
queryBuilder := r.db.squirrel.
|
||||
Select("id", "enabled", "name", "identifier", "implementation", "settings").
|
||||
From("indexer").
|
||||
Where("id = ?", id)
|
||||
|
||||
query, args, err := queryBuilder.ToSql()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "error building query")
|
||||
}
|
||||
|
||||
row := r.db.handler.QueryRowContext(ctx, query, args...)
|
||||
if err := row.Err(); err != nil {
|
||||
return nil, errors.Wrap(err, "error executing query")
|
||||
}
|
||||
|
||||
var i domain.Indexer
|
||||
|
||||
var implementation, settings sql.NullString
|
||||
|
||||
if err := row.Scan(&i.ID, &i.Enabled, &i.Name, &i.Identifier, &implementation, &settings); err != nil {
|
||||
return nil, errors.Wrap(err, "error scanning row")
|
||||
}
|
||||
|
||||
i.Implementation = implementation.String
|
||||
|
||||
var settingsMap map[string]string
|
||||
if err = json.Unmarshal([]byte(settings.String), &settingsMap); err != nil {
|
||||
return nil, errors.Wrap(err, "error unmarshal settings")
|
||||
}
|
||||
|
||||
i.Settings = settingsMap
|
||||
|
||||
return &i, nil
|
||||
|
||||
}
|
||||
|
||||
func (r *IndexerRepo) FindByFilterID(ctx context.Context, id int) ([]domain.Indexer, error) {
|
||||
queryBuilder := r.db.squirrel.
|
||||
Select("id", "enabled", "name", "identifier", "settings").
|
||||
|
@ -171,12 +208,21 @@ func (r *IndexerRepo) Delete(ctx context.Context, id int) error {
|
|||
return errors.Wrap(err, "error building query")
|
||||
}
|
||||
|
||||
_, err = r.db.handler.ExecContext(ctx, query, args...)
|
||||
result, err := r.db.handler.ExecContext(ctx, query, args...)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error executing query")
|
||||
}
|
||||
|
||||
r.log.Debug().Msgf("indexer.delete: id %v", id)
|
||||
rows, err := result.RowsAffected()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error rows affected")
|
||||
}
|
||||
|
||||
if rows != 1 {
|
||||
return errors.New("error deleting row")
|
||||
}
|
||||
|
||||
r.log.Debug().Str("method", "delete").Msgf("successfully deleted indexer with id %v", id)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ type IndexerRepo interface {
|
|||
List(ctx context.Context) ([]Indexer, error)
|
||||
Delete(ctx context.Context, id int) error
|
||||
FindByFilterID(ctx context.Context, id int) ([]Indexer, error)
|
||||
FindByID(ctx context.Context, id int) (*Indexer, error)
|
||||
}
|
||||
|
||||
type Indexer struct {
|
||||
|
|
|
@ -48,7 +48,8 @@ func (h indexerHandler) getSchema(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
indexers, err := h.service.GetTemplates()
|
||||
if err != nil {
|
||||
//
|
||||
h.encoder.Error(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
h.encoder.StatusResponse(ctx, w, indexers, http.StatusOK)
|
||||
|
@ -66,8 +67,7 @@ func (h indexerHandler) store(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
indexer, err := h.service.Store(ctx, data)
|
||||
if err != nil {
|
||||
//
|
||||
h.encoder.StatusResponse(ctx, w, nil, http.StatusBadRequest)
|
||||
h.encoder.Error(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -86,7 +86,8 @@ func (h indexerHandler) update(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
indexer, err := h.service.Update(ctx, data)
|
||||
if err != nil {
|
||||
//
|
||||
h.encoder.Error(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
h.encoder.StatusResponse(ctx, w, indexer, http.StatusOK)
|
||||
|
@ -101,7 +102,8 @@ func (h indexerHandler) delete(w http.ResponseWriter, r *http.Request) {
|
|||
id, _ := strconv.Atoi(idParam)
|
||||
|
||||
if err := h.service.Delete(ctx, id); err != nil {
|
||||
// return err
|
||||
h.encoder.Error(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
h.encoder.StatusResponse(ctx, w, nil, http.StatusNoContent)
|
||||
|
@ -112,7 +114,8 @@ func (h indexerHandler) getAll(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
indexers, err := h.service.GetAll()
|
||||
if err != nil {
|
||||
//
|
||||
h.encoder.Error(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
h.encoder.StatusResponse(ctx, w, indexers, http.StatusOK)
|
||||
|
@ -123,7 +126,8 @@ func (h indexerHandler) list(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
indexers, err := h.service.List(ctx)
|
||||
if err != nil {
|
||||
//
|
||||
h.encoder.Error(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
h.encoder.StatusResponse(ctx, w, indexers, http.StatusOK)
|
||||
|
|
|
@ -24,6 +24,7 @@ type Service interface {
|
|||
Update(ctx context.Context, indexer domain.Indexer) (*domain.Indexer, error)
|
||||
Delete(ctx context.Context, id int) error
|
||||
FindByFilterID(ctx context.Context, id int) ([]domain.Indexer, error)
|
||||
FindByID(ctx context.Context, id int) (*domain.Indexer, error)
|
||||
List(ctx context.Context) ([]domain.Indexer, error)
|
||||
GetAll() ([]*domain.IndexerDefinition, error)
|
||||
GetTemplates() ([]domain.IndexerDefinition, error)
|
||||
|
@ -115,13 +116,18 @@ func (s *service) Update(ctx context.Context, indexer domain.Indexer) (*domain.I
|
|||
}
|
||||
|
||||
func (s *service) Delete(ctx context.Context, id int) error {
|
||||
indexer, err := s.repo.FindByID(ctx, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := s.repo.Delete(ctx, id); err != nil {
|
||||
s.log.Error().Err(err).Msgf("could not delete indexer by id: %v", id)
|
||||
return err
|
||||
}
|
||||
|
||||
// TODO remove handler if needed
|
||||
// remove from lookup tables
|
||||
s.removeIndexer(*indexer)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -136,6 +142,16 @@ func (s *service) FindByFilterID(ctx context.Context, id int) ([]domain.Indexer,
|
|||
return indexers, err
|
||||
}
|
||||
|
||||
func (s *service) FindByID(ctx context.Context, id int) (*domain.Indexer, error) {
|
||||
indexers, err := s.repo.FindByID(ctx, id)
|
||||
if err != nil {
|
||||
s.log.Error().Err(err).Msgf("could not find indexer by id: %v", id)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return indexers, err
|
||||
}
|
||||
|
||||
func (s *service) List(ctx context.Context) ([]domain.Indexer, error) {
|
||||
indexers, err := s.repo.List(ctx)
|
||||
if err != nil {
|
||||
|
@ -321,10 +337,16 @@ func (s *service) Start() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (s *service) removeIndexer(indexer domain.Indexer) error {
|
||||
delete(s.definitions, indexer.Identifier)
|
||||
func (s *service) removeIndexer(indexer domain.Indexer) {
|
||||
// remove Torznab
|
||||
if indexer.Implementation == "torznab" {
|
||||
delete(s.torznabIndexers, indexer.Identifier)
|
||||
}
|
||||
|
||||
return nil
|
||||
// remove mapped definition
|
||||
delete(s.mappedDefinitions, indexer.Identifier)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (s *service) addIndexer(indexer domain.Indexer) error {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue