feat(jobs): purge file binaries when a job is delivered, keep metadata
Active scan + image traffic was going to bloat Storage fast — every
delivered case has tens of MB of STL hanging around forever. Now closing
a case via 'Teslim Aldım' fires a background archive sweep that deletes
the binary from the bucket but keeps the job_files row, so audit
('kim, ne, ne zaman yükledi') is preserved.
- DB: job_files.archivedAt datetime (nullable).
- archiveJobFiles(jobId) (lib/appwrite/job-file-archive.ts):
lists rows, storage.deleteFile each, stamps archivedAt on the row.
All in try/catch so partial Storage failures don't roll back the
'delivered' transition.
- markDeliveredAction fires it as 'void archiveJobFiles(jobId)' — same
fire-and-forget pattern as audit/notifications/finance sync.
UI / API
- Job detail file row dims to 60% opacity, shows 'Arşivlendi
{tarih}' inline, and disables both the download dialog trigger and
the STL viewer button.
- /api/jobs/[jobId]/files/[fileId]/download returns 410 Gone with a
Turkish message when archivedAt is set — direct-URL hot links can't
fish the file back either.
This commit is contained in:
@@ -6,6 +6,7 @@ import { z } from "zod";
|
||||
|
||||
import { logAudit } from "./audit";
|
||||
import { syncFinanceForJob } from "./finance-sync";
|
||||
import { archiveJobFiles } from "./job-file-archive";
|
||||
import { createNotification } from "./notification-helpers";
|
||||
import { calculateJobPriceForProsthetic } from "./pricing";
|
||||
import {
|
||||
@@ -564,6 +565,9 @@ export async function markDeliveredAction(
|
||||
jobId,
|
||||
message: `Hasta ${job.patientCode} işi teslim alındı.`,
|
||||
});
|
||||
// Free up Storage now that the case is closed. Metadata rows stay for
|
||||
// the audit trail; only the binaries go.
|
||||
void archiveJobFiles(jobId);
|
||||
} catch (e) {
|
||||
return { ok: false, error: appwriteError(e, "Teslim alınamadı.") };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user