53 lines
2.0 KiB
Python
53 lines
2.0 KiB
Python
from typing import List
|
|
|
|
from sqlalchemy import Column, ForeignKey, Integer, String
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from src.db.models.base import Base, BaseMixin
|
|
|
|
|
|
class Article(Base, BaseMixin):
|
|
__tablename__ = 'article'
|
|
title: Mapped[str] = mapped_column(unique=True)
|
|
article_authors = relationship("ArticleAuthor")
|
|
|
|
|
|
class Author(Base, BaseMixin):
|
|
__tablename__ = 'author'
|
|
first_name: Mapped[str]
|
|
last_name: Mapped[str]
|
|
article_authors: Mapped[List["ArticleAuthor"]] = relationship(back_populates="author")
|
|
book_authors: Mapped[List["BookAuthor"]] = relationship(back_populates="author")
|
|
|
|
|
|
class BookshelfPublisher(Base, BaseMixin):
|
|
__tablename__ = 'bookshelf_publisher'
|
|
name: Mapped[str] = mapped_column(unique=True)
|
|
books: Mapped[List["Book"]] = relationship(back_populates="publisher")
|
|
|
|
|
|
class Book(Base, BaseMixin):
|
|
__tablename__ = 'book'
|
|
isbn: Mapped[str] = mapped_column(unique=True)
|
|
title: Mapped[str]
|
|
year: Mapped[int] = mapped_column(nullable=False)
|
|
publisher_id: Mapped[str] = mapped_column(ForeignKey("bookshelf_publisher.id"), nullable=False)
|
|
publisher: Mapped[BookshelfPublisher] = relationship(back_populates="books")
|
|
book_authors: Mapped[List["BookAuthor"]] = relationship(back_populates="book")
|
|
|
|
|
|
class ArticleAuthor(Base, BaseMixin):
|
|
__tablename__ = 'article_author'
|
|
article_id: Mapped[str] = mapped_column(ForeignKey("article.id"), nullable=False)
|
|
article: Mapped[Article] = relationship(back_populates="article_authors")
|
|
author_id: Mapped[str] = mapped_column(ForeignKey("author.id"), nullable=False)
|
|
author: Mapped[Author] = relationship(back_populates="article_authors")
|
|
|
|
|
|
class BookAuthor(Base, BaseMixin):
|
|
__tablename__ = 'book_author'
|
|
author_id: Mapped[str] = mapped_column(ForeignKey("author.id"), nullable=False)
|
|
author: Mapped[Author] = relationship(back_populates="book_authors")
|
|
book_id: Mapped[str] = mapped_column(ForeignKey("book.id"), nullable=False)
|
|
book: Mapped[Book] = relationship(back_populates="book_authors")
|