From 59c5858bf08b483867bba98746b819539ef45fff Mon Sep 17 00:00:00 2001 From: ze0s <43699394+zze0s@users.noreply.github.com> Date: Wed, 6 Nov 2024 18:55:00 +0100 Subject: [PATCH] fix(releases): update size after actions run (#1809) --- internal/database/release.go | 20 ++++++++++++++++++++ internal/domain/release.go | 1 + internal/release/service.go | 15 ++++++++++----- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/internal/database/release.go b/internal/database/release.go index af2cf94..7b87b9b 100644 --- a/internal/database/release.go +++ b/internal/database/release.go @@ -56,6 +56,26 @@ func (repo *ReleaseRepo) Store(ctx context.Context, r *domain.Release) error { return nil } +func (repo *ReleaseRepo) Update(ctx context.Context, r *domain.Release) error { + queryBuilder := repo.db.squirrel. + Update("release"). + Set("size", r.Size). + Where(sq.Eq{"id": r.ID}) + + query, args, err := queryBuilder.ToSql() + if err != nil { + return errors.Wrap(err, "error building query") + } + + if _, err = repo.db.handler.ExecContext(ctx, query, args...); err != nil { + return errors.Wrap(err, "error executing query") + } + + repo.log.Debug().Msgf("release.update: %d %s", r.ID, r.TorrentName) + + return nil +} + func (repo *ReleaseRepo) StoreReleaseActionStatus(ctx context.Context, status *domain.ReleaseActionStatus) error { if status.ID != 0 { queryBuilder := repo.db.squirrel. diff --git a/internal/domain/release.go b/internal/domain/release.go index 3096ebe..f6e26d6 100644 --- a/internal/domain/release.go +++ b/internal/domain/release.go @@ -31,6 +31,7 @@ import ( type ReleaseRepo interface { Store(ctx context.Context, release *Release) error + Update(ctx context.Context, r *Release) error Find(ctx context.Context, params ReleaseQueryParams) (*FindReleasesResponse, error) Get(ctx context.Context, req *GetReleaseRequest) (*Release, error) GetIndexerOptions(ctx context.Context) ([]string, error) diff --git a/internal/release/service.go b/internal/release/service.go index 8246293..3f84684 100644 --- a/internal/release/service.go +++ b/internal/release/service.go @@ -25,6 +25,7 @@ type Service interface { GetIndexerOptions(ctx context.Context) ([]string, error) Stats(ctx context.Context) (*domain.ReleaseStats, error) Store(ctx context.Context, release *domain.Release) error + Update(ctx context.Context, release *domain.Release) error StoreReleaseActionStatus(ctx context.Context, actionStatus *domain.ReleaseActionStatus) error Delete(ctx context.Context, req *domain.DeleteReleaseRequest) error Process(release *domain.Release) @@ -81,6 +82,10 @@ func (s *service) Store(ctx context.Context, release *domain.Release) error { return s.repo.Store(ctx, release) } +func (s *service) Update(ctx context.Context, release *domain.Release) error { + return s.repo.Update(ctx, release) +} + func (s *service) StoreReleaseActionStatus(ctx context.Context, status *domain.ReleaseActionStatus) error { return s.repo.StoreReleaseActionStatus(ctx, status) } @@ -189,8 +194,6 @@ func (s *service) processFilters(ctx context.Context, filters []*domain.Filter, // loop over and check filters for _, f := range filters { - f := f - l := s.log.With().Str("indexer", release.Indexer.Identifier).Str("filter", f.Name).Str("release", release.TorrentName).Logger() // save filter on release @@ -248,9 +251,7 @@ func (s *service) processFilters(ctx context.Context, filters []*domain.Filter, var rejections []string // run actions (watchFolder, test, exec, qBittorrent, Deluge, arr etc.) - for _, a := range actions { - act := a - + for _, act := range actions { // only run enabled actions if !act.Enabled { l.Trace().Msgf("release.Process: indexer: %s, filter: %s release: %s action '%s' not enabled, skip", release.Indexer.Name, release.FilterName, release.TorrentName, act.Name) @@ -291,6 +292,10 @@ func (s *service) processFilters(ctx context.Context, filters []*domain.Filter, continue } + if err = s.Update(ctx, release); err != nil { + l.Error().Err(err).Msgf("release.Process: error updating release: %v", release.TorrentName) + } + // if we have rejections from arr, continue to next filter if len(rejections) > 0 { continue