Skip to content

Commit

Permalink
completed code
Browse files Browse the repository at this point in the history
  • Loading branch information
Harsheel12 committed Aug 28, 2024
1 parent 7765025 commit 9333bf0
Show file tree
Hide file tree
Showing 11 changed files with 738 additions and 193 deletions.
95 changes: 95 additions & 0 deletions backend/controllers/UserController.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import { Request, Response } from "express";
import User from "../models/User";
import bcrypt from "bcrypt";

const createUser = async (req: Request, res: Response) => {
try {
const { name, email, password } = req.body;

// Validate input
if (!name || !email || !password) {
return res.status(400).json({ message: "All fields are required." });
}

const userExists = await User.findOne({ email });

if (userExists) {
return res.status(409).json({ message: "User already exists." });
}

// Hash the password before saving
const hashedPassword = await bcrypt.hash(password, 10);

// Create new User object
const user = new User({ name, email, password: hashedPassword });

// Save the user to the database
await user.save();

// Send a response back to the client
res.status(201).json({ message: "User created successfuly", user });
} catch (err) {
res.status(500).json({ message: "Internal Server error" });
}
};

const getUsers = async (req: Request, res: Response) => {
try {
const users = await User.find();

return res.status(200).json(users);
} catch (err) {
return res.status(500).json({ message: "Internal Server error" });
}
};

const getUser = async (req: Request, res: Response) => {
try {
const { id } = req.params;

const user = await User.findById(id);

if (!user) {
return res.status(404).json({ message: "User not found" });
}

return res.status(200).json(user);
} catch (err) {
return res.status(500).json({ message: "Internal Server error" });
}
};

const updateUserName = async (req: Request, res: Response) => {
try {
const { id } = req.params;
const { newName } = req.body;

const user = await User.findByIdAndUpdate(id, { name: newName }, { new: true });

if (!user) {
return res.status(404).json({ message: "User not found" });
}

return res.status(200).json({ message: "User name updated successfully", user });
} catch (err) {
return res.status(500).json({ message: "Internal Server error" });
}
};

const deleteUser = async (req: Request, res: Response) => {
try {
const { id } = req.params;

const user = await User.findByIdAndDelete(id);

if (!user) {
return res.status(404).json({ message: "User not found" });
}

return res.status(200).json({ message: "User deleted successfully", user });
} catch (err) {
return res.status(500).json({ message: "Internal Server error" });
}
};

export { createUser, getUsers, getUser, updateUserName, deleteUser };
9 changes: 7 additions & 2 deletions backend/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import express, { json } from "express";
import cors from "cors";
import router from "./routes/routes";
import { config } from "dotenv";
import mongoose from "mongoose";
config();

// Sets our port to the PORT .env value or 4000 by default if .env is not configured
Expand All @@ -18,6 +19,10 @@ app.use(express.static("public"));
// Routes
app.use("/", router);

app.listen(PORT, () => {
console.log(`Listening on port ${PORT}`);
mongoose.connect(process.env.MONGO_URI ?? "").then(() => {
console.log("Connected to Database");
app.listen(PORT, () => {
console.log(`Listening on port ${PORT}`);
});
});

26 changes: 26 additions & 0 deletions backend/models/User.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Schema, model } from "mongoose";

const userSchema = new Schema(
{
name: {
type: String,
required: true,
},
email: {
type: String,
required: true,
unique: true,
},
password: {
type: String,
required: true,
},
},
{
timestamps: true,
}
);

const User = model("User", userSchema);

export default User;
3 changes: 3 additions & 0 deletions backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"email": "email dev"
},
"devDependencies": {
"@types/bcrypt": "^5.0.2",
"@types/jsonwebtoken": "^9.0.5",
"@types/node": "^20.11.17",
"@types/react": "^18.2.55",
Expand All @@ -25,6 +26,8 @@
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
"@types/nodemailer": "^6.4.14",
"bcrypt": "^5.1.1",
"bcryptjs": "^2.4.3",
"cors": "^2.8.5",
"dotenv": "^16.4.1",
"express": "^4.18.2",
Expand Down
4 changes: 4 additions & 0 deletions backend/routes/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import eventRoutes from "./eventRoutes";
import sponsorRoutes from "./sponsorRoutes";
import execRoutes from "./execRoutes";
import socialRoutes from "./socialRoutes";
import userRoutes from "./userRoutes";

const router = express.Router();

Expand All @@ -18,4 +19,7 @@ router.use("/api/execs", execRoutes);
// All exec routes
router.use("/api/socials", socialRoutes);

// All user routes
router.use("/api/users", userRoutes);

export default router;
16 changes: 16 additions & 0 deletions backend/routes/userRoutes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Router } from "express";
import { createUser, getUsers, getUser, updateUserName, deleteUser } from "../controllers/UserController";

const userRoutes = Router();

userRoutes.post("/", createUser);

userRoutes.get("/", getUsers);

userRoutes.get("/:id", getUser);

userRoutes.patch("/:id", updateUserName);

userRoutes.delete("/:id", deleteUser);

export default userRoutes;
Loading

0 comments on commit 9333bf0

Please sign in to comment.