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 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"}
|
||||||
@ -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"}
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -41,3 +41,7 @@ class CharacterDetailResponse(BaseModel):
|
|||||||
model_config = {
|
model_config = {
|
||||||
"from_attributes": True
|
"from_attributes": True
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class CharacterOrderUpdate(BaseModel):
|
||||||
|
id: int
|
||||||
|
order: int
|
||||||
|
|||||||
@ -48,4 +48,8 @@ class HomeworkTypeDetailResponse(BaseModel):
|
|||||||
|
|
||||||
model_config = {
|
model_config = {
|
||||||
"from_attributes": True
|
"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)
|
(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()
|
||||||
|
|||||||
@ -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()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user