reading-list / app /models.py
pardeep-singh's picture
Deploy reading-list from main 730966e
06b349d verified
Raw History Blame Contribute Delete
858 Bytes
from enum import StrEnum
from typing import Annotated
from pydantic import BaseModel, StringConstraints, field_validator
class Status(StrEnum):
TO_READ = "to-read"
READING = "reading"
DONE = "done"
class Book(BaseModel):
id: int
title: str
author: str | None = None
status: Status
class BookCreate(BaseModel):
title: Annotated[str, StringConstraints(strip_whitespace=True, min_length=1, max_length=200)]
author: Annotated[str, StringConstraints(strip_whitespace=True, max_length=200)] | None = None
status: Status = Status.TO_READ
@field_validator("author")
@classmethod
def blank_author_is_none(cls, value: str | None) -> str | None:
return value or None
class BookStatusUpdate(BaseModel):
status: Status
class BookStats(BaseModel):
total: int
by_status: dict[Status, int]