fix: Implement /api/anime/add endpoint correctly

- Fixed 501 Not Implemented error by replacing non-existent AddSeries method
- Added Serie import from src.core.entities.series
- Implemented proper series creation using Serie class following CLI pattern
- Added input validation for empty link and name fields
- Series are now correctly added to series_app.List using add() method
- Call refresh_series_list() to update cache after adding

Tests:
- Added test for unauthorized access (401)
- Added test for successful addition with authentication (200)
- Added test for empty name validation (400)
- Added test for empty link validation (400)
- Updated FakeSeriesApp mock to support add() and refresh_series_list()

All tests passing.
This commit is contained in:
2025-10-28 19:36:16 +01:00
parent 02764f7e6f
commit adfbdf56d0
2 changed files with 110 additions and 15 deletions

View File

@@ -3,6 +3,7 @@ from typing import Any, List, Optional
from fastapi import APIRouter, Depends, HTTPException, status
from pydantic import BaseModel, Field
from src.core.entities.series import Serie
from src.server.utils.dependencies import (
get_optional_series_app,
get_series_app,
@@ -540,24 +541,50 @@ async def add_series(
HTTPException: If adding the series fails
"""
try:
if not hasattr(series_app, "AddSeries"):
raise HTTPException(
status_code=status.HTTP_501_NOT_IMPLEMENTED,
detail="Add series functionality not available",
)
result = series_app.AddSeries(request.link, request.name)
if result:
return {
"status": "success",
"message": f"Successfully added series: {request.name}"
}
else:
# Validate inputs
if not request.link or not request.link.strip():
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Failed to add series - series may already exist",
detail="Series link cannot be empty",
)
if not request.name or not request.name.strip():
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Series name cannot be empty",
)
# Check if series_app has the List attribute
if not hasattr(series_app, "List"):
raise HTTPException(
status_code=status.HTTP_501_NOT_IMPLEMENTED,
detail="Series list functionality not available",
)
# Create a new Serie object
# Following the pattern from CLI:
# Serie(key, name, site, folder, episodeDict)
# The key and folder are both the link in this case
# episodeDict is empty {} for a new series
serie = Serie(
key=request.link.strip(),
name=request.name.strip(),
site="aniworld.to",
folder=request.name.strip(),
episodeDict={}
)
# Add the series to the list
series_app.List.add(serie)
# Refresh the series list to update the cache
if hasattr(series_app, "refresh_series_list"):
series_app.refresh_series_list()
return {
"status": "success",
"message": f"Successfully added series: {request.name}"
}
except HTTPException:
raise
except Exception as exc: