from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship from .base import Base, BaseMixin class Article(Base, BaseMixin): __tablename__ = 'article' title = Column(String, unique=True) article_authors = relationship("ArticleAuthor") class Author(Base, BaseMixin): __tablename__ = 'author' first_name = Column(String) last_name = Column(String) article_authors = relationship("ArticleAuthor") book_authors = relationship("BookAuthor") class BookshelfPublisher(Base, BaseMixin): __tablename__ = 'bookshelf_publisher' name = Column(String, unique=True) books = relationship("Book") class Book(Base, BaseMixin): __tablename__ = 'book' isbn = Column(String, unique=True) title = Column(String) year = Column(Integer, nullable=False) publisher_id = Column(String, ForeignKey('bookshelf_publisher.id'), nullable=False) publisher = relationship('BookshelfPublisher', back_populates="books") book_authors = relationship("BookAuthor") class ArticleAuthor(Base, BaseMixin): __tablename__ = 'article_author' article_id = Column(String, ForeignKey('article.id'), nullable=False) article = relationship('Article', back_populates="article_authors") author_id = Column(String, ForeignKey('author.id'), nullable=False) author = relationship('Author', back_populates="article_authors") class BookAuthor(Base, BaseMixin): __tablename__ = 'book_author' author_id = Column(String, ForeignKey('author.id'), nullable=False) author = relationship('Author', back_populates="book_authors") book_id = Column(String, ForeignKey('book.id'), nullable=False) book = relationship('Book', back_populates="book_authors")