44 lines
1.7 KiB
Python
44 lines
1.7 KiB
Python
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])
|