mirror of
https://github.com/idanoo/autobrr
synced 2025-07-23 08:49:13 +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 {
|
func NewIndexerRepo(log logger.Logger, db *DB) domain.IndexerRepo {
|
||||||
return &IndexerRepo{
|
return &IndexerRepo{
|
||||||
log: log.With().Str("repo", "indexer").Logger(),
|
log: log.With().Str("module", "database").Str("repo", "indexer").Logger(),
|
||||||
db: db,
|
db: db,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,6 +114,43 @@ func (r *IndexerRepo) List(ctx context.Context) ([]domain.Indexer, error) {
|
||||||
return indexers, nil
|
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) {
|
func (r *IndexerRepo) FindByFilterID(ctx context.Context, id int) ([]domain.Indexer, error) {
|
||||||
queryBuilder := r.db.squirrel.
|
queryBuilder := r.db.squirrel.
|
||||||
Select("id", "enabled", "name", "identifier", "settings").
|
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")
|
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 {
|
if err != nil {
|
||||||
return errors.Wrap(err, "error executing query")
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ type IndexerRepo interface {
|
||||||
List(ctx context.Context) ([]Indexer, error)
|
List(ctx context.Context) ([]Indexer, error)
|
||||||
Delete(ctx context.Context, id int) error
|
Delete(ctx context.Context, id int) error
|
||||||
FindByFilterID(ctx context.Context, id int) ([]Indexer, error)
|
FindByFilterID(ctx context.Context, id int) ([]Indexer, error)
|
||||||
|
FindByID(ctx context.Context, id int) (*Indexer, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Indexer struct {
|
type Indexer struct {
|
||||||
|
|
|
@ -48,7 +48,8 @@ func (h indexerHandler) getSchema(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
indexers, err := h.service.GetTemplates()
|
indexers, err := h.service.GetTemplates()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//
|
h.encoder.Error(w, err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
h.encoder.StatusResponse(ctx, w, indexers, http.StatusOK)
|
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)
|
indexer, err := h.service.Store(ctx, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//
|
h.encoder.Error(w, err)
|
||||||
h.encoder.StatusResponse(ctx, w, nil, http.StatusBadRequest)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +86,8 @@ func (h indexerHandler) update(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
indexer, err := h.service.Update(ctx, data)
|
indexer, err := h.service.Update(ctx, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//
|
h.encoder.Error(w, err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
h.encoder.StatusResponse(ctx, w, indexer, http.StatusOK)
|
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)
|
id, _ := strconv.Atoi(idParam)
|
||||||
|
|
||||||
if err := h.service.Delete(ctx, id); err != nil {
|
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)
|
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()
|
indexers, err := h.service.GetAll()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//
|
h.encoder.Error(w, err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
h.encoder.StatusResponse(ctx, w, indexers, http.StatusOK)
|
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)
|
indexers, err := h.service.List(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//
|
h.encoder.Error(w, err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
h.encoder.StatusResponse(ctx, w, indexers, http.StatusOK)
|
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)
|
Update(ctx context.Context, indexer domain.Indexer) (*domain.Indexer, error)
|
||||||
Delete(ctx context.Context, id int) error
|
Delete(ctx context.Context, id int) error
|
||||||
FindByFilterID(ctx context.Context, id int) ([]domain.Indexer, 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)
|
List(ctx context.Context) ([]domain.Indexer, error)
|
||||||
GetAll() ([]*domain.IndexerDefinition, error)
|
GetAll() ([]*domain.IndexerDefinition, error)
|
||||||
GetTemplates() ([]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 {
|
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 {
|
if err := s.repo.Delete(ctx, id); err != nil {
|
||||||
s.log.Error().Err(err).Msgf("could not delete indexer by id: %v", id)
|
s.log.Error().Err(err).Msgf("could not delete indexer by id: %v", id)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO remove handler if needed
|
|
||||||
// remove from lookup tables
|
// remove from lookup tables
|
||||||
|
s.removeIndexer(*indexer)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -136,6 +142,16 @@ func (s *service) FindByFilterID(ctx context.Context, id int) ([]domain.Indexer,
|
||||||
return indexers, err
|
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) {
|
func (s *service) List(ctx context.Context) ([]domain.Indexer, error) {
|
||||||
indexers, err := s.repo.List(ctx)
|
indexers, err := s.repo.List(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -321,10 +337,16 @@ func (s *service) Start() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *service) removeIndexer(indexer domain.Indexer) error {
|
func (s *service) removeIndexer(indexer domain.Indexer) {
|
||||||
delete(s.definitions, indexer.Identifier)
|
// 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 {
|
func (s *service) addIndexer(indexer domain.Indexer) error {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue