From 43ec0c5dd642134b43b7ac7e1e7564a70d7d9683 Mon Sep 17 00:00:00 2001 From: inmake Date: Wed, 6 Nov 2024 21:14:16 +0500 Subject: [PATCH] upd --- client/.env.development | 1 + client/public/images/companies/gsbk.png | Bin 0 -> 4825 bytes client/src/components/Card.tsx | 2 +- client/src/components/Input.tsx | 3 + client/src/components/Managers.tsx | 15 +- client/src/components/ModalContainer.tsx | 23 +- client/src/components/Schedule.tsx | 2 +- .../src/components/modals/AddManagerModal.tsx | 4 +- client/src/components/modals/CompanyModal.tsx | 19 +- .../modals/CreateScheduledSessionModal.tsx | 2 +- .../src/components/modals/CreateUserModal.tsx | 3 +- client/src/pages/AdminCompanyPage.tsx | 4 +- client/src/pages/DashboardPage.tsx | 9 +- server/src/index.ts | 4 +- server/src/routes/companies.ts | 244 +++++------------- server/src/routes/schedules.ts | 36 --- 16 files changed, 120 insertions(+), 251 deletions(-) create mode 100644 client/public/images/companies/gsbk.png delete mode 100644 server/src/routes/schedules.ts diff --git a/client/.env.development b/client/.env.development index e1eb4c9..79cdb72 100644 --- a/client/.env.development +++ b/client/.env.development @@ -1,2 +1,3 @@ VITE_API_URL=http://localhost:3001 +# VITE_API_URL=https://crm.stream.graff.tech/api VITE_STREAM_URL=https://stream.graff.tech diff --git a/client/public/images/companies/gsbk.png b/client/public/images/companies/gsbk.png new file mode 100644 index 0000000000000000000000000000000000000000..009aa7ca59ad72d35981244443513ddc14653de3 GIT binary patch literal 4825 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 TG)g=(`cD998v?5|?cV(#-uEJb literal 0 HcmV?d00001 diff --git a/client/src/components/Card.tsx b/client/src/components/Card.tsx index 35356f3..20ba6a6 100644 --- a/client/src/components/Card.tsx +++ b/client/src/components/Card.tsx @@ -43,7 +43,7 @@ function Card({ async function getAvailableManagers() { const result: any[] = await api .get( - `companies/${companyId}/builds/${buildId}/scheduled_sessions/${scheduledSessionId}/availableManagers?startAt=${scheduleSessionStartAt}` + `companies/${companyId}/builds/${buildId}/scheduledSessions/${scheduledSessionId}/availableManagers?startAt=${scheduleSessionStartAt}` ) .json(); diff --git a/client/src/components/Input.tsx b/client/src/components/Input.tsx index c8dd462..7089d50 100644 --- a/client/src/components/Input.tsx +++ b/client/src/components/Input.tsx @@ -9,6 +9,7 @@ interface InputProps { required?: boolean; readOnly?: boolean; className?: string; + autoComplete?: string; handleChange?: (value: string) => void; handleFocus?: () => void; } @@ -21,6 +22,7 @@ function Input({ required, readOnly, className, + autoComplete, handleChange, handleFocus, }: InputProps) { @@ -31,6 +33,7 @@ function Input({ return ( @@ -34,19 +37,23 @@ function Managers() {

{manager.name}

- {user?.role === "admin" && ( + {/* {user?.role === "admin" && ( )} diff --git a/client/src/components/ModalContainer.tsx b/client/src/components/ModalContainer.tsx index 3e3f004..5d5bce1 100644 --- a/client/src/components/ModalContainer.tsx +++ b/client/src/components/ModalContainer.tsx @@ -1,5 +1,7 @@ +/* eslint-disable react-hooks/exhaustive-deps */ import { Transition } from "react-transition-group"; import useModalStore from "../stores/useModalStore"; +import { useEffect } from "react"; function ModalContainer() { const [modal, setModal] = useModalStore((state) => [ @@ -7,6 +9,20 @@ function ModalContainer() { state.setModal, ]); + useEffect(() => { + function handleKeyUp(e: KeyboardEvent) { + if (e.key === "Escape") { + setModal(null); + } + } + + document.addEventListener("keyup", handleKeyUp); + + return () => { + document.removeEventListener("keyup", handleKeyUp); + }; + }, []); + return ( {(state) => (
setModal(null)} - className={`min-h-screen p-8 absolute z-20 top-0 left-0 w-full flex justify-center items-center bg-black bg-opacity-30 overflow-auto cursor-pointer transition-opacity ${state}`} + className={`min-h-screen p-8 absolute z-20 top-0 left-0 w-full flex justify-center items-center bg-black bg-opacity-30 overflow-auto transition-opacity ${state}`} > -
e.stopPropagation()} className="cursor-default"> - {modal} -
+ {modal}
)}
diff --git a/client/src/components/Schedule.tsx b/client/src/components/Schedule.tsx index 8a8e15f..99026e4 100644 --- a/client/src/components/Schedule.tsx +++ b/client/src/components/Schedule.tsx @@ -91,7 +91,7 @@ function Schedule({ selectedDay, slots, events }: Props) { try { const result: any = await api - .post(`scheduled_sessions`, { + .post(`scheduledSessions`, { json: { companyId: company!.id, buildId: selectedBuild?.id, diff --git a/client/src/components/modals/AddManagerModal.tsx b/client/src/components/modals/AddManagerModal.tsx index 36aa933..e19dc5d 100644 --- a/client/src/components/modals/AddManagerModal.tsx +++ b/client/src/components/modals/AddManagerModal.tsx @@ -62,7 +62,7 @@ function AddManagerModal() { return (
- Добавить сотрудника + Новый сотрудник
diff --git a/client/src/components/modals/CreateScheduledSessionModal.tsx b/client/src/components/modals/CreateScheduledSessionModal.tsx index fcd3586..f5b97de 100644 --- a/client/src/components/modals/CreateScheduledSessionModal.tsx +++ b/client/src/components/modals/CreateScheduledSessionModal.tsx @@ -29,7 +29,7 @@ function CreateScheduledSessionModal({ buildId, startAt, duration }: Props) { try { await api - .post(`scheduled_sessions`, { + .post(`scheduledSessions`, { json: { buildId, startAt, diff --git a/client/src/components/modals/CreateUserModal.tsx b/client/src/components/modals/CreateUserModal.tsx index 1410990..c48396e 100644 --- a/client/src/components/modals/CreateUserModal.tsx +++ b/client/src/components/modals/CreateUserModal.tsx @@ -94,7 +94,7 @@ function CreateUserModal({ companyId }: Props) { return (
-

Создание пользователя

+

Новый пользователь

(
} + 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;