diff --git a/src/middlewares/warning/addWarning.ts b/src/middlewares/warning/addWarning.ts
index 58704d6448ce99b52b25be255b080069e39e3d4d..ce60fe53a9458f982aab2588a17339b31c68d89b 100644
--- a/src/middlewares/warning/addWarning.ts
+++ b/src/middlewares/warning/addWarning.ts
@@ -4,7 +4,7 @@ import { ErrorHandler } from "../utils/ErrorHandler";
 import Profile from "../../models/ProfileSchema";
 import Warning from "../../models/WarningSchema";
 import { validateFields } from "../utils/validateFields";
-import warningsRoute from "../../routes/warning";
+import warningsRoute from "../../routes/warnings";
 
 const fields = [{ name: "text", required: true }];
 
@@ -14,7 +14,9 @@ const addWarning = () => async (
   next: NextFunction
 ) => {
   try {
-    const warningReceiver = await Profile.findById(req.params.id).exec();
+    const warningReceiver = await Profile.findById(req.params.userId)
+      .lean()
+      .exec();
     if (!warningReceiver) throw new ErrorHandler(404, "User not found!");
 
     const warning = new Warning();
@@ -28,24 +30,21 @@ const addWarning = () => async (
 
     warning.receiver = warningReceiver._id!;
     warning.date = new Date();
-    warning.given_by = {
-      _id: req.session.user!.id!,
+    warning.givenBy = {
+      id: req.session.user!.id!,
       name: req.session.user!.name!,
     };
 
     await warning.save();
 
-    warningReceiver.warningIds = [
-      ...warningReceiver.warningIds,
-      String(warning._id),
-    ];
-    await warningReceiver.save(async (err) => {
-      if (err) {
-        await warning.remove();
-        throw err;
-      }
-    });
-    res.data.warning = warning;
+    await Profile.updateOne(
+      { _id: warningReceiver._id },
+      { $push: { warnings: warning._id } }
+    )
+      .lean()
+      .exec();
+
+    res.data.newObjectId = warning._id;
     next();
   } catch (err) {
     next(err);
diff --git a/src/middlewares/warning/deleteWarning.ts b/src/middlewares/warning/deleteWarning.ts
index 6d1b633809db11a55a779f8fa2d95c7291a942fe..376ccefccb2f4c7a0c3cbd24f52b94843db5413c 100644
--- a/src/middlewares/warning/deleteWarning.ts
+++ b/src/middlewares/warning/deleteWarning.ts
@@ -13,8 +13,9 @@ const deleteWarning = () => async (
 
     await Profile.updateOne(
       { _id: warning?.receiver },
-      { $pull: { warningIds: warning?._id } }
+      { $pull: { warnings: warning?._id } }
     );
+
     next();
   } catch (err) {
     next(err);
diff --git a/src/middlewares/warning/getWarning.ts b/src/middlewares/warning/getWarning.ts
index f1d59c34f7a3262c0127d6efbdf4beea624cb95c..df0edcb821ab5dfc2a14d4e5f96e3c866b2af6f5 100644
--- a/src/middlewares/warning/getWarning.ts
+++ b/src/middlewares/warning/getWarning.ts
@@ -2,6 +2,9 @@ import { NextFunction, Request, Response } from "express";
 
 import Warning from "../../models/WarningSchema";
 
+/**
+ * req.params.warningId -> Get Warning and set res.data.warning
+ */
 const getWarning = () => async (
   req: Request,
   res: Response,
diff --git a/src/middlewares/warning/getWarningsList.ts b/src/middlewares/warning/getWarningsList.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3558a47d9bb83897971d6f5d3f04ef674888ada6
--- /dev/null
+++ b/src/middlewares/warning/getWarningsList.ts
@@ -0,0 +1,21 @@
+import { NextFunction, Request, Response } from "express";
+
+import Warning from "../../models/WarningSchema";
+
+/**
+ * -> Get Warnings and set res.data.warnings
+ */
+const getWarningsList = () => async (
+  req: Request,
+  res: Response,
+  next: NextFunction
+) => {
+  try {
+    res.data.warnings = await Warning.find().lean().exec();
+    next();
+  } catch (err) {
+    next(err);
+  }
+};
+
+export default getWarningsList;
diff --git a/src/middlewares/warning/updateWarning.ts b/src/middlewares/warning/updateWarning.ts
index 5d819d499181577bc6fd9ed73928bd4b1e6cf9f8..f8c8ff5b1a1492d47ed9177036d59b374bc55a35 100644
--- a/src/middlewares/warning/updateWarning.ts
+++ b/src/middlewares/warning/updateWarning.ts
@@ -1,26 +1,27 @@
 import { NextFunction, Request, Response } from "express";
-
-import Warning from "../../models/WarningSchema";
+import Warning, { IWarning } from "../../models/WarningSchema";
 
 // Valid fields to update
-const validFields = ["text"];
+const validFields: Partial<keyof IWarning>[] = ["text"];
 
+/**
+ * warningId -> Updates the warning
+ */
 const updateWarning = () => async (
   req: Request,
   res: Response,
   next: NextFunction
 ) => {
   try {
-    const warning = await Warning.findById(req.params.warnmingId).exec();
+    let newFields: Partial<IWarning> = {};
+    validFields.forEach((field) => {
+      const value = req.body[field];
+      if (value) newFields[field] = value;
+    });
 
-    if (warning) {
-      validFields.forEach((field) => {
-        const value = req.body[field];
-        if (value) warning.set(field, value);
-      });
-      await warning.save();
-    }
-    res.data.warning = warning;
+    await Warning.updateOne({ _id: req.params.warningId }, { $set: newFields })
+      .lean()
+      .exec();
 
     next();
   } catch (err) {
diff --git a/src/routes/user.ts b/src/routes/user.ts
index 74d52b7e8e266a4c67944b2a0cbd92cede02de2e..d37b39a93e280350b813e36875499025a48c9a2f 100644
--- a/src/routes/user.ts
+++ b/src/routes/user.ts
@@ -92,7 +92,7 @@ const usersRoute = (prefix: string, app: Application): void => {
     deleteUser(),
     noContentResponse()
   );
-  // Accept/Reject a users picture
+  // Accept/Reject a users picture TODO
   app.post(`${prefix}/user/:userId/picture/accept`, example());
   app.post(`${prefix}/user/:userId/picture/reject`, example());
 };
diff --git a/src/routes/warnings.ts b/src/routes/warnings.ts
index 5fb80367876275637efa06eff5f5118e71a8b14c..543ee1498da03a58a5624503a5ecaec76ce6d14e 100644
--- a/src/routes/warnings.ts
+++ b/src/routes/warnings.ts
@@ -1,17 +1,58 @@
 import { Application } from "express";
+import addWarning from "../middlewares/warning/addWarning";
+import createdResponse from "../middlewares/utils/createdResponse";
+import deleteWarning from "../middlewares/warning/deleteWarning";
 import example from "../middlewares/example";
+import getWarning from "../middlewares/warning/getWarning";
+import getWarningsList from "../middlewares/warning/getWarningsList";
+import isRegistered from "../middlewares/auth/isRegistered";
+import isStaffOrAdmin from "../middlewares/auth/isStaffOrAdmin";
+import noContentResponse from "../middlewares/utils/noContentResponse";
+import responseWarning from "../middlewares/warning/responseWarning";
+import responseWarningsList from "../middlewares/warning/responseWarningsList";
+import updateWarning from "../middlewares/warning/updateWarning";
 
 const warningsRoute = (prefix: string, app: Application): void => {
   // Get all warnings
-  app.get(`${prefix}/`, example());
+  app.get(
+    `${prefix}/`,
+    isRegistered(),
+    isStaffOrAdmin(),
+    getWarningsList(),
+    responseWarningsList()
+  );
   // Add a warning to a user
-  app.post(`${prefix}/user/:userId`, example());
+  app.post(
+    `${prefix}/user/:userId`,
+    isRegistered(),
+    isStaffOrAdmin(),
+    addWarning(),
+    createdResponse()
+  );
   // Get a warning
-  app.get(`${prefix}/warning/:warningId`, example());
+  app.get(
+    `${prefix}/warning/:warningId`,
+    isRegistered(),
+    isStaffOrAdmin(),
+    getWarning(),
+    responseWarning()
+  );
   // Update a warning
-  app.put(`${prefix}/warning/:warningId`, example());
+  app.put(
+    `${prefix}/warning/:warningId`,
+    isRegistered(),
+    isStaffOrAdmin(),
+    updateWarning(),
+    noContentResponse()
+  );
   // Delete a warning
-  app.delete(`${prefix}/warning/:warningId`, example());
+  app.delete(
+    `${prefix}/warning/:warningId`,
+    isRegistered(),
+    isStaffOrAdmin(),
+    deleteWarning(),
+    noContentResponse()
+  );
 };
 
 export default warningsRoute;