// routes/admin/assets.routes.js const router = require('express').Router(); const controller = require('../../controllers/admin/assets.controller'); const { sensitiveOpsLimiter } = require('../../middleware/rateLimiter.middleware'); // ─── Static routes first ────────────────────────────────────────────────────── router.get('/archived', controller.getArchivedAssets); router.get('/field-values', controller.getAssetFieldValues); router.delete('/bulk', sensitiveOpsLimiter, controller.archiveAssets); router.delete('/bulk/permanent', sensitiveOpsLimiter, controller.permanentlyDeleteAssets); router.patch('/bulk-restore', controller.restoreAssets); // ─── Collection ─────────────────────────────────────────────────────────────── router.get('/', controller.getAssets); // Presigned-upload flow: the browser PUTs file bytes straight to storage, this // backend never buffers them (see assets.controller.js). presign mints the // upload URL(s); the POST / body that follows is plain JSON (no multer here). router.post('/presign', controller.presignAssetUpload); // Above presign's single-PUT ceiling only (see s3.service.js's // MULTIPART_THRESHOLD) — the browser PUTs every part directly, then calls // complete/abort here. Plain JSON, no file bytes. router.post('/complete-multipart', controller.completeMultipartAssetUpload); router.post('/abort-multipart', controller.abortMultipartAssetUpload); router.post('/', controller.uploadAsset); // ─── Dynamic routes last ────────────────────────────────────────────────────── router.get('/:assetId', controller.getAsset); // Replace flow also goes through presign + direct PUT (browser -> storage) — // this body is plain JSON (storage_key etc.), same as POST /. No multer here. router.patch('/:assetId', sensitiveOpsLimiter, controller.updateAsset); router.patch('/:assetId/restore', sensitiveOpsLimiter, controller.restoreAsset); router.delete('/:assetId', sensitiveOpsLimiter, controller.archiveAsset); router.delete('/:assetId/permanent', sensitiveOpsLimiter, controller.permanentlyDeleteAsset); module.exports = router;