Added delete folders, and delete all to S3/Filesystem, also removed the need for serperate file controllers, now it only uses one file controller, with the chunk service passed through the constructor
This commit is contained in:
+18
-97
@@ -1,29 +1,27 @@
|
||||
import { Request, Response } from "express";
|
||||
|
||||
//const FileService = require("../services/FileService")
|
||||
import FileService from "../services/FileService";
|
||||
import MongoService from "../services/ChunkService/MongoService";
|
||||
import FileSystemService from "../services/ChunkService/FileSystemService";
|
||||
import S3Service from "../services/ChunkService/S3Service";
|
||||
import {UserInterface} from "../models/user";
|
||||
|
||||
const fileService = new FileService()
|
||||
|
||||
|
||||
import MongoService from "../services/ChunkService/MongoService";
|
||||
const mongoService = new MongoService();
|
||||
|
||||
|
||||
import {UserInterface} from "../models/user";
|
||||
|
||||
interface RequestType extends Request {
|
||||
user?: UserInterface,
|
||||
auth?: any,
|
||||
busboy: any,
|
||||
}
|
||||
|
||||
type ChunkServiceType = MongoService | FileSystemService | S3Service;
|
||||
|
||||
class FileController {
|
||||
|
||||
// fileService: ;
|
||||
chunkService: ChunkServiceType;
|
||||
|
||||
constructor() {
|
||||
constructor(chunkService: ChunkServiceType) {
|
||||
|
||||
this.chunkService = chunkService;
|
||||
}
|
||||
|
||||
getThumbnail = async(req: RequestType, res: Response) => {
|
||||
@@ -40,8 +38,9 @@ class FileController {
|
||||
const user = req.user;
|
||||
const id = req.params.id;
|
||||
|
||||
const decryptedThumbnail = await mongoService.getThumbnail(user, id);
|
||||
|
||||
const decryptedThumbnail = await this.chunkService.getThumbnail(user, id);
|
||||
|
||||
|
||||
res.send(decryptedThumbnail);
|
||||
|
||||
} catch (e) {
|
||||
@@ -65,7 +64,7 @@ class FileController {
|
||||
const user = req.user;
|
||||
const fileID = req.params.id;
|
||||
|
||||
await mongoService.getFullThumbnail(user, fileID, res);
|
||||
await this.chunkService.getFullThumbnail(user, fileID, res);
|
||||
|
||||
} catch (e) {
|
||||
const code = e.code || 500;
|
||||
@@ -88,7 +87,7 @@ class FileController {
|
||||
|
||||
req.pipe(busboy);
|
||||
|
||||
const file = await mongoService.uploadFile(user, busboy, req);
|
||||
const file = await this.chunkService.uploadFile(user, busboy, req);
|
||||
|
||||
res.send(file);
|
||||
|
||||
@@ -108,7 +107,7 @@ class FileController {
|
||||
const ID = req.params.id;
|
||||
const tempToken = req.params.tempToken;
|
||||
|
||||
await mongoService.getPublicDownload(ID, tempToken, res);
|
||||
await this.chunkService.getPublicDownload(ID, tempToken, res);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
@@ -356,83 +355,6 @@ class FileController {
|
||||
}
|
||||
}
|
||||
|
||||
// async transcodeVideo(req: RequestType, res: Response) {
|
||||
|
||||
// if (!req.user) {
|
||||
|
||||
// return;
|
||||
// }
|
||||
|
||||
// try {
|
||||
|
||||
// console.log("transcode request", req.body.file._id)
|
||||
|
||||
// const user = req.user;
|
||||
// const body = req.body;
|
||||
|
||||
// await fileService.transcodeVideo(user, body);
|
||||
|
||||
// res.send("Finished");
|
||||
|
||||
// } catch (e) {
|
||||
|
||||
// const code = e.code || 500;
|
||||
// console.log(e.message, e.exception)
|
||||
// return res.status(code).send();
|
||||
// }
|
||||
// }
|
||||
|
||||
// async removeTranscodeVideo(req: RequestType, res: Response) {
|
||||
|
||||
// if (!req.user) {
|
||||
|
||||
// return;
|
||||
// }
|
||||
|
||||
// try {
|
||||
|
||||
// const fileID = req.body.id;
|
||||
// const userID = req.user._id;
|
||||
|
||||
// await fileService.removeTranscodeVideo(userID, fileID);
|
||||
|
||||
// res.send();
|
||||
|
||||
// } catch (e) {
|
||||
|
||||
// const code = e.code || 500;
|
||||
|
||||
// console.log(e);
|
||||
// res.status(code).send()
|
||||
// }
|
||||
// }
|
||||
|
||||
// async streamTranscodedVideo(req: RequestType, res: Response) {
|
||||
|
||||
// if (!req.auth || !req.user) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// try {
|
||||
|
||||
// console.log("stream request transcoded", req.params.id)
|
||||
|
||||
// const fileID = req.params.id;
|
||||
// const userID = req.user._id;
|
||||
// const headers = req.headers;
|
||||
|
||||
// await fileService.streamTranscodedVideo(userID, fileID, headers, res);
|
||||
|
||||
// } catch (e) {
|
||||
|
||||
// const code = e.code || 500;
|
||||
// const message = e.message || e;
|
||||
|
||||
// console.log(message, e);
|
||||
// res.status(code).send();
|
||||
// }
|
||||
// }
|
||||
|
||||
streamVideo = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.auth || !req.user) {
|
||||
@@ -447,7 +369,7 @@ class FileController {
|
||||
|
||||
console.log("stream request", req.params.id)
|
||||
|
||||
await mongoService.streamVideo(user, fileID, headers, res);
|
||||
await this.chunkService.streamVideo(user, fileID, headers, res);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
@@ -473,8 +395,7 @@ class FileController {
|
||||
const user = req.user;
|
||||
const fileID = req.params.id;
|
||||
|
||||
//await fileService.downloadFile(user, fileID, res);
|
||||
await mongoService.downloadFile(user, fileID, res);
|
||||
await this.chunkService.downloadFile(user, fileID, res);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
@@ -578,7 +499,7 @@ class FileController {
|
||||
const userID = req.user._id;
|
||||
const fileID = req.body.id;
|
||||
|
||||
await mongoService.deleteFile(userID, fileID);
|
||||
await this.chunkService.deleteFile(userID, fileID);
|
||||
|
||||
res.send()
|
||||
|
||||
|
||||
@@ -1,593 +0,0 @@
|
||||
import { Request, Response } from "express";
|
||||
|
||||
//const FileService = require("../services/FileService")
|
||||
import FileService from "../services/FileService";
|
||||
|
||||
const fileService = new FileService()
|
||||
|
||||
import S3FileService from "../services/ChunkService/S3Service";
|
||||
const s3FileService = new S3FileService();
|
||||
|
||||
import {UserInterface} from "../models/user";
|
||||
|
||||
interface RequestType extends Request {
|
||||
user?: UserInterface,
|
||||
auth?: any,
|
||||
busboy: any,
|
||||
}
|
||||
|
||||
class FileSystemController {
|
||||
|
||||
// fileService: ;
|
||||
|
||||
constructor() {
|
||||
|
||||
}
|
||||
|
||||
getThumbnail = async(req: RequestType, res: Response) => {
|
||||
|
||||
|
||||
if (!req.user) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
|
||||
const user = req.user;
|
||||
const id = req.params.id;
|
||||
|
||||
const decryptedThumbnail = await s3FileService.getThumbnail(user, id);
|
||||
|
||||
res.send(decryptedThumbnail);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getFullThumbnail = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user;
|
||||
const fileID = req.params.id;
|
||||
|
||||
await s3FileService.getFullThumbnail(user, fileID, res);
|
||||
|
||||
} catch (e) {
|
||||
const code = e.code || 500;
|
||||
console.log(e.message, e.exception)
|
||||
return res.status(code).send();
|
||||
}
|
||||
}
|
||||
|
||||
uploadFile = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user;
|
||||
const busboy = req.busboy;
|
||||
|
||||
req.pipe(busboy);
|
||||
|
||||
const file = await s3FileService.uploadFile(user, busboy, req);
|
||||
|
||||
res.send(file);
|
||||
|
||||
console.log("file uploaded");
|
||||
|
||||
} catch (e) {
|
||||
const code = e.code || 500;
|
||||
console.log(e.message, e.exception)
|
||||
return res.status(code).send();
|
||||
}
|
||||
}
|
||||
|
||||
getPublicDownload = async(req: RequestType, res: Response) => {
|
||||
|
||||
try {
|
||||
|
||||
const ID = req.params.id;
|
||||
const tempToken = req.params.tempToken;
|
||||
|
||||
await s3FileService.getPublicDownload(ID, tempToken, res);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
const message = e.message || e;
|
||||
|
||||
console.log(message, e);
|
||||
res.status(code).send();
|
||||
}
|
||||
}
|
||||
|
||||
removeLink = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const id = req.params.id;
|
||||
const userID = req.user._id;
|
||||
|
||||
await fileService.removeLink(userID, id)
|
||||
|
||||
res.send();
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
makePublic = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const fileID = req.params.id;
|
||||
const user = req.user;
|
||||
|
||||
const token = await fileService.makePublic(user, fileID);
|
||||
|
||||
res.send(token);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send();
|
||||
}
|
||||
}
|
||||
|
||||
getPublicInfo = async(req: RequestType, res: Response) => {
|
||||
|
||||
try {
|
||||
|
||||
const id = req.params.id;
|
||||
const tempToken = req.params.tempToken;
|
||||
|
||||
const file = await fileService.getPublicInfo(id, tempToken);
|
||||
|
||||
res.send(file);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
makeOneTimePublic = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const id = req.params.id;
|
||||
const userID = req.user._id;
|
||||
|
||||
const token = await fileService.makeOneTimePublic(userID, id);
|
||||
|
||||
res.send(token);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getFileInfo = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const fileID = req.params.id;
|
||||
const userID = req.user._id;
|
||||
|
||||
const file = await fileService.getFileInfo(userID, fileID);
|
||||
|
||||
res.send(file);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
getQuickList = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const userID = req.user._id;
|
||||
|
||||
const quickList = await fileService.getQuickList(userID);
|
||||
|
||||
res.send(quickList);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
getList = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const query = req.query;
|
||||
const userID = req.user._id;
|
||||
|
||||
const fileList = await fileService.getList(userID, query);
|
||||
|
||||
res.send(fileList);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
getDownloadToken = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user;
|
||||
|
||||
const tempToken = await fileService.getDownloadToken(user);
|
||||
|
||||
res.send({tempToken});
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
getDownloadTokenVideo = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user;
|
||||
const cookie = req.headers.uuid as string;
|
||||
|
||||
const tempToken = await fileService.getDownloadTokenVideo(user, cookie);
|
||||
|
||||
res.send({tempToken});
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
removeTempToken = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user
|
||||
const tempToken = req.params.tempToken;
|
||||
|
||||
await fileService.removeTempToken(user, tempToken);
|
||||
|
||||
res.send();
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
// async transcodeVideo(req: RequestType, res: Response) {
|
||||
|
||||
// if (!req.user) {
|
||||
|
||||
// return;
|
||||
// }
|
||||
|
||||
// try {
|
||||
|
||||
// console.log("transcode request", req.body.file._id)
|
||||
|
||||
// const user = req.user;
|
||||
// const body = req.body;
|
||||
|
||||
// await fileService.transcodeVideo(user, body);
|
||||
|
||||
// res.send("Finished");
|
||||
|
||||
// } catch (e) {
|
||||
|
||||
// const code = e.code || 500;
|
||||
// console.log(e.message, e.exception)
|
||||
// return res.status(code).send();
|
||||
// }
|
||||
// }
|
||||
|
||||
// async removeTranscodeVideo(req: RequestType, res: Response) {
|
||||
|
||||
// if (!req.user) {
|
||||
|
||||
// return;
|
||||
// }
|
||||
|
||||
// try {
|
||||
|
||||
// const fileID = req.body.id;
|
||||
// const userID = req.user._id;
|
||||
|
||||
// await fileService.removeTranscodeVideo(userID, fileID);
|
||||
|
||||
// res.send();
|
||||
|
||||
// } catch (e) {
|
||||
|
||||
// const code = e.code || 500;
|
||||
|
||||
// console.log(e);
|
||||
// res.status(code).send()
|
||||
// }
|
||||
// }
|
||||
|
||||
// async streamTranscodedVideo(req: RequestType, res: Response) {
|
||||
|
||||
// if (!req.auth || !req.user) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// try {
|
||||
|
||||
// console.log("stream request transcoded", req.params.id)
|
||||
|
||||
// const fileID = req.params.id;
|
||||
// const userID = req.user._id;
|
||||
// const headers = req.headers;
|
||||
|
||||
// await fileService.streamTranscodedVideo(userID, fileID, headers, res);
|
||||
|
||||
// } catch (e) {
|
||||
|
||||
// const code = e.code || 500;
|
||||
// const message = e.message || e;
|
||||
|
||||
// console.log(message, e);
|
||||
// res.status(code).send();
|
||||
// }
|
||||
// }
|
||||
|
||||
streamVideo = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.auth || !req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user;
|
||||
const fileID = req.params.id;
|
||||
const headers = req.headers;
|
||||
|
||||
console.log("stream request", req.params.id)
|
||||
|
||||
await s3FileService.streamVideo(user, fileID, headers, res);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
const message = e.message || e;
|
||||
|
||||
console.log(message, e);
|
||||
res.status(code).send();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
downloadFile = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.auth || !req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
console.log("download request")
|
||||
|
||||
const user = req.user;
|
||||
const fileID = req.params.id;
|
||||
|
||||
//await fileService.downloadFile(user, fileID, res);
|
||||
await s3FileService.downloadFile(user, fileID, res);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
const message = e.message || e;
|
||||
|
||||
console.log(message, e);
|
||||
res.status(code).send();
|
||||
}
|
||||
}
|
||||
|
||||
getSuggestedList = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const userID = req.user._id;
|
||||
let searchQuery = req.query.search || "";
|
||||
|
||||
const {fileList, folderList} = await fileService.getSuggestedList(userID, searchQuery);
|
||||
|
||||
return res.send({folderList, fileList})
|
||||
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
renameFile = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const fileID = req.body.id;
|
||||
const title = req.body.title
|
||||
const userID = req.user._id;
|
||||
|
||||
await fileService.renameFile(userID, fileID, title)
|
||||
|
||||
res.send();
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
moveFile = async(req: RequestType, res: Response) => {
|
||||
|
||||
console.log("move request");
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const fileID = req.body.id;
|
||||
const userID = req.user._id;
|
||||
const parentID = req.body.parent;
|
||||
|
||||
console.log(fileID, userID, parentID);
|
||||
|
||||
await fileService.moveFile(userID, fileID, parentID);
|
||||
|
||||
res.send();
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
deleteFile = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const userID = req.user._id;
|
||||
const fileID = req.body.id;
|
||||
|
||||
await s3FileService.deleteFile(userID, fileID);
|
||||
|
||||
res.send()
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default FileSystemController;
|
||||
@@ -1,589 +0,0 @@
|
||||
import { Request, Response } from "express";
|
||||
|
||||
//const FileService = require("../services/FileService")
|
||||
import FileService from "../services/FileService";
|
||||
|
||||
const fileService = new FileService()
|
||||
|
||||
import FileSystemService from "../services/ChunkService/FileSystemService";
|
||||
const fileSystemService = new FileSystemService();
|
||||
|
||||
import {UserInterface} from "../models/user";
|
||||
|
||||
interface RequestType extends Request {
|
||||
user?: UserInterface,
|
||||
auth?: any,
|
||||
busboy: any,
|
||||
encryptedTempToken?: any,
|
||||
}
|
||||
|
||||
class FileSystemController {
|
||||
|
||||
// fileService: ;
|
||||
|
||||
constructor() {
|
||||
|
||||
}
|
||||
|
||||
getThumbnail = async(req: RequestType, res: Response) => {
|
||||
|
||||
|
||||
if (!req.user) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
|
||||
const user = req.user;
|
||||
const id = req.params.id;
|
||||
|
||||
const decryptedThumbnail = await fileSystemService.getThumbnail(user, id);
|
||||
|
||||
res.send(decryptedThumbnail);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getFullThumbnail = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user;
|
||||
const fileID = req.params.id;
|
||||
|
||||
await fileSystemService.getFullThumbnail(user, fileID, res);
|
||||
|
||||
} catch (e) {
|
||||
const code = e.code || 500;
|
||||
console.log(e.message, e.exception)
|
||||
return res.status(code).send();
|
||||
}
|
||||
}
|
||||
|
||||
uploadFile = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user;
|
||||
const busboy = req.busboy;
|
||||
|
||||
req.pipe(busboy);
|
||||
|
||||
const file = await fileSystemService.uploadFile(user, busboy, req);
|
||||
|
||||
res.send(file);
|
||||
|
||||
console.log("file uploaded");
|
||||
|
||||
} catch (e) {
|
||||
const code = e.code || 500;
|
||||
console.log(e.message, e.exception)
|
||||
return res.status(code).send();
|
||||
}
|
||||
}
|
||||
|
||||
getPublicDownload = async(req: RequestType, res: Response) => {
|
||||
|
||||
try {
|
||||
|
||||
const ID = req.params.id;
|
||||
const tempToken = req.params.tempToken;
|
||||
|
||||
await fileSystemService.getPublicDownload(ID, tempToken, res);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
const message = e.message || e;
|
||||
|
||||
console.log(message, e);
|
||||
res.status(code).send();
|
||||
}
|
||||
}
|
||||
|
||||
removeLink = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const id = req.params.id;
|
||||
const userID = req.user._id;
|
||||
|
||||
await fileService.removeLink(userID, id)
|
||||
|
||||
res.send();
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
makePublic = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const fileID = req.params.id;
|
||||
const user = req.user;
|
||||
|
||||
const token = await fileService.makePublic(user, fileID);
|
||||
|
||||
res.send(token);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send();
|
||||
}
|
||||
}
|
||||
|
||||
getPublicInfo = async(req: RequestType, res: Response) => {
|
||||
|
||||
try {
|
||||
|
||||
const id = req.params.id;
|
||||
const tempToken = req.params.tempToken;
|
||||
|
||||
const file = await fileService.getPublicInfo(id, tempToken);
|
||||
|
||||
res.send(file);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
makeOneTimePublic = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const id = req.params.id;
|
||||
const userID = req.user._id;
|
||||
|
||||
const token = await fileService.makeOneTimePublic(userID, id);
|
||||
|
||||
res.send(token);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getFileInfo = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const fileID = req.params.id;
|
||||
const userID = req.user._id;
|
||||
|
||||
const file = await fileService.getFileInfo(userID, fileID);
|
||||
|
||||
res.send(file);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
getQuickList = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const userID = req.user._id;
|
||||
|
||||
const quickList = await fileService.getQuickList(userID);
|
||||
|
||||
res.send(quickList);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
getList = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const query = req.query;
|
||||
const userID = req.user._id;
|
||||
|
||||
const fileList = await fileService.getList(userID, query);
|
||||
|
||||
res.send(fileList);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
getDownloadToken = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user;
|
||||
|
||||
const tempToken = await fileService.getDownloadToken(user);
|
||||
|
||||
res.send({tempToken});
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
getDownloadTokenVideo = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
console.log("Incoming Video Stream Request");
|
||||
const user = req.user;
|
||||
const cookie = req.headers.uuid as string;
|
||||
|
||||
const tempToken = await fileService.getDownloadTokenVideo(user, cookie);
|
||||
|
||||
res.send({tempToken});
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
removeTempToken = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user
|
||||
const tempToken = req.params.tempToken;
|
||||
|
||||
await fileService.removeTempToken(user, tempToken);
|
||||
|
||||
res.send();
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
// async transcodeVideo(req: RequestType, res: Response) {
|
||||
|
||||
// if (!req.user) {
|
||||
|
||||
// return;
|
||||
// }
|
||||
|
||||
// try {
|
||||
|
||||
// console.log("transcode request", req.body.file._id)
|
||||
|
||||
// const user = req.user;
|
||||
// const body = req.body;
|
||||
|
||||
// await fileService.transcodeVideo(user, body);
|
||||
|
||||
// res.send("Finished");
|
||||
|
||||
// } catch (e) {
|
||||
|
||||
// const code = e.code || 500;
|
||||
// console.log(e.message, e.exception)
|
||||
// return res.status(code).send();
|
||||
// }
|
||||
// }
|
||||
|
||||
// async removeTranscodeVideo(req: RequestType, res: Response) {
|
||||
|
||||
// if (!req.user) {
|
||||
|
||||
// return;
|
||||
// }
|
||||
|
||||
// try {
|
||||
|
||||
// const fileID = req.body.id;
|
||||
// const userID = req.user._id;
|
||||
|
||||
// await fileService.removeTranscodeVideo(userID, fileID);
|
||||
|
||||
// res.send();
|
||||
|
||||
// } catch (e) {
|
||||
|
||||
// const code = e.code || 500;
|
||||
|
||||
// console.log(e);
|
||||
// res.status(code).send()
|
||||
// }
|
||||
// }
|
||||
|
||||
// async streamTranscodedVideo(req: RequestType, res: Response) {
|
||||
|
||||
// if (!req.auth || !req.user) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// try {
|
||||
|
||||
// console.log("stream request transcoded", req.params.id)
|
||||
|
||||
// const fileID = req.params.id;
|
||||
// const userID = req.user._id;
|
||||
// const headers = req.headers;
|
||||
|
||||
// await fileService.streamTranscodedVideo(userID, fileID, headers, res);
|
||||
|
||||
// } catch (e) {
|
||||
|
||||
// const code = e.code || 500;
|
||||
// const message = e.message || e;
|
||||
|
||||
// console.log(message, e);
|
||||
// res.status(code).send();
|
||||
// }
|
||||
// }
|
||||
|
||||
streamVideo = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.auth || !req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user;
|
||||
const fileID = req.params.id;
|
||||
const headers = req.headers;
|
||||
|
||||
await fileSystemService.streamVideo(user, fileID, headers, res);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
const message = e.message || e;
|
||||
|
||||
console.log(message, e);
|
||||
res.status(code).send();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
downloadFile = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.auth || !req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const user = req.user;
|
||||
const fileID = req.params.id;
|
||||
|
||||
await fileSystemService.downloadFile(user, fileID, res);
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
const message = e.message || e;
|
||||
|
||||
console.log(message, e);
|
||||
res.status(code).send();
|
||||
}
|
||||
}
|
||||
|
||||
getSuggestedList = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const userID = req.user._id;
|
||||
let searchQuery = req.query.search || "";
|
||||
|
||||
const {fileList, folderList} = await fileService.getSuggestedList(userID, searchQuery);
|
||||
|
||||
return res.send({folderList, fileList})
|
||||
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
|
||||
renameFile = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const fileID = req.body.id;
|
||||
const title = req.body.title
|
||||
const userID = req.user._id;
|
||||
|
||||
await fileService.renameFile(userID, fileID, title)
|
||||
|
||||
res.send();
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
moveFile = async(req: RequestType, res: Response) => {
|
||||
|
||||
console.log("move request");
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const fileID = req.body.id;
|
||||
const userID = req.user._id;
|
||||
const parentID = req.body.parent;
|
||||
|
||||
console.log(fileID, userID, parentID);
|
||||
|
||||
await fileService.moveFile(userID, fileID, parentID);
|
||||
|
||||
res.send();
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
deleteFile = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const userID = req.user._id;
|
||||
const fileID = req.body.id;
|
||||
|
||||
await fileSystemService.deleteFile(userID, fileID);
|
||||
|
||||
res.send()
|
||||
|
||||
} catch (e) {
|
||||
|
||||
const code = e.code || 500;
|
||||
|
||||
console.log(e);
|
||||
res.status(code).send()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default FileSystemController;
|
||||
@@ -2,16 +2,24 @@ import FolderService from "../services/FolderService";
|
||||
const folderService = new FolderService();
|
||||
import { Request, Response } from "express";
|
||||
import {UserInterface} from "../models/user";
|
||||
import MongoService from "../services/ChunkService/MongoService";
|
||||
import FileSystemService from "../services/ChunkService/FileSystemService";
|
||||
import S3Service from "../services/ChunkService/S3Service";
|
||||
|
||||
interface RequestType extends Request {
|
||||
user?: UserInterface,
|
||||
auth?: any,
|
||||
}
|
||||
|
||||
type ChunkServiceType = MongoService | FileSystemService | S3Service;
|
||||
|
||||
class FolderController {
|
||||
|
||||
constructor() {
|
||||
chunkService: ChunkServiceType;
|
||||
|
||||
constructor(chunkService: ChunkServiceType) {
|
||||
|
||||
this.chunkService = chunkService;
|
||||
}
|
||||
|
||||
uploadFolder = async(req: RequestType, res: Response) => {
|
||||
@@ -51,7 +59,7 @@ class FolderController {
|
||||
const folderID = req.body.id;
|
||||
const parentList = req.body.parentList
|
||||
|
||||
await folderService.deleteFolder(userID, folderID, parentList);
|
||||
await this.chunkService.deleteFolder(userID, folderID, parentList);
|
||||
|
||||
res.send();
|
||||
|
||||
@@ -75,7 +83,7 @@ class FolderController {
|
||||
|
||||
const userID = req.user._id;
|
||||
|
||||
await folderService.deleteAll(userID);
|
||||
await this.chunkService.deleteAll(userID);
|
||||
|
||||
res.send();
|
||||
|
||||
@@ -215,4 +223,4 @@ class FolderController {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = FolderController;
|
||||
export default FolderController;
|
||||
@@ -7,18 +7,27 @@ import tempAuth from "../middleware/tempAuth";
|
||||
import tempAuthVideo from "../middleware/tempAuthVideo";
|
||||
|
||||
import FileController from "../controllers/file";
|
||||
import FsFileController from "../controllers/fileSystem";
|
||||
import S3FileController from "../controllers/fileS3";
|
||||
import env from "../enviroment/env";
|
||||
import MongoService from "../services/ChunkService/MongoService";
|
||||
import FileSystemService from "../services/ChunkService/FileSystemService";
|
||||
import S3Service from "../services/ChunkService/S3Service";
|
||||
|
||||
let fileController: FileController | FsFileController | S3FileController;
|
||||
let fileController: FileController;
|
||||
|
||||
if (env.dbType === "mongo") {
|
||||
fileController = new FileController();
|
||||
|
||||
const mongoService = new MongoService();
|
||||
fileController = new FileController(mongoService);
|
||||
|
||||
} else if (env.dbType === "fs") {
|
||||
fileController = new FsFileController();
|
||||
|
||||
const fileSystemService = new FileSystemService();
|
||||
fileController = new FileController(fileSystemService);
|
||||
|
||||
} else {
|
||||
fileController = new S3FileController();
|
||||
|
||||
const s3Service = new S3Service();
|
||||
fileController = new FileController(s3Service);
|
||||
}
|
||||
|
||||
//const fileController = new FileController()
|
||||
|
||||
@@ -1,8 +1,32 @@
|
||||
import {Router} from "express";
|
||||
const router = Router();
|
||||
import auth from "../middleware/auth";
|
||||
const FolderController = require("../controllers/folder");
|
||||
const folderController = new FolderController();
|
||||
import env from "../enviroment/env";
|
||||
import MongoService from "../services/ChunkService/MongoService";
|
||||
import FileSystemService from "../services/ChunkService/FileSystemService";
|
||||
import S3Service from "../services/ChunkService/S3Service";
|
||||
import FolderController from "../controllers/folder";
|
||||
|
||||
let folderController: FolderController;
|
||||
|
||||
if (env.dbType === "mongo") {
|
||||
|
||||
const mongoService = new MongoService();
|
||||
folderController = new FolderController(mongoService);
|
||||
|
||||
} else if (env.dbType === "fs") {
|
||||
|
||||
const fileSystemService = new FileSystemService();
|
||||
folderController = new FolderController(fileSystemService);
|
||||
|
||||
} else {
|
||||
|
||||
const s3Service = new S3Service();
|
||||
folderController = new FolderController(s3Service);
|
||||
}
|
||||
|
||||
//import FolderController from "../controllers/folder";
|
||||
//const folderController = new FolderController();
|
||||
|
||||
router.post("/folder-service/upload", auth, folderController.uploadFolder);
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ import removeTempToken from "./utils/removeTempToken";
|
||||
import getPrevIVFS from "./utils/getPrevIVFS";
|
||||
import awaitStreamVideo from "./utils/awaitStreamVideo";
|
||||
import fixStartChunkLength from "./utils/fixStartChunkLength";
|
||||
import Folder from "../../models/folder";
|
||||
|
||||
const dbUtilsFile = new DbUtilFile();
|
||||
|
||||
@@ -314,6 +315,77 @@ class FileSystemService implements ChunkInterface {
|
||||
await removeChunksFS(file.metadata.filePath!);
|
||||
await File.deleteOne({_id: file._id});
|
||||
}
|
||||
|
||||
deleteFolder = async(userID: string, folderID: string, parentList: string[]) => {
|
||||
|
||||
const parentListString = parentList.toString()
|
||||
|
||||
await Folder.deleteMany({"owner": userID, "parentList": { $all: parentList}})
|
||||
await Folder.deleteMany({"owner": userID, "_id": folderID});
|
||||
|
||||
const fileList = await dbUtilsFile.getFileListByParent(userID, parentListString);
|
||||
|
||||
if (!fileList) throw new NotFoundError("Delete File List Not Found");
|
||||
|
||||
for (let i = 0; i < fileList.length; i++) {
|
||||
|
||||
const currentFile = fileList[i];
|
||||
|
||||
try {
|
||||
|
||||
if (currentFile.metadata.thumbnailID) {
|
||||
|
||||
const thumbnail = await Thumbnail.findById(currentFile.metadata.thumbnailID) as ThumbnailInterface;
|
||||
const thumbnailPath = thumbnail.path!;
|
||||
await removeChunksFS(thumbnailPath);
|
||||
|
||||
await Thumbnail.deleteOne({_id: currentFile.metadata.thumbnailID});
|
||||
}
|
||||
|
||||
await removeChunksFS(currentFile.metadata.filePath!);
|
||||
await File.deleteOne({_id: currentFile._id});
|
||||
|
||||
} catch (e) {
|
||||
|
||||
console.log("Could not delete file", currentFile.filename, currentFile._id);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
deleteAll = async(userID: string) => {
|
||||
|
||||
console.log("remove all request")
|
||||
|
||||
await Folder.deleteMany({"owner": userID});
|
||||
|
||||
const fileList = await dbUtilsFile.getFileListByOwner(userID);
|
||||
|
||||
if (!fileList) throw new NotFoundError("Delete All File List Not Found Error");
|
||||
|
||||
for (let i = 0; i < fileList.length; i++) {
|
||||
const currentFile = fileList[i];
|
||||
|
||||
try {
|
||||
|
||||
if (currentFile.metadata.thumbnailID) {
|
||||
|
||||
const thumbnail = await Thumbnail.findById(currentFile.metadata.thumbnailID) as ThumbnailInterface;
|
||||
const thumbnailPath = thumbnail.path!;
|
||||
await removeChunksFS(thumbnailPath);
|
||||
|
||||
await Thumbnail.deleteOne({_id: currentFile.metadata.thumbnailID});
|
||||
}
|
||||
|
||||
await removeChunksFS(currentFile.metadata.filePath!);
|
||||
await File.deleteOne({_id: currentFile._id});
|
||||
|
||||
} catch (e) {
|
||||
|
||||
console.log("Could Not Remove File", currentFile.filename, currentFile._id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default FileSystemService;
|
||||
@@ -16,6 +16,7 @@ import awaitStream from "./utils/awaitStream";
|
||||
import awaitUploadStream from "./utils/awaitUploadStream";
|
||||
|
||||
import User, { UserInterface } from "../../models/user";
|
||||
import Folder from "../../models/folder";
|
||||
import { FileInterface } from "../../models/file";
|
||||
import { Stream } from "stream";
|
||||
import removeChunks from "../FileService/utils/removeChunks";
|
||||
@@ -312,6 +313,79 @@ class MongoService implements ChunkInterface {
|
||||
|
||||
await bucket.delete(new ObjectID(fileID));
|
||||
}
|
||||
|
||||
deleteFolder = async(userID: string, folderID: string, parentList: string[]) => {
|
||||
|
||||
let bucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
||||
chunkSizeBytes: 1024 * 255
|
||||
});
|
||||
|
||||
const parentListString = parentList.toString()
|
||||
|
||||
await Folder.deleteMany({"owner": userID, "parentList": { $all: parentList}})
|
||||
await Folder.deleteMany({"owner": userID, "_id": folderID});
|
||||
|
||||
const fileList = await dbUtilsFile.getFileListByParent(userID, parentListString);
|
||||
|
||||
if (!fileList) throw new NotFoundError("Delete File List Not Found");
|
||||
|
||||
for (let i = 0; i < fileList.length; i++) {
|
||||
|
||||
const currentFile = fileList[i];
|
||||
|
||||
try {
|
||||
|
||||
if (currentFile.metadata.thumbnailID) {
|
||||
|
||||
await Thumbnail.deleteOne({_id: currentFile.metadata.thumbnailID});
|
||||
}
|
||||
|
||||
await bucket.delete(new ObjectID(currentFile._id));
|
||||
|
||||
} catch (e) {
|
||||
|
||||
console.log("Could not delete file", currentFile.filename, currentFile._id);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
deleteAll = async(userID: string) => {
|
||||
|
||||
console.log("remove all request")
|
||||
|
||||
let bucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
||||
chunkSizeBytes: 1024 * 255
|
||||
});
|
||||
|
||||
const videoBucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
||||
bucketName: "videos"
|
||||
});
|
||||
|
||||
await Folder.deleteMany({"owner": userID});
|
||||
|
||||
const fileList = await dbUtilsFile.getFileListByOwner(userID);
|
||||
|
||||
if (!fileList) throw new NotFoundError("Delete All File List Not Found Error");
|
||||
|
||||
for (let i = 0; i < fileList.length; i++) {
|
||||
const currentFile = fileList[i];
|
||||
|
||||
try {
|
||||
|
||||
if (currentFile.metadata.thumbnailID) {
|
||||
|
||||
await Thumbnail.deleteOne({_id: currentFile.metadata.thumbnailID})
|
||||
}
|
||||
|
||||
await bucket.delete(new ObjectID(currentFile._id));
|
||||
|
||||
} catch (e) {
|
||||
|
||||
console.log("Could Not Remove File", currentFile.filename, currentFile._id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default MongoService;
|
||||
@@ -24,6 +24,7 @@ import fixStartChunkLength from "./utils/fixStartChunkLength";
|
||||
import fixEndChunkLength from "./utils/fixEndChunkLength";
|
||||
import getPrevIVS3 from "./utils/getPrevIVS3";
|
||||
import awaitStreamVideo from "./utils/awaitStreamVideo";
|
||||
import Folder from "../../models/folder";
|
||||
|
||||
import DbUtilFile from "../../db/utils/fileUtils/index";
|
||||
const dbUtilsFile = new DbUtilFile();
|
||||
@@ -316,6 +317,77 @@ class S3Service implements ChunkInterface {
|
||||
await removeChunksS3(params);
|
||||
await File.deleteOne({_id: file._id});
|
||||
}
|
||||
|
||||
deleteFolder = async(userID: string, folderID: string, parentList: string[]) => {
|
||||
|
||||
const parentListString = parentList.toString()
|
||||
|
||||
await Folder.deleteMany({"owner": userID, "parentList": { $all: parentList}})
|
||||
await Folder.deleteMany({"owner": userID, "_id": folderID});
|
||||
|
||||
const fileList = await dbUtilsFile.getFileListByParent(userID, parentListString);
|
||||
|
||||
if (!fileList) throw new NotFoundError("Delete File List Not Found");
|
||||
|
||||
for (let i = 0; i < fileList.length; i++) {
|
||||
|
||||
const currentFile = fileList[i];
|
||||
|
||||
try {
|
||||
|
||||
if (currentFile.metadata.thumbnailID) {
|
||||
|
||||
const thumbnail = await Thumbnail.findById(currentFile.metadata.thumbnailID) as ThumbnailInterface;
|
||||
const paramsThumbnail: any = {Bucket: env.s3Bucket, Key: thumbnail.s3ID!};
|
||||
await removeChunksS3(paramsThumbnail);
|
||||
await Thumbnail.deleteOne({_id: currentFile.metadata.thumbnailID});
|
||||
}
|
||||
|
||||
const params: any = {Bucket: env.s3Bucket, Key: currentFile.metadata.s3ID!};
|
||||
await removeChunksS3(params);
|
||||
await File.deleteOne({_id: currentFile._id});
|
||||
|
||||
} catch (e) {
|
||||
|
||||
console.log("Could not delete file", currentFile.filename, currentFile._id);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
deleteAll = async(userID: string) => {
|
||||
|
||||
console.log("remove all request")
|
||||
|
||||
await Folder.deleteMany({"owner": userID});
|
||||
|
||||
const fileList = await dbUtilsFile.getFileListByOwner(userID);
|
||||
|
||||
if (!fileList) throw new NotFoundError("Delete All File List Not Found Error");
|
||||
|
||||
for (let i = 0; i < fileList.length; i++) {
|
||||
const currentFile = fileList[i];
|
||||
|
||||
try {
|
||||
|
||||
if (currentFile.metadata.thumbnailID) {
|
||||
|
||||
const thumbnail = await Thumbnail.findById(currentFile.metadata.thumbnailID) as ThumbnailInterface;
|
||||
const paramsThumbnail: any = {Bucket: env.s3Bucket, Key: thumbnail.s3ID!};
|
||||
await removeChunksS3(paramsThumbnail);
|
||||
await Thumbnail.deleteOne({_id: currentFile.metadata.thumbnailID});
|
||||
}
|
||||
|
||||
const params: any = {Bucket: env.s3Bucket, Key: currentFile.metadata.s3ID!};
|
||||
await removeChunksS3(params);
|
||||
await File.deleteOne({_id: currentFile._id});
|
||||
|
||||
} catch (e) {
|
||||
|
||||
console.log("Could Not Remove File", currentFile.filename, currentFile._id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default S3Service;
|
||||
@@ -25,102 +25,6 @@ class FolderService {
|
||||
return folder;
|
||||
}
|
||||
|
||||
deleteFolder = async(userID: string, folderID: string, parentList: string[]) => {
|
||||
|
||||
let bucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
||||
chunkSizeBytes: 1024 * 255
|
||||
});
|
||||
|
||||
const videoBucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
||||
bucketName: "videos"
|
||||
});
|
||||
|
||||
const parentListString = parentList.toString()
|
||||
|
||||
await Folder.deleteMany({"owner": userID, "parentList": { $all: parentList}})
|
||||
await Folder.deleteMany({"owner": userID, "_id": folderID});
|
||||
|
||||
const fileList = await utilsFile.getFileListByParent(userID, parentListString);
|
||||
|
||||
if (!fileList) throw new NotFoundError("Delete File List Not Found");
|
||||
|
||||
for (let i = 0; i < fileList.length; i++) {
|
||||
|
||||
const currentFile = fileList[i];
|
||||
|
||||
try {
|
||||
|
||||
if (currentFile.metadata.thumbnailID) {
|
||||
|
||||
await Thumbnail.deleteOne({_id: currentFile.metadata.thumbnailID});
|
||||
}
|
||||
|
||||
// if (currentFile.metadata.isVideo && currentFile.metadata.transcoded) {
|
||||
|
||||
// try {
|
||||
// await videoBucket.delete(new ObjectID(currentFile.metadata.transcodedID))
|
||||
// } catch (e) {console.log("Could Not Find Transcoded Video")}
|
||||
|
||||
// }
|
||||
|
||||
await bucket.delete(new ObjectID(currentFile._id));
|
||||
|
||||
} catch (e) {
|
||||
|
||||
console.log("Could not delete file", currentFile.filename, currentFile._id);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
deleteAll = async(userID: string) => {
|
||||
|
||||
console.log("remove all request")
|
||||
|
||||
let bucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
||||
chunkSizeBytes: 1024 * 255
|
||||
});
|
||||
|
||||
const videoBucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
||||
bucketName: "videos"
|
||||
});
|
||||
|
||||
await Folder.deleteMany({"owner": userID});
|
||||
|
||||
const fileList = await utilsFile.getFileListByOwner(userID);
|
||||
|
||||
if (!fileList) throw new NotFoundError("Delete All File List Not Found Error");
|
||||
|
||||
for (let i = 0; i < fileList.length; i++) {
|
||||
const currentFile = fileList[i];
|
||||
|
||||
try {
|
||||
|
||||
if (currentFile.metadata.thumbnailID) {
|
||||
|
||||
await Thumbnail.deleteOne({_id: currentFile.metadata.thumbnailID})
|
||||
}
|
||||
|
||||
// if (currentFile.metadata.isVideo && currentFile.metadata.transcoded) {
|
||||
|
||||
// try {
|
||||
// await videoBucket.delete(ObjectID(currentFile.metadata.transcodedID))
|
||||
// } catch (e) {
|
||||
// console.log("Cannot Find Transcoded Video");
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
await bucket.delete(new ObjectID(currentFile._id));
|
||||
|
||||
} catch (e) {
|
||||
|
||||
console.log("Could Not Remove File", currentFile.filename, currentFile._id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getFolderInfo = async(userID: string, folderID: string) => {
|
||||
|
||||
let currentFolder = await utilsFolder.getFolderInfo(folderID, userID);
|
||||
@@ -282,276 +186,4 @@ class FolderService {
|
||||
}
|
||||
}
|
||||
|
||||
// const FolderService = function() {
|
||||
|
||||
// this.uploadFolder = async(data) => {
|
||||
|
||||
// const folder = new Folder(data);
|
||||
|
||||
// await folder.save();
|
||||
|
||||
// if (!folder) throw new InternalServerError("Upload Folder Error");
|
||||
|
||||
// return folder;
|
||||
// }
|
||||
|
||||
// this.deleteFolder = async(userID, folderID, parentList) => {
|
||||
|
||||
// let bucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
||||
// chunkSizeBytes: 1024 * 255
|
||||
// });
|
||||
|
||||
// const videoBucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
||||
// bucketName: "videos"
|
||||
// });
|
||||
|
||||
// const parentListString = parentList.toString()
|
||||
|
||||
// await Folder.deleteMany({"owner": userID, "parentList": { $all: parentList}})
|
||||
// await Folder.deleteMany({"owner": userID, "_id": folderID});
|
||||
|
||||
// const fileList = await utilsFile.getFileListByParent(userID, parentListString);
|
||||
|
||||
// if (!fileList) throw new NotFoundError("Delete File List Not Found");
|
||||
|
||||
// for (let i = 0; i < fileList.length; i++) {
|
||||
|
||||
// const currentFile = fileList[i];
|
||||
|
||||
// try {
|
||||
|
||||
// if (currentFile.metadata.thumbnailID) {
|
||||
|
||||
// await Thumbnail.deleteOne({_id: currentFile.metadata.thumbnailID});
|
||||
// }
|
||||
|
||||
// if (currentFile.metadata.isVideo && currentFile.metadata.transcoded) {
|
||||
|
||||
// try {
|
||||
// await videoBucket.delete(ObjectID(currentFile.metadata.transcodedID))
|
||||
// } catch (e) {console.log("Could Not Find Transcoded Video")}
|
||||
|
||||
// }
|
||||
|
||||
// await bucket.delete(ObjectID(currentFile._id));
|
||||
|
||||
// } catch (e) {
|
||||
|
||||
// console.log("Could not delete file", currentFile.filename, currentFile._id);
|
||||
// }
|
||||
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
// this.deleteAll = async(userID) => {
|
||||
|
||||
// console.log("remove all request")
|
||||
|
||||
// let bucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
||||
// chunkSizeBytes: 1024 * 255
|
||||
// });
|
||||
|
||||
// const videoBucket = new mongoose.mongo.GridFSBucket(conn.db, {
|
||||
// bucketName: "videos"
|
||||
// });
|
||||
|
||||
// await Folder.deleteMany({"owner": userID});
|
||||
|
||||
// const fileList = await utilsFile.getFileListByOwner(userID);
|
||||
|
||||
// if (!fileList) throw new NotFoundError("Delete All File List Not Found Error");
|
||||
|
||||
// for (let i = 0; i < fileList.length; i++) {
|
||||
// const currentFile = fileList[i];
|
||||
|
||||
// try {
|
||||
|
||||
// if (currentFile.metadata.thumbnailID) {
|
||||
|
||||
// await Thumbnail.deleteOne({_id: currentFile.metadata.thumbnailID})
|
||||
// }
|
||||
|
||||
// if (currentFile.metadata.isVideo && currentFile.metadata.transcoded) {
|
||||
|
||||
// try {
|
||||
// await videoBucket.delete(ObjectID(currentFile.metadata.transcodedID))
|
||||
// } catch (e) {
|
||||
// console.log("Cannot Find Transcoded Video");
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// await bucket.delete(ObjectID(currentFile._id));
|
||||
|
||||
// } catch (e) {
|
||||
|
||||
// console.log("Could Not Remove File", currentFile.filename, currentFile._id);
|
||||
// }
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// this.getFolderInfo = async(userID, folderID) => {
|
||||
|
||||
// let currentFolder = await utilsFolder.getFolderInfo(folderID, userID);
|
||||
|
||||
// if (!currentFolder) throw new NotFoundError("Folder Info Not Found Error");
|
||||
|
||||
// const parentID = currentFolder.parent;
|
||||
|
||||
// let parentName = "";
|
||||
|
||||
// if (parentID === "/") {
|
||||
|
||||
// parentName = "Home"
|
||||
|
||||
// } else {
|
||||
|
||||
// const parentFolder = await utilsFolder.getFolderInfo(parentID, userID);
|
||||
|
||||
// if (parentFolder) {
|
||||
|
||||
// parentName = parentFolder.name;
|
||||
|
||||
// } else {
|
||||
|
||||
// parentName = "Unknown"
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// const folderName = currentFolder.name
|
||||
|
||||
// currentFolder = {...currentFolder._doc, parentName, folderName}
|
||||
// // Must Use ._doc here, or the destucturing/spreading
|
||||
// // Will add a bunch of unneeded variables to the object.
|
||||
|
||||
// return currentFolder;
|
||||
// }
|
||||
|
||||
// this.getFolderSublist = async(userID, folderID) => {
|
||||
|
||||
// const folder = await utilsFolder.getFolderInfo(folderID, userID);
|
||||
|
||||
// if (!folder) throw new NotFoundError("Folder Sublist Not Found Error");
|
||||
|
||||
// const subfolderList = folder.parentList;
|
||||
|
||||
// let folderIDList = [];
|
||||
// let folderNameList = [];
|
||||
|
||||
// for (let i = 0; i < subfolderList.length; i++) {
|
||||
|
||||
// const currentSubFolderID = subfolderList[i];
|
||||
|
||||
// if (currentSubFolderID === "/") {
|
||||
|
||||
// folderIDList.push("/");
|
||||
// folderNameList.push("Home")
|
||||
|
||||
// } else {
|
||||
|
||||
// const currentFolder = await utilsFolder.getFolderInfo(currentSubFolderID, userID);
|
||||
|
||||
// folderIDList.push(currentFolder._id);
|
||||
// folderNameList.push(currentFolder.name)
|
||||
// }
|
||||
// }
|
||||
|
||||
// folderIDList.push(folderID);
|
||||
// folderNameList.push(folder.name)
|
||||
|
||||
// return {
|
||||
// folderIDList,
|
||||
// folderNameList
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// this.getFolderList = async(userID, query) => {
|
||||
|
||||
// let searchQuery = query.search || "";
|
||||
// const parent = query.parent || "/";
|
||||
// let sortBy = query.sortby || "DEFAULT"
|
||||
// sortBy = sortBySwitch(sortBy)
|
||||
|
||||
// if (searchQuery.length === 0) {
|
||||
|
||||
// const folderList = await utilsFolder.getFolderListByParent(userID, parent, sortBy);
|
||||
|
||||
// if (!folderList) throw new NotFoundError("Folder List Not Found Error");
|
||||
|
||||
// return folderList;
|
||||
|
||||
// } else {
|
||||
|
||||
// searchQuery = new RegExp(searchQuery, 'i')
|
||||
// const folderList = await utilsFolder.getFolderListBySearch(userID, searchQuery, sortBy);
|
||||
|
||||
// if (!folderList) throw new NotFoundError("Folder List Not Found Error");
|
||||
|
||||
// return folderList;
|
||||
// }
|
||||
// }
|
||||
|
||||
// this.renameFolder = async(userID, folderID, title) => {
|
||||
|
||||
// const folder = await utilsFolder.renameFolder(folderID, userID, title);
|
||||
|
||||
// if (!folder) throw new NotFoundError("Rename Folder Not Found");
|
||||
// }
|
||||
|
||||
// this.moveFolder = async(userID, folderID, parentID) => {
|
||||
|
||||
// let parentList = ["/"];
|
||||
|
||||
// if (parentID.length !== 1) {
|
||||
|
||||
// const parentFile = await utilsFolder.getFolderInfo(parentID, userID);
|
||||
// parentList = parentFile.parentList;
|
||||
// parentList.push(parentID);
|
||||
// }
|
||||
|
||||
// const folder = await utilsFolder.moveFolder(folderID, userID, parentID, parentList);
|
||||
|
||||
// if (!folder) throw new NotFoundError("Move Folder Not Found")
|
||||
|
||||
// const folderChilden = await utilsFolder.findAllFoldersByParent(folderID.toString(), userID);
|
||||
|
||||
// folderChilden.map( async(currentFolderChild) => {
|
||||
|
||||
// let currentFolderChildParentList = currentFolderChild.parentList;
|
||||
|
||||
// const indexOfFolderID = currentFolderChildParentList.indexOf(folderID.toString());
|
||||
|
||||
// currentFolderChildParentList = currentFolderChildParentList.splice(indexOfFolderID);
|
||||
|
||||
// currentFolderChildParentList = [...parentList, ...currentFolderChildParentList];
|
||||
|
||||
// currentFolderChild.parentList = currentFolderChildParentList;
|
||||
|
||||
// await currentFolderChild.save()
|
||||
// })
|
||||
|
||||
// const fileChildren = await utilsFile.getFileListByParent(userID, folderID.toString());
|
||||
|
||||
// fileChildren.map( async(currentFileChild) => {
|
||||
|
||||
// let currentFileChildParentList = currentFileChild.metadata.parentList;
|
||||
|
||||
// currentFileChildParentList = currentFileChildParentList.split(",");
|
||||
|
||||
// const indexOfFolderID = currentFileChildParentList.indexOf(folderID.toString());
|
||||
|
||||
// currentFileChildParentList = currentFileChildParentList.splice(indexOfFolderID);
|
||||
|
||||
// currentFileChildParentList = [...parentList, ...currentFileChildParentList];
|
||||
|
||||
// await utilsFile.moveFile(currentFileChild._id, userID, currentFileChild.metadata.parent, currentFileChildParentList.toString())
|
||||
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
|
||||
export default FolderService;
|
||||
@@ -93,75 +93,4 @@ class UserService {
|
||||
|
||||
}
|
||||
|
||||
// const UserService = function() {
|
||||
|
||||
// this.login = async(userData) => {
|
||||
|
||||
// const email = userData.email;
|
||||
// const password = userData.password;
|
||||
|
||||
// const user = await User.findByCreds(email, password);
|
||||
|
||||
// const token = await user.generateAuthToken();
|
||||
|
||||
// if (!user || !token) throw new NotFoundError("Login User Not Found Error");
|
||||
|
||||
// return {user, token}
|
||||
// }
|
||||
|
||||
// this.logout = async(user, userToken) => {
|
||||
|
||||
// user.tokens = user.tokens.filter((token) => {
|
||||
// return token.token !== userToken;
|
||||
// })
|
||||
|
||||
// await user.save();
|
||||
// }
|
||||
|
||||
// this.logoutAll = async(user) => {
|
||||
|
||||
// user.tokens = []
|
||||
// user.tempTokens = [];
|
||||
|
||||
// await user.save();
|
||||
// }
|
||||
|
||||
// this.create = async(userData) => {
|
||||
|
||||
// console.log("Create");
|
||||
|
||||
// const user = new User(userData);
|
||||
// await user.save();
|
||||
|
||||
// await user.generateEncryptionKeys();
|
||||
|
||||
// const token = await user.generateAuthToken();
|
||||
|
||||
// if (!user || !token) throw new InternalServerError("Could Not Create New User Error");
|
||||
|
||||
// return {user, token}
|
||||
// }
|
||||
|
||||
// this.changePassword = async(user, oldPassword, newPassword) => {
|
||||
|
||||
// const isMatch = await bcrypt.compare(oldPassword, user.password);
|
||||
|
||||
// if (!isMatch) throw new NotAuthorizedError("Change Passwords Do Not Match Error");
|
||||
|
||||
// const encryptionKey = user.getEncryptionKey();
|
||||
|
||||
// user.password = newPassword;
|
||||
|
||||
// user.tokens = [];
|
||||
// user.tempTokens = [];
|
||||
|
||||
// await user.save();
|
||||
// await user.changeEncryptionKey(encryptionKey);
|
||||
|
||||
// const newToken = await user.generateAuthToken();
|
||||
|
||||
// return newToken;
|
||||
// }
|
||||
// }
|
||||
|
||||
export default UserService;
|
||||
Reference in New Issue
Block a user