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"]