v1.1 순서설정
This commit is contained in:
parent
067ce2f1e2
commit
304150e23a
@ -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"}
|
||||
@ -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"}
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -41,3 +41,7 @@ class CharacterDetailResponse(BaseModel):
|
||||
model_config = {
|
||||
"from_attributes": True
|
||||
}
|
||||
|
||||
class CharacterOrderUpdate(BaseModel):
|
||||
id: int
|
||||
order: int
|
||||
|
||||
@ -48,4 +48,8 @@ class HomeworkTypeDetailResponse(BaseModel):
|
||||
|
||||
model_config = {
|
||||
"from_attributes": True
|
||||
}
|
||||
}
|
||||
|
||||
class HomeworkTypeOrderUpdate(BaseModel):
|
||||
id: int
|
||||
order: int
|
||||
@ -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()
|
||||
|
||||
@ -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()
|
||||
)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user