diff --git a/Dockerfile b/Dockerfile index 5219455..112fae1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,6 @@ RUN npm install # Bundle app source COPY . . -ENV NODE_PATH=./build RUN npm run build EXPOSE 8000 diff --git a/jobs/jobsMoveMedia.ts b/jobs/jobsMoveMedia.ts new file mode 100644 index 0000000..db792ae --- /dev/null +++ b/jobs/jobsMoveMedia.ts @@ -0,0 +1,55 @@ +import { Request, Response } from "express"; +import fs from "fs-extra"; +import path from "path"; +import GenerateThumbnail from "../util/generateThumbnail"; +import GenerateUrl from "../util/MediaUrlGen"; +import { FolderPaths } from "../util/serverInit"; +import multer from "multer"; +import { JobsListMedia } from "./jobsListMedia"; + +export async function JobsMoveMedia(req: Request, res: Response) { + const ro_number: string = (req.body.ro_number || "").trim(); + const from_ro: string = (req.body.from_ro || "").trim(); + const files: string[] = req.body.files; //Just file names. + + //Validate the request is valid and contains everything that it needs. + + if (from_ro === "") { + res.status(400).json({ error: "from_ro must be specified. " }); + return; + } + if (files.length === 0) { + res.status(400).json({ error: "files must be specified. " }); + return; + } + //Make sure the destination RO directory exists. + await fs.ensureDir(path.join(FolderPaths.Jobs, ro_number)); + + const movingQueue: Promise[] = []; + + files.forEach((file) => { + movingQueue.push( + fs.move( + path.join(FolderPaths.Jobs, from_ro, file), + path.join(FolderPaths.Jobs, ro_number, file) + ) + ); + + movingQueue.push( + fs.move( + path.join(FolderPaths.Jobs, from_ro, FolderPaths.ThumbsSubDir, file), + path.join(FolderPaths.Jobs, ro_number, FolderPaths.ThumbsSubDir, file) + ) + ); + }); + + //Use AllSettled as it allows for individual moves to fail. + //e.g. if the thumbnail does not exist. + await Promise.allSettled(movingQueue); + + try { + JobsListMedia(req, res); + } catch (err) { + res.status(500).send(err); + } +} diff --git a/jobs/jobsUploadMedia.ts b/jobs/jobsUploadMedia.ts index 043cf79..61ec455 100644 --- a/jobs/jobsUploadMedia.ts +++ b/jobs/jobsUploadMedia.ts @@ -1,10 +1,9 @@ import { Request, Response } from "express"; -import fs from "fs-extra"; +import multer from "multer"; import path from "path"; import GenerateThumbnail from "../util/generateThumbnail"; -import GenerateUrl from "../util/MediaUrlGen"; import { FolderPaths } from "../util/serverInit"; -import multer from "multer"; +import { JobsListMedia } from "./jobsListMedia"; export const JobMediaUploadMulter = multer({ storage: multer.diskStorage({ @@ -14,7 +13,13 @@ export const JobMediaUploadMulter = multer({ cb(null, DestinationFolder); }, filename: function (req, file, cb) { - cb(null, file.originalname); + console.log(path.basename(file.originalname)); + cb( + null, + `${file.originalname}-${Math.floor(Date.now() / 1000)}.${path.extname( + file.originalname + )}` + ); }, }), }); @@ -46,10 +51,10 @@ export async function jobsUploadMedia(req: Request, res: Response) { ); }); await Promise.all(thumbnailGenerationQueue); - res.json(thumbnailGenerationQueue); + + JobsListMedia(req, res); } } catch (err) { res.status(500).send(err); } - res.json(); } diff --git a/server.ts b/server.ts index ff1c31a..7e311b2 100644 --- a/server.ts +++ b/server.ts @@ -5,6 +5,7 @@ import express, { Express } from "express"; import { resolve } from "path"; import JobRequestValidator from "./jobs/jobRequestValidator"; import { JobsListMedia } from "./jobs/jobsListMedia"; +import { JobsMoveMedia } from "./jobs/jobsMoveMedia"; import { JobMediaUploadMulter, jobsUploadMedia } from "./jobs/jobsUploadMedia"; import InitServer, { FolderPaths } from "./util/serverInit"; @@ -19,12 +20,17 @@ app.use(bodyParser.urlencoded({ limit: "50mb", extended: true })); app.use(FolderPaths.StaticPath, express.static(FolderPaths.Root)); app.get("/jobs/list", JobRequestValidator, JobsListMedia); +//Chaining together the upload. When upload is succesful, everything for the RO is returned. app.post( "/jobs/upload", //JobRequestValidator, - // upload.any(), JobMediaUploadMulter.array("file"), jobsUploadMedia ); +app.post( + "/jobs/move", //JobRequestValidator, + + JobsMoveMedia +); InitServer(); diff --git a/util/serverInit.ts b/util/serverInit.ts index 3225980..2e8508c 100644 --- a/util/serverInit.ts +++ b/util/serverInit.ts @@ -21,10 +21,6 @@ export const FolderPaths = { }; export default function InitServer() { - console.log( - `Root Media Path: ${FolderPaths.Root}`, - fs.pathExistsSync(FolderPaths.Root) - ); console.log(`Ensuring Root media path exists: ${FolderPaths.Root}`); fs.ensureDirSync(FolderPaths.Root); console.log(`Ensuring Jobs media path exists: ${FolderPaths.Jobs}`);