40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
import enum
|
|
|
|
from sqlalchemy import Column, Integer, String, TIMESTAMP, Text, ForeignKey, Enum, UniqueConstraint, Float, func
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from .base import Base
|
|
from .book import Book
|
|
from .member import Member
|
|
from .librarian import Librarian
|
|
|
|
|
|
class LoanStatusEnum(enum.Enum):
|
|
borrowed = 'borrowed'
|
|
returned = 'returned'
|
|
overdue = 'overdue'
|
|
reserved = 'reserved'
|
|
|
|
|
|
class Loan(Base):
|
|
__tablename__ = 'loan'
|
|
__table_args__ = (UniqueConstraint('id'),)
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
book_id = Column(Integer, ForeignKey('book.id'), nullable=False)
|
|
member_id = Column(Integer, ForeignKey('member.id'), nullable=False)
|
|
librarian_id = Column(Integer, ForeignKey('librarian.id'), nullable=False)
|
|
loan_date = Column(TIMESTAMP, nullable=False, server_default=func.now())
|
|
due_date = Column(TIMESTAMP, nullable=False)
|
|
return_date = Column(TIMESTAMP, nullable=True)
|
|
status = Column(Enum(LoanStatusEnum), nullable=False, default=LoanStatusEnum.borrowed)
|
|
overdue_fee = Column(Float, nullable=True)
|
|
last_updated = Column(TIMESTAMP, nullable=False, server_default=func.now())
|
|
|
|
book = relationship('Book', backref='loans')
|
|
member = relationship('Member', backref='loans')
|
|
librarian = relationship('Librarian', backref='loans')
|
|
|
|
|
|
__all__ = ["Loan", "LoanStatusEnum"]
|