Добавление выдач

This commit is contained in:
2025-12-20 11:06:13 +03:00
parent 3473c31f73
commit 09b7cb17a5
16 changed files with 153 additions and 15 deletions
+3
View File
@@ -5,6 +5,7 @@ from sqlmodel import Field, Relationship
from library_service.models.dto.book import BookBase
from library_service.models.db.links import AuthorBookLink, GenreBookLink
from library_service.models.enums import BookStatus
if TYPE_CHECKING:
from .author import Author
@@ -14,9 +15,11 @@ if TYPE_CHECKING:
class Book(BookBase, table=True):
"""Модель книги в базе данных"""
id: int | None = Field(default=None, primary_key=True, index=True)
status: BookStatus = Field(default=BookStatus.ACTIVE)
authors: List["Author"] = Relationship(
back_populates="books", link_model=AuthorBookLink
)
genres: List["Genre"] = Relationship(
back_populates="books", link_model=GenreBookLink
)
loans: List["BookUserLink"] = Relationship(sa_relationship_kwargs={"cascade": "all, delete"})
+18
View File
@@ -1,4 +1,5 @@
"""Модуль связей между сущностями в БД"""
from datetime import datetime
from sqlmodel import SQLModel, Field
@@ -22,3 +23,20 @@ class UserRoleLink(SQLModel, table=True):
user_id: int | None = Field(default=None, foreign_key="users.id", primary_key=True)
role_id: int | None = Field(default=None, foreign_key="roles.id", primary_key=True)
class BookUserLink(SQLModel, table=True):
"""
Модель истории выдачи книг (Loan).
Связывает книгу и пользователя с фиксацией времени.
"""
__tablename__ = "book_loans"
id: int | None = Field(default=None, primary_key=True, index=True)
book_id: int = Field(foreign_key="book.id")
user_id: int = Field(foreign_key="users.id")
borrowed_at: datetime = Field(default_factory=datetime.utcnow)
due_date: datetime
returned_at: datetime | None = Field(default=None)
+1
View File
@@ -26,3 +26,4 @@ class User(UserBase, table=True):
# Связи
roles: List["Role"] = Relationship(back_populates="users", link_model=UserRoleLink)
loans: List["BookUserLink"] = Relationship(sa_relationship_kwargs={"cascade": "all, delete"})