animeinformationapi-rcbblj/app/crud/crud_character.py
Automated Action 9623558845 Add character management system
- Enhance character model with additional fields
- Create relationship between anime and characters
- Implement character search functionality
- Create Alembic migration for character table
- Add sample character data for seeding
- Update README with character endpoint information
2025-05-17 22:02:13 +00:00

65 lines
2.0 KiB
Python

from typing import List, Optional
from sqlalchemy.orm import Session
from app.crud.base import CRUDBase
from app.models.character import Character
from app.schemas.character import CharacterCreate, CharacterUpdate
class CRUDCharacter(CRUDBase[Character, CharacterCreate, CharacterUpdate]):
def get_by_anime(self, db: Session, *, anime_id: int) -> List[Character]:
"""Get all characters for a specific anime"""
return db.query(Character).filter(Character.anime_id == anime_id).all()
def get_count_by_anime(self, db: Session, *, anime_id: int) -> int:
"""Get count of characters for a specific anime"""
return db.query(Character).filter(Character.anime_id == anime_id).count()
def search(
self,
db: Session,
*,
name: Optional[str] = None,
anime_id: Optional[int] = None,
role: Optional[str] = None,
skip: int = 0,
limit: int = 100
) -> List[Character]:
"""Search for characters with filters"""
query = db.query(Character)
if name:
query = query.filter(Character.name.ilike(f"%{name}%"))
if anime_id:
query = query.filter(Character.anime_id == anime_id)
if role:
query = query.filter(Character.role == role)
return query.offset(skip).limit(limit).all()
def search_count(
self,
db: Session,
*,
name: Optional[str] = None,
anime_id: Optional[int] = None,
role: Optional[str] = None,
) -> int:
"""Get count of characters matching search criteria"""
query = db.query(Character)
if name:
query = query.filter(Character.name.ilike(f"%{name}%"))
if anime_id:
query = query.filter(Character.anime_id == anime_id)
if role:
query = query.filter(Character.role == role)
return query.count()
character = CRUDCharacter(Character)