From 3866c6d6f03bb2997aeb5f67888cfa312d704209 Mon Sep 17 00:00:00 2001 From: Justin Visser Date: Fri, 27 Feb 2026 00:05:17 +0100 Subject: [PATCH] ci: add CodeQL security scanning and Dependabot Co-Authored-By: Claude Opus 4.6 --- .github/dependabot.yml | 14 ++++++++++ .github/workflows/codeql.yml | 26 +++++++++++++++++++ .../{domains => }/arxiv/application.py | 0 app/services/{domains => }/arxiv/cache.py | 0 app/services/{domains => }/arxiv/client.py | 0 app/services/{domains => }/arxiv/constants.py | 0 app/services/{domains => }/arxiv/errors.py | 0 app/services/{domains => }/arxiv/gateway.py | 0 app/services/{domains => }/arxiv/guards.py | 0 app/services/{domains => }/arxiv/parser.py | 0 .../{domains => }/arxiv/rate_limit.py | 0 app/services/{domains => }/arxiv/types.py | 0 .../{domains => }/crossref/__init__.py | 0 .../{domains => }/crossref/application.py | 0 app/services/{domains => }/dbops/__init__.py | 0 .../{domains => }/dbops/application.py | 0 app/services/{domains => }/dbops/integrity.py | 0 .../dbops/near_duplicate_repair.py | 0 app/services/{domains => }/dbops/query.py | 0 app/services/{domains => }/doi/normalize.py | 0 app/services/domains/users/__init__.py | 1 - .../{domains => ingestion}/__init__.py | 0 .../{domains => }/ingestion/application.py | 0 .../{domains => }/ingestion/constants.py | 0 .../{domains => }/ingestion/fingerprints.py | 0 app/services/{domains => }/ingestion/queue.py | 0 .../{domains => }/ingestion/safety.py | 0 .../{domains => }/ingestion/scheduler.py | 0 app/services/{domains => }/ingestion/types.py | 0 .../{domains => }/openalex/__init__.py | 0 app/services/{domains => }/openalex/client.py | 0 .../{domains => }/openalex/matching.py | 0 app/services/{domains => }/openalex/types.py | 0 .../{domains => }/portability/__init__.py | 0 .../{domains => }/portability/application.py | 0 .../{domains => }/portability/constants.py | 0 .../{domains => }/portability/exporting.py | 0 .../{domains => }/portability/normalize.py | 0 .../portability/publication_import.py | 0 .../portability/scholar_import.py | 0 .../{domains => }/portability/types.py | 0 .../publication_identifiers/__init__.py | 0 .../publication_identifiers/application.py | 0 .../publication_identifiers/normalize.py | 0 .../publication_identifiers/types.py | 0 .../{domains => }/publications/__init__.py | 0 .../{domains => }/publications/application.py | 0 .../{domains => }/publications/counts.py | 0 .../{domains => }/publications/dedup.py | 0 .../{domains => }/publications/enrichment.py | 0 .../{domains => }/publications/listing.py | 0 .../{domains => }/publications/modes.py | 0 .../{domains => }/publications/pdf_queue.py | 0 .../publications/pdf_resolution_pipeline.py | 0 .../{domains => }/publications/queries.py | 0 .../{domains => }/publications/read_state.py | 0 .../{domains => }/publications/types.py | 0 app/services/{domains => }/runs/__init__.py | 0 .../{domains => }/runs/application.py | 0 app/services/{domains => }/runs/events.py | 0 .../{domains => }/runs/queue_queries.py | 0 .../{domains => }/runs/queue_service.py | 0 .../{domains => }/runs/runs_service.py | 0 app/services/{domains => }/runs/summary.py | 0 app/services/{domains => }/runs/types.py | 0 .../ingestion => scholar}/__init__.py | 0 .../{domains => }/scholar/author_rows.py | 0 app/services/{domains => }/scholar/parser.py | 0 .../{domains => }/scholar/parser_constants.py | 0 .../{domains => }/scholar/parser_types.py | 0 .../{domains => }/scholar/parser_utils.py | 0 .../{domains => }/scholar/profile_rows.py | 0 .../{domains => }/scholar/rate_limit.py | 0 app/services/{domains => }/scholar/source.py | 0 .../{domains => }/scholar/state_detection.py | 0 .../{domains/scholar => scholars}/__init__.py | 0 .../{domains => }/scholars/application.py | 0 .../{domains => }/scholars/constants.py | 0 .../{domains => }/scholars/exceptions.py | 0 .../{domains => }/scholars/search_hints.py | 0 .../{domains => }/scholars/uploads.py | 0 .../{domains => }/scholars/validators.py | 0 .../scholars => settings}/__init__.py | 0 .../{domains => }/settings/application.py | 0 .../{domains => }/unpaywall/__init__.py | 0 .../{domains => }/unpaywall/application.py | 0 .../{domains => }/unpaywall/pdf_discovery.py | 0 .../{domains => }/unpaywall/rate_limit.py | 0 .../{domains/settings => users}/__init__.py | 0 .../{domains => }/users/application.py | 0 90 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/codeql.yml rename app/services/{domains => }/arxiv/application.py (100%) rename app/services/{domains => }/arxiv/cache.py (100%) rename app/services/{domains => }/arxiv/client.py (100%) rename app/services/{domains => }/arxiv/constants.py (100%) rename app/services/{domains => }/arxiv/errors.py (100%) rename app/services/{domains => }/arxiv/gateway.py (100%) rename app/services/{domains => }/arxiv/guards.py (100%) rename app/services/{domains => }/arxiv/parser.py (100%) rename app/services/{domains => }/arxiv/rate_limit.py (100%) rename app/services/{domains => }/arxiv/types.py (100%) rename app/services/{domains => }/crossref/__init__.py (100%) rename app/services/{domains => }/crossref/application.py (100%) rename app/services/{domains => }/dbops/__init__.py (100%) rename app/services/{domains => }/dbops/application.py (100%) rename app/services/{domains => }/dbops/integrity.py (100%) rename app/services/{domains => }/dbops/near_duplicate_repair.py (100%) rename app/services/{domains => }/dbops/query.py (100%) rename app/services/{domains => }/doi/normalize.py (100%) delete mode 100644 app/services/domains/users/__init__.py rename app/services/{domains => ingestion}/__init__.py (100%) rename app/services/{domains => }/ingestion/application.py (100%) rename app/services/{domains => }/ingestion/constants.py (100%) rename app/services/{domains => }/ingestion/fingerprints.py (100%) rename app/services/{domains => }/ingestion/queue.py (100%) rename app/services/{domains => }/ingestion/safety.py (100%) rename app/services/{domains => }/ingestion/scheduler.py (100%) rename app/services/{domains => }/ingestion/types.py (100%) rename app/services/{domains => }/openalex/__init__.py (100%) rename app/services/{domains => }/openalex/client.py (100%) rename app/services/{domains => }/openalex/matching.py (100%) rename app/services/{domains => }/openalex/types.py (100%) rename app/services/{domains => }/portability/__init__.py (100%) rename app/services/{domains => }/portability/application.py (100%) rename app/services/{domains => }/portability/constants.py (100%) rename app/services/{domains => }/portability/exporting.py (100%) rename app/services/{domains => }/portability/normalize.py (100%) rename app/services/{domains => }/portability/publication_import.py (100%) rename app/services/{domains => }/portability/scholar_import.py (100%) rename app/services/{domains => }/portability/types.py (100%) rename app/services/{domains => }/publication_identifiers/__init__.py (100%) rename app/services/{domains => }/publication_identifiers/application.py (100%) rename app/services/{domains => }/publication_identifiers/normalize.py (100%) rename app/services/{domains => }/publication_identifiers/types.py (100%) rename app/services/{domains => }/publications/__init__.py (100%) rename app/services/{domains => }/publications/application.py (100%) rename app/services/{domains => }/publications/counts.py (100%) rename app/services/{domains => }/publications/dedup.py (100%) rename app/services/{domains => }/publications/enrichment.py (100%) rename app/services/{domains => }/publications/listing.py (100%) rename app/services/{domains => }/publications/modes.py (100%) rename app/services/{domains => }/publications/pdf_queue.py (100%) rename app/services/{domains => }/publications/pdf_resolution_pipeline.py (100%) rename app/services/{domains => }/publications/queries.py (100%) rename app/services/{domains => }/publications/read_state.py (100%) rename app/services/{domains => }/publications/types.py (100%) rename app/services/{domains => }/runs/__init__.py (100%) rename app/services/{domains => }/runs/application.py (100%) rename app/services/{domains => }/runs/events.py (100%) rename app/services/{domains => }/runs/queue_queries.py (100%) rename app/services/{domains => }/runs/queue_service.py (100%) rename app/services/{domains => }/runs/runs_service.py (100%) rename app/services/{domains => }/runs/summary.py (100%) rename app/services/{domains => }/runs/types.py (100%) rename app/services/{domains/ingestion => scholar}/__init__.py (100%) rename app/services/{domains => }/scholar/author_rows.py (100%) rename app/services/{domains => }/scholar/parser.py (100%) rename app/services/{domains => }/scholar/parser_constants.py (100%) rename app/services/{domains => }/scholar/parser_types.py (100%) rename app/services/{domains => }/scholar/parser_utils.py (100%) rename app/services/{domains => }/scholar/profile_rows.py (100%) rename app/services/{domains => }/scholar/rate_limit.py (100%) rename app/services/{domains => }/scholar/source.py (100%) rename app/services/{domains => }/scholar/state_detection.py (100%) rename app/services/{domains/scholar => scholars}/__init__.py (100%) rename app/services/{domains => }/scholars/application.py (100%) rename app/services/{domains => }/scholars/constants.py (100%) rename app/services/{domains => }/scholars/exceptions.py (100%) rename app/services/{domains => }/scholars/search_hints.py (100%) rename app/services/{domains => }/scholars/uploads.py (100%) rename app/services/{domains => }/scholars/validators.py (100%) rename app/services/{domains/scholars => settings}/__init__.py (100%) rename app/services/{domains => }/settings/application.py (100%) rename app/services/{domains => }/unpaywall/__init__.py (100%) rename app/services/{domains => }/unpaywall/application.py (100%) rename app/services/{domains => }/unpaywall/pdf_discovery.py (100%) rename app/services/{domains => }/unpaywall/rate_limit.py (100%) rename app/services/{domains/settings => users}/__init__.py (100%) rename app/services/{domains => }/users/application.py (100%) diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..3dbdcd9 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,14 @@ +version: 2 +updates: + - package-ecosystem: pip + directory: / + schedule: + interval: weekly + - package-ecosystem: npm + directory: /frontend + schedule: + interval: weekly + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 0000000..64a22d1 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,26 @@ +name: CodeQL + +on: + push: + branches: [main] + pull_request: + branches: [main] + schedule: + - cron: "30 5 * * 1" + +jobs: + analyze: + runs-on: ubuntu-latest + permissions: + security-events: write + contents: read + strategy: + matrix: + language: [python, javascript] + steps: + - uses: actions/checkout@v4 + - uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + - uses: github/codeql-action/autobuild@v3 + - uses: github/codeql-action/analyze@v3 diff --git a/app/services/domains/arxiv/application.py b/app/services/arxiv/application.py similarity index 100% rename from app/services/domains/arxiv/application.py rename to app/services/arxiv/application.py diff --git a/app/services/domains/arxiv/cache.py b/app/services/arxiv/cache.py similarity index 100% rename from app/services/domains/arxiv/cache.py rename to app/services/arxiv/cache.py diff --git a/app/services/domains/arxiv/client.py b/app/services/arxiv/client.py similarity index 100% rename from app/services/domains/arxiv/client.py rename to app/services/arxiv/client.py diff --git a/app/services/domains/arxiv/constants.py b/app/services/arxiv/constants.py similarity index 100% rename from app/services/domains/arxiv/constants.py rename to app/services/arxiv/constants.py diff --git a/app/services/domains/arxiv/errors.py b/app/services/arxiv/errors.py similarity index 100% rename from app/services/domains/arxiv/errors.py rename to app/services/arxiv/errors.py diff --git a/app/services/domains/arxiv/gateway.py b/app/services/arxiv/gateway.py similarity index 100% rename from app/services/domains/arxiv/gateway.py rename to app/services/arxiv/gateway.py diff --git a/app/services/domains/arxiv/guards.py b/app/services/arxiv/guards.py similarity index 100% rename from app/services/domains/arxiv/guards.py rename to app/services/arxiv/guards.py diff --git a/app/services/domains/arxiv/parser.py b/app/services/arxiv/parser.py similarity index 100% rename from app/services/domains/arxiv/parser.py rename to app/services/arxiv/parser.py diff --git a/app/services/domains/arxiv/rate_limit.py b/app/services/arxiv/rate_limit.py similarity index 100% rename from app/services/domains/arxiv/rate_limit.py rename to app/services/arxiv/rate_limit.py diff --git a/app/services/domains/arxiv/types.py b/app/services/arxiv/types.py similarity index 100% rename from app/services/domains/arxiv/types.py rename to app/services/arxiv/types.py diff --git a/app/services/domains/crossref/__init__.py b/app/services/crossref/__init__.py similarity index 100% rename from app/services/domains/crossref/__init__.py rename to app/services/crossref/__init__.py diff --git a/app/services/domains/crossref/application.py b/app/services/crossref/application.py similarity index 100% rename from app/services/domains/crossref/application.py rename to app/services/crossref/application.py diff --git a/app/services/domains/dbops/__init__.py b/app/services/dbops/__init__.py similarity index 100% rename from app/services/domains/dbops/__init__.py rename to app/services/dbops/__init__.py diff --git a/app/services/domains/dbops/application.py b/app/services/dbops/application.py similarity index 100% rename from app/services/domains/dbops/application.py rename to app/services/dbops/application.py diff --git a/app/services/domains/dbops/integrity.py b/app/services/dbops/integrity.py similarity index 100% rename from app/services/domains/dbops/integrity.py rename to app/services/dbops/integrity.py diff --git a/app/services/domains/dbops/near_duplicate_repair.py b/app/services/dbops/near_duplicate_repair.py similarity index 100% rename from app/services/domains/dbops/near_duplicate_repair.py rename to app/services/dbops/near_duplicate_repair.py diff --git a/app/services/domains/dbops/query.py b/app/services/dbops/query.py similarity index 100% rename from app/services/domains/dbops/query.py rename to app/services/dbops/query.py diff --git a/app/services/domains/doi/normalize.py b/app/services/doi/normalize.py similarity index 100% rename from app/services/domains/doi/normalize.py rename to app/services/doi/normalize.py diff --git a/app/services/domains/users/__init__.py b/app/services/domains/users/__init__.py deleted file mode 100644 index 9d48db4..0000000 --- a/app/services/domains/users/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from __future__ import annotations diff --git a/app/services/domains/__init__.py b/app/services/ingestion/__init__.py similarity index 100% rename from app/services/domains/__init__.py rename to app/services/ingestion/__init__.py diff --git a/app/services/domains/ingestion/application.py b/app/services/ingestion/application.py similarity index 100% rename from app/services/domains/ingestion/application.py rename to app/services/ingestion/application.py diff --git a/app/services/domains/ingestion/constants.py b/app/services/ingestion/constants.py similarity index 100% rename from app/services/domains/ingestion/constants.py rename to app/services/ingestion/constants.py diff --git a/app/services/domains/ingestion/fingerprints.py b/app/services/ingestion/fingerprints.py similarity index 100% rename from app/services/domains/ingestion/fingerprints.py rename to app/services/ingestion/fingerprints.py diff --git a/app/services/domains/ingestion/queue.py b/app/services/ingestion/queue.py similarity index 100% rename from app/services/domains/ingestion/queue.py rename to app/services/ingestion/queue.py diff --git a/app/services/domains/ingestion/safety.py b/app/services/ingestion/safety.py similarity index 100% rename from app/services/domains/ingestion/safety.py rename to app/services/ingestion/safety.py diff --git a/app/services/domains/ingestion/scheduler.py b/app/services/ingestion/scheduler.py similarity index 100% rename from app/services/domains/ingestion/scheduler.py rename to app/services/ingestion/scheduler.py diff --git a/app/services/domains/ingestion/types.py b/app/services/ingestion/types.py similarity index 100% rename from app/services/domains/ingestion/types.py rename to app/services/ingestion/types.py diff --git a/app/services/domains/openalex/__init__.py b/app/services/openalex/__init__.py similarity index 100% rename from app/services/domains/openalex/__init__.py rename to app/services/openalex/__init__.py diff --git a/app/services/domains/openalex/client.py b/app/services/openalex/client.py similarity index 100% rename from app/services/domains/openalex/client.py rename to app/services/openalex/client.py diff --git a/app/services/domains/openalex/matching.py b/app/services/openalex/matching.py similarity index 100% rename from app/services/domains/openalex/matching.py rename to app/services/openalex/matching.py diff --git a/app/services/domains/openalex/types.py b/app/services/openalex/types.py similarity index 100% rename from app/services/domains/openalex/types.py rename to app/services/openalex/types.py diff --git a/app/services/domains/portability/__init__.py b/app/services/portability/__init__.py similarity index 100% rename from app/services/domains/portability/__init__.py rename to app/services/portability/__init__.py diff --git a/app/services/domains/portability/application.py b/app/services/portability/application.py similarity index 100% rename from app/services/domains/portability/application.py rename to app/services/portability/application.py diff --git a/app/services/domains/portability/constants.py b/app/services/portability/constants.py similarity index 100% rename from app/services/domains/portability/constants.py rename to app/services/portability/constants.py diff --git a/app/services/domains/portability/exporting.py b/app/services/portability/exporting.py similarity index 100% rename from app/services/domains/portability/exporting.py rename to app/services/portability/exporting.py diff --git a/app/services/domains/portability/normalize.py b/app/services/portability/normalize.py similarity index 100% rename from app/services/domains/portability/normalize.py rename to app/services/portability/normalize.py diff --git a/app/services/domains/portability/publication_import.py b/app/services/portability/publication_import.py similarity index 100% rename from app/services/domains/portability/publication_import.py rename to app/services/portability/publication_import.py diff --git a/app/services/domains/portability/scholar_import.py b/app/services/portability/scholar_import.py similarity index 100% rename from app/services/domains/portability/scholar_import.py rename to app/services/portability/scholar_import.py diff --git a/app/services/domains/portability/types.py b/app/services/portability/types.py similarity index 100% rename from app/services/domains/portability/types.py rename to app/services/portability/types.py diff --git a/app/services/domains/publication_identifiers/__init__.py b/app/services/publication_identifiers/__init__.py similarity index 100% rename from app/services/domains/publication_identifiers/__init__.py rename to app/services/publication_identifiers/__init__.py diff --git a/app/services/domains/publication_identifiers/application.py b/app/services/publication_identifiers/application.py similarity index 100% rename from app/services/domains/publication_identifiers/application.py rename to app/services/publication_identifiers/application.py diff --git a/app/services/domains/publication_identifiers/normalize.py b/app/services/publication_identifiers/normalize.py similarity index 100% rename from app/services/domains/publication_identifiers/normalize.py rename to app/services/publication_identifiers/normalize.py diff --git a/app/services/domains/publication_identifiers/types.py b/app/services/publication_identifiers/types.py similarity index 100% rename from app/services/domains/publication_identifiers/types.py rename to app/services/publication_identifiers/types.py diff --git a/app/services/domains/publications/__init__.py b/app/services/publications/__init__.py similarity index 100% rename from app/services/domains/publications/__init__.py rename to app/services/publications/__init__.py diff --git a/app/services/domains/publications/application.py b/app/services/publications/application.py similarity index 100% rename from app/services/domains/publications/application.py rename to app/services/publications/application.py diff --git a/app/services/domains/publications/counts.py b/app/services/publications/counts.py similarity index 100% rename from app/services/domains/publications/counts.py rename to app/services/publications/counts.py diff --git a/app/services/domains/publications/dedup.py b/app/services/publications/dedup.py similarity index 100% rename from app/services/domains/publications/dedup.py rename to app/services/publications/dedup.py diff --git a/app/services/domains/publications/enrichment.py b/app/services/publications/enrichment.py similarity index 100% rename from app/services/domains/publications/enrichment.py rename to app/services/publications/enrichment.py diff --git a/app/services/domains/publications/listing.py b/app/services/publications/listing.py similarity index 100% rename from app/services/domains/publications/listing.py rename to app/services/publications/listing.py diff --git a/app/services/domains/publications/modes.py b/app/services/publications/modes.py similarity index 100% rename from app/services/domains/publications/modes.py rename to app/services/publications/modes.py diff --git a/app/services/domains/publications/pdf_queue.py b/app/services/publications/pdf_queue.py similarity index 100% rename from app/services/domains/publications/pdf_queue.py rename to app/services/publications/pdf_queue.py diff --git a/app/services/domains/publications/pdf_resolution_pipeline.py b/app/services/publications/pdf_resolution_pipeline.py similarity index 100% rename from app/services/domains/publications/pdf_resolution_pipeline.py rename to app/services/publications/pdf_resolution_pipeline.py diff --git a/app/services/domains/publications/queries.py b/app/services/publications/queries.py similarity index 100% rename from app/services/domains/publications/queries.py rename to app/services/publications/queries.py diff --git a/app/services/domains/publications/read_state.py b/app/services/publications/read_state.py similarity index 100% rename from app/services/domains/publications/read_state.py rename to app/services/publications/read_state.py diff --git a/app/services/domains/publications/types.py b/app/services/publications/types.py similarity index 100% rename from app/services/domains/publications/types.py rename to app/services/publications/types.py diff --git a/app/services/domains/runs/__init__.py b/app/services/runs/__init__.py similarity index 100% rename from app/services/domains/runs/__init__.py rename to app/services/runs/__init__.py diff --git a/app/services/domains/runs/application.py b/app/services/runs/application.py similarity index 100% rename from app/services/domains/runs/application.py rename to app/services/runs/application.py diff --git a/app/services/domains/runs/events.py b/app/services/runs/events.py similarity index 100% rename from app/services/domains/runs/events.py rename to app/services/runs/events.py diff --git a/app/services/domains/runs/queue_queries.py b/app/services/runs/queue_queries.py similarity index 100% rename from app/services/domains/runs/queue_queries.py rename to app/services/runs/queue_queries.py diff --git a/app/services/domains/runs/queue_service.py b/app/services/runs/queue_service.py similarity index 100% rename from app/services/domains/runs/queue_service.py rename to app/services/runs/queue_service.py diff --git a/app/services/domains/runs/runs_service.py b/app/services/runs/runs_service.py similarity index 100% rename from app/services/domains/runs/runs_service.py rename to app/services/runs/runs_service.py diff --git a/app/services/domains/runs/summary.py b/app/services/runs/summary.py similarity index 100% rename from app/services/domains/runs/summary.py rename to app/services/runs/summary.py diff --git a/app/services/domains/runs/types.py b/app/services/runs/types.py similarity index 100% rename from app/services/domains/runs/types.py rename to app/services/runs/types.py diff --git a/app/services/domains/ingestion/__init__.py b/app/services/scholar/__init__.py similarity index 100% rename from app/services/domains/ingestion/__init__.py rename to app/services/scholar/__init__.py diff --git a/app/services/domains/scholar/author_rows.py b/app/services/scholar/author_rows.py similarity index 100% rename from app/services/domains/scholar/author_rows.py rename to app/services/scholar/author_rows.py diff --git a/app/services/domains/scholar/parser.py b/app/services/scholar/parser.py similarity index 100% rename from app/services/domains/scholar/parser.py rename to app/services/scholar/parser.py diff --git a/app/services/domains/scholar/parser_constants.py b/app/services/scholar/parser_constants.py similarity index 100% rename from app/services/domains/scholar/parser_constants.py rename to app/services/scholar/parser_constants.py diff --git a/app/services/domains/scholar/parser_types.py b/app/services/scholar/parser_types.py similarity index 100% rename from app/services/domains/scholar/parser_types.py rename to app/services/scholar/parser_types.py diff --git a/app/services/domains/scholar/parser_utils.py b/app/services/scholar/parser_utils.py similarity index 100% rename from app/services/domains/scholar/parser_utils.py rename to app/services/scholar/parser_utils.py diff --git a/app/services/domains/scholar/profile_rows.py b/app/services/scholar/profile_rows.py similarity index 100% rename from app/services/domains/scholar/profile_rows.py rename to app/services/scholar/profile_rows.py diff --git a/app/services/domains/scholar/rate_limit.py b/app/services/scholar/rate_limit.py similarity index 100% rename from app/services/domains/scholar/rate_limit.py rename to app/services/scholar/rate_limit.py diff --git a/app/services/domains/scholar/source.py b/app/services/scholar/source.py similarity index 100% rename from app/services/domains/scholar/source.py rename to app/services/scholar/source.py diff --git a/app/services/domains/scholar/state_detection.py b/app/services/scholar/state_detection.py similarity index 100% rename from app/services/domains/scholar/state_detection.py rename to app/services/scholar/state_detection.py diff --git a/app/services/domains/scholar/__init__.py b/app/services/scholars/__init__.py similarity index 100% rename from app/services/domains/scholar/__init__.py rename to app/services/scholars/__init__.py diff --git a/app/services/domains/scholars/application.py b/app/services/scholars/application.py similarity index 100% rename from app/services/domains/scholars/application.py rename to app/services/scholars/application.py diff --git a/app/services/domains/scholars/constants.py b/app/services/scholars/constants.py similarity index 100% rename from app/services/domains/scholars/constants.py rename to app/services/scholars/constants.py diff --git a/app/services/domains/scholars/exceptions.py b/app/services/scholars/exceptions.py similarity index 100% rename from app/services/domains/scholars/exceptions.py rename to app/services/scholars/exceptions.py diff --git a/app/services/domains/scholars/search_hints.py b/app/services/scholars/search_hints.py similarity index 100% rename from app/services/domains/scholars/search_hints.py rename to app/services/scholars/search_hints.py diff --git a/app/services/domains/scholars/uploads.py b/app/services/scholars/uploads.py similarity index 100% rename from app/services/domains/scholars/uploads.py rename to app/services/scholars/uploads.py diff --git a/app/services/domains/scholars/validators.py b/app/services/scholars/validators.py similarity index 100% rename from app/services/domains/scholars/validators.py rename to app/services/scholars/validators.py diff --git a/app/services/domains/scholars/__init__.py b/app/services/settings/__init__.py similarity index 100% rename from app/services/domains/scholars/__init__.py rename to app/services/settings/__init__.py diff --git a/app/services/domains/settings/application.py b/app/services/settings/application.py similarity index 100% rename from app/services/domains/settings/application.py rename to app/services/settings/application.py diff --git a/app/services/domains/unpaywall/__init__.py b/app/services/unpaywall/__init__.py similarity index 100% rename from app/services/domains/unpaywall/__init__.py rename to app/services/unpaywall/__init__.py diff --git a/app/services/domains/unpaywall/application.py b/app/services/unpaywall/application.py similarity index 100% rename from app/services/domains/unpaywall/application.py rename to app/services/unpaywall/application.py diff --git a/app/services/domains/unpaywall/pdf_discovery.py b/app/services/unpaywall/pdf_discovery.py similarity index 100% rename from app/services/domains/unpaywall/pdf_discovery.py rename to app/services/unpaywall/pdf_discovery.py diff --git a/app/services/domains/unpaywall/rate_limit.py b/app/services/unpaywall/rate_limit.py similarity index 100% rename from app/services/domains/unpaywall/rate_limit.py rename to app/services/unpaywall/rate_limit.py diff --git a/app/services/domains/settings/__init__.py b/app/services/users/__init__.py similarity index 100% rename from app/services/domains/settings/__init__.py rename to app/services/users/__init__.py diff --git a/app/services/domains/users/application.py b/app/services/users/application.py similarity index 100% rename from app/services/domains/users/application.py rename to app/services/users/application.py