nobswebdev
|
214fa0f875
|
Enforce maxViews atomically when reserving a view slot.
Use a conditional UPDATE with parenthesized OR so increment only applies to the target row and fails when the view cap is reached.
|
2026-10-27 22:09:48 +01:00 |
|
nobswebdev
|
3cf1d5e8aa
|
Fix drop lastViewedAt migration order for fresh databases.
Run the column drop after AddUploadTable so TypeORM does not execute ALTER before uploads exists.
|
2026-10-27 22:09:45 +01:00 |
|
nobswebdev
|
29407814cc
|
Add UploadCleanupService for cron purge and delete uploads.
Move token delete and storage purge off UploadService; enforce expiry and max views on GET without purging until the scheduled cleanup job runs.
|
2026-10-27 21:07:01 +01:00 |
|
nobswebdev
|
00ef845277
|
Add DeleteView one-click delete page at /d/:id?token=...
|
2026-10-27 19:13:40 +01:00 |
|
nobswebdev
|
c147a010b5
|
Enforce max views on access and purge after the last allowed view.
|
2026-10-27 18:30:35 +01:00 |
|
nobswebdev
|
9a2bc67b1d
|
Reject expired uploads on ZK and hotlink GET with 404.
Use dayjs to compare expiresAt before reading storage or incrementing view_count.
|
2026-10-27 15:30:03 +01:00 |
|
nobswebdev
|
481eb0bcd6
|
Add DELETE /api/uploads/:id with delete_token and unlink ciphertext.
Return 204 when the token hash matches; ignore missing files on unlink so the row is still removed.
|
2026-10-27 15:19:25 +01:00 |
|
nobswebdev
|
073e6ac1f2
|
Increment view_count after successful ZK and hotlink GETs.
Bump count only when ciphertext or decrypted image is ready; 404 paths do not increment. Cover both flows in UploadService tests.
|
2026-10-27 15:06:26 +01:00 |
|
nobswebdev
|
cb8a6a800d
|
Drop lastViewedAt from uploads because inactivity cleanup is out of scope.
Add a migration and remove the column from the Upload entity.
|
2026-10-27 14:55:27 +01:00 |
|