mirror of
https://gitea.smigz.com/smiggiddy/odin-codeprojects.git
synced 2025-06-27 11:20:40 -04:00
added logic for parent/child dirs
no styling, but displaying the basic results in the DOM
This commit is contained in:
parent
eedab606f8
commit
1c5e2d1055
10 changed files with 123 additions and 44 deletions
|
@ -5,8 +5,9 @@
|
||||||
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
|
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
|
||||||
|
|
||||||
generator client {
|
generator client {
|
||||||
provider = "prisma-client-js"
|
provider = "prisma-client-js"
|
||||||
output = "../node_modules/.prisma/client"
|
previewFeatures = ["relationJoins"]
|
||||||
|
output = "../node_modules/.prisma/client"
|
||||||
}
|
}
|
||||||
|
|
||||||
datasource db {
|
datasource db {
|
||||||
|
@ -45,7 +46,7 @@ model Folder {
|
||||||
owner User? @relation(fields: [owner_user_id], references: [id])
|
owner User? @relation(fields: [owner_user_id], references: [id])
|
||||||
owner_user_id Int?
|
owner_user_id Int?
|
||||||
parentId Int?
|
parentId Int?
|
||||||
parent Folder? @relation("ParentDirectory", fields: [parentId], references: [id])
|
parent Folder? @relation("ParentDirectory", fields: [parentId], references: [id])
|
||||||
Directories Folder[] @relation("ParentDirectory")
|
Directories Folder[] @relation("ParentDirectory")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,34 +1,26 @@
|
||||||
const multer = require('multer');
|
const multer = require('multer');
|
||||||
const Db = require('../models/db');
|
const Db = require('../models/db');
|
||||||
|
const {
|
||||||
|
mkDirectory,
|
||||||
|
getDirectoryContents,
|
||||||
|
} = require('../services/fileService');
|
||||||
const upload = multer({ dest: '/tmp/testing/' });
|
const upload = multer({ dest: '/tmp/testing/' });
|
||||||
|
|
||||||
const db = new Db();
|
const db = new Db();
|
||||||
//
|
|
||||||
// const createUserRootDir = async () => {
|
|
||||||
// const user = await db.auth.getUserByUsername(username);
|
|
||||||
// console.log(`USERID: ${user.id}`);
|
|
||||||
// const dir = await db.file.createDirectory(user, 'root');
|
|
||||||
// if (dir.error) {
|
|
||||||
// console.log(dir.error);
|
|
||||||
// } else {
|
|
||||||
// console.log(dir.message);
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
|
|
||||||
const createDirectory = async (req, res) => {
|
const createDirectory = async (req, res) => {
|
||||||
const { parentId, 'directory-name': directoryName } = req.body;
|
const { parentId, 'directory-name': directoryName } = req.body;
|
||||||
|
const referer = req.get('referer');
|
||||||
|
const result = await mkDirectory(directoryName, req.user, Number(parentId));
|
||||||
|
|
||||||
const result = await db.file.createDirectory(
|
if (referer && result) {
|
||||||
req.user,
|
res.redirect(referer);
|
||||||
directoryName,
|
} else {
|
||||||
Number(parentId),
|
res.redirect('/');
|
||||||
);
|
}
|
||||||
|
|
||||||
res.redirect('/');
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const fileUpload = async (req, res) => {
|
const fileUpload = async (req, res) => {
|
||||||
console.log(req.file);
|
|
||||||
const { folderId } = req.body;
|
const { folderId } = req.body;
|
||||||
const file = {
|
const file = {
|
||||||
name: req.file.originalname,
|
name: req.file.originalname,
|
||||||
|
@ -38,7 +30,6 @@ const fileUpload = async (req, res) => {
|
||||||
mimetype: req.file.mimetype,
|
mimetype: req.file.mimetype,
|
||||||
size: req.file.size,
|
size: req.file.size,
|
||||||
};
|
};
|
||||||
console.log(file, req.user);
|
|
||||||
try {
|
try {
|
||||||
const result = await db.file.createFile(req.user.id, file);
|
const result = await db.file.createFile(req.user.id, file);
|
||||||
console.log(result);
|
console.log(result);
|
||||||
|
@ -49,10 +40,23 @@ const fileUpload = async (req, res) => {
|
||||||
res.redirect('/');
|
res.redirect('/');
|
||||||
};
|
};
|
||||||
|
|
||||||
const userDirs = (req, res) => {
|
const directoryContents = async (req, res) => {
|
||||||
if (req.user) {
|
if (!req.user) return res.redirect('/');
|
||||||
// logic to grab the current dir based on path maybe
|
|
||||||
// logic to grab all user dirs?
|
const { directoryId } = req.query;
|
||||||
|
const { id } = req.user;
|
||||||
|
const directoryListing = await getDirectoryContents(
|
||||||
|
Number(directoryId),
|
||||||
|
id,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (directoryListing) {
|
||||||
|
res.render('partials/directoryListing', {
|
||||||
|
directoryListing: directoryListing,
|
||||||
|
pageTitle: `FileUpload - ${directoryListing.name}`,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
res.redirect('/');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -62,4 +66,4 @@ const getFiles = (req, res) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = { createDirectory, upload, fileUpload };
|
module.exports = { createDirectory, upload, fileUpload, directoryContents };
|
||||||
|
|
|
@ -1,17 +1,32 @@
|
||||||
const Db = require('../models/db');
|
const { getDirectoryContents } = require('../services/fileService');
|
||||||
|
|
||||||
const db = new Db();
|
|
||||||
const indexGet = async (req, res) => {
|
const indexGet = async (req, res) => {
|
||||||
// const data = await db.allUsers()
|
|
||||||
// console.dir(data)
|
|
||||||
if (req.user) {
|
if (req.user) {
|
||||||
const id = await db.file.getUserRootDirectoryId(req.user.id);
|
// res.render('main', {
|
||||||
if (id === null) console.log('id is null');
|
// pageTitle: 'FileUpload',
|
||||||
console.log(id);
|
// folder: { id: req.user.rootDirectoryId },
|
||||||
res.render('main', { pageTitle: 'FileUpload', folder: { id: id } });
|
// });
|
||||||
|
|
||||||
|
res.redirect(`/${req.user.username}/${req.user.rootDirectoryId}`);
|
||||||
|
// if unauthenticated
|
||||||
} else {
|
} else {
|
||||||
res.render('main', { pageTitle: 'FileUpload', folder: {} });
|
res.render('main', { pageTitle: 'FileUpload', folder: {} });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = { indexGet };
|
const userDirectoryNavigation = async (req, res) => {
|
||||||
|
const { username, directoryId } = req.params;
|
||||||
|
if (username !== req.user.username) res.redirect('/');
|
||||||
|
|
||||||
|
const dirContents = await getDirectoryContents(directoryId, req.user.id);
|
||||||
|
|
||||||
|
if (!dirContents) res.redirect('/');
|
||||||
|
|
||||||
|
res.render('main', {
|
||||||
|
pageTitle: 'FileUpload - Dashboard',
|
||||||
|
folder: { id: directoryId },
|
||||||
|
directoryListing: dirContents,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = { indexGet, userDirectoryNavigation };
|
||||||
|
|
|
@ -25,9 +25,9 @@ passport.use(
|
||||||
|
|
||||||
// ensure users root directory has been created
|
// ensure users root directory has been created
|
||||||
const rootDirId = await db.file.getUserRootDirectoryId(user.id);
|
const rootDirId = await db.file.getUserRootDirectoryId(user.id);
|
||||||
console.log(rootDirId);
|
|
||||||
if (rootDirId === null)
|
if (rootDirId === null)
|
||||||
await db.file.createDirectory(user, 'root', null);
|
await db.file.createDirectory(user, 'root', null);
|
||||||
|
|
||||||
return done(null, user);
|
return done(null, user);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return done(err);
|
return done(err);
|
||||||
|
@ -42,6 +42,8 @@ passport.serializeUser((user, done) => {
|
||||||
passport.deserializeUser(async (id, done) => {
|
passport.deserializeUser(async (id, done) => {
|
||||||
try {
|
try {
|
||||||
const user = await db.auth.getUserById(id);
|
const user = await db.auth.getUserById(id);
|
||||||
|
const rootDirId = await db.file.getUserRootDirectoryId(user.id);
|
||||||
|
user.rootDirectoryId = rootDirId;
|
||||||
done(null, user);
|
done(null, user);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
done(err);
|
done(err);
|
||||||
|
|
|
@ -21,7 +21,7 @@ class File {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getDirectoryIdByName(dirId, userId) {
|
async getDirectoryIdByName(dirId) {
|
||||||
try {
|
try {
|
||||||
await this.prisma.folder.findUnique({
|
await this.prisma.folder.findUnique({
|
||||||
where: {
|
where: {
|
||||||
|
@ -54,6 +54,26 @@ class File {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getDirectoryContents(directoryId, ownerId) {
|
||||||
|
try {
|
||||||
|
const contents = await this.prisma.folder.findFirst({
|
||||||
|
relationLoadStrategy: 'join',
|
||||||
|
include: {
|
||||||
|
File: true,
|
||||||
|
Directories: true,
|
||||||
|
},
|
||||||
|
where: {
|
||||||
|
id: directoryId,
|
||||||
|
owner_user_id: ownerId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return contents;
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
return { error: e };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async getDirectoriesByUser() {}
|
async getDirectoriesByUser() {}
|
||||||
|
|
||||||
async createFile(userId, file) {
|
async createFile(userId, file) {
|
||||||
|
|
|
@ -9,5 +9,6 @@ fileRouter.post(
|
||||||
fileController.fileUpload,
|
fileController.fileUpload,
|
||||||
);
|
);
|
||||||
fileRouter.post('/directory', fileController.createDirectory);
|
fileRouter.post('/directory', fileController.createDirectory);
|
||||||
|
fileRouter.get('/directory', fileController.directoryContents);
|
||||||
|
|
||||||
module.exports = fileRouter;
|
module.exports = fileRouter;
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
const { Router } = require("express")
|
const { Router } = require('express');
|
||||||
const indexController = require("../controllers/indexController")
|
const indexController = require('../controllers/indexController');
|
||||||
|
|
||||||
indexRouter = Router()
|
indexRouter = Router();
|
||||||
indexRouter.get("/", indexController.indexGet)
|
indexRouter.get('/', indexController.indexGet);
|
||||||
|
indexRouter.get(
|
||||||
|
'/:username/:directoryId',
|
||||||
|
indexController.userDirectoryNavigation,
|
||||||
|
);
|
||||||
|
|
||||||
|
module.exports = indexRouter;
|
||||||
|
|
||||||
module.exports = indexRouter
|
|
17
file-uploader/src/services/fileService.js
Normal file
17
file-uploader/src/services/fileService.js
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
const Db = require('../models/db');
|
||||||
|
|
||||||
|
const db = new Db();
|
||||||
|
|
||||||
|
async function getDirectoryContents(directoryId, userId) {
|
||||||
|
return await db.file.getDirectoryContents(Number(directoryId), userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function mkDirectory(directoryName, user, parentDirectoryId) {
|
||||||
|
return await db.file.createDirectory(
|
||||||
|
user,
|
||||||
|
directoryName,
|
||||||
|
Number(parentDirectoryId),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { mkDirectory, getDirectoryContents };
|
|
@ -14,5 +14,7 @@
|
||||||
<a href="/auth/register">Click here to register</a>
|
<a href="/auth/register">Click here to register</a>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
||||||
<% } %>
|
<% } %>
|
||||||
|
<%- include('partials/directoryListing') %>
|
||||||
<%- include('partials/footer') %>
|
<%- include('partials/footer') %>
|
||||||
|
|
13
file-uploader/src/views/partials/directoryListing.ejs
Normal file
13
file-uploader/src/views/partials/directoryListing.ejs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<div class="container">
|
||||||
|
<h1> <%= directoryListing.name %> </h1>
|
||||||
|
<h2> Folders</h2>
|
||||||
|
<ul>
|
||||||
|
<% directoryListing.Directories.forEach(d => { %>
|
||||||
|
<li><a href="/<%= currentUser.username %>/<%= d.id %>"> <%= d.name %> </a></li>
|
||||||
|
<% }); %>
|
||||||
|
</ul>
|
||||||
|
<h2> Files: </h2>
|
||||||
|
<% directoryListing.File.forEach(f => { %>
|
||||||
|
<p> <%= f.name %> </p>
|
||||||
|
<% }); %>
|
||||||
|
</div>
|
Loading…
Add table
Add a link
Reference in a new issue