Fix run deletion crash and transfer modal initialization error
Run deletion now properly cleans up boss_results, genlocke_transfers, and genlocke_leg references before deleting the run. Also fix showTransferModal being referenced before initialization in RunEncounters by moving its useState declaration above useLegSurvivors. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -6,9 +6,11 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.orm import joinedload, selectinload
|
||||
|
||||
from app.core.database import get_session
|
||||
from app.models.boss_result import BossResult
|
||||
from app.models.encounter import Encounter
|
||||
from app.models.game import Game
|
||||
from app.models.genlocke import Genlocke, GenlockeLeg
|
||||
from app.models.genlocke_transfer import GenlockeTransfer
|
||||
from app.models.nuzlocke_run import NuzlockeRun
|
||||
from app.schemas.run import RunCreate, RunDetailResponse, RunGenlockeContext, RunResponse, RunUpdate
|
||||
|
||||
@@ -198,13 +200,42 @@ async def delete_run(
|
||||
if run is None:
|
||||
raise HTTPException(status_code=404, detail="Run not found")
|
||||
|
||||
# Delete associated encounters first
|
||||
# Delete associated boss results first
|
||||
boss_results = await session.execute(
|
||||
select(BossResult).where(BossResult.run_id == run_id)
|
||||
)
|
||||
for br in boss_results.scalars():
|
||||
await session.delete(br)
|
||||
|
||||
# Delete genlocke transfers referencing this run's encounters
|
||||
encounter_ids_result = await session.execute(
|
||||
select(Encounter.id).where(Encounter.run_id == run_id)
|
||||
)
|
||||
encounter_ids = [row[0] for row in encounter_ids_result]
|
||||
if encounter_ids:
|
||||
transfers = await session.execute(
|
||||
select(GenlockeTransfer).where(
|
||||
GenlockeTransfer.source_encounter_id.in_(encounter_ids)
|
||||
| GenlockeTransfer.target_encounter_id.in_(encounter_ids)
|
||||
)
|
||||
)
|
||||
for t in transfers.scalars():
|
||||
await session.delete(t)
|
||||
|
||||
# Delete associated encounters
|
||||
encounters = await session.execute(
|
||||
select(Encounter).where(Encounter.run_id == run_id)
|
||||
)
|
||||
for enc in encounters.scalars():
|
||||
await session.delete(enc)
|
||||
|
||||
# Unlink from any genlocke leg
|
||||
leg_result = await session.execute(
|
||||
select(GenlockeLeg).where(GenlockeLeg.run_id == run_id)
|
||||
)
|
||||
for leg in leg_result.scalars():
|
||||
leg.run_id = None
|
||||
|
||||
await session.delete(run)
|
||||
await session.commit()
|
||||
return Response(status_code=204)
|
||||
|
||||
Reference in New Issue
Block a user