![]()
}
+ icon={
}
onlyIcon
onClick={() =>
companyId &&
diff --git a/client/src/pages/DashboardPage.tsx b/client/src/pages/DashboardPage.tsx
index 4cb4ff6..909810e 100644
--- a/client/src/pages/DashboardPage.tsx
+++ b/client/src/pages/DashboardPage.tsx
@@ -1,6 +1,6 @@
/* eslint-disable react-hooks/exhaustive-deps */
/* eslint-disable @typescript-eslint/no-explicit-any */
-import { format, addDays, subDays } from "date-fns";
+import { format, addDays, subDays, startOfDay, endOfDay } from "date-fns";
import { useEffect, useRef, useState } from "react";
import api from "../utils/api";
import { ru } from "date-fns/locale";
@@ -109,7 +109,6 @@ function DashboardPage() {
async function getScheduledSessions(useLoader?: boolean) {
if (!company) {
- // console.log("No ScheduledSessions");
return;
}
@@ -118,9 +117,9 @@ function DashboardPage() {
try {
const result: any = await api
.get(
- `companies/${
- company.id
- }/scheduled_sessions?date=${selectedDay.toISOString()}`
+ `companies/${company.id}/scheduledSessions?startDate=${startOfDay(
+ selectedDay
+ ).toISOString()}&endDate=${endOfDay(selectedDay).toISOString()}`
)
.json();
diff --git a/server/src/index.ts b/server/src/index.ts
index 7a67275..ece924e 100644
--- a/server/src/index.ts
+++ b/server/src/index.ts
@@ -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);
diff --git a/server/src/routes/companies.ts b/server/src/routes/companies.ts
index 236e7d1..585902c 100644
--- a/server/src/routes/companies.ts
+++ b/server/src/routes/companies.ts
@@ -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;
diff --git a/server/src/routes/schedules.ts b/server/src/routes/schedules.ts
deleted file mode 100644
index 2b56676..0000000
--- a/server/src/routes/schedules.ts
+++ /dev/null
@@ -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;