lambda/src/models/book_model.py

47 lines
1.8 KiB
Python

import enum
from sqlalchemy import Column, Integer, String, TIMESTAMP, Text, ForeignKey, Enum, UniqueConstraint, func, DECIMAL,Boolean
from sqlalchemy.orm import relationship
from .base_model import Base
class BookStatusEnum(enum.Enum):
available = 'available'
borrowed = 'borrowed'
reserved = 'reserved'
class Book(Base):
__tablename__ = 'book'
__table_args__ = (UniqueConstraint('isbn'),)
id = Column(Integer, primary_key=True, autoincrement=True)
author_id = Column(Integer, ForeignKey('author.id'), nullable=False)
title = Column(String(100), nullable=False)
description = Column(Text, nullable=False)
year_published = Column(String(4), nullable=False)
isbn = Column(String(13), nullable=False, unique=True)
price = Column(DECIMAL(5, 2), nullable=False, default=0)
is_damaged = Column(Boolean, nullable=False, default=False)
status = Column(Enum(BookStatusEnum), nullable=False, default=BookStatusEnum.available)
created_at = Column(TIMESTAMP, nullable=False, server_default=func.now())
last_updated = Column(TIMESTAMP, nullable=False, server_default=func.now())
author = relationship('Author', back_populates='books')
categories = relationship('BookCategory',secondary='book_category_link',back_populates='books')
def to_dict(self):
book_dict = {col.name: getattr(self, col.name) for col in self.__table__.columns}
book_dict['author'] = {
'first_name': self.author.first_name,
'last_name': self.author.last_name
}
book_dict['categories'] = [category.name for category in self.categories]
return book_dict
__all__ = ["Book", "BookStatusEnum"]