mirror of
https://github.com/idanoo/autobrr
synced 2025-07-23 08:49:13 +00:00
feat(indexers): add External Identifier to map with ARR indexers (#1534)
* feat(indexers): add External Identifier to map with ARR indexers * fix: web build * fix: tests * feat: set identifier for manual processing
This commit is contained in:
parent
ad6ef228ec
commit
0016228d89
26 changed files with 254 additions and 197 deletions
|
@ -34,6 +34,7 @@ func (r *FeedRepo) FindByID(ctx context.Context, id int) (*domain.Feed, error) {
|
|||
"f.id",
|
||||
"i.id",
|
||||
"i.identifier",
|
||||
"i.identifier_external",
|
||||
"i.name",
|
||||
"f.name",
|
||||
"f.type",
|
||||
|
@ -66,7 +67,7 @@ func (r *FeedRepo) FindByID(ctx context.Context, id int) (*domain.Feed, error) {
|
|||
|
||||
var apiKey, cookie, settings sql.NullString
|
||||
|
||||
if err := row.Scan(&f.ID, &f.Indexer.ID, &f.Indexer.Identifier, &f.Indexer.Name, &f.Name, &f.Type, &f.Enabled, &f.URL, &f.Interval, &f.Timeout, &f.MaxAge, &apiKey, &cookie, &settings, &f.CreatedAt, &f.UpdatedAt); err != nil {
|
||||
if err := row.Scan(&f.ID, &f.Indexer.ID, &f.Indexer.Identifier, &f.Indexer.IdentifierExternal, &f.Indexer.Name, &f.Name, &f.Type, &f.Enabled, &f.URL, &f.Interval, &f.Timeout, &f.MaxAge, &apiKey, &cookie, &settings, &f.CreatedAt, &f.UpdatedAt); err != nil {
|
||||
return nil, errors.Wrap(err, "error scanning row")
|
||||
}
|
||||
|
||||
|
@ -91,6 +92,7 @@ func (r *FeedRepo) FindByIndexerIdentifier(ctx context.Context, indexer string)
|
|||
"f.id",
|
||||
"i.id",
|
||||
"i.identifier",
|
||||
"i.identifier_external",
|
||||
"i.name",
|
||||
"f.name",
|
||||
"f.type",
|
||||
|
@ -123,7 +125,7 @@ func (r *FeedRepo) FindByIndexerIdentifier(ctx context.Context, indexer string)
|
|||
|
||||
var apiKey, cookie, settings sql.NullString
|
||||
|
||||
if err := row.Scan(&f.ID, &f.Indexer.ID, &f.Indexer.Identifier, &f.Indexer.Name, &f.Name, &f.Type, &f.Enabled, &f.URL, &f.Interval, &f.Timeout, &f.MaxAge, &apiKey, &cookie, &settings, &f.CreatedAt, &f.UpdatedAt); err != nil {
|
||||
if err := row.Scan(&f.ID, &f.Indexer.ID, &f.Indexer.Identifier, &f.Indexer.IdentifierExternal, &f.Indexer.Name, &f.Name, &f.Type, &f.Enabled, &f.URL, &f.Interval, &f.Timeout, &f.MaxAge, &apiKey, &cookie, &settings, &f.CreatedAt, &f.UpdatedAt); err != nil {
|
||||
return nil, errors.Wrap(err, "error scanning row")
|
||||
}
|
||||
|
||||
|
@ -146,6 +148,7 @@ func (r *FeedRepo) Find(ctx context.Context) ([]domain.Feed, error) {
|
|||
"f.id",
|
||||
"i.id",
|
||||
"i.identifier",
|
||||
"i.identifier_external",
|
||||
"i.name",
|
||||
"f.name",
|
||||
"f.type",
|
||||
|
@ -185,7 +188,7 @@ func (r *FeedRepo) Find(ctx context.Context) ([]domain.Feed, error) {
|
|||
var apiKey, cookie, lastRunData, settings sql.NullString
|
||||
var lastRun sql.NullTime
|
||||
|
||||
if err := rows.Scan(&f.ID, &f.Indexer.ID, &f.Indexer.Identifier, &f.Indexer.Name, &f.Name, &f.Type, &f.Enabled, &f.URL, &f.Interval, &f.Timeout, &f.MaxAge, &apiKey, &cookie, &lastRun, &lastRunData, &settings, &f.CreatedAt, &f.UpdatedAt); err != nil {
|
||||
if err := rows.Scan(&f.ID, &f.Indexer.ID, &f.Indexer.Identifier, &f.Indexer.IdentifierExternal, &f.Indexer.Name, &f.Name, &f.Type, &f.Enabled, &f.URL, &f.Interval, &f.Timeout, &f.MaxAge, &apiKey, &cookie, &lastRun, &lastRunData, &settings, &f.CreatedAt, &f.UpdatedAt); err != nil {
|
||||
return nil, errors.Wrap(err, "error scanning row")
|
||||
}
|
||||
|
||||
|
|
|
@ -36,19 +36,16 @@ func (r *IndexerRepo) Store(ctx context.Context, indexer domain.Indexer) (*domai
|
|||
}
|
||||
|
||||
queryBuilder := r.db.squirrel.
|
||||
Insert("indexer").Columns("enabled", "name", "identifier", "implementation", "base_url", "settings").
|
||||
Values(indexer.Enabled, indexer.Name, indexer.Identifier, indexer.Implementation, indexer.BaseURL, settings).
|
||||
Insert("indexer").Columns("enabled", "name", "identifier", "identifier_external", "implementation", "base_url", "settings").
|
||||
Values(indexer.Enabled, indexer.Name, indexer.Identifier, indexer.IdentifierExternal, indexer.Implementation, indexer.BaseURL, settings).
|
||||
Suffix("RETURNING id").RunWith(r.db.handler)
|
||||
|
||||
// return values
|
||||
var retID int64
|
||||
|
||||
if err = queryBuilder.QueryRowContext(ctx).Scan(&retID); err != nil {
|
||||
err = queryBuilder.QueryRowContext(ctx).Scan(&indexer.ID)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "error executing query")
|
||||
}
|
||||
|
||||
indexer.ID = retID
|
||||
|
||||
return &indexer, nil
|
||||
}
|
||||
|
||||
|
@ -62,6 +59,7 @@ func (r *IndexerRepo) Update(ctx context.Context, indexer domain.Indexer) (*doma
|
|||
Update("indexer").
|
||||
Set("enabled", indexer.Enabled).
|
||||
Set("name", indexer.Name).
|
||||
Set("identifier_external", indexer.IdentifierExternal).
|
||||
Set("base_url", indexer.BaseURL).
|
||||
Set("settings", settings).
|
||||
Set("updated_at", time.Now().Format(time.RFC3339)).
|
||||
|
@ -81,7 +79,7 @@ func (r *IndexerRepo) Update(ctx context.Context, indexer domain.Indexer) (*doma
|
|||
|
||||
func (r *IndexerRepo) List(ctx context.Context) ([]domain.Indexer, error) {
|
||||
queryBuilder := r.db.squirrel.
|
||||
Select("id", "enabled", "name", "identifier", "implementation", "base_url", "settings").
|
||||
Select("id", "enabled", "name", "identifier", "identifier_external", "implementation", "base_url", "settings").
|
||||
From("indexer").
|
||||
OrderBy("name ASC")
|
||||
|
||||
|
@ -102,16 +100,17 @@ func (r *IndexerRepo) List(ctx context.Context) ([]domain.Indexer, error) {
|
|||
for rows.Next() {
|
||||
var f domain.Indexer
|
||||
|
||||
var implementation, baseURL sql.NullString
|
||||
var identifierExternal, implementation, baseURL sql.Null[string]
|
||||
var settings string
|
||||
var settingsMap map[string]string
|
||||
|
||||
if err := rows.Scan(&f.ID, &f.Enabled, &f.Name, &f.Identifier, &implementation, &baseURL, &settings); err != nil {
|
||||
if err := rows.Scan(&f.ID, &f.Enabled, &f.Name, &f.Identifier, &identifierExternal, &implementation, &baseURL, &settings); err != nil {
|
||||
return nil, errors.Wrap(err, "error scanning row")
|
||||
}
|
||||
|
||||
f.Implementation = implementation.String
|
||||
f.BaseURL = baseURL.String
|
||||
f.IdentifierExternal = identifierExternal.V
|
||||
f.Implementation = implementation.V
|
||||
f.BaseURL = baseURL.V
|
||||
|
||||
if err = json.Unmarshal([]byte(settings), &settingsMap); err != nil {
|
||||
return nil, errors.Wrap(err, "error unmarshal settings")
|
||||
|
@ -130,7 +129,7 @@ func (r *IndexerRepo) List(ctx context.Context) ([]domain.Indexer, error) {
|
|||
|
||||
func (r *IndexerRepo) FindByID(ctx context.Context, id int) (*domain.Indexer, error) {
|
||||
queryBuilder := r.db.squirrel.
|
||||
Select("id", "enabled", "name", "identifier", "implementation", "base_url", "settings").
|
||||
Select("id", "enabled", "name", "identifier", "identifier_external", "implementation", "base_url", "settings").
|
||||
From("indexer").
|
||||
Where(sq.Eq{"id": id})
|
||||
|
||||
|
@ -146,17 +145,18 @@ func (r *IndexerRepo) FindByID(ctx context.Context, id int) (*domain.Indexer, er
|
|||
|
||||
var i domain.Indexer
|
||||
|
||||
var implementation, baseURL, settings sql.NullString
|
||||
var identifierExternal, implementation, baseURL, settings sql.Null[string]
|
||||
|
||||
if err := row.Scan(&i.ID, &i.Enabled, &i.Name, &i.Identifier, &implementation, &baseURL, &settings); err != nil {
|
||||
if err := row.Scan(&i.ID, &i.Enabled, &i.Name, &i.Identifier, &identifierExternal, &implementation, &baseURL, &settings); err != nil {
|
||||
return nil, errors.Wrap(err, "error scanning row")
|
||||
}
|
||||
|
||||
i.Implementation = implementation.String
|
||||
i.BaseURL = baseURL.String
|
||||
i.IdentifierExternal = identifierExternal.V
|
||||
i.Implementation = implementation.V
|
||||
i.BaseURL = baseURL.V
|
||||
|
||||
var settingsMap map[string]string
|
||||
if err = json.Unmarshal([]byte(settings.String), &settingsMap); err != nil {
|
||||
if err = json.Unmarshal([]byte(settings.V), &settingsMap); err != nil {
|
||||
return nil, errors.Wrap(err, "error unmarshal settings")
|
||||
}
|
||||
|
||||
|
@ -167,7 +167,7 @@ func (r *IndexerRepo) FindByID(ctx context.Context, id int) (*domain.Indexer, er
|
|||
|
||||
func (r *IndexerRepo) FindByFilterID(ctx context.Context, id int) ([]domain.Indexer, error) {
|
||||
queryBuilder := r.db.squirrel.
|
||||
Select("id", "enabled", "name", "identifier", "base_url", "settings").
|
||||
Select("id", "enabled", "name", "identifier", "identifier_external", "base_url", "settings").
|
||||
From("indexer").
|
||||
Join("filter_indexer ON indexer.id = filter_indexer.indexer_id").
|
||||
Where(sq.Eq{"filter_indexer.filter_id": id})
|
||||
|
@ -190,9 +190,9 @@ func (r *IndexerRepo) FindByFilterID(ctx context.Context, id int) ([]domain.Inde
|
|||
|
||||
var settings string
|
||||
var settingsMap map[string]string
|
||||
var baseURL sql.NullString
|
||||
var identifierExternal, baseURL sql.Null[string]
|
||||
|
||||
if err := rows.Scan(&f.ID, &f.Enabled, &f.Name, &f.Identifier, &baseURL, &settings); err != nil {
|
||||
if err := rows.Scan(&f.ID, &f.Enabled, &f.Name, &f.Identifier, &identifierExternal, &baseURL, &settings); err != nil {
|
||||
return nil, errors.Wrap(err, "error scanning row")
|
||||
}
|
||||
|
||||
|
@ -200,7 +200,8 @@ func (r *IndexerRepo) FindByFilterID(ctx context.Context, id int) ([]domain.Inde
|
|||
return nil, errors.Wrap(err, "error unmarshal settings")
|
||||
}
|
||||
|
||||
f.BaseURL = baseURL.String
|
||||
f.IdentifierExternal = identifierExternal.V
|
||||
f.BaseURL = baseURL.V
|
||||
f.Settings = settingsMap
|
||||
|
||||
indexers = append(indexers, f)
|
||||
|
|
|
@ -16,15 +16,16 @@ CREATE TABLE users
|
|||
|
||||
CREATE TABLE indexer
|
||||
(
|
||||
id SERIAL PRIMARY KEY,
|
||||
identifier TEXT,
|
||||
implementation TEXT,
|
||||
base_url TEXT,
|
||||
enabled BOOLEAN,
|
||||
name TEXT NOT NULL,
|
||||
settings TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
id SERIAL PRIMARY KEY,
|
||||
identifier TEXT,
|
||||
identifier_external TEXT,
|
||||
implementation TEXT,
|
||||
base_url TEXT,
|
||||
enabled BOOLEAN,
|
||||
name TEXT NOT NULL,
|
||||
settings TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE (identifier)
|
||||
);
|
||||
|
||||
|
@ -877,5 +878,11 @@ ALTER TABLE filter
|
|||
`,
|
||||
`ALTER TABLE action
|
||||
ADD COLUMN first_last_piece_prio BOOLEAN DEFAULT false;
|
||||
`,
|
||||
`ALTER TABLE indexer
|
||||
ADD COLUMN identifier_external TEXT;
|
||||
|
||||
UPDATE indexer
|
||||
SET identifier_external = name;
|
||||
`,
|
||||
}
|
||||
|
|
|
@ -16,15 +16,16 @@ CREATE TABLE users
|
|||
|
||||
CREATE TABLE indexer
|
||||
(
|
||||
id INTEGER PRIMARY KEY,
|
||||
identifier TEXT,
|
||||
implementation TEXT,
|
||||
base_url TEXT,
|
||||
enabled BOOLEAN,
|
||||
name TEXT NOT NULL,
|
||||
settings TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
id INTEGER PRIMARY KEY,
|
||||
identifier TEXT,
|
||||
identifier_external TEXT,
|
||||
implementation TEXT,
|
||||
base_url TEXT,
|
||||
enabled BOOLEAN,
|
||||
name TEXT NOT NULL,
|
||||
settings TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE (identifier)
|
||||
);
|
||||
|
||||
|
@ -1515,5 +1516,11 @@ ALTER TABLE filter
|
|||
`,
|
||||
`ALTER TABLE action
|
||||
ADD COLUMN first_last_piece_prio BOOLEAN DEFAULT false;
|
||||
`,
|
||||
`ALTER TABLE indexer
|
||||
ADD COLUMN identifier_external TEXT;
|
||||
|
||||
UPDATE indexer
|
||||
SET identifier_external = name;
|
||||
`,
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue