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
|
@ -6,6 +6,7 @@
|
|||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
previewFeatures = ["relationJoins"]
|
||||
output = "../node_modules/.prisma/client"
|
||||
}
|
||||
|
||||
|
|
|
@ -1,34 +1,26 @@
|
|||
const multer = require('multer');
|
||||
const Db = require('../models/db');
|
||||
const {
|
||||
mkDirectory,
|
||||
getDirectoryContents,
|
||||
} = require('../services/fileService');
|
||||
const upload = multer({ dest: '/tmp/testing/' });
|
||||
|
||||
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 { 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(
|
||||
req.user,
|
||||
directoryName,
|
||||
Number(parentId),
|
||||
);
|
||||
|
||||
if (referer && result) {
|
||||
res.redirect(referer);
|
||||
} else {
|
||||
res.redirect('/');
|
||||
}
|
||||
};
|
||||
|
||||
const fileUpload = async (req, res) => {
|
||||
console.log(req.file);
|
||||
const { folderId } = req.body;
|
||||
const file = {
|
||||
name: req.file.originalname,
|
||||
|
@ -38,7 +30,6 @@ const fileUpload = async (req, res) => {
|
|||
mimetype: req.file.mimetype,
|
||||
size: req.file.size,
|
||||
};
|
||||
console.log(file, req.user);
|
||||
try {
|
||||
const result = await db.file.createFile(req.user.id, file);
|
||||
console.log(result);
|
||||
|
@ -49,10 +40,23 @@ const fileUpload = async (req, res) => {
|
|||
res.redirect('/');
|
||||
};
|
||||
|
||||
const userDirs = (req, res) => {
|
||||
if (req.user) {
|
||||
// logic to grab the current dir based on path maybe
|
||||
// logic to grab all user dirs?
|
||||
const directoryContents = async (req, res) => {
|
||||
if (!req.user) return res.redirect('/');
|
||||
|
||||
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 data = await db.allUsers()
|
||||
// console.dir(data)
|
||||
if (req.user) {
|
||||
const id = await db.file.getUserRootDirectoryId(req.user.id);
|
||||
if (id === null) console.log('id is null');
|
||||
console.log(id);
|
||||
res.render('main', { pageTitle: 'FileUpload', folder: { id: id } });
|
||||
// res.render('main', {
|
||||
// pageTitle: 'FileUpload',
|
||||
// folder: { id: req.user.rootDirectoryId },
|
||||
// });
|
||||
|
||||
res.redirect(`/${req.user.username}/${req.user.rootDirectoryId}`);
|
||||
// if unauthenticated
|
||||
} else {
|
||||
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
|
||||
const rootDirId = await db.file.getUserRootDirectoryId(user.id);
|
||||
console.log(rootDirId);
|
||||
if (rootDirId === null)
|
||||
await db.file.createDirectory(user, 'root', null);
|
||||
|
||||
return done(null, user);
|
||||
} catch (err) {
|
||||
return done(err);
|
||||
|
@ -42,6 +42,8 @@ passport.serializeUser((user, done) => {
|
|||
passport.deserializeUser(async (id, done) => {
|
||||
try {
|
||||
const user = await db.auth.getUserById(id);
|
||||
const rootDirId = await db.file.getUserRootDirectoryId(user.id);
|
||||
user.rootDirectoryId = rootDirId;
|
||||
done(null, user);
|
||||
} catch (err) {
|
||||
done(err);
|
||||
|
|
|
@ -21,7 +21,7 @@ class File {
|
|||
}
|
||||
}
|
||||
|
||||
async getDirectoryIdByName(dirId, userId) {
|
||||
async getDirectoryIdByName(dirId) {
|
||||
try {
|
||||
await this.prisma.folder.findUnique({
|
||||
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 createFile(userId, file) {
|
||||
|
|
|
@ -9,5 +9,6 @@ fileRouter.post(
|
|||
fileController.fileUpload,
|
||||
);
|
||||
fileRouter.post('/directory', fileController.createDirectory);
|
||||
fileRouter.get('/directory', fileController.directoryContents);
|
||||
|
||||
module.exports = fileRouter;
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
const { Router } = require("express")
|
||||
const indexController = require("../controllers/indexController")
|
||||
const { Router } = require('express');
|
||||
const indexController = require('../controllers/indexController');
|
||||
|
||||
indexRouter = Router()
|
||||
indexRouter.get("/", indexController.indexGet)
|
||||
indexRouter = Router();
|
||||
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>
|
||||
</form>
|
||||
|
||||
|
||||
<% } %>
|
||||
<%- include('partials/directoryListing') %>
|
||||
<%- 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