
- Implemented CRUD operations for manga, authors, publishers, and genres - Added search and filtering functionality - Set up SQLAlchemy ORM with SQLite database - Configured Alembic for database migrations - Implemented logging with Loguru - Added comprehensive API documentation - Set up error handling and validation - Added ruff for linting and formatting
29 lines
876 B
Python
29 lines
876 B
Python
from sqlalchemy.orm import Session
|
|
|
|
from app.crud.base import CRUDBase
|
|
from app.models.manga import Genre
|
|
from app.schemas.genre import GenreCreate, GenreUpdate
|
|
|
|
|
|
class CRUDGenre(CRUDBase[Genre, GenreCreate, GenreUpdate]):
|
|
def get_by_name(self, db: Session, *, name: str) -> Genre | None:
|
|
"""
|
|
Get a genre by name.
|
|
"""
|
|
return db.query(Genre).filter(Genre.name == name).first()
|
|
|
|
def create_if_not_exists(
|
|
self, db: Session, *, name: str, description: str | None = None
|
|
) -> Genre:
|
|
"""
|
|
Create a genre if it doesn't exist, otherwise return the existing one.
|
|
"""
|
|
genre = self.get_by_name(db, name=name)
|
|
if not genre:
|
|
genre_in = GenreCreate(name=name, description=description)
|
|
genre = self.create(db, obj_in=genre_in)
|
|
return genre
|
|
|
|
|
|
genre = CRUDGenre(Genre)
|