UNPKG

streamby-core

Version:

StreamBy middleware framework for media storage management

79 lines (78 loc) 3.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.storageRouter = storageRouter; const express_1 = require("express"); const file_1 = require("../../services/file"); const presign_1 = require("../../services/presign"); const storage_1 = require("../../providers/storage"); const manager_1 = require("../../models/manager"); function storageRouter(config) { const router = (0, express_1.Router)(); const adapter = config.adapter || (0, storage_1.createStorageProvider)(config.storageProviders); const Project = (0, manager_1.getModel)('projects'); router.get('/upload-project-image-url/:id', async (req, res) => { try { const auth = await config.authProvider(req); if (!auth || !auth.userId || !auth.role) { return res.status(401).json({ message: 'Unauthorized' }); } if (auth.role !== 'admin' && auth.role !== 'editor') { return res.status(403).json({ message: 'Permission denied' }); } const projectId = req.params.id; if (!projectId) { return res.status(400).json({ message: 'Missing projectId' }); } const response = await (0, presign_1.getPresignedProjectImageUrl)(adapter, projectId); res.status(200).json({ ...response, message: 'Presigned URL generated successfully' }); } catch (err) { res.status(500).json({ message: 'Failed to generate presigned URL', details: err.message }); } }); router.delete('/delete-project-image-url/:id', async (req, res) => { try { const auth = await config.authProvider(req); if (!auth || !auth.userId || !auth.role) { return res.status(401).json({ message: 'Unauthorized' }); } if (auth.role !== 'admin' && auth.role !== 'editor') { return res.status(403).json({ message: 'Permission denied' }); } const projectId = req.params.id; if (!projectId) { return res.status(400).json({ message: 'Missing projectId' }); } await (0, file_1.deleteProjectImage)(adapter, projectId); const updated = await Project.update({ _id: projectId }, { image: '' }); res.status(201).json({ ...updated, message: 'Image deleted successfully' }); } catch (err) { res.status(500).json({ message: 'Failed to delete image', details: err.message }); } }); router.get('/storages', async (req, res) => { try { const auth = await config.authProvider(req); if (!auth || !auth.userId || !auth.role) { return res.status(401).json({ message: 'Unauthorized' }); } const projectId = (req.query.projectId || req.headers['x-project-id']); if (!projectId) { return res.status(403).json({ message: 'Unauthorized or missing projectId' }); } const files = await (0, file_1.listFilesService)(adapter, req, projectId); res.json({ files, message: 'Files listed successfully' }); } catch (err) { res.status(500).json({ message: 'Failed to list files', details: err }); } }); return router; }