Created
December 10, 2025 13:54
-
-
Save suhailroushan13/005fbe3db458dd06f14c0d0fa0783b5c to your computer and use it in GitHub Desktop.
ALL Methods API's
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import express from "express"; | |
| import bcrypt from "bcrypt"; | |
| import userModel from "../../models/User/User.js"; | |
| const router = express.Router(); | |
| /* | |
| ============================================================================= | |
| GET ALL USERS → find() | |
| ----------------------------------------------------------------------------- | |
| filter = {} → empty means get everything | |
| projection = null → show all fields | |
| options = extra controls like sort, limit (not needed for basic) | |
| ============================================================================= | |
| */ | |
| router.get("/find", async (req, res) => { | |
| try { | |
| const users = await userModel.find({}, null, {}); | |
| res.json(users); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| /* | |
| ============================================================================= | |
| GET ONE USER BY ID → findById(id) | |
| ----------------------------------------------------------------------------- | |
| id = req.params.id → MongoDB unique primary key | |
| projection = null → return all fields | |
| ============================================================================= | |
| */ | |
| router.get("/findById/:id", async (req, res) => { | |
| try { | |
| const user = await userModel.findById(req.params.id, null, {}); | |
| res.json(user); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| /* | |
| ============================================================================= | |
| GET ONE USER BY EMAIL → findOne(filter) | |
| ----------------------------------------------------------------------------- | |
| filter = {email: ...} → find first matching document | |
| ============================================================================= | |
| */ | |
| router.get("/findByEmail/:email", async (req, res) => { | |
| try { | |
| const user = await userModel.findOne({ email: req.params.email }); | |
| res.json(user); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| /* | |
| ============================================================================= | |
| REGISTER USER → create(document) | |
| ----------------------------------------------------------------------------- | |
| Creates + saves new document into DB | |
| ============================================================================= | |
| */ | |
| router.post("/create", async (req, res) => { | |
| try { | |
| const hashedPassword = await bcrypt.hash(req.body.password, 10); | |
| await userModel.create({ | |
| fullName: req.body.fullName, | |
| email: req.body.email, | |
| phone: req.body.phone, | |
| password: hashedPassword, | |
| }); | |
| res.json({ msg: "User Created" }); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| /* | |
| ============================================================================= | |
| FULL UPDATE (PUT) by ID → findByIdAndUpdate(id, update, options) | |
| ----------------------------------------------------------------------------- | |
| update = what to update using $set operator | |
| options: | |
| - new: true → return UPDATED document not OLD one | |
| - runValidators: true → validate schema before update | |
| ============================================================================= | |
| */ | |
| router.put("/updateById/:id", async (req, res) => { | |
| try { | |
| const updatedUser = await userModel.findByIdAndUpdate( | |
| req.params.id, | |
| { $set: req.body }, | |
| { | |
| new: true, | |
| runValidators: true, | |
| } | |
| ); | |
| res.json(updatedUser); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| /* | |
| ============================================================================= | |
| UPDATE FIRST MATCH → findOneAndUpdate(filter, update, options) | |
| Used when we don't have ID but want update | |
| ============================================================================= | |
| */ | |
| router.put("/updateByEmail/:email", async (req, res) => { | |
| try { | |
| const updatedUser = await userModel.findOneAndUpdate( | |
| { email: req.params.email }, // filter | |
| { $set: req.body }, // update only provided fields | |
| { | |
| new: true, // return updated doc | |
| runValidators: true // enforce schema rules | |
| } | |
| ); | |
| res.json(updatedUser); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| /* | |
| ============================================================================= | |
| PATCH (Partial Update) → updateOne(filter, update) | |
| ----------------------------------------------------------------------------- | |
| Only update specific field → Doesn’t replace entire document | |
| filter = {_id: ...} | |
| update = { $set: req.body } → apply only given fields | |
| ============================================================================= | |
| */ | |
| router.patch("/patch/:id", async (req, res) => { | |
| try { | |
| const patchedUser = await userModel.updateOne( | |
| { _id: req.params.id }, | |
| { $set: req.body } | |
| ); | |
| res.json(patchedUser); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| /* | |
| ============================================================================= | |
| DELETE BY ID → findByIdAndDelete(id) | |
| ----------------------------------------------------------------------------- | |
| Returns deleted object also (useful for logging) | |
| ============================================================================= | |
| */ | |
| router.delete("/deleteById/:id", async (req, res) => { | |
| try { | |
| const deletedUser = await userModel.findByIdAndDelete(req.params.id); | |
| res.json({ msg: "Deleted", deletedUser }); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| /* | |
| ============================================================================= | |
| DELETE FIRST USER MATCHING FILTER → deleteOne(filter) | |
| ----------------------------------------------------------------------------- | |
| Does NOT return deleted object (just count) | |
| ============================================================================= | |
| */ | |
| router.delete("/deleteByEmail/:email", async (req, res) => { | |
| try { | |
| const result = await userModel.deleteOne({ email: req.params.email }); | |
| res.json(result); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| /* | |
| ============================================================================= | |
| DELETE MANY → deleteMany(filter) | |
| ----------------------------------------------------------------------------- | |
| filter = {} → delete all users 🧨 BE CAREFUL! | |
| ============================================================================= | |
| */ | |
| router.delete("/deleteAll", async (req, res) => { | |
| try { | |
| const result = await userModel.deleteMany({}); | |
| res.json(result); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| /* | |
| ============================================================================= | |
| COUNT DOCS → countDocuments(filter) | |
| ----------------------------------------------------------------------------- | |
| filter → count all matching users, not fetch them | |
| ============================================================================= | |
| */ | |
| router.get("/count", async (req, res) => { | |
| try { | |
| const count = await userModel.countDocuments({}); | |
| res.json({ totalUsers: count }); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| /* | |
| ============================================================================= | |
| REPLACE ENTIRE DOCUMENT → replaceOne(filter, newDoc) | |
| ----------------------------------------------------------------------------- | |
| Replaces completely → delete old one, insert new one | |
| Use carefully (like updating full profile) | |
| ============================================================================= | |
| */ | |
| router.put("/replace/:email", async (req, res) => { | |
| try { | |
| const result = await userModel.replaceOne( | |
| { email: req.params.email }, // which doc to replace | |
| req.body // full new doc | |
| ); | |
| res.json(result); | |
| } catch (err) { | |
| res.status(500).json({ msg: err.message }); | |
| } | |
| }); | |
| export default router; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment