🪻 distributed transcription service thistle.dunkirk.sh

chore: change status codes

dunkirk.sh 8fbf640c a2d19d3c

verified
Changed files
+55 -64
src
+10 -20
src/index.test.ts
···
}),
});
-
if (registerResponse.status !== 200) {
+
if (registerResponse.status !== 201) {
const error = await registerResponse.json();
throw new Error(`Registration failed: ${JSON.stringify(error)}`);
}
···
}),
});
-
if (response.status !== 200) {
+
if (response.status !== 201) {
const error = await response.json();
console.error("Registration failed:", response.status, error);
}
-
expect(response.status).toBe(200);
+
expect(response.status).toBe(201);
const data = await response.json();
expect(data.user).toBeDefined();
···
}),
});
-
expect(response.status).toBe(400);
+
expect(response.status).toBe(409);
const data = await response.json();
expect(data.error).toBe("Email already registered");
});
···
},
);
-
expect(response.status).toBe(200);
-
const data = await response.json();
-
expect(data.success).toBe(true);
+
expect(response.status).toBe(204);
// Verify user is deleted
const verifyResponse = await authRequest(
···
},
);
-
expect(response.status).toBe(400);
+
expect(response.status).toBe(409);
const data = await response.json();
expect(data.error).toBe("Email already in use");
});
···
);
expect(response.status).toBe(200);
-
const data = await response.json();
-
expect(data.success).toBe(true);
// Verify name updated
const meResponse = await authRequest(
···
},
);
-
expect(response.status).toBe(200);
+
expect(response.status).toBe(201);
const data = await response.json();
expect(data.id).toBeDefined();
expect(data.message).toContain("Upload successful");
···
},
);
-
expect(response.status).toBe(200);
-
const data = await response.json();
-
expect(data.success).toBe(true);
+
expect(response.status).toBe(204);
// Verify user is deleted
const verifyResponse = await authRequest(
···
);
expect(response.status).toBe(200);
-
const data = await response.json();
-
expect(data.success).toBe(true);
// Verify role updated
const meResponse = await authRequest(
···
},
);
-
expect(response.status).toBe(400);
+
expect(response.status).toBe(409);
const data = await response.json();
expect(data.error).toBe("Email already in use");
});
···
},
);
-
expect(response.status).toBe(200);
-
const data = await response.json();
-
expect(data.success).toBe(true);
+
expect(response.status).toBe(204);
// Verify sessions are deleted
const verifyResponse = await authRequest(
+45 -44
src/index.ts
···
email_verification_required: true,
verification_code_sent_at: sentAt,
},
-
{ status: 200 },
+
{ status: 201 },
);
} catch (err: unknown) {
const error = err as { message?: string };
if (error.message?.includes("UNIQUE constraint failed")) {
return Response.json(
{ error: "Email already registered" },
-
{ status: 400 },
+
{ status: 409 },
);
}
console.error("[Auth] Registration error:", err);
···
updatePasskeyName(passkeyId, user.id, name);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (err) {
return handleError(err);
···
const passkeyId = req.params.id;
deletePasskey(passkeyId, user.id);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (err) {
return handleError(err);
···
// Verify the session belongs to the user
const targetSession = getSession(targetSessionId);
if (!targetSession || targetSession.user_id !== user.id) {
-
return Response.json({ error: "Session not found" }, { status: 404 });
+
return Response.json({ error: "Forbidden" }, { status: 403 });
deleteSession(targetSessionId);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (err) {
return handleError(err);
···
if (rateLimitError) return rateLimitError;
await deleteUser(user.id);
-
return Response.json(
-
{ success: true },
-
{
-
headers: {
-
"Set-Cookie":
-
"session=; HttpOnly; Secure; Path=/; Max-Age=0; SameSite=Lax",
-
},
+
return new Response(null, {
+
status: 204,
+
headers: {
+
"Set-Cookie":
+
"session=; HttpOnly; Secure; Path=/; Max-Age=0; SameSite=Lax",
},
-
);
+
});
} catch (err) {
return handleError(err);
···
if (existingUser) {
return Response.json(
{ error: "Email already in use" },
-
{ status: 400 },
+
{ status: 409 },
);
···
// Allow access if: owner, admin, or enrolled in the class
if (!isOwner && !isAdmin && !isClassMember) {
return Response.json(
-
{ error: "Transcription not found" },
-
{ status: 404 },
+
{ error: "Forbidden" },
+
{ status: 403 },
);
···
// Allow access if: owner, admin, or enrolled in the class
if (!isOwner && !isAdmin && !isClassMember) {
return Response.json(
-
{ error: "Transcription not found" },
-
{ status: 404 },
+
{ error: "Forbidden" },
+
{ status: 403 },
);
···
if (transcription.status !== "completed") {
return Response.json(
{ error: "Transcription not completed yet" },
-
{ status: 400 },
+
{ status: 409 },
);
···
// Allow access if: owner, admin, or enrolled in the class
if (!isOwner && !isAdmin && !isClassMember) {
return Response.json(
-
{ error: "Transcription not found" },
-
{ status: 404 },
+
{ error: "Forbidden" },
+
{ status: 403 },
);
···
// Don't auto-start transcription - admin will select recordings
// whisperService.startTranscription(transcriptionId, filename);
-
return Response.json({
-
id: transcriptionId,
-
message: "Upload successful",
-
});
+
return Response.json(
+
{
+
id: transcriptionId,
+
message: "Upload successful",
+
},
+
{ status: 201 },
+
);
} catch (error) {
return handleError(error);
···
requireAdmin(req);
const id = req.params.id;
deleteWaitlistEntry(id);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
requireAdmin(req);
const transcriptionId = req.params.id;
deleteTranscription(transcriptionId);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
return Response.json({ error: "Invalid user ID" }, { status: 400 });
await deleteUser(userId);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
const { passkeyId } = req.params;
deletePasskey(passkeyId, userId);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
if (existing) {
return Response.json(
{ error: "Email already in use" },
-
{ status: 400 },
+
{ status: 409 },
);
···
deleteAllUserSessions(userId);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
meeting_times,
});
-
return Response.json(newClass);
+
return Response.json(newClass, { status: 201 });
} catch (error) {
return handleError(error);
···
return Response.json({ error: result.error }, { status: 400 });
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
meetingTimes || null,
);
-
return Response.json({ success: true, id });
+
return Response.json({ success: true, id }, { status: 201 });
} catch (error) {
return handleError(error);
···
deleteClass(classId);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
toggleClassArchive(classId, archived);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
enrollUserInClass(user.id, classId);
-
return Response.json({ success: true });
+
return new Response(null, { status: 201 });
} catch (error) {
return handleError(error);
···
removeUserFromClass(userId, classId);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
const meetingTime = createMeetingTime(classId, label);
-
return Response.json(meetingTime);
+
return Response.json(meetingTime, { status: 201 });
} catch (error) {
return handleError(error);
···
updateMeetingTime(meetingId, label);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
deleteMeetingTime(meetingId);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);
···
transcription.filename,
);
-
return Response.json({ success: true });
+
return new Response(null, { status: 204 });
} catch (error) {
return handleError(error);