56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
from sqlalchemy.orm import Session
|
|
from fastapi import HTTPException
|
|
from app.models.character import Character, CharacterHomework
|
|
from app.models.homework import HomeworkType
|
|
from app.schemas.dashboard import DashboardCharacter, DashboardHomework
|
|
|
|
|
|
def get_dashboard_characters(db: Session, user_id: int):
|
|
subq = db.query(CharacterHomework.character_id).distinct().subquery()
|
|
|
|
rows = (
|
|
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.order.asc())
|
|
.all()
|
|
)
|
|
|
|
return [
|
|
DashboardCharacter(
|
|
character_id=row[0],
|
|
character_name=row[1],
|
|
server=row[2]
|
|
) for row in rows
|
|
]
|
|
|
|
|
|
def get_dashboard_homeworks_for_character(db: Session, user_id: int, character_id: int):
|
|
character = db.query(Character).filter_by(id=character_id, user_id=user_id).first()
|
|
if not character:
|
|
raise HTTPException(status_code=404, detail="캐릭터를 찾을 수 없습니다.")
|
|
|
|
rows = (
|
|
db.query(
|
|
HomeworkType.id.label("homework_id"),
|
|
HomeworkType.title,
|
|
HomeworkType.reset_type,
|
|
HomeworkType.clear_count,
|
|
CharacterHomework.complete_cnt
|
|
)
|
|
.join(CharacterHomework, CharacterHomework.homework_type_id == HomeworkType.id)
|
|
.filter(CharacterHomework.character_id == character_id)
|
|
.order_by(HomeworkType.order.asc())
|
|
.all()
|
|
)
|
|
|
|
return [
|
|
DashboardHomework(
|
|
homework_id=row[0],
|
|
title=row[1],
|
|
reset_type=row[2],
|
|
clear_count=row[3],
|
|
complete_cnt=row[4]
|
|
) for row in rows
|
|
]
|