From 304150e23a25ffea6ae7d76f0e1e8fffa9d56462 Mon Sep 17 00:00:00 2001 From: SR07 Date: Wed, 28 May 2025 15:24:34 +0900 Subject: [PATCH] =?UTF-8?q?v1.1=20=EC=88=9C=EC=84=9C=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/character.py | 19 +++++++++++++++++-- app/api/homework.py | 16 +++++++++++++++- app/crud/character.py | 2 +- app/crud/homework.py | 2 +- app/models/character.py | 2 ++ app/models/homework.py | 2 ++ app/schemas/character.py | 4 ++++ app/schemas/homework.py | 6 +++++- app/services/character_homework_service.py | 2 +- app/services/dashboard_service.py | 4 ++-- 10 files changed, 50 insertions(+), 9 deletions(-) diff --git a/app/api/character.py b/app/api/character.py index 5c43b9a..be64dde 100644 --- a/app/api/character.py +++ b/app/api/character.py @@ -2,7 +2,7 @@ from typing import List from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session -from app.schemas.character import CharacterCreate, CharacterResponse, CharacterUpdateRequest, CharacterDetailResponse +from app.schemas.character import CharacterCreate, CharacterResponse, CharacterUpdateRequest, CharacterDetailResponse, CharacterOrderUpdate from app.schemas.homework import HomeworkSelectableResponse from app.crud.character import create_character, get_characters_by_user from app.services.character_homework_service import get_homeworks_with_assignment_status, assign_homework_to_character, unassign_homework_from_character @@ -107,4 +107,19 @@ def get_character( if not character or character.user_id != current_user.id: raise HTTPException(status_code=403, detail="권한이 없습니다.") - return character \ No newline at end of file + return character + +@router.patch("/order") +def update_character_order( + updates: List[CharacterOrderUpdate], + db: Session = Depends(get_db), + user = Depends(get_current_user), +): + for update in updates: + character = db.query(Character).filter_by(id=update.id, user_id=user.id).first() + if character: + character.order = update.order + character.order = update.order + db.add(character) + db.commit() + return {"status": "ok"} \ No newline at end of file diff --git a/app/api/homework.py b/app/api/homework.py index 854da57..8425605 100644 --- a/app/api/homework.py +++ b/app/api/homework.py @@ -6,7 +6,7 @@ from typing import List from app.core.deps import get_db, get_current_user from app.models.homework import HomeworkType from app.models.user import User -from app.schemas.homework import HomeworkTypeCreate, HomeworkTypeResponse, HomeworkTypeUpdateRequest, HomeworkTypeDetailResponse +from app.schemas.homework import HomeworkTypeCreate, HomeworkTypeResponse, HomeworkTypeUpdateRequest, HomeworkTypeDetailResponse, HomeworkTypeOrderUpdate from app.crud.homework import create_homework_type, get_homework_types_by_user router = APIRouter() @@ -91,3 +91,17 @@ def get_homework_type( raise HTTPException(status_code=403, detail="권한이 없습니다.") return homework_type + +@router.patch("/order") +def update_homework_type_order( + updates: List[HomeworkTypeOrderUpdate], + db: Session = Depends(get_db), + user: User = Depends(get_current_user) +): + for update in updates: + hw_type = db.query(HomeworkType).filter_by(id=update.id, user_id=user.id).first() + if hw_type and hw_type.order != update.order: + hw_type.order = update.order + db.add(hw_type) + db.commit() + return {"status": "ok"} diff --git a/app/crud/character.py b/app/crud/character.py index c69c7ff..096c4d1 100644 --- a/app/crud/character.py +++ b/app/crud/character.py @@ -40,4 +40,4 @@ def create_character(user_id: int, character_data: CharacterCreate, db: Session) return character def get_characters_by_user(user_id: int, db: Session): - return db.query(Character).filter(Character.user_id == user_id).all() + return db.query(Character).filter(Character.user_id == user_id).order_by(Character.order.asc()).all() diff --git a/app/crud/homework.py b/app/crud/homework.py index 422c33d..9e815e4 100644 --- a/app/crud/homework.py +++ b/app/crud/homework.py @@ -15,4 +15,4 @@ def create_homework_type(user_id: int, data: HomeworkTypeCreate, db: Session): return new_homework def get_homework_types_by_user(user_id: int, db: Session): - return db.query(HomeworkType).filter(HomeworkType.user_id == user_id).all() + return db.query(HomeworkType).filter(HomeworkType.user_id == user_id).order_by(HomeworkType.order.asc()).all() diff --git a/app/models/character.py b/app/models/character.py index 47342bf..193b175 100644 --- a/app/models/character.py +++ b/app/models/character.py @@ -20,6 +20,8 @@ class Character(Base): user = relationship("User", back_populates="characters") homeworks = relationship("CharacterHomework", back_populates="character", cascade="all, delete") + order = Column(Integer, default=0) + class CharacterHomework(Base): __tablename__ = "character_homeworks" diff --git a/app/models/homework.py b/app/models/homework.py index 2714e2e..e8506b6 100644 --- a/app/models/homework.py +++ b/app/models/homework.py @@ -18,3 +18,5 @@ class HomeworkType(Base): user = relationship("User", back_populates="homework_types") assigned_characters = relationship("CharacterHomework", back_populates="homework_type", cascade="all, delete") + + order = Column(Integer, default=0) diff --git a/app/schemas/character.py b/app/schemas/character.py index ed01d87..5c2537a 100644 --- a/app/schemas/character.py +++ b/app/schemas/character.py @@ -41,3 +41,7 @@ class CharacterDetailResponse(BaseModel): model_config = { "from_attributes": True } + +class CharacterOrderUpdate(BaseModel): + id: int + order: int diff --git a/app/schemas/homework.py b/app/schemas/homework.py index f9741d1..85c3903 100644 --- a/app/schemas/homework.py +++ b/app/schemas/homework.py @@ -48,4 +48,8 @@ class HomeworkTypeDetailResponse(BaseModel): model_config = { "from_attributes": True - } \ No newline at end of file + } + +class HomeworkTypeOrderUpdate(BaseModel): + id: int + order: int \ No newline at end of file diff --git a/app/services/character_homework_service.py b/app/services/character_homework_service.py index 06925af..d7ac857 100644 --- a/app/services/character_homework_service.py +++ b/app/services/character_homework_service.py @@ -24,7 +24,7 @@ def get_homeworks_with_assignment_status(db: Session, user_id: int, character_id (CharacterHomework.character_id == character_id) ) .where(HomeworkType.user_id == user_id) - .order_by(HomeworkType.id) + .order_by(HomeworkType.order.asc()) ) return db.execute(stmt).mappings().all() diff --git a/app/services/dashboard_service.py b/app/services/dashboard_service.py index 31b87bd..60ede68 100644 --- a/app/services/dashboard_service.py +++ b/app/services/dashboard_service.py @@ -12,7 +12,7 @@ def get_dashboard_characters(db: Session, user_id: int): db.query(Character.id.label("character_id"), Character.name.label("character_name"), Character.server) .join(subq, Character.id == subq.c.character_id) .filter(Character.user_id == user_id) - .order_by(Character.id) + .order_by(Character.order.asc()) .all() ) @@ -40,7 +40,7 @@ def get_dashboard_homeworks_for_character(db: Session, user_id: int, character_i ) .join(CharacterHomework, CharacterHomework.homework_type_id == HomeworkType.id) .filter(CharacterHomework.character_id == character_id) - .order_by(HomeworkType.id) + .order_by(HomeworkType.order.asc()) .all() )