from sqlalchemy import Column, Integer, Enum, ForeignKey, DateTime, CheckConstraint, UniqueConstraint from sqlalchemy.orm import relationship from datetime import datetime from app.core.database import Base import enum from app.models.user import User class FriendRequestStatus(enum.Enum): pending = "pending" accepted = "accepted" rejected = "rejected" cancelled = "cancelled" class FriendRequest(Base): __tablename__ = "friend_requests" id = Column(Integer, primary_key=True, index=True) from_user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False) to_user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False) status = Column(Enum(FriendRequestStatus), default=FriendRequestStatus.pending, nullable=False) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow) from_user = relationship(User, foreign_keys=[from_user_id]) to_user = relationship(User, foreign_keys=[to_user_id]) class Friend(Base): __tablename__ = "friends" id = Column(Integer, primary_key=True, index=True) user_id_1 = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False) user_id_2 = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False) created_at = Column(DateTime, default=datetime.utcnow) __table_args__ = ( UniqueConstraint("user_id_1", "user_id_2", name="unique_friend_pair"), CheckConstraint("user_id_1 < user_id_2", name="check_user_order"), ) user1 = relationship(User, foreign_keys=[user_id_1]) user2 = relationship(User, foreign_keys=[user_id_2])