v1.1 순서설정

This commit is contained in:
SR07 2025-05-28 15:24:34 +09:00
parent 067ce2f1e2
commit 304150e23a
10 changed files with 50 additions and 9 deletions

View File

@ -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
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"}

View File

@ -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"}

View File

@ -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()

View File

@ -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()

View File

@ -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"

View File

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

View File

@ -41,3 +41,7 @@ class CharacterDetailResponse(BaseModel):
model_config = {
"from_attributes": True
}
class CharacterOrderUpdate(BaseModel):
id: int
order: int

View File

@ -48,4 +48,8 @@ class HomeworkTypeDetailResponse(BaseModel):
model_config = {
"from_attributes": True
}
}
class HomeworkTypeOrderUpdate(BaseModel):
id: int
order: int

View File

@ -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()

View File

@ -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()
)