fastify-ximagepipeline
deleteMedia
Delete a Media record from the database and all associated R2 objects (variants and originals).
deleteMedia
Delete a Media record from the database and remove all associated R2/S3 objects — both the variant WebP files under mediaPath/<sourceType>/<sourceId>/<mediaId>/ and the original file under originalsPath/ (if stored).
Signature
fastify.xImagePipeline.deleteMedia(mediaId: string): Promise<DeleteResult>
interface DeleteResult {
deleted: boolean // always true on success
r2Deleted: number // count of R2 objects removed
}
Params
| Name | Type | Required | Description |
|---|---|---|---|
mediaId | string | Yes | Media.id from the database |
Returns
{ deleted: true, r2Deleted: N } where N is the total count of R2 objects removed (variants + original).
Throws
| Error | When |
|---|---|
[xImagePipeline] Media not found: {id} | No Media record exists with that ID |
Also throws on R2 delete failures or database errors.
Examples
Delete a user's avatar
fastify.delete("/users/:userId/avatar/:mediaId", async (request, reply) => {
const result = await fastify.xImagePipeline.deleteMedia(request.params.mediaId);
await fastify.prisma.user.update({
where: { id: request.params.userId },
data: { avatarMediaId: null },
});
return { success: true, r2ObjectsDeleted: result.r2Deleted };
});
Clean up rejected or failed jobs
async function pruneFailedMedia(sourceType, sourceId) {
// Find all media for this source
const items = await fastify.xImagePipeline.listMedia(sourceType, sourceId);
// Find their associated queue jobs
const failedJobs = await prisma.mediaQueue.findMany({
where: { sourceType, sourceId, status: "FAILED" },
include: { media: true },
});
for (const job of failedJobs) {
if (job.media) {
await fastify.xImagePipeline.deleteMedia(job.media.id);
}
}
return { pruned: failedJobs.length };
}
See Also
- listMedia(sourceType, sourceId) — Enumerate media before deletion
- getStatus(jobId) — Confirm COMPLETE before deleting
AI Context
package: "@xenterprises/fastify-ximagepipeline"
method: fastify.xImagePipeline.deleteMedia(mediaId)
use-when: Delete a Media record from the database and remove all associated R2 objects (variants, originals)
returns: void
