initial commit

This commit is contained in:
smig 2025-04-05 14:05:39 -04:00
parent 5c09c5a22f
commit e89fb616e7
14 changed files with 1977 additions and 0 deletions

3
file-uploader/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
node_modules
# Keep environment variables out of version control
.env

1718
file-uploader/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,23 @@
{
"name": "file-uploader",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"@prisma/client": "^6.5.0",
"ejs": "^3.1.10",
"express": "^5.1.0",
"express-session": "^1.18.1",
"express-validator": "^7.2.1",
"passport": "^0.7.0"
},
"devDependencies": {
"prisma": "^6.5.0"
}
}

View file

@ -0,0 +1,41 @@
-- CreateTable
CREATE TABLE "User" (
"id" SERIAL NOT NULL,
"username" VARCHAR(50) NOT NULL,
"email" TEXT NOT NULL,
"password" TEXT NOT NULL,
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "File" (
"id" SERIAL NOT NULL,
"name" VARCHAR(255) NOT NULL,
"url" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"ownerId" INTEGER,
"folderId" INTEGER,
CONSTRAINT "File_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Folder" (
"id" SERIAL NOT NULL,
"name" VARCHAR(255) NOT NULL,
CONSTRAINT "Folder_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
-- AddForeignKey
ALTER TABLE "File" ADD CONSTRAINT "File_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "File" ADD CONSTRAINT "File_folderId_fkey" FOREIGN KEY ("folderId") REFERENCES "Folder"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View file

@ -0,0 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (e.g., Git)
provider = "postgresql"

View file

@ -0,0 +1,40 @@
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
generator client {
provider = "prisma-client-js"
output = "../node_modules/.prisma/client"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
username String @unique @db.VarChar(50)
email String @unique
password String
files File[]
}
model File {
id Int @id @default(autoincrement())
name String @db.VarChar(255)
url String
createdAt DateTime @default(now())
owner User? @relation(fields: [ownerId], references: [id])
ownerId Int?
folder Folder? @relation(fields: [folderId], references: [id])
folderId Int?
}
model Folder {
id Int @id @default(autoincrement())
name String @db.VarChar(255)
File File[]
}

View file

@ -0,0 +1,19 @@
const db = require("../models/auth")
const loginGet = (req, res, next) => {
res.send("Login Route")
}
const registerGet = (req, res) => {
res.render("register")
}
const registerPost = async (req, res, next) => {
const { username, email, password, "password-confirmation": passwordConfirmation } = req.body;
await db.createUser({ username: username, password: password, email: email })
res.redirect("/")
}
module.exports = { loginGet, registerPost, registerGet }

View file

@ -0,0 +1,8 @@
const db = require("../models/auth")
const indexGet = async (req, res) => {
const data = await db.allUsers()
console.dir(data)
res.render("main")
}
module.exports = { indexGet }

View file

@ -0,0 +1,23 @@
const express = require("express");
const session = require("express-session")
const passport = require("passport")
const path = require("node:path");
const port = process.env.APP_PORT || 3000;
const app = express();
const authRouter = require("./routes/authRouter")
const indexRouter = require("./routes/indexRouter")
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");
app.use(express.urlencoded({ extended: false }))
app.use("/", indexRouter);
app.use("/auth", authRouter);
app.listen(port, () => {
console.log(`App listening on ${port}`);
});

View file

@ -0,0 +1,35 @@
const { PrismaClient } = require("@prisma/client");
// const { Prisma } = require("prisma");
const primsa = new PrismaClient()
// async function main() {
// const allUsers = await primsa.user.findMany()
// console.log(allUsers)
// }
// main()
// .then(async () => {
// await primsa.$disconnect()
// })
// .catch(async (e) => {
// console.error(e)
// await primsa.$disconnect()
// process.exit(1)
// })
async function createUser(user) {
await primsa.user.create({
data: {
username: user.username,
email: user?.email,
password: user.password
}
})
}
async function allUsers() {
return await primsa.user.findMany()
}
module.exports = { createUser, allUsers }

View file

@ -0,0 +1,11 @@
const { Router } = require("express");
const authController = require("../controllers/authController")
const authRouter = Router();
authRouter.get("/login", authController.loginGet)
authRouter.get("/register", authController.registerGet)
authRouter.post("/register", authController.registerPost)
module.exports = authRouter;

View file

@ -0,0 +1,8 @@
const { Router } = require("express")
const indexController = require("../controllers/indexController")
indexRouter = Router()
indexRouter.get("/", indexController.indexGet)
module.exports = indexRouter

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="/auth/login" method="post">
<label for="username">Username</label>
<input type="text" name="username">
<label for="password">Password</label>
<input type="password" name="password" id="password">
<button type="submit">Submit</button>
<a href="/auth/register">Click here to register</a>
</form>
</body>
</html>

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="/auth/register" method="post">
<label for="username">Username</label>
<input type="text" name="username">
<label for="password">Password</label>
<input type="password" name="password" id="password">
<label for="password-confirmation">Password Confirmation</label>
<input type="password-confirmation" name="password-confirmation" id="password-confirmation">
<label for="email">Email</label>
<input type="email" name="email" id="email">
<button type="submit">Submit</button>
</form>
</body>
</html>