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 fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session 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.schemas.homework import HomeworkSelectableResponse
from app.crud.character import create_character, get_characters_by_user 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 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: if not character or character.user_id != current_user.id:
raise HTTPException(status_code=403, detail="권한이 없습니다.") 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.core.deps import get_db, get_current_user
from app.models.homework import HomeworkType from app.models.homework import HomeworkType
from app.models.user import User 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 from app.crud.homework import create_homework_type, get_homework_types_by_user
router = APIRouter() router = APIRouter()
@ -91,3 +91,17 @@ def get_homework_type(
raise HTTPException(status_code=403, detail="권한이 없습니다.") raise HTTPException(status_code=403, detail="권한이 없습니다.")
return homework_type 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 return character
def get_characters_by_user(user_id: int, db: Session): 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 return new_homework
def get_homework_types_by_user(user_id: int, db: Session): 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") user = relationship("User", back_populates="characters")
homeworks = relationship("CharacterHomework", back_populates="character", cascade="all, delete") homeworks = relationship("CharacterHomework", back_populates="character", cascade="all, delete")
order = Column(Integer, default=0)
class CharacterHomework(Base): class CharacterHomework(Base):
__tablename__ = "character_homeworks" __tablename__ = "character_homeworks"

View File

@ -18,3 +18,5 @@ class HomeworkType(Base):
user = relationship("User", back_populates="homework_types") user = relationship("User", back_populates="homework_types")
assigned_characters = relationship("CharacterHomework", back_populates="homework_type", cascade="all, delete") 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 = { model_config = {
"from_attributes": True "from_attributes": True
} }
class CharacterOrderUpdate(BaseModel):
id: int
order: int

View File

@ -48,4 +48,8 @@ class HomeworkTypeDetailResponse(BaseModel):
model_config = { model_config = {
"from_attributes": True "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) (CharacterHomework.character_id == character_id)
) )
.where(HomeworkType.user_id == user_id) .where(HomeworkType.user_id == user_id)
.order_by(HomeworkType.id) .order_by(HomeworkType.order.asc())
) )
return db.execute(stmt).mappings().all() 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) db.query(Character.id.label("character_id"), Character.name.label("character_name"), Character.server)
.join(subq, Character.id == subq.c.character_id) .join(subq, Character.id == subq.c.character_id)
.filter(Character.user_id == user_id) .filter(Character.user_id == user_id)
.order_by(Character.id) .order_by(Character.order.asc())
.all() .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) .join(CharacterHomework, CharacterHomework.homework_type_id == HomeworkType.id)
.filter(CharacterHomework.character_id == character_id) .filter(CharacterHomework.character_id == character_id)
.order_by(HomeworkType.id) .order_by(HomeworkType.order.asc())
.all() .all()
) )