Skip to content

Commit 747c74a

Browse files
authored
Merge pull request #306 from Pseudo-Lab/refactor/getcloser/dissolve-team
refactor(getcloser): dissolve team
2 parents 12d2321 + fb349eb commit 747c74a

3 files changed

Lines changed: 33 additions & 11 deletions

File tree

getcloser/backend/app/api/v1/challenges/challenges.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def challenge_retry_controller(request: ChallengeRetryRequest, db: Session = Dep
1717
@router.post("/assign", response_model=ChallengeResponse)
1818
def assign_challenges(request: ChallengeRequest, db: Session = Depends(get_db)):
1919
try:
20-
assigned = assign_challenges_logic(request.my_id, request.members_ids, db)
20+
assigned = assign_challenges_logic(request.my_id, request.members_ids, request.team_id, db)
2121
return ChallengeResponse(team_id=request.team_id, my_assigned=assigned)
2222

2323
except ValueError as e:

getcloser/backend/app/services/challenge_service.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from models.challenges import UserChallengeStatus
99

1010

11-
def assign_challenges_logic(my_id: str, members: list, db: Session) -> list:
11+
def assign_challenges_logic(my_id: str, members: list, team_id: int, db: Session) -> list:
1212
# 현재 사용자 retry_count 조회
1313
status = db.query(UserChallengeStatus).filter(UserChallengeStatus.user_id == my_id).first()
1414

@@ -26,7 +26,8 @@ def assign_challenges_logic(my_id: str, members: list, db: Session) -> list:
2626

2727
# retry_count 검사
2828
if status.retry_count >= 2:
29-
return {"message": "retry_count가 2 이상입니다. 팀을 다시 구성해주세요."}
29+
team_service.dissolve_team_by_user(db, my_id, team_id)
30+
raise HTTPException(status_code=500, detail="over retry count")
3031

3132
# 팀원들이 만든 문제 조회
3233
team_questions = db.query(ChallengeQuestion).filter(ChallengeQuestion.user_id.in_(members)).all()

getcloser/backend/app/services/team_service.py

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -176,24 +176,45 @@ def get_team_status(db: Session, team_id: int, user_id: int):
176176
"members_ready": [m.user_id for m in team.members if m.confirmed]
177177
}
178178

179-
def dissolve_team_by_user(db: Session, user_id: int):
179+
def dissolve_team_by_user(db: Session, user_id: int, team_id: int):
180180
team_entry = (
181-
db.query(Team)
182-
.join(TeamMember)
181+
db.query(TeamMember)
183182
.filter(
184183
TeamMember.user_id == user_id,
185-
Team.status == TeamStatus.ACTIVE
184+
TeamMember.team_id == team_id
186185
).first()
187186
)
188187

189188
if not team_entry:
190-
raise HTTPException(status_code=400, detail="User is not in an active team")
189+
raise HTTPException(status_code=404, detail="User is not in a team")
190+
191+
db.delete(team_entry)
191192

192-
team_entry.status = TeamStatus.FAILED
193+
status = (
194+
db.query(UserChallengeStatus)
195+
.filter(UserChallengeStatus.user_id == user_id)
196+
.first()
197+
)
193198

199+
if status:
200+
status.retry_count = 0
201+
status.is_correct = False
202+
status.is_redeemed = False
203+
db.add(status)
204+
194205
db.commit()
195-
196-
return {"message": f"Team {team_entry.id} dissolved due to quiz failure.", "team_id": team_entry.id}
206+
207+
remaining = (
208+
db.query(TeamMember)
209+
.filter(TeamMember.team_id == team_id)
210+
.count()
211+
)
212+
213+
if remaining == 0:
214+
team = db.query(Team).get(team_id)
215+
team.status = TeamStatus.CANCELLED
216+
db.commit()
217+
197218

198219
def get_team_info(db: Session, user_id: int):
199220
team_member = (

0 commit comments

Comments
 (0)