diff --git a/apps/api/src/routes/expert.ts b/apps/api/src/routes/expert.ts index dc1a9fb..c922885 100644 --- a/apps/api/src/routes/expert.ts +++ b/apps/api/src/routes/expert.ts @@ -64,10 +64,25 @@ export const expertRoutes = new Elysia({ prefix: '/api/v1/expert' }) const diagnosis = existing[0]; if (!diagnosis) return notFound('Diagnosis not found'); - if (diagnosis.status !== 'needs_review') return badRequest('Diagnosis is not pending review'); const correctedSlug = req.verdict === 'corrected' ? req.correctedDiseaseSlug : null; + // Perform conditional update first to determine if this review should proceed + const updated = await db + .update(diagnoses) + .set({ + status: req.verdict === 'corrected' ? 'expert_corrected' : 'expert_verified', + predictedDiseaseSlug: req.verdict === 'corrected' ? correctedSlug : diagnosis.predictedDiseaseSlug, + updatedAt: new Date(), + }) + .where(and(eq(diagnoses.id, diagnosis.id), eq(diagnoses.status, 'needs_review'))) + .returning(); + + if (updated.length === 0) { + return badRequest('Diagnosis is not pending review'); + } + + // Only insert expert review after successful update await db.insert(expertReviews).values({ diagnosisId: diagnosis.id, expertId: user.id, @@ -76,15 +91,6 @@ export const expertRoutes = new Elysia({ prefix: '/api/v1/expert' }) notes, }); - await db - .update(diagnoses) - .set({ - status: req.verdict === 'corrected' ? 'expert_corrected' : 'expert_verified', - predictedDiseaseSlug: req.verdict === 'corrected' ? correctedSlug : diagnosis.predictedDiseaseSlug, - updatedAt: new Date(), - }) - .where(and(eq(diagnoses.id, diagnosis.id), eq(diagnoses.status, 'needs_review'))); - return await loadDiagnosisRecord(diagnosis.id, null, true); } catch (error) { return serviceUnavailable('Database unavailable');