- Add loading status fields to AnimeSeries model
- Create BackgroundLoaderService for async task processing
- Update POST /api/anime/add to return 202 Accepted immediately
- Add GET /api/anime/{key}/loading-status endpoint
- Integrate background loader with startup/shutdown lifecycle
- Create database migration script for loading status fields
- Add unit tests for BackgroundLoaderService (10 tests, all passing)
- Update AnimeSeriesService.create() to accept loading status fields
Architecture follows clean separation with no code duplication:
- BackgroundLoader orchestrates, doesn't reimplement
- Reuses existing AnimeService, NFOService, WebSocket patterns
- Database-backed status survives restarts
130 lines
4.2 KiB
Markdown
130 lines
4.2 KiB
Markdown
# Changelog
|
|
|
|
## Document Purpose
|
|
|
|
This document tracks all notable changes to the Aniworld project.
|
|
|
|
### What This Document Contains
|
|
|
|
- **Version History**: All released versions with dates
|
|
- **Added Features**: New functionality in each release
|
|
- **Changed Features**: Modifications to existing features
|
|
- **Deprecated Features**: Features marked for removal
|
|
- **Removed Features**: Features removed from the codebase
|
|
- **Fixed Bugs**: Bug fixes with issue references
|
|
- **Security Fixes**: Security-related changes
|
|
- **Breaking Changes**: Changes requiring user action
|
|
|
|
### What This Document Does NOT Contain
|
|
|
|
- Internal refactoring details (unless user-facing)
|
|
- Commit-level changes
|
|
- Work-in-progress features
|
|
- Roadmap or planned features
|
|
|
|
### Target Audience
|
|
|
|
- All users and stakeholders
|
|
- Operators planning upgrades
|
|
- Developers tracking changes
|
|
- Support personnel
|
|
|
|
---
|
|
|
|
## Format
|
|
|
|
This changelog follows [Keep a Changelog](https://keepachangelog.com/) principles and adheres to [Semantic Versioning](https://semver.org/).
|
|
|
|
---
|
|
|
|
## [Unreleased] - 2026-01-18
|
|
|
|
### Fixed
|
|
|
|
- **Series Visibility**: Fixed issue where series added to the database weren't appearing in the API/UI
|
|
- Series are now loaded from database into SeriesApp's in-memory cache on startup
|
|
- Added `_load_series_from_db()` call after initial database sync in FastAPI lifespan
|
|
- **Episode Tracking**: Fixed missing episodes not being saved to database when adding new series
|
|
- Missing episodes are now persisted to the `episodes` table after the targeted scan
|
|
- Episodes are properly synced during rescan operations (added/removed based on filesystem state)
|
|
- **Database Synchronization**: Improved data consistency between database and in-memory cache
|
|
- Rescan process properly updates episodes: adds new missing episodes, removes downloaded ones
|
|
- All series operations now maintain database and cache synchronization
|
|
|
|
### Technical Details
|
|
|
|
- Modified `src/server/fastapi_app.py` to load series from database after sync
|
|
- Modified `src/server/api/anime.py` to save scanned episodes to database
|
|
- Episodes table properly tracks missing episodes with automatic cleanup
|
|
|
|
---
|
|
|
|
## Sections for Each Release
|
|
|
|
```markdown
|
|
## [Version] - YYYY-MM-DD
|
|
|
|
### Added
|
|
|
|
- New features
|
|
|
|
### Changed
|
|
|
|
- Changes to existing functionality
|
|
|
|
### Deprecated
|
|
|
|
- Features that will be removed in future versions
|
|
|
|
### Removed
|
|
|
|
- Features removed in this release
|
|
|
|
### Fixed
|
|
|
|
- Bug fixes
|
|
|
|
### Security
|
|
|
|
- Security-related fixes
|
|
```
|
|
|
|
---
|
|
|
|
## Unreleased
|
|
|
|
_Changes that are in development but not yet released._
|
|
|
|
### Added
|
|
|
|
- **Enhanced Anime Add Flow**: Automatic database persistence, targeted episode scanning, and folder creation with sanitized names
|
|
- Filesystem utility module (`src/server/utils/filesystem.py`) with `sanitize_folder_name()`, `is_safe_path()`, and `create_safe_folder()` functions
|
|
- `Serie.sanitized_folder` property for generating filesystem-safe folder names from display names
|
|
- `SerieScanner.scan_single_series()` method for targeted scanning of individual anime without full library rescan
|
|
- Add series API response now includes `missing_episodes` list and `total_missing` count
|
|
- Database transaction support with `@transactional` decorator and `atomic()` context manager
|
|
- Transaction propagation modes (REQUIRED, REQUIRES_NEW, NESTED) for fine-grained control
|
|
- Savepoint support for nested transactions with partial rollback capability
|
|
- `TransactionManager` helper class for manual transaction control
|
|
- Bulk operations: `bulk_mark_downloaded`, `bulk_delete`, `clear_all` for batch processing
|
|
- `rotate_session` atomic operation for secure session rotation
|
|
- Transaction utilities: `is_session_in_transaction`, `get_session_transaction_depth`
|
|
- `get_transactional_session` for sessions without auto-commit
|
|
|
|
### Changed
|
|
|
|
- `QueueRepository.save_item()` now uses atomic transactions for data consistency
|
|
- `QueueRepository.clear_all()` now uses atomic transactions for all-or-nothing behavior
|
|
- Service layer documentation updated to reflect transaction-aware design
|
|
|
|
### Fixed
|
|
|
|
- Scan status indicator now correctly shows running state after page reload during active scan
|
|
- Improved reliability of process status updates in the UI header
|
|
|
|
---
|
|
|
|
## Version History
|
|
|
|
_To be documented as versions are released._
|