This commit is contained in:
2024-11-06 21:14:16 +05:00
parent c02176d4a7
commit 43ec0c5dd6
16 changed files with 120 additions and 251 deletions
+1 -3
View File
@@ -12,7 +12,6 @@ import usersRouter from "./routes/users.js";
import companiesRouter from "./routes/companies.js";
import buildsRouter from "./routes/builds.js";
import actionsRouter from "./routes/actions.js";
import schedulesRouter from "./routes/schedules.js";
import scheduledSessionsRoute from "./routes/scheduledSessions.js";
import adminCompaniesRoute from "./routes/admin/adminCompaniesRoute.js";
import adminBuildsRoute from "./routes/admin/adminBuildsRoute.js";
@@ -46,8 +45,7 @@ app.use("/reset", resetRoute);
app.use("/resetConfirm", resetConfirmRoute);
app.use("/actions", actionsRouter);
app.use("/builds", buildsRouter);
app.use("/scheduled_sessions", scheduledSessionsRoute);
app.use("/schedules", schedulesRouter);
app.use("/scheduledSessions", scheduledSessionsRoute);
app.use("/admin/companies", adminCompaniesRoute);
app.use("/admin/builds", adminBuildsRoute);
app.use("/admin/users", adminUsersRoute);
+58 -186
View File
@@ -13,43 +13,47 @@ const router = Router();
// res.json(companies);
// });
router.get("/:id", async (req, res) => {
if (req.params.id != res.locals.user.companyId) {
router.get("/:companyId", async (req, res) => {
if (req.params.companyId != res.locals.user.companyId) {
res.json({ error: "Access denied" });
return;
}
const company = await Company.findById(req.params.id);
const company = await Company.findById(req.params.companyId);
res.json(company);
});
router.get("/:id/builds", async (req, res) => {
if (req.params.id != res.locals.user.companyId) {
router.get("/:companyId/builds", async (req, res) => {
if (req.params.companyId != res.locals.user.companyId) {
res.json({ error: "Access denied" });
return;
}
const company: any = await Company.findById(req.params.id).populate("builds");
const company: any = await Company.findById(req.params.companyId).populate(
"builds"
);
const { builds } = company;
res.json(builds);
});
router.get("/:id/users", async (req, res) => {
if (req.params.id != res.locals.user.companyId) {
router.get("/:companyId/users", async (req, res) => {
if (req.params.companyId != res.locals.user.companyId) {
res.json({ error: "Access denied" });
return;
}
const company: any = await Company.findById(req.params.id).populate("users");
const company: any = await Company.findById(req.params.companyId).populate(
"users"
);
const { users } = company;
res.json(users);
});
router.get("/:id/builds/:buildId/users", async (req, res) => {
if (req.params.id != res.locals.user.companyId) {
router.get("/:companyId/builds/:buildId/users", async (req, res) => {
if (req.params.companyId != res.locals.user.companyId) {
res.json({ error: "Access denied" });
return;
}
@@ -68,25 +72,25 @@ router.get("/:id/builds/:buildId/users", async (req, res) => {
res.json(users);
});
router.get("/:id/scheduled_sessions", async (req, res) => {
if (req.params.id != res.locals.user.companyId) {
router.get("/:companyId/scheduledSessions", async (req, res) => {
if (req.params.companyId != res.locals.user.companyId) {
res.json({ error: "Access denied" });
return;
}
if (!req.query.date) {
res.json({ error: "Query parameter `date` is required" });
const { startDate, endDate } = req.query;
if (!startDate || !endDate) {
res.json({ error: "Query parameter `startDate`, `endDate` is required" });
return;
}
const date = parseISO(req.query.date as string);
const company: any = await Company.findById(req.params.id).populate({
const company: any = await Company.findById(req.params.companyId).populate({
path: "scheduledSessions",
match: {
startAt: {
$gte: startOfDay(date),
$lte: endOfDay(date),
$gte: startDate,
$lt: endDate,
},
},
});
@@ -96,85 +100,11 @@ router.get("/:id/scheduled_sessions", async (req, res) => {
res.json(scheduledSessions);
});
// router.post(
// "/:id/builds/:buildId/scheduled_sessions",
// async (req, res) => {
// if (req.params.id != res.locals.user.companyId) {
// res.json({ error: "Access denied" });
// return;
// }
// if (!req.params.buildId) {
// res.json({ error: "req.params.buildId" });
// return;
// }
// const scheduledSession = await ScheduledSession.create({
// companyId: req.params.id,
// buildId: req.params.buildId,
// ...req.body,
// });
// res.json(scheduledSession);
// }
// );
router.put("/:id/scheduled_sessions/:scheduledSessionId", async (req, res) => {
if (req.params.id != res.locals.user.companyId) {
res.json({ error: "Access denied" });
return;
}
try {
const scheduledSession = await ScheduledSession.findById(
req.params.scheduledSessionId
);
const scheduledSessionAtSameTime = await ScheduledSession.findOne({
startAt: scheduledSession?.startAt,
userId: req.body.userId,
});
if (scheduledSessionAtSameTime && req.body.userId !== null) {
await ScheduledSession.updateMany(
{
userId: req.body.userId,
startAt: scheduledSession?.startAt,
},
{
userId: null,
}
);
await ScheduledSession.findByIdAndUpdate(req.params.scheduledSessionId, {
userId: req.body.userId,
});
res.json({ error: "Scheduled session at same time" });
return;
}
const updatedScheduledSession = await ScheduledSession.findByIdAndUpdate(
req.params.scheduledSessionId,
req.body,
{
new: true,
upsert: true,
}
);
res.json(updatedScheduledSession);
} catch (error) {
if (error instanceof Error) {
res.json({ error });
}
}
});
router.get(
"/:id/builds/:buildId/scheduled_sessions/:scheduledSessionId/availableManagers",
router.put(
"/:companyId/scheduledSessions/:scheduledSessionId",
async (req, res) => {
if (!req.query.startAt) {
res.json({ error: "Query parameter `startAt` is required" });
if (req.params.companyId != res.locals.user.companyId) {
res.json({ error: "Access denied" });
return;
}
@@ -183,49 +113,42 @@ router.get(
req.params.scheduledSessionId
);
if (!scheduledSession) {
res.json({ error: "Scheduled session not found" });
const scheduledSessionAtSameTime = await ScheduledSession.findOne({
startAt: scheduledSession?.startAt,
userId: req.body.userId,
});
if (scheduledSessionAtSameTime && req.body.userId !== null) {
await ScheduledSession.updateMany(
{
userId: req.body.userId,
startAt: scheduledSession?.startAt,
},
{
userId: null,
}
);
await ScheduledSession.findByIdAndUpdate(
req.params.scheduledSessionId,
{
userId: req.body.userId,
}
);
res.json({ error: "Scheduled session at same time" });
return;
}
const buildUsers = await User.find({ buildIds: req.params.buildId });
let buildUserIds = buildUsers.map((buildUser) => buildUser.toString());
const scheduledSessionsAtTime = await ScheduledSession.find({
buildId: req.params.buildId,
startAt: req.query.startAt,
});
const scheduledSessionAtTimeUserIds: any[] = [];
for (const scheduledSessionAtTime of scheduledSessionsAtTime) {
if (scheduledSessionAtTime.userId) {
scheduledSessionAtTimeUserIds.push(
scheduledSessionAtTime.userId.toString()
);
const updatedScheduledSession = await ScheduledSession.findByIdAndUpdate(
req.params.scheduledSessionId,
req.body,
{
new: true,
upsert: true,
}
}
console.log(
"scheduledSessionAtTimeUserIds",
scheduledSessionAtTimeUserIds
);
console.log("buildUserIds", buildUserIds);
const filteredUserIds: any[] = buildUserIds.filter(
(buildUserId) => !scheduledSessionAtTimeUserIds.includes(buildUserId)
);
console.log("filteredUserIds", filteredUserIds);
if (scheduledSession.userId) {
filteredUserIds.push(scheduledSession.userId);
}
console.log("filteredUserIds", filteredUserIds);
res.json(filteredUserIds);
res.json(updatedScheduledSession);
} catch (error) {
if (error instanceof Error) {
res.json({ error });
@@ -234,57 +157,6 @@ router.get(
}
);
router.get("/:id/builds/:buildId/schedules", async (req, res) => {
if (req.params.id != res.locals.user.companyId) {
res.json({ error: "Access denied" });
return;
}
const schedules = await Schedule.find({
companyId: req.params.id,
buildId: req.params.buildId,
});
res.json(schedules);
});
router.post("/:id/builds/:buildId/schedules", async (req, res) => {
if (req.params.id != res.locals.user.companyId) {
res.json({ error: "Access denied" });
return;
}
try {
const schedule = await Schedule.create({
companyId: req.params.id,
buildId: req.params.buildId,
...req.body,
});
res.json(schedule);
} catch (error) {
if (error instanceof Error) {
res.json({ error: error.message });
}
}
});
router.get(
"/:companyId/builds/:buildId/last_scheduled_session",
async (req, res) => {
const { buildId } = req.params;
try {
const lastScheduledSession = await ScheduledSession.findOne({
buildId,
}).sort({ startAt: -1 });
res.json(lastScheduledSession);
} catch (error) {
res.json({ error: (error as Error).message });
}
}
);
router.get("/:companyId/users", async (req, res) => {
try {
const companyId = req.params.companyId;
-36
View File
@@ -1,36 +0,0 @@
import { Router } from "express";
import Schedule from "../models/Schedule.js";
const schedulesRouter = Router();
schedulesRouter.get(
"/companies/:companyId/builds/:buildId",
async (req, res) => {
const { companyId, buildId } = req.params;
// const date = new Date();
const schedules = await Schedule.find({
companyId,
buildId,
});
if (!schedules.length) {
res.json({ error: "No data" });
return;
}
if (req.query.date) {
const schedule = await Schedule.findOne({
companyId,
buildId,
});
res.json(schedule);
return;
}
res.json(schedules);
}
);
export default schedulesRouter;