2025-06-09 16:24:42 +09:00

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