Summary
This one's been a while coming. The API layer was directly importing EF Core types so controllers and services had ListenArrDbContext injected all over the place, making it impossible to unit test without spinning up a real database and tightly coupling business logic to persistence details. This PR fixes that, and takes the opportunity to upgrade the runtime stack at the same time.
Added
- 17 new application-layer repository interfaces under
listenarr.application/Repositories/(IDownloadRepository,IDownloadHistoryRepository,IHistoryRepository,IIndexerRepository,IUserRepository,IUserSessionRepository,IApplicationSettingsRepository,IApiConfigurationRepository,IDownloadClientConfigurationRepository,IRemotePathMappingRepository,IAudiobookFileRepository,IMoveJobRepository,IMonitoredAuthorRepository,IMonitoredSeriesRepository,IProcessExecutionLogRepository,IDownloadProcessingJobRepository,IRootFolderRepository) - 13 new EF Core repository implementations under
listenarr.infrastructure/Repositories/(EfHistoryRepository,EfIndexerRepository,EfUserRepository,EfUserSessionRepository,EfApplicationSettingsRepository,EfApiConfigurationRepository,EfDownloadClientConfigurationRepository,EfRemotePathMappingRepository,EfAudiobookFileRepository,EfMoveJobRepository,EfMonitoredAuthorRepository,EfMonitoredSeriesRepository,EfProcessExecutionLogRepository) IDatabaseConnectionProvider/EfDatabaseConnectionProviderfor exposing raw connection info without leaking EF typesQueueStatsdomain model for download processing queue metrics- CI layering enforcement:
run-tests.ymlnow fails the build if any file outsideProgram.csin the API layer imports fromlistenarr.infrastructure, or if anyasync voidappears in production code - CI now installs Node 24, runs frontend build, lint, type-check, and tests as part of the test job
- Targeted download ...
Automated Canary build