160 lines
6.1 KiB
Python
160 lines
6.1 KiB
Python
from typing import Any, AnyStr, Dict
|
|
from sqlalchemy import Column, ForeignKey, Integer, String
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from db.models.base import Base, BaseMixin
|
|
|
|
|
|
class Article(Base, BaseMixin):
|
|
__tablename__ = 'article'
|
|
title = Column(String, unique=True)
|
|
article_authors = relationship("ArticleAuthor")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, Any]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.title = import_data['title']
|
|
|
|
def export_dict(self) -> Dict[AnyStr, Any]:
|
|
item: Dict[AnyStr, Any] = {}
|
|
item['id'] = self.id
|
|
item['created_date'] = str(self.created_date)
|
|
item['last_modified_date'] = str(self.last_modified_date)
|
|
item['version'] = self.version
|
|
item['title'] = self.title
|
|
return item
|
|
|
|
|
|
class Author(Base, BaseMixin):
|
|
__tablename__ = 'author'
|
|
first_name = Column(String)
|
|
last_name = Column(String)
|
|
article_authors = relationship("ArticleAuthor")
|
|
book_authors = relationship("BookAuthor")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, Any]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.first_name = import_data['first_name']
|
|
self.last_name = import_data['last_name']
|
|
|
|
def export_dict(self) -> Dict[AnyStr, Any]:
|
|
item: Dict[AnyStr, Any] = {}
|
|
item['id'] = self.id
|
|
item['created_date'] = str(self.created_date)
|
|
item['last_modified_date'] = str(self.last_modified_date)
|
|
item['version'] = self.version
|
|
item['first_name'] = self.first_name
|
|
item['last_name'] = self.last_name
|
|
return item
|
|
|
|
|
|
class BookshelfPublisher(Base, BaseMixin):
|
|
__tablename__ = 'bookshelf_publisher'
|
|
name = Column(String, unique=True)
|
|
books = relationship("Book")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, Any]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.name = import_data['name']
|
|
|
|
def export_dict(self) -> Dict[AnyStr, Any]:
|
|
item: Dict[AnyStr, Any] = {}
|
|
item['id'] = self.id
|
|
item['created_date'] = str(self.created_date)
|
|
item['last_modified_date'] = str(self.last_modified_date)
|
|
item['version'] = self.version
|
|
item['name'] = self.name
|
|
return item
|
|
|
|
|
|
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")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, Any]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.isbn = import_data['isbn']
|
|
self.title = import_data['title']
|
|
self.year = import_data['year']
|
|
self.publisher_id = import_data['publisher_id']
|
|
|
|
def export_dict(self) -> Dict[AnyStr, Any]:
|
|
item: Dict[AnyStr, Any] = {}
|
|
item['id'] = self.id
|
|
item['created_date'] = str(self.created_date)
|
|
item['last_modified_date'] = str(self.last_modified_date)
|
|
item['version'] = self.version
|
|
item['isbn'] = self.isbn
|
|
item['title'] = self.title
|
|
item['year'] = self.year
|
|
item['publisher_id'] = self.publisher_id
|
|
return item
|
|
|
|
|
|
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")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, Any]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.article_id = import_data['article_id']
|
|
self.author_id = import_data['author_id']
|
|
|
|
def export_dict(self) -> Dict[AnyStr, Any]:
|
|
item: Dict[AnyStr, Any] = {}
|
|
item['id'] = self.id
|
|
item['created_date'] = str(self.created_date)
|
|
item['last_modified_date'] = str(self.last_modified_date)
|
|
item['version'] = self.version
|
|
item['article_id'] = self.article_id
|
|
item['author_id'] = self.author_id
|
|
return item
|
|
|
|
|
|
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")
|
|
|
|
def import_dict(self, import_data: Dict[AnyStr, Any]):
|
|
self.id = import_data['id']
|
|
self.created_date = import_data['created_date']
|
|
self.last_modified_date = import_data['last_modified_date']
|
|
self.version = import_data['version']
|
|
self.author_id = import_data['author_id']
|
|
self.book_id = import_data['book_id']
|
|
|
|
def export_dict(self) -> Dict[AnyStr, Any]:
|
|
item: Dict[AnyStr, Any] = {}
|
|
item['id'] = self.id
|
|
item['created_date'] = str(self.created_date)
|
|
item['last_modified_date'] = str(self.last_modified_date)
|
|
item['version'] = self.version
|
|
item['author_id'] = self.author_id
|
|
item['book_id'] = self.book_id
|
|
return item
|