Remove YouTube integration from backend and deployment config

Drops the YouTube-backed second catalog source entirely: the
Local/External split on Track/Album collapses into single concrete
entities, Artist/TrackArtist/ExternalTrack/ExternalAlbum and the
YouTube service/download pipeline (yt-dlp, MassTransit consumer,
routing slip) are deleted, and mixes now source discovery only from
local listening history. Includes the RemoveYouTubeIntegration EF
Core migration and matching Worker/deploy/compose cleanup (no more
yt-dlp/python/deno in the Worker image, no thumbnail-cache/YtDlp
config sections).
This commit is contained in:
2026-09-15 21:17:03 +02:00
parent 5696683859
commit 31032bd8e8
137 changed files with 1933 additions and 3969 deletions
+7 -8
View File
@@ -83,7 +83,7 @@ dotnet test backend/Musify.slnx
| Proyecto | Cubre | Docker |
|---|---|---|
| `Musify.Domain.Tests` | Lógica de los value objects (`TrackAudio`/`TrackPictures`: `IsProcessed`, `IsFailed`, `IsInProgress`). Las entidades son en su mayoría anémicas — sin comportamiento propio, nada más que testear ahí. | No |
| `Musify.Application.Tests` | Los ~45 handlers y servicios de `Musify.Application` (Albums, Tracks, PlayLists, Users, Mixes, YouTube). | No |
| `Musify.Application.Tests` | Los ~45 handlers y servicios de `Musify.Application` (Albums, Tracks, PlayLists, Users, Mixes). | No |
| `Musify.Infrastructure.Tests` | `Database`/migraciones, `StorageService`, `StreamTicketService`, `AuditableEntityInterceptor`, `PictureService`, `SingleFlightCache`, `PlayListPresetSeeder`. | **Sí** |
| `Musify.Api.Tests` | Endpoints HTTP reales (routing, auth, `ValidationFilter`, mapeo `ErrorOr`→HTTP) vía `WebApplicationFactory`, más `ErrorOrHttpExtensions`/`CurrentUser`/validators FluentValidation en aislado. | **Sí** |
| `Musify.StreamingGateway.Tests` | `TicketValidator` (RS256) y `TicketValidationMiddleware` (traversal, límites de prefijo, extracción de ticket). | No |
@@ -102,8 +102,8 @@ NSubstitute, no hay `IQueryable` detrás de un mock. En su lugar,
del proveedor InMemory de EF Core, SQLite además soporta transacciones, que dos
handlers usan). `TestSupport/TestEntities.cs` y `TestConfigurations.cs`
construyen entidades y configuración con valores por defecto sensatos.
`IStorageService`, `IEventBus`, `IYouTubeMusicService`, etc. sí se mockean con
NSubstitute, al ser interfaces normales.
`IStorageService`, `IEventBus`, etc. sí se mockean con NSubstitute, al ser
interfaces normales.
### Infrastructure.Tests y Api.Tests: Testcontainers
@@ -117,8 +117,8 @@ migraciones EF Core reales aplicadas contra el Postgres efímero.
`Api.Tests` usa `WebApplicationFactory<Program>` contra ese mismo Postgres —
routing, auth y validación reales — pero sustituye por fakes los servicios que
hablan por red (`IStorageService`, `IEventBus`, `IYouTubeMusicService`,
`IStreamTicketService`) y el esquema de autenticación JWT real por un handler
hablan por red (`IStorageService`, `IEventBus`, `IStreamTicketService`) y el
esquema de autenticación JWT real por un handler
de prueba (ver `TestSupport/FakeAuthenticationHandler.cs`) que autentica según
un header, sin necesitar un Zitadel real.
@@ -142,11 +142,10 @@ se sobreescribe con variables de entorno (`Seccion__Clave`) desde
Secciones clave: `Authentication` (Zitadel), `Database`, `MassTransit`,
`InfrastructureStorage` (S3), `ApplicationStorage` (bucket), `Track`, `PlayList`,
`UploadIntent`, `AudioTranscoder`, `YtDlp`, `Workers`, `StreamGateway` /
`StreamTicket`.
`UploadIntent`, `AudioTranscoder`, `Workers`, `StreamGateway` / `StreamTicket`.
## Requisitos del host
- .NET 10 SDK y Node 22.
- **ffmpeg** y **yt-dlp** en el PATH (transcode y descarga de audio del Worker).
- **ffmpeg** en el PATH (transcode de audio del Worker).
- Docker Desktop.