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:
subnub
2020-04-30 19:17:59 -04:00
parent 1fb0b350ca
commit ee7f5f42d6
11 changed files with 289 additions and 1730 deletions
+18 -97
View File
@@ -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()
-593
View File
@@ -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;
-589
View File
@@ -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;
+12 -4
View File
@@ -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;
+15 -6
View File
@@ -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()
+26 -2
View File
@@ -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;
-368
View File
@@ -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;
-71
View File
@@ -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;