Skip to content

Commit a9895f3

Browse files
authored
feat: add export & share routine feature (#1133) (#1460)
1 parent 19f1364 commit a9895f3

10 files changed

Lines changed: 897 additions & 55 deletions

File tree

backend/controllers/routineController.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,3 +407,24 @@ export const deleteRoutine = async (req, res) => {
407407
.json({ success: false, message: "Error deleting routine" });
408408
}
409409
};
410+
411+
// Fetch public routine function (unauthenticated)
412+
export const getPublicRoutine = async (req, res) => {
413+
try {
414+
const routineId = req.params.id;
415+
const routine = await Routine.findById(routineId).populate("items.taskId");
416+
if (!routine) {
417+
return res.status(404).json({
418+
success: false,
419+
message: "Routine not found",
420+
});
421+
}
422+
return res.status(200).json({ success: true, routine });
423+
} catch (error) {
424+
console.log("Error fetching public routine", error);
425+
return res
426+
.status(500)
427+
.json({ success: false, message: "Error fetching public routine" });
428+
}
429+
};
430+

backend/routes/routineRoutes.js

Lines changed: 44 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,44 @@
1-
import express from "express";
2-
import {
3-
createRoutine,
4-
deleteRoutine,
5-
duplicateRoutine,
6-
getRoutines,
7-
updateRoutine,
8-
} from "../controllers/routineController.js";
9-
import { authMiddleware } from "../middlewares/authMiddleware.js";
10-
import mongoose from "mongoose";
11-
import asyncHandler from "../middlewares/asyncHandler.js";
12-
13-
// router object for routine
14-
export const routineRouter = express.Router();
15-
16-
//New middleware to prevent invalid IDs before controller execution.
17-
const validateObjectId = (req, res, next) => {
18-
if (!mongoose.Types.ObjectId.isValid(req.params.id)) {
19-
return res.status(400).json({
20-
success: false,
21-
message: "Invalid routine ID",
22-
});
23-
}
24-
next();
25-
};
26-
27-
// Route for creating routine
28-
routineRouter.post("/", authMiddleware, asyncHandler(createRoutine));
29-
30-
// Route for fetching routines
31-
routineRouter.get("/", authMiddleware, asyncHandler(getRoutines));
32-
33-
// Route for duplicating routine
34-
routineRouter.post("/:id/duplicate", authMiddleware, duplicateRoutine);
35-
36-
// Route for updating routine
37-
routineRouter.put("/:id", authMiddleware, validateObjectId, asyncHandler(updateRoutine));
38-
39-
// Route for deleting routine
40-
routineRouter.delete("/:id", authMiddleware, validateObjectId, asyncHandler(deleteRoutine));
1+
import express from "express";
2+
import {
3+
createRoutine,
4+
deleteRoutine,
5+
duplicateRoutine,
6+
getRoutines,
7+
updateRoutine,
8+
getPublicRoutine,
9+
} from "../controllers/routineController.js";
10+
import { authMiddleware } from "../middlewares/authMiddleware.js";
11+
import mongoose from "mongoose";
12+
import asyncHandler from "../middlewares/asyncHandler.js";
13+
14+
// router object for routine
15+
export const routineRouter = express.Router();
16+
17+
//New middleware to prevent invalid IDs before controller execution.
18+
const validateObjectId = (req, res, next) => {
19+
if (!mongoose.Types.ObjectId.isValid(req.params.id)) {
20+
return res.status(400).json({
21+
success: false,
22+
message: "Invalid routine ID",
23+
});
24+
}
25+
next();
26+
};
27+
28+
// Route for creating routine
29+
routineRouter.post("/", authMiddleware, asyncHandler(createRoutine));
30+
31+
// Route for fetching routines
32+
routineRouter.get("/", authMiddleware, asyncHandler(getRoutines));
33+
34+
// Route for duplicating routine
35+
routineRouter.post("/:id/duplicate", authMiddleware, duplicateRoutine);
36+
37+
// Route for updating routine
38+
routineRouter.put("/:id", authMiddleware, validateObjectId, asyncHandler(updateRoutine));
39+
40+
// Route for deleting routine
41+
routineRouter.delete("/:id", authMiddleware, validateObjectId, asyncHandler(deleteRoutine));
42+
43+
// Route for fetching public routine (unauthenticated)
44+
routineRouter.get("/public/:id", validateObjectId, asyncHandler(getPublicRoutine));

0 commit comments

Comments
 (0)