diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 201f818..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.vscode
-.DS_Store
-*/node_modules/
-*.env
-/express-auth-template/config/serviceAccountKey.json
-
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..03d9549
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..3c571d1
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/ndc-backend.iml b/.idea/ndc-backend.iml
new file mode 100644
index 0000000..24643cc
--- /dev/null
+++ b/.idea/ndc-backend.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 9a44bdf..144c00b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,8 +14,9 @@
"express": "^4.18.2",
"firebase-admin": "^11.2.0",
"helmet": "^7.0.0",
+ "i": "^0.3.7",
"mongodb": "^6.2.0",
- "mongoose": "^7.6.3",
+ "mongoose": "^7.6.4",
"morgan": "^1.10.0"
},
"devDependencies": {
@@ -5029,6 +5030,14 @@
"node": ">=10.17.0"
}
},
+ "node_modules/i": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz",
+ "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -6867,9 +6876,9 @@
}
},
"node_modules/mongoose": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.3.tgz",
- "integrity": "sha512-moYP2qWCOdWRDeBxqB/zYwQmQnTBsF5DoolX5uPyI218BkiA1ujGY27P0NTd4oWIX+LLkZPw0LDzlc/7oh1plg==",
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.4.tgz",
+ "integrity": "sha512-kadPkS/f5iZJrrMxxOvSoOAErXmdnb28lMvHmuYgmV1ZQTpRqpp132PIPHkJMbG4OC2H0eSXYw/fNzYTH+LUcw==",
"dependencies": {
"bson": "^5.5.0",
"kareem": "2.5.1",
diff --git a/package.json b/package.json
deleted file mode 100644
index 84353b1..0000000
--- a/package.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "express-ts-template",
- "version": "1.0.0",
- "description": " A basic starter for an express.js with Typescript",
- "main": "src/index.ts",
- "scripts": {
- "start": "nodemon src/index.ts",
- "build": "tsc",
- "lint": "eslint --ext .ts . --fix",
- "test": "jest",
- "typecheck": "tsc --noEmit"
- },
- "keywords": [],
- "license": "MIT",
- "dependencies": {
- "cors": "^2.8.5",
- "dotenv": "^16.3.1",
- "express": "^4.18.2",
- "firebase-admin": "^11.2.0",
- "helmet": "^7.0.0",
- "mongodb": "^6.2.0",
- "mongoose": "^7.6.3",
- "morgan": "^1.10.0"
- },
- "devDependencies": {
- "@types/cors": "^2.8.13",
- "@types/express": "^4.17.17",
- "@types/morgan": "^1.9.4",
- "@types/node": "^20.2.5",
- "@typescript-eslint/eslint-plugin": "^6.7.4",
- "@typescript-eslint/parser": "^6.7.4",
- "eslint": "^8.50.0",
- "eslint-config-prettier": "^9.0.0",
- "eslint-config-standard": "^17.1.0",
- "eslint-plugin-import": "^2.28.1",
- "eslint-plugin-n": "^16.1.0",
- "eslint-plugin-prettier": "^5.0.0",
- "eslint-plugin-promise": "^6.1.1",
- "nodemon": "^3.0.1",
- "prettier": "^3.0.3",
- "ts-jest": "^29.1.0",
- "ts-node": "^10.9.1",
- "typescript": "<5.1.0"
- }
-}
diff --git a/src/controllers/orders.controllers.ts b/src/controllers/orders.controllers.ts
new file mode 100644
index 0000000..dc49c72
--- /dev/null
+++ b/src/controllers/orders.controllers.ts
@@ -0,0 +1,46 @@
+import {Request, Response} from 'express';
+const Order = require("../models/Order.ts");
+
+const createOrder = async (req:Request, res:Response) => {
+ try {
+ const { numDiapers } = req.body;
+ if (!numDiapers) {
+ return res.status(400).send("Invalid Order query");
+ }
+ const newOrder = await Order.create(numDiapers);
+ await newOrder.save();
+ return res.status(200).json(newOrder);
+ } catch (err:any) {
+ console.error(err.message);
+ return res.status(500).send({message: err.message});
+ }
+}
+
+const getOrder = async (req:Request, res:Response) => {
+ try {
+ const { orderId, partnerId, status } = req.body;
+
+ let allOrders = null;
+ if (orderId) {
+ allOrders = await Order.find({id: orderId});
+ } else if (partnerId && status) {
+ allOrders = await Order.find({partner: partnerId, status: status});
+ } else if (partnerId) {
+ allOrders = await Order.find({partner: partnerId});
+ } else if (status) {
+ allOrders = await Order.find({status: status});
+ } else {
+ return res.status(400).send("Invalid search query");
+ }
+
+ return res.status(200).json(allOrders);
+ } catch (err:any) {
+ console.error(err.message);
+ return res.status(500).send({message: err.message});
+ }
+}
+
+module.exports = {
+ createOrder,
+ getOrder,
+};
\ No newline at end of file
diff --git a/src/controllers/partnersControllers.ts b/src/controllers/partnersControllers.ts
new file mode 100644
index 0000000..900900c
--- /dev/null
+++ b/src/controllers/partnersControllers.ts
@@ -0,0 +1,128 @@
+import { ObjectId } from "mongodb";
+import Partner from "../models/Partner";
+
+import { type Request, type Response } from "express";
+
+const createPartner = async (req: Request, res: Response) => {
+ try {
+ const {
+ orders,
+ firstName,
+ lastName,
+ type,
+ phoneNumber,
+ email,
+ dateJoined,
+ numOrdersMonth,
+ numOrdersYTD,
+ numOrdersTotal,
+ location,
+ address,
+ deliveryInstructions,
+ } = req.body;
+
+ if (
+ !(
+ orders &&
+ firstName &&
+ lastName &&
+ type &&
+ phoneNumber &&
+ email &&
+ dateJoined &&
+ numOrdersMonth &&
+ numOrdersYTD &&
+ numOrdersTotal &&
+ location &&
+ address &&
+ deliveryInstructions
+ )
+ ) {
+ return res.status(400).send({ message: "Missing Required Field" });
+ }
+
+ const databaseId = await Partner.find()
+ .sort({ id: -1 })
+ .limit(1)
+ .then((docs: any) => {
+ return docs[0].get("id");
+ })
+ .catch((err: any) => {
+ console.log(err);
+ });
+
+ const newPartner = new Partner({
+ ...req.body,
+ objectId: new ObjectId(databaseId + 1),
+ });
+ const partner = await newPartner.save();
+
+ return res.status(200).json(partner);
+ } catch (err: any) {
+ console.error(err.message);
+ return res.status(400).send({ message: err.message });
+ }
+};
+
+const getPartner = async (req: Request, res: Response) => {
+ try {
+ const id = req.query?.id;
+ if (id) {
+ const partner = await Partner.findById(id);
+ return res.status(200).json(partner);
+ }
+ console.log("No Partner ID Detected");
+
+ const partner = await Partner.find();
+ return res.status(200).json(partner);
+ } catch (err: any) {
+ console.error(err.message);
+ return res.status(400).send({ message: err.message });
+ }
+};
+
+const editPartner = async (req: Request, res: Response) => {
+ try {
+ const id = req.params?.id;
+ if (id) {
+ const partner = Partner.findByIdAndUpdate(id, req.body)
+ .then(() => {
+ console.log(partner);
+ return res.status(200).json(partner);
+ })
+ .catch((err: any) => {
+ console.log(err);
+ return res.status(400).send({ message: err });
+ });
+ } else {
+ return res.status(400).send({ message: "Missing Partner ID" });
+ }
+ } catch (err: any) {
+ console.error(err.message);
+ return res.status(400).send({ message: err.message });
+ }
+};
+
+const deletePartner = async (req: Request, res: Response) => {
+ try {
+ const id = req.query?.id;
+ if (id) {
+ Partner.findByIdAndDelete(id)
+ .then(() => {
+ return res
+ .status(200)
+ .json({ message: "Successfully deleted." });
+ })
+ .catch((err: any) => {
+ return res.status(400).send({ message: err });
+ });
+ } else {
+ return res.status(400).send({ message: "Missing Partner ID" });
+ }
+ } catch (err: any) {
+ console.error(err.message);
+ return res.status(400).send({ message: err.message });
+ }
+};
+
+export { createPartner, getPartner, editPartner, deletePartner };
diff --git a/src/index.ts b/src/index.ts
index 1578d94..844c456 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -11,7 +11,7 @@ import { connectDB } from "../config/database";
dotenv.config();
-// connectDB();
+connectDB();
const app: Express = express();
const PORT = process.env.PORT || 3001;
diff --git a/src/models/Inventory.ts b/src/models/Inventory.ts
new file mode 100644
index 0000000..06bbe87
--- /dev/null
+++ b/src/models/Inventory.ts
@@ -0,0 +1,91 @@
+const mongoose = require("mongoose");
+const { Schema } = mongoose;
+
+const InventorySchema = new Schema({
+ id: {
+ type: Number,
+ unique: true,
+ required: true,
+ },
+ wrapped: {
+ type: Object,
+ newborn: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size1: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size2: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size3: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size4: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size5: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size6: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ },
+ unwrapped: {
+ type: Object,
+ newborn: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size1: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size2: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size3: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size4: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size5: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ size6: {
+ type: Number,
+ default: 0,
+ required: true,
+ },
+ },
+});
+
+module.exports = mongoose.model(
+ "Inventory",
+ InventorySchema,
+);
\ No newline at end of file
diff --git a/src/models/Order.ts b/src/models/Order.ts
new file mode 100644
index 0000000..d582282
--- /dev/null
+++ b/src/models/Order.ts
@@ -0,0 +1,57 @@
+import {Schema, Types, model} from 'mongoose';
+
+const OrderSchema = new Schema({
+ id: {
+ type: Types.ObjectId,
+ unique: true,
+ required: true,
+ },
+ partner: {
+ type: Types.ObjectId,
+ ref: "Partner",
+ required: true,
+ },
+ datePlaced: {
+ type: Date,
+ default: () => Date.now(),
+ required: true,
+ },
+ dateCompleted: {
+ type: Date,
+ default: null,
+ },
+ status: {
+ type: String,
+ enum: ["PLACED", "OPEN", "FILLED", "CANCELLED"],
+ default: "PLACED",
+ required: true,
+ },
+ numDiapers: {
+ type: Number,
+ required: true,
+ },
+ newborn: {
+ type: Number,
+ },
+ size1: {
+ type: Number,
+ },
+ size2: {
+ type: Number,
+ },
+ size3: {
+ type: Number,
+ },
+ size4: {
+ type: Number,
+ },
+ size5: {
+ type: Number,
+ },
+ size6: {
+ type: Number,
+ },
+});
+
+module.exports = model("Order", OrderSchema);
+
diff --git a/src/models/Staff.ts b/src/models/Staff.ts
new file mode 100644
index 0000000..e69de29