From 86845c81c582ca32784d5743c00a3b037bd86f8a Mon Sep 17 00:00:00 2001 From: SR07 Date: Mon, 9 Jun 2025 17:53:38 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B9=9C=EA=B5=AC=20=EC=9E=91=EC=97=85?= =?UTF-8?q?=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/database.py | 2 ++ app/main.py | 2 +- app/models/__init__.py | 5 +++++ app/models/friend.py | 16 +++++++--------- app/models/user.py | 15 ++++++++++----- 5 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 app/models/__init__.py diff --git a/app/core/database.py b/app/core/database.py index a6d47f0..5242788 100644 --- a/app/core/database.py +++ b/app/core/database.py @@ -10,6 +10,8 @@ engine = create_engine(settings.database_url, echo=True, future=True) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() +import app.models # ✅ 그대로 유지 + @event.listens_for(Engine, "handle_error") def receive_handle_error(exception_context): print("🔥 SQLAlchemy DB 에러 감지!") diff --git a/app/main.py b/app/main.py index 005e751..a08ed8f 100644 --- a/app/main.py +++ b/app/main.py @@ -1,4 +1,5 @@ #pp/main.py +from app.models import User, Character, HomeworkType, Friend, FriendRequest # 👈 명시적 import! from fastapi import FastAPI, Request, Depends from fastapi.openapi.docs import get_swagger_ui_html from fastapi.openapi.utils import get_openapi @@ -6,7 +7,6 @@ from app.core.deps import get_current_user from fastapi.middleware.cors import CORSMiddleware from fastapi.security import OAuth2PasswordBearer import traceback -from app.models import user, friend, character, homework from app.api import user, auth, character, homework, character_homework, dashboard, friend diff --git a/app/models/__init__.py b/app/models/__init__.py new file mode 100644 index 0000000..5c859e4 --- /dev/null +++ b/app/models/__init__.py @@ -0,0 +1,5 @@ +# app/models/__init__.py +from app.models.user import User +from app.models.character import Character +from app.models.homework import HomeworkType +from app.models.friend import Friend, FriendRequest \ No newline at end of file diff --git a/app/models/friend.py b/app/models/friend.py index bc8ef4d..e3a3fc6 100644 --- a/app/models/friend.py +++ b/app/models/friend.py @@ -3,7 +3,6 @@ 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" @@ -11,20 +10,19 @@ class FriendRequestStatus(enum.Enum): 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) + from_user_id = Column(Integer, ForeignKey("users.id")) + to_user_id = Column(Integer, ForeignKey("users.id")) 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]) - + # 🔽 문자열로 참조 + from_user = relationship("User", foreign_keys=[from_user_id], back_populates="sent_requests") + to_user = relationship("User", foreign_keys=[to_user_id], back_populates="received_requests") class Friend(Base): __tablename__ = "friends" @@ -39,5 +37,5 @@ class Friend(Base): 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]) + user1 = relationship("User", foreign_keys=[user_id_1], back_populates="friendships1") + user2 = relationship("User", foreign_keys=[user_id_2], back_populates="friendships2") diff --git a/app/models/user.py b/app/models/user.py index fe4e0e9..f249116 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -1,10 +1,8 @@ -# app/models/user.py -from pydantic import BaseModel from sqlalchemy import Column, Integer, String, DateTime from sqlalchemy.orm import relationship from sqlalchemy.sql import func from datetime import datetime -from app.core.config import Base +from app.core.database import Base class User(Base): __tablename__ = "users" @@ -15,5 +13,12 @@ class User(Base): created_at = Column(DateTime, server_default=func.now(), nullable=False) updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), nullable=False) - characters = relationship("Character", back_populates="user") - homework_types = relationship("HomeworkType", back_populates="user", cascade="all, delete") \ No newline at end of file + from app.models.character import Character + characters = relationship(Character, back_populates="user") + homework_types = relationship("HomeworkType", back_populates="user", cascade="all, delete") + + # 🔽 문자열만 사용하고 foreign_keys 생략 (권장) + sent_requests = relationship("FriendRequest", back_populates="from_user", foreign_keys="FriendRequest.from_user_id") + received_requests = relationship("FriendRequest", back_populates="to_user", foreign_keys="FriendRequest.to_user_id") + friendships1 = relationship("Friend", back_populates="user1", foreign_keys="Friend.user_id_1") + friendships2 = relationship("Friend", back_populates="user2", foreign_keys="Friend.user_id_2") \ No newline at end of file