From 34621029a7fca564ce9f5e0ad19ee4a9fe75ad48 Mon Sep 17 00:00:00 2001 From: vliu36 <116984041+vliu36@users.noreply.github.com> Date: Mon, 18 Nov 2024 17:39:45 -0800 Subject: [PATCH 1/4] added schemas and controller imports --- server/index.ts | 3 ++ server/src/app.js | 15 -------- server/src/controllers/index.js | 7 ---- server/src/controllers/note.controller.js | 24 ------------ server/src/controllers/noteController.ts | 2 + server/src/controllers/user.controller.js | 20 ---------- server/src/controllers/userController.ts | 2 + server/src/models/ImageSchema.ts | 14 +++++++ server/src/models/Images/image.model.js | 9 ----- server/src/models/NoteSchema.ts | 35 +++++++++++++++++ server/src/models/Notes/index.js | 7 ---- server/src/models/Notes/note.model.js | 13 ------- server/src/models/Notes/note.service.js | 3 -- server/src/models/README.md | 23 +++++++++++ server/src/models/Summary/summary.model.js | 9 ----- server/src/models/SummarySchema.ts | 14 +++++++ server/src/models/UserSchema.ts | 44 ++++++++++++++++++++++ server/src/models/Users/index.js | 7 ---- server/src/models/Users/user.model.js | 18 --------- server/src/models/Users/user.service.js | 3 -- server/src/models/index.js | 11 ------ server/src/routes/index.js | 7 ---- server/src/routes/note.routes.js | 18 --------- server/src/routes/user.routes.js | 15 -------- 24 files changed, 137 insertions(+), 186 deletions(-) create mode 100644 server/index.ts delete mode 100644 server/src/app.js delete mode 100644 server/src/controllers/index.js delete mode 100644 server/src/controllers/note.controller.js create mode 100644 server/src/controllers/noteController.ts delete mode 100644 server/src/controllers/user.controller.js create mode 100644 server/src/controllers/userController.ts create mode 100644 server/src/models/ImageSchema.ts delete mode 100644 server/src/models/Images/image.model.js create mode 100644 server/src/models/NoteSchema.ts delete mode 100644 server/src/models/Notes/index.js delete mode 100644 server/src/models/Notes/note.model.js delete mode 100644 server/src/models/Notes/note.service.js create mode 100644 server/src/models/README.md delete mode 100644 server/src/models/Summary/summary.model.js create mode 100644 server/src/models/SummarySchema.ts create mode 100644 server/src/models/UserSchema.ts delete mode 100644 server/src/models/Users/index.js delete mode 100644 server/src/models/Users/user.model.js delete mode 100644 server/src/models/Users/user.service.js delete mode 100644 server/src/models/index.js delete mode 100644 server/src/routes/index.js delete mode 100644 server/src/routes/note.routes.js delete mode 100644 server/src/routes/user.routes.js diff --git a/server/index.ts b/server/index.ts new file mode 100644 index 0000000..cb23a4e --- /dev/null +++ b/server/index.ts @@ -0,0 +1,3 @@ +// Connection string to db goes here +// Make sure to not publish the credentials, use env! + diff --git a/server/src/app.js b/server/src/app.js deleted file mode 100644 index 6f648cf..0000000 --- a/server/src/app.js +++ /dev/null @@ -1,15 +0,0 @@ -const express = require("express"); -const userRoutes = require("./routes/user.routes"); -const noteRoutes = require("./routes/note.routes"); - -const app = express(); - -app.use(express.json()); // Middleware for parsing JSON requests - -// Mount user routes -app.use("/api/user", userRoutes); - -// Mount note routes -app.use("/api/notes", noteRoutes); - -// ** TO DO: Start the server here (below) ** diff --git a/server/src/controllers/index.js b/server/src/controllers/index.js deleted file mode 100644 index b00a73d..0000000 --- a/server/src/controllers/index.js +++ /dev/null @@ -1,7 +0,0 @@ -const userController = require("./user.controller.js"); -const noteController = require("./note.controller.js"); - -module.exports = { - userController, - noteController, -}; diff --git a/server/src/controllers/note.controller.js b/server/src/controllers/note.controller.js deleted file mode 100644 index bc08d51..0000000 --- a/server/src/controllers/note.controller.js +++ /dev/null @@ -1,24 +0,0 @@ -// *** TO BE IMPLEMENTED *** -// This file is essentially the full implementation of the Note object's endpoints -// Don't forget to import functions defined in the note.service.js file if needed -// e.g. const { someFunction, someFunction2 } = require("../models/Notes/note.service"); - -exports.generateSummary = (req, res) => { - // Generate summary from image - // Return summary -}; - -exports.saveNote = (req, res) => { - // Save note to database - // Return success message -}; - -exports.getNotes = (req, res) => { - // Retrieve all notes for the user - // Return notes -}; - -exports.getNoteById = (req, res) => { - // Retrieve note by ID - // Return note -}; diff --git a/server/src/controllers/noteController.ts b/server/src/controllers/noteController.ts new file mode 100644 index 0000000..653e307 --- /dev/null +++ b/server/src/controllers/noteController.ts @@ -0,0 +1,2 @@ +import { Request, Response } from "express"; +import Note, { NoteInterface } from "../models/NoteSchema.ts"; diff --git a/server/src/controllers/user.controller.js b/server/src/controllers/user.controller.js deleted file mode 100644 index 2e56c7f..0000000 --- a/server/src/controllers/user.controller.js +++ /dev/null @@ -1,20 +0,0 @@ -// *** TO BE IMPLEMENTED *** -// This file is essentially the full implementation of the User object's endpoints -// Don't forget to import functions defined in the user.service.js file if needed -// e.g. const { someFunction, someFunction2 } = require("../models/Users/user.service"); - -exports.loginUser = (req, res) => { - // Log in user - // Return success message -}; - -// ** User creation will be done here, but its implementation should be done in user.service.js ** -exports.registerUser = (req, res) => { - // Register user - // Return success message -}; - -exports.forgotPassword = (req, res) => { - // Forgot password - // Return success message -}; diff --git a/server/src/controllers/userController.ts b/server/src/controllers/userController.ts new file mode 100644 index 0000000..79e7f45 --- /dev/null +++ b/server/src/controllers/userController.ts @@ -0,0 +1,2 @@ +import { Request, Response } from "express"; +import User, { UserInterface } from "../models/UserSchema.ts"; \ No newline at end of file diff --git a/server/src/models/ImageSchema.ts b/server/src/models/ImageSchema.ts new file mode 100644 index 0000000..2b862de --- /dev/null +++ b/server/src/models/ImageSchema.ts @@ -0,0 +1,14 @@ +import mongoose, { Schema, Document } from "mongoose"; + +export interface ImageInterface extends Document { + _id : mongoose.Types.ObjectId, + image : mongoose.Types.Buffer, +} + +const ImageSchema : Schema = new Schema({ + _id: Schema.Types.ObjectId, + image: Schema.Types.Buffer, +}); + +const Image = mongoose.model("Image", ImageSchema); +export default Image; \ No newline at end of file diff --git a/server/src/models/Images/image.model.js b/server/src/models/Images/image.model.js deleted file mode 100644 index c75a322..0000000 --- a/server/src/models/Images/image.model.js +++ /dev/null @@ -1,9 +0,0 @@ -const mongoose = require("mongoose"); -const { Schema } = mongoose; - -const ImageSchema = new Schema({ - objectID: { type: Schema.Types.ObjectId, auto: true }, - image: { type: Buffer, required: true }, // Store binary data -}); - -module.exports = mongoose.model("Image", ImageSchema); diff --git a/server/src/models/NoteSchema.ts b/server/src/models/NoteSchema.ts new file mode 100644 index 0000000..3e830c6 --- /dev/null +++ b/server/src/models/NoteSchema.ts @@ -0,0 +1,35 @@ +import mongoose, { Schema, Document } from "mongoose"; +import { ImageInterface } from "./ImageSchema"; +import { SummaryInterface } from "./SummarySchema"; + +export interface NoteInterface extends Document { + _id : mongoose.Types.ObjectId, + name : string, + image : mongoose.Types.ObjectId | ImageInterface, + pdf : mongoose.Types.ObjectId | SummaryInterface, + lastUpdated : Date, +} + +const NoteSchema : Schema = new Schema({ + _id: Schema.Types.ObjectId, + name: { + type: String, + default: new Date(Date.now()).toString(), + }, + image: { + type: Schema.Types.ObjectId, + ref: "Image", + }, + pdf: { + type: Schema.Types.ObjectId, + ref: "Summary", + }, + lastUpdated: { + type: Date, + default: Date.now(), + required: true, + }, +}); + +const Note = mongoose.model("Note", NoteSchema); +export default Note; \ No newline at end of file diff --git a/server/src/models/Notes/index.js b/server/src/models/Notes/index.js deleted file mode 100644 index 7eac530..0000000 --- a/server/src/models/Notes/index.js +++ /dev/null @@ -1,7 +0,0 @@ -const Note = require("./note.model"); -const noteService = require("./note.service"); - -module.exports = { - Note, - noteService, -}; diff --git a/server/src/models/Notes/note.model.js b/server/src/models/Notes/note.model.js deleted file mode 100644 index d1cacc2..0000000 --- a/server/src/models/Notes/note.model.js +++ /dev/null @@ -1,13 +0,0 @@ -const mongoose = require("mongoose"); -const { Schema } = mongoose; - -const NoteSchema = new Schema({ - objectID: { type: Schema.Types.ObjectId, auto: true }, - userID: { type: Schema.Types.ObjectId, ref: "User", required: true }, // Reference to UserSchema (ObjectId) - name: { type: String, required: true }, - image: { type: Schema.Types.ObjectId, ref: "Image" }, // Reference to ImageSchema (ObjectId) - pdf: { type: Schema.Types.ObjectId, ref: "Summary" }, // Reference to SummarySchema (ObjectId) - lastUpdated: { type: Date, default: Date.now }, -}); - -module.exports = mongoose.model("Note", NoteSchema); diff --git a/server/src/models/Notes/note.service.js b/server/src/models/Notes/note.service.js deleted file mode 100644 index 7a780ea..0000000 --- a/server/src/models/Notes/note.service.js +++ /dev/null @@ -1,3 +0,0 @@ -// *** TO BE IMPLEMENTED *** -// This file will handle operations related to the note model -// e.g., sorting, filtering, finding notes by id, etc. diff --git a/server/src/models/README.md b/server/src/models/README.md new file mode 100644 index 0000000..bf644ba --- /dev/null +++ b/server/src/models/README.md @@ -0,0 +1,23 @@ +# UserSchema: +uuid : string +creationDate : date +deletionDate : date / null +lastUpdated : date +email : string (add email pattern) +password : string (hashed) + +# NoteSchema: +objectID : objectId +userID : UserSchema +name : string +image : ImageSchema +pdf : SummarySchema +lastUpdated : date + +# ImageSchema: +objectID : objectId +image : binData ([GridFS for Self-Managed Deployments - MongoDB Manual](https://www.mongodb.com/docs/manual/core/gridfs/) or single document if under 16 MB) + +# SummarySchema: +objectID : objectId +pdf : binData ([GridFS for Self-Managed Deployments - MongoDB Manual](https://www.mongodb.com/docs/manual/core/gridfs/) or single document if under 16 MB) \ No newline at end of file diff --git a/server/src/models/Summary/summary.model.js b/server/src/models/Summary/summary.model.js deleted file mode 100644 index 116b084..0000000 --- a/server/src/models/Summary/summary.model.js +++ /dev/null @@ -1,9 +0,0 @@ -const mongoose = require("mongoose"); -const { Schema } = mongoose; - -const SummarySchema = new Schema({ - objectID: { type: Schema.Types.ObjectId, auto: true }, - pdf: { type: Buffer, required: true }, // Store binary data -}); - -module.exports = mongoose.model("Summary", SummarySchema); diff --git a/server/src/models/SummarySchema.ts b/server/src/models/SummarySchema.ts new file mode 100644 index 0000000..3c983f7 --- /dev/null +++ b/server/src/models/SummarySchema.ts @@ -0,0 +1,14 @@ +import mongoose, { Schema, Document } from "mongoose"; + +export interface SummaryInterface extends Document { + _id : mongoose.Types.ObjectId, + pdf : mongoose.Types.Buffer, +} + +const SummarySchema : Schema = new Schema({ + _id: Schema.Types.ObjectId, + image: Schema.Types.Buffer, +}) + +const Summary = mongoose.model("Summary", SummarySchema); +export default Summary; \ No newline at end of file diff --git a/server/src/models/UserSchema.ts b/server/src/models/UserSchema.ts new file mode 100644 index 0000000..035cb8f --- /dev/null +++ b/server/src/models/UserSchema.ts @@ -0,0 +1,44 @@ +import mongoose, { Schema, Document } from "mongoose"; + +export interface UserInterface extends Document { + uuid : mongoose.Types.UUID; + creationDate : Date; + deletionDate : Date | null; + lastUpdated : Date; + email : string; + password : string; +} + +const UserSchema : Schema = new Schema({ + uuid : { + type: Schema.Types.UUID, + unique: true, + required: true, + }, + creationDate: { + type: Date, + default: Date.now(), + }, + deletionDate: { + type: Date, + default: null, + }, + lastUpdated: { + type: Date, + default: Date.now(), + required: true, + }, + email: { + type: String, + unique: true, + required: true, + }, + password: { + type: String, + unique: true, + required: true, + }, +}); + +const User = mongoose.model("User", UserSchema); +export default User; \ No newline at end of file diff --git a/server/src/models/Users/index.js b/server/src/models/Users/index.js deleted file mode 100644 index 70b37c1..0000000 --- a/server/src/models/Users/index.js +++ /dev/null @@ -1,7 +0,0 @@ -const User = require("./user.model"); -const userService = require("./user.service"); - -module.exports = { - User, - userService, -}; diff --git a/server/src/models/Users/user.model.js b/server/src/models/Users/user.model.js deleted file mode 100644 index 621c095..0000000 --- a/server/src/models/Users/user.model.js +++ /dev/null @@ -1,18 +0,0 @@ -const mongoose = require("mongoose"); -const { Schema } = mongoose; - -const UserSchema = new Schema({ - uuid: { type: String, required: true, unique: true }, - creationDate: { type: Date, default: Date.now }, - deletionDate: { type: Date, default: null }, - lastUpdated: { type: Date, default: Date.now }, - email: { - type: String, - required: true, - unique: true, - match: /^\S+@\S+\.\S+$/, - }, - password: { type: String, required: true }, // Store hashed passwords -}); - -module.exports = mongoose.model("User", UserSchema); diff --git a/server/src/models/Users/user.service.js b/server/src/models/Users/user.service.js deleted file mode 100644 index b92c438..0000000 --- a/server/src/models/Users/user.service.js +++ /dev/null @@ -1,3 +0,0 @@ -// *** TO BE IMPLEMENTED *** -// This file will handle operations related to the user model -// e.g., sorting, filtering, finding users by id, etc. diff --git a/server/src/models/index.js b/server/src/models/index.js deleted file mode 100644 index 8e67f64..0000000 --- a/server/src/models/index.js +++ /dev/null @@ -1,11 +0,0 @@ -const User = require("./Users/user.model"); -const Note = require("./Notes/note.model"); -const Image = require("./Images/image.model"); -const Summary = require("./Summaries/summary.model"); - -module.exports = { - User, - Note, - Image, - Summary, -}; diff --git a/server/src/routes/index.js b/server/src/routes/index.js deleted file mode 100644 index 25e2a1b..0000000 --- a/server/src/routes/index.js +++ /dev/null @@ -1,7 +0,0 @@ -const userRoutes = require("./user.routes"); -const noteRoutes = require("./note.routes"); - -module.exports = { - userRoutes, - noteRoutes, -}; diff --git a/server/src/routes/note.routes.js b/server/src/routes/note.routes.js deleted file mode 100644 index 166977a..0000000 --- a/server/src/routes/note.routes.js +++ /dev/null @@ -1,18 +0,0 @@ -const express = require("express"); -const noteController = require("../controllers/note.controller"); - -const router = express.Router(); - -// Route to generate note summary from image -router.post("/summary", noteController.generateSummary); - -// Route to save edits of a generated summary -router.post("/save", noteController.saveNote); - -// Route to retrieve all generated notes for the user -router.get("/dashboard", noteController.getNotes); - -// Route to retrieve a specific note by ID -router.get("/dashboard/:id", noteController.getNoteById); - -module.exports = router; diff --git a/server/src/routes/user.routes.js b/server/src/routes/user.routes.js deleted file mode 100644 index 42e5560..0000000 --- a/server/src/routes/user.routes.js +++ /dev/null @@ -1,15 +0,0 @@ -const express = require("express"); -const userController = require("../controllers/user.controller"); - -const router = express.Router(); - -// Route for user login -router.post("/login", userController.loginUser); - -// Route for user registration -router.post("/register", userController.registerUser); - -// Route for handling forgotten password -router.post("/forgot-password", userController.forgotPassword); - -module.exports = router; From 526fd037a138ba3a5d83cc1e3fb093b3d5c6b7fe Mon Sep 17 00:00:00 2001 From: Vinson Liu <116984041+vliu36@users.noreply.github.com> Date: Mon, 18 Nov 2024 17:52:18 -0800 Subject: [PATCH 2/4] Update README.md --- server/src/models/README.md | 40 ++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/server/src/models/README.md b/server/src/models/README.md index bf644ba..7c6f027 100644 --- a/server/src/models/README.md +++ b/server/src/models/README.md @@ -1,23 +1,23 @@ -# UserSchema: -uuid : string -creationDate : date -deletionDate : date / null -lastUpdated : date -email : string (add email pattern) -password : string (hashed) +### UserSchema: +uuid : string
+creationDate : date
+deletionDate : date / null
+lastUpdated : date
+email : string (add email pattern)
+password : string (hashed)
-# NoteSchema: -objectID : objectId -userID : UserSchema -name : string -image : ImageSchema -pdf : SummarySchema -lastUpdated : date +### NoteSchema: +objectID : objectId
+userID : UserSchema
+name : string
+image : ImageSchema
+pdf : SummarySchema
+lastUpdated : date
-# ImageSchema: -objectID : objectId -image : binData ([GridFS for Self-Managed Deployments - MongoDB Manual](https://www.mongodb.com/docs/manual/core/gridfs/) or single document if under 16 MB) +### ImageSchema: +objectID : objectId
+image : binData ([GridFS for Self-Managed Deployments - MongoDB Manual](https://www.mongodb.com/docs/manual/core/gridfs/) or single document if under 16 MB)
-# SummarySchema: -objectID : objectId -pdf : binData ([GridFS for Self-Managed Deployments - MongoDB Manual](https://www.mongodb.com/docs/manual/core/gridfs/) or single document if under 16 MB) \ No newline at end of file +### SummarySchema: +objectID : objectId
+pdf : binData ([GridFS for Self-Managed Deployments - MongoDB Manual](https://www.mongodb.com/docs/manual/core/gridfs/) or single document if under 16 MB)
From 900840b4b5090df82653cc3e740b9fe68733b852 Mon Sep 17 00:00:00 2001 From: vliu36 <116984041+vliu36@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:12:54 -0800 Subject: [PATCH 3/4] added interface call --- server/src/models/ImageSchema.ts | 4 ++-- server/src/models/NoteSchema.ts | 4 ++-- server/src/models/SummarySchema.ts | 6 +++--- server/src/models/UserSchema.ts | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/server/src/models/ImageSchema.ts b/server/src/models/ImageSchema.ts index 2b862de..d6b8fb9 100644 --- a/server/src/models/ImageSchema.ts +++ b/server/src/models/ImageSchema.ts @@ -5,10 +5,10 @@ export interface ImageInterface extends Document { image : mongoose.Types.Buffer, } -const ImageSchema : Schema = new Schema({ +const ImageSchema : Schema = new Schema({ _id: Schema.Types.ObjectId, image: Schema.Types.Buffer, }); -const Image = mongoose.model("Image", ImageSchema); +const Image = mongoose.model("Image", ImageSchema); export default Image; \ No newline at end of file diff --git a/server/src/models/NoteSchema.ts b/server/src/models/NoteSchema.ts index 3e830c6..ea99dd5 100644 --- a/server/src/models/NoteSchema.ts +++ b/server/src/models/NoteSchema.ts @@ -10,7 +10,7 @@ export interface NoteInterface extends Document { lastUpdated : Date, } -const NoteSchema : Schema = new Schema({ +const NoteSchema : Schema = new Schema({ _id: Schema.Types.ObjectId, name: { type: String, @@ -31,5 +31,5 @@ const NoteSchema : Schema = new Schema({ }, }); -const Note = mongoose.model("Note", NoteSchema); +const Note = mongoose.model("Note", NoteSchema); export default Note; \ No newline at end of file diff --git a/server/src/models/SummarySchema.ts b/server/src/models/SummarySchema.ts index 3c983f7..486dd30 100644 --- a/server/src/models/SummarySchema.ts +++ b/server/src/models/SummarySchema.ts @@ -5,10 +5,10 @@ export interface SummaryInterface extends Document { pdf : mongoose.Types.Buffer, } -const SummarySchema : Schema = new Schema({ +const SummarySchema : Schema = new Schema({ _id: Schema.Types.ObjectId, - image: Schema.Types.Buffer, + pdf: Schema.Types.Buffer, }) -const Summary = mongoose.model("Summary", SummarySchema); +const Summary = mongoose.model("Summary", SummarySchema); export default Summary; \ No newline at end of file diff --git a/server/src/models/UserSchema.ts b/server/src/models/UserSchema.ts index 035cb8f..ae86915 100644 --- a/server/src/models/UserSchema.ts +++ b/server/src/models/UserSchema.ts @@ -9,7 +9,7 @@ export interface UserInterface extends Document { password : string; } -const UserSchema : Schema = new Schema({ +const UserSchema : Schema = new Schema({ uuid : { type: Schema.Types.UUID, unique: true, @@ -40,5 +40,5 @@ const UserSchema : Schema = new Schema({ }, }); -const User = mongoose.model("User", UserSchema); +const User = mongoose.model("User", UserSchema); export default User; \ No newline at end of file From 9de1eddbc032b5dbaef6119aff5ae6921c63a1fa Mon Sep 17 00:00:00 2001 From: vliu36 <116984041+vliu36@users.noreply.github.com> Date: Tue, 19 Nov 2024 13:12:45 -0800 Subject: [PATCH 4/4] added backend documentation readme --- server/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 server/README.md diff --git a/server/README.md b/server/README.md new file mode 100644 index 0000000..66ec9af --- /dev/null +++ b/server/README.md @@ -0,0 +1 @@ +# BACKEND