Retrofit SmartCollectionController to REST-style routes and class-level API key authorization.
Preserve NotFoundError from collection/smart-collection handlers so ApiResults maps missing entities to 404 instead of 422.
Validate collection item mutations so invalid add requests return 422 and missing item associations return 404.
Stabilize culture-sensitive CustomStreamSelectorTests by pinning Sunday-first expectations to en-US and adding Monday-first coverage.
Tests
dotnet restore ErsatzTV.sln --disable-parallel -v normal
dotnet build ErsatzTV.sln -v normal
TZ=UTC dotnet test ErsatzTV.sln -v normal
Review Notes
Addressed adversarial review findings around POST /api/collections/{id}/items invalid IDs and DELETE /api/collections/{id}/items/{mediaItemId} missing associations.
No docs changes needed beyond the existing REST design; implementation follows the #2a controller/API conventions.
Closes #35
## Summary
- Add idiomatic REST Collections CRUD endpoints plus collection item add/remove routes.
- Retrofit `SmartCollectionController` to REST-style routes and class-level API key authorization.
- Preserve `NotFoundError` from collection/smart-collection handlers so `ApiResults` maps missing entities to 404 instead of 422.
- Validate collection item mutations so invalid add requests return 422 and missing item associations return 404.
- Stabilize culture-sensitive `CustomStreamSelectorTests` by pinning Sunday-first expectations to `en-US` and adding Monday-first coverage.
## Tests
- `dotnet restore ErsatzTV.sln --disable-parallel -v normal`
- `dotnet build ErsatzTV.sln -v normal`
- `TZ=UTC dotnet test ErsatzTV.sln -v normal`
## Review Notes
- Addressed adversarial review findings around `POST /api/collections/{id}/items` invalid IDs and `DELETE /api/collections/{id}/items/{mediaItemId}` missing associations.
- No docs changes needed beyond the existing REST design; implementation follows the #2a controller/API conventions.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #35
Summary
SmartCollectionControllerto REST-style routes and class-level API key authorization.NotFoundErrorfrom collection/smart-collection handlers soApiResultsmaps missing entities to 404 instead of 422.CustomStreamSelectorTestsby pinning Sunday-first expectations toen-USand adding Monday-first coverage.Tests
dotnet restore ErsatzTV.sln --disable-parallel -v normaldotnet build ErsatzTV.sln -v normalTZ=UTC dotnet test ErsatzTV.sln -v normalReview Notes
POST /api/collections/{id}/itemsinvalid IDs andDELETE /api/collections/{id}/items/{mediaItemId}missing associations.