From fed3521efa5bc92883d9dfaab3fcc1832ccc96a9 Mon Sep 17 00:00:00 2001 From: Nishadi Date: Wed, 24 Apr 2024 12:01:28 +0530 Subject: [PATCH 1/2] feat: develop complete retro --- .../src/containers/RetroPage/RetroPage.jsx | 89 +++++++++++++++---- .../server/api/controllers/retroController.js | 2 +- .../server/api/controllers/teamsController.js | 15 ++++ packages/server/api/routes/teams.router.js | 7 ++ 4 files changed, 93 insertions(+), 20 deletions(-) diff --git a/packages/client/src/containers/RetroPage/RetroPage.jsx b/packages/client/src/containers/RetroPage/RetroPage.jsx index c2a620a..cd2389d 100644 --- a/packages/client/src/containers/RetroPage/RetroPage.jsx +++ b/packages/client/src/containers/RetroPage/RetroPage.jsx @@ -1,5 +1,5 @@ import React, { useState, useContext } from 'react'; -import { useNavigate } from 'react-router-dom'; +import { useParams } from 'react-router-dom'; import { RetroCodeContext } from '../Contexts/RetroCodeContext'; import { apiURL } from '../../apiURL'; import './RetroPage.css'; @@ -16,23 +16,40 @@ function RetroPage() { const [comments, setComments] = useState({}); const [joinCode, setJoinCode] = useState(''); const [inputValues, setInputValues] = useState({}); - const [selectedRoles, setSelectedRoles] = useState({}); const [errorMessage, setErrorMessage] = useState(''); - const navigate = useNavigate(); + // const navigate = useNavigate(); const { retroCode, setRetroCode } = useContext(RetroCodeContext); + const [retroId, setRetroId] = useState(); + const [teamMembers, setTeamMembers] = useState([]); + const [activeMember, setActiveMember] = useState(); + const { teamId } = useParams(); const handleNewRetro = async () => { - const response = await fetch(`${apiURL()}/retro/generateRetroCode`, { + const response = await fetch(`${apiURL()}/retro/`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, + body: JSON.stringify({ + teamId, + title: 'New retro', + }), + }); + + const teamMembersResponse = await fetch(`${apiURL()}/teams/${teamId}`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, }); if (response.ok) { - const newRetroCode = await response.text(); - setRetroCode(newRetroCode); + const results = await response.json(); + const teamMembersList = await teamMembersResponse.json(); + setRetroCode(results.retroCode); setSelectedQuestions(questions); + setTeamMembers(teamMembersList.teamMembers); + setRetroId(results.retroId); } else { throw new Error('Invalid retro code'); } @@ -47,15 +64,40 @@ function RetroPage() { ...prevComments, [questionId]: [ ...(prevComments[questionId] || []), - { id: newCommentId, text: commentText }, + { + id: newCommentId, + text: commentText, + teamMemberId: activeMember, + questionId, + }, ], })); setInputValues((prevValues) => ({ ...prevValues, [questionId]: '' })); }; - const handleComplete = () => { - navigate('/joinretro'); + const handleComplete = async () => { + // navigate('/joinretro'); + const payload = Object.values(comments).reduce( + (answersArray, commentsArray) => { + answersArray.push(...commentsArray); + return answersArray; + }, + [], + ); + + const response = await fetch(`${apiURL()}/retro/${retroId}/complete`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(payload), + }); + + if (response.ok) { + // eslint-disable-next-line no-alert + alert('Retro is completed'); + } }; const handleJoin = async () => { @@ -97,6 +139,13 @@ function RetroPage() { } }; + const renderTeamMembers = (members) => + members.map((member) => ( + + )); + return (
@@ -139,17 +188,19 @@ function RetroPage() {
{ const answers = body.map((memberAnswer) => ({ retro_id: routeParams.retroId, question_id: memberAnswer.questionId, - answer: memberAnswer.answer, + answer: memberAnswer.text, team_member_id: memberAnswer.teamMemberId, })); diff --git a/packages/server/api/controllers/teamsController.js b/packages/server/api/controllers/teamsController.js index 04cebb5..5edfbc2 100644 --- a/packages/server/api/controllers/teamsController.js +++ b/packages/server/api/controllers/teamsController.js @@ -61,7 +61,22 @@ const validateTeamCode = async (body) => { return results[0]; }; +const getTeamMembers = async (params) => { + const { teamId } = params; + + const results = await knex.raw(` + select \`Employees\`.first_name, \`Employees\`.last_name, \`TeamMembers\`.id from \`Employees\` +inner join \`TeamMembers\` on \`TeamMembers\`.employee_id = \`Employees\`.id +where \`TeamMembers\`.team_id = ${Number(teamId)} + `); + + return { + teamMembers: results[0], + }; +}; + module.exports = { createTeam, validateTeamCode, + getTeamMembers, }; diff --git a/packages/server/api/routes/teams.router.js b/packages/server/api/routes/teams.router.js index 1a7cd73..d3952c9 100644 --- a/packages/server/api/routes/teams.router.js +++ b/packages/server/api/routes/teams.router.js @@ -17,4 +17,11 @@ router.post('/validateTeamCode', (req, res, next) => { .catch(next); }); +router.get('/:teamId', (req, res, next) => { + teamsController + .getTeamMembers(req.params) + .then((result) => res.json(result)) + .catch(next); +}); + module.exports = router; From 5c12623a79cface2124339b56707e25ed812f408 Mon Sep 17 00:00:00 2001 From: Nishadi Date: Fri, 26 Apr 2024 10:49:28 +0530 Subject: [PATCH 2/2] removed some comments --- packages/client/src/containers/RetroPage/RetroPage.jsx | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/client/src/containers/RetroPage/RetroPage.jsx b/packages/client/src/containers/RetroPage/RetroPage.jsx index cd2389d..8383d73 100644 --- a/packages/client/src/containers/RetroPage/RetroPage.jsx +++ b/packages/client/src/containers/RetroPage/RetroPage.jsx @@ -17,7 +17,7 @@ function RetroPage() { const [joinCode, setJoinCode] = useState(''); const [inputValues, setInputValues] = useState({}); const [errorMessage, setErrorMessage] = useState(''); - // const navigate = useNavigate(); + const { retroCode, setRetroCode } = useContext(RetroCodeContext); const [retroId, setRetroId] = useState(); const [teamMembers, setTeamMembers] = useState([]); @@ -77,7 +77,6 @@ function RetroPage() { }; const handleComplete = async () => { - // navigate('/joinretro'); const payload = Object.values(comments).reduce( (answersArray, commentsArray) => { answersArray.push(...commentsArray); @@ -189,12 +188,6 @@ function RetroPage() {