feat: change user-delete to soft delete for performance entries

This commit is contained in:
2026-04-27 15:36:12 +08:00
parent 27cd5e3321
commit f228800593
+18 -4
View File
@@ -138,10 +138,10 @@ export const performanceVerifyRoutes = new Elysia({
params: t.Object({ id: t.String() }), params: t.Object({ id: t.String() }),
}, },
) )
// ── User-scoped hard delete (owner or admin) ──────────────────── // ── User-scoped soft delete (owner or admin) ────────────────────
.delete( .delete(
"/:id/user-delete", "/:id/user-delete",
async ({ params, request, set }) => { async ({ params, body, request, set }) => {
const guard = await requireRole(request.headers, [ const guard = await requireRole(request.headers, [
"user", "user",
"contributor", "contributor",
@@ -171,14 +171,28 @@ export const performanceVerifyRoutes = new Elysia({
return { error: "Not authorized to delete this entry" } return { error: "Not authorized to delete this entry" }
} }
await db const reason = body?.reason as string | undefined
.delete(performanceEntries)
const [updated] = await db
.update(performanceEntries)
.set({
isRemoved: true,
removedReason: reason ?? "User deleted",
updatedAt: new Date(),
})
.where(eq(performanceEntries.id, params.id)) .where(eq(performanceEntries.id, params.id))
.returning()
if (!updated) {
set.status = 404
return { error: "Performance entry not found" }
}
return { success: true } return { success: true }
}, },
{ {
params: t.Object({ id: t.String() }), params: t.Object({ id: t.String() }),
body: t.Optional(t.Object({ reason: t.Optional(t.String()) })),
}, },
) )
// ── Best entry: highest-rated for latest version ────────────────── // ── Best entry: highest-rated for latest version ──────────────────