streamby-core
Version:
StreamBy middleware framework for media storage management
79 lines (78 loc) • 3.46 kB
JavaScript
"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;
}