[
  {
    "path": ".eslintcache",
    "content": "[{\"/home/shashi/Projects/React Projects/hostel-app/src/reportWebVitals.js\":\"1\",\"/home/shashi/Projects/React Projects/hostel-app/src/components/header.jsx\":\"2\",\"/home/shashi/Projects/React Projects/hostel-app/src/reducers/orphanageReducer.jsx\":\"3\",\"/home/shashi/Projects/React Projects/hostel-app/src/components/orphanage.jsx\":\"4\",\"/home/shashi/Projects/React Projects/hostel-app/src/constants/orphanageConstant.jsx\":\"5\",\"/home/shashi/Projects/React Projects/hostel-app/src/App.js\":\"6\",\"/home/shashi/Projects/React Projects/hostel-app/src/screens/orphangeDetailsView.jsx\":\"7\",\"/home/shashi/Projects/React Projects/hostel-app/src/screens/homeView.jsx\":\"8\",\"/home/shashi/Projects/React Projects/hostel-app/src/components/searchBox.jsx\":\"9\",\"/home/shashi/Projects/React Projects/hostel-app/src/screens/addStudentView.jsx\":\"10\",\"/home/shashi/Projects/React Projects/hostel-app/src/screens/analysisView.jsx\":\"11\",\"/home/shashi/Projects/React Projects/hostel-app/src/actions/orphanageActions.jsx\":\"12\",\"/home/shashi/Projects/React Projects/hostel-app/src/screens/editOrphanageDetails.jsx\":\"13\"},{\"size\":362,\"mtime\":1611587355656,\"results\":\"14\",\"hashOfConfig\":\"15\"},{\"size\":1420,\"mtime\":1611588899653,\"results\":\"16\",\"hashOfConfig\":\"15\"},{\"size\":2572,\"mtime\":1611587355656,\"results\":\"17\",\"hashOfConfig\":\"15\"},{\"size\":1015,\"mtime\":1611587355656,\"results\":\"18\",\"hashOfConfig\":\"15\"},{\"size\":1091,\"mtime\":1611587355656,\"results\":\"19\",\"hashOfConfig\":\"15\"},{\"size\":1181,\"mtime\":1611590345616,\"results\":\"20\",\"hashOfConfig\":\"15\"},{\"size\":3630,\"mtime\":1611587679636,\"results\":\"21\",\"hashOfConfig\":\"15\"},{\"size\":1240,\"mtime\":1611588079853,\"results\":\"22\",\"hashOfConfig\":\"15\"},{\"size\":783,\"mtime\":1611588125620,\"results\":\"23\",\"hashOfConfig\":\"15\"},{\"size\":4986,\"mtime\":1611590107133,\"results\":\"24\",\"hashOfConfig\":\"15\"},{\"size\":1222,\"mtime\":1611591364130,\"results\":\"25\",\"hashOfConfig\":\"15\"},{\"size\":4092,\"mtime\":1611587355653,\"results\":\"26\",\"hashOfConfig\":\"15\"},{\"size\":4936,\"mtime\":1611587355656,\"results\":\"27\",\"hashOfConfig\":\"15\"},{\"filePath\":\"28\",\"messages\":\"29\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"30\"},\"cbixyl\",{\"filePath\":\"31\",\"messages\":\"32\",\"errorCount\":0,\"warningCount\":2,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"source\":\"33\",\"usedDeprecatedRules\":\"30\"},{\"filePath\":\"34\",\"messages\":\"35\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"36\",\"messages\":\"37\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"38\",\"messages\":\"39\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"40\",\"messages\":\"41\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"42\",\"messages\":\"43\",\"errorCount\":0,\"warningCount\":1,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"source\":\"44\",\"usedDeprecatedRules\":\"45\"},{\"filePath\":\"46\",\"messages\":\"47\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"30\"},{\"filePath\":\"48\",\"messages\":\"49\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"45\"},{\"filePath\":\"50\",\"messages\":\"51\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"52\",\"messages\":\"53\",\"errorCount\":0,\"warningCount\":1,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"source\":\"54\",\"usedDeprecatedRules\":\"30\"},{\"filePath\":\"55\",\"messages\":\"56\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"57\",\"messages\":\"58\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},\"/home/shashi/Projects/React Projects/hostel-app/src/reportWebVitals.js\",[],[\"59\",\"60\"],\"/home/shashi/Projects/React Projects/hostel-app/src/components/header.jsx\",[\"61\",\"62\"],\"import React from 'react'\\nimport { Container, Nav, Navbar, NavDropdown } from 'react-bootstrap'\\nimport { Route } from 'react-router-dom'\\nimport { LinkContainer } from 'react-router-bootstrap'\\nimport SearchBox from './searchBox'\\n\\nconst Header = () => {\\n  return (\\n    <header>\\n      <Navbar bg='dark' variant='dark' expand='lg' collapseOnSelect>\\n      <Container>\\n          <LinkContainer to='/'>\\n            <Navbar.Brand>NSD Solutions</Navbar.Brand>\\n          </LinkContainer>\\n          <Navbar.Toggle aria-controls='basic-navbar-nav' />\\n          <Navbar.Collapse id='basic-navbar-nav'>\\n          <Route render={({ history }) => <SearchBox history={history}/>} />\\n\\n            <Nav className='ml-auto'>\\n              <LinkContainer to='/attendance'>\\n                <Nav.Link>\\n                  <i className='fas fa-shopping-cart'> Attendance</i>\\n                </Nav.Link>\\n              </LinkContainer>\\n                <NavDropdown title='More'>\\n                  <LinkContainer to='/addStudent'>\\n                    <NavDropdown.Item>Add Student</NavDropdown.Item>\\n                  </LinkContainer>\\n                  <LinkContainer to='/analysis'>\\n                    <NavDropdown.Item>View Analysis</NavDropdown.Item>\\n                  </LinkContainer>\\n                </NavDropdown>\\n            </Nav>\\n          </Navbar.Collapse>\\n        </Container>\\n      </Navbar>\\n    </header>\\n  )\\n}\\n\\nexport default Header\\n\",\"/home/shashi/Projects/React Projects/hostel-app/src/reducers/orphanageReducer.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/src/components/orphanage.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/src/constants/orphanageConstant.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/src/App.js\",[],\"/home/shashi/Projects/React Projects/hostel-app/src/screens/orphangeDetailsView.jsx\",[\"63\"],\"import React, { useEffect } from 'react'\\nimport { useDispatch, useSelector } from 'react-redux'\\n\\nimport {\\n  getorphanageDetails,\\n  deleteOrphanage,\\n} from '../actions/orphanageActions'\\nimport { Row, Col, Image, ListGroup, Card, Button } from 'react-bootstrap'\\nimport { Link } from 'react-router-dom'\\nimport Rating from '../components/rating'\\nimport Loading from '../components/loader.jsx'\\nimport Message from '../components/message.jsx'\\nimport { ORPHANAGE_DELETE_RESET } from '../constants/orphanageConstant'\\n\\nconst OrphanageDetailsView = ({ history, match }) => {\\n  const orphanageId = match.params.id\\n  const dispatch = useDispatch()\\n  const orphanageDetails = useSelector((state) => state.orphanageDetails)\\n  const { loading, error, orphanage } = orphanageDetails\\n  const orphanageDelete = useSelector((state) => state.orphanageDelete)\\n  const {\\n    loading: loadingDelete,\\n    error: errorDelete,\\n    success,\\n  } = orphanageDelete\\n  useEffect(() => {\\n    if (success) {\\n      dispatch({ type: ORPHANAGE_DELETE_RESET })\\n      history.push('/')\\n    }\\n    console.log(JSON.stringify(orphanage))\\n    if (orphanageId !== orphanage._id) {\\n      dispatch(getorphanageDetails(orphanageId))\\n    }\\n  }, [dispatch, match, success])\\n\\n  const pushToEdit = () => {\\n    history.push(`/orphanage/${orphanage._id}/edit`)\\n  }\\n\\n  const deleteOrphanag = () => {\\n    dispatch(deleteOrphanage(orphanageId))\\n  }\\n\\n  \\n\\n  \\n\\n  return (\\n    <>\\n      <Link className='btn btn-light my-3' to='/'>\\n        Go Back\\n      </Link>\\n      {loadingDelete && <Loading />}\\n      {errorDelete && <Message variant='danger'>{errorDelete}</Message>}\\n      {loading ? (\\n        <Loading />\\n      ) : error ? (\\n        <Message variant='danger'>{error}</Message>\\n      ) : (\\n        <Row>\\n          <Col md={6}>\\n            <Image src={orphanage.image} alt={orphanage.name} fluid />\\n          </Col>\\n          <Col md={3}>\\n            <ListGroup variant='flush'>\\n              <ListGroup.Item>\\n                <h3>{orphanage.name}</h3>\\n              </ListGroup.Item>\\n              <ListGroup.Item>\\n                <Rating\\n                  value={orphanage.rating}\\n                  text={`${orphanage.rating} `}\\n                />\\n              </ListGroup.Item>\\n\\n              <ListGroup.Item>\\n                <Button variant='primary' type='button' onClick={pushToEdit}>\\n                  Edit Details\\n                </Button>\\n              </ListGroup.Item>\\n              <ListGroup.Item>\\n                <Button variant='Link' type='button' onClick={deleteOrphanag}>\\n                  Delete Orphanage\\n                </Button>\\n              </ListGroup.Item>\\n            </ListGroup>\\n          </Col>\\n          <Col md={3}>\\n            <Card>\\n              <ListGroup variant='flush'>\\n                <ListGroup.Item>\\n                  <Row>\\n                    <Col>Contact:</Col>\\n                    <Col>\\n                      <strong>{orphanage.contact}</strong>\\n                    </Col>\\n                  </Row>\\n                </ListGroup.Item>\\n                <ListGroup.Item>\\n                  <Row>\\n                    <Col>Address:</Col>\\n                    <Col>\\n                      {orphanage.city},{orphanage.state}\\n                    </Col>\\n                  </Row>\\n                </ListGroup.Item>\\n                <ListGroup.Item>\\n                  <Button className='btn-block' type='button'>\\n                    Navigate\\n                  </Button>\\n                </ListGroup.Item>\\n                \\n              </ListGroup>\\n            </Card>\\n          </Col>\\n        </Row>\\n      )}\\n    </>\\n  )\\n}\\n\\nexport default OrphanageDetailsView\\n\",[\"64\",\"65\"],\"/home/shashi/Projects/React Projects/hostel-app/src/screens/homeView.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/src/components/searchBox.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/src/screens/addStudentView.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/src/screens/analysisView.jsx\",[\"66\"],\"import React, { useState, useEffect } from \\\"react\\\";\\nimport { Link } from \\\"react-router-dom\\\";\\nimport { Row, Col, Table } from \\\"react-bootstrap\\\";\\nimport DatePicker from \\\"react-datepicker\\\";\\nimport \\\"react-datepicker/dist/react-datepicker.css\\\";\\n\\nconst AnalysisView = () => {\\n  const [startDate, setStartDate] = useState(new Date());\\n\\n  return (\\n    <>\\n      <Link to=\\\"/\\\" className=\\\"btn btn-light my-3\\\">\\n        Go Back\\n      </Link>\\n      <Col >\\n        <Row>\\n          <Col>\\n            <Row>Analysis for </Row>\\n            <strong>\\n              {startDate.toISOString().toString().substring(0, 10)}\\n            </strong>\\n          </Col>\\n          <Col>\\n            <DatePicker\\n              selected={startDate}\\n              onChange={(date) => setStartDate(date)}\\n            />\\n          </Col>\\n        </Row>\\n        <Table striped responsive bordered hover className=\\\"table-sm\\\">\\n          <thead>\\n            <tr>\\n              <th>Name</th>\\n              <th>Contact No</th>\\n              <th>Room No</th>\\n              <th>Block No</th>\\n              <th>Category</th>\\n              <th>Attendance</th>\\n            </tr>\\n          </thead>\\n        </Table>\\n      </Col>\\n    </>\\n  );\\n};\\n\\nexport default AnalysisView;\\n\",\"/home/shashi/Projects/React Projects/hostel-app/src/actions/orphanageActions.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/src/screens/editOrphanageDetails.jsx\",[],{\"ruleId\":\"67\",\"replacedBy\":\"68\"},{\"ruleId\":\"69\",\"replacedBy\":\"70\"},{\"ruleId\":\"71\",\"severity\":1,\"message\":\"72\",\"line\":3,\"column\":10,\"nodeType\":\"73\",\"messageId\":\"74\",\"endLine\":3,\"endColumn\":15},{\"ruleId\":\"71\",\"severity\":1,\"message\":\"75\",\"line\":5,\"column\":8,\"nodeType\":\"73\",\"messageId\":\"74\",\"endLine\":5,\"endColumn\":17},{\"ruleId\":\"76\",\"severity\":1,\"message\":\"77\",\"line\":35,\"column\":6,\"nodeType\":\"78\",\"endLine\":35,\"endColumn\":32,\"suggestions\":\"79\"},{\"ruleId\":\"67\",\"replacedBy\":\"80\"},{\"ruleId\":\"69\",\"replacedBy\":\"81\"},{\"ruleId\":\"71\",\"severity\":1,\"message\":\"82\",\"line\":1,\"column\":27,\"nodeType\":\"73\",\"messageId\":\"74\",\"endLine\":1,\"endColumn\":36},\"no-native-reassign\",[\"83\"],\"no-negated-in-lhs\",[\"84\"],\"no-unused-vars\",\"'Route' is defined but never used.\",\"Identifier\",\"unusedVar\",\"'SearchBox' is defined but never used.\",\"react-hooks/exhaustive-deps\",\"React Hook useEffect has missing dependencies: 'history', 'orphanage', and 'orphanageId'. Either include them or remove the dependency array.\",\"ArrayExpression\",[\"85\"],[\"83\"],[\"84\"],\"'useEffect' is defined but never used.\",\"no-global-assign\",\"no-unsafe-negation\",{\"desc\":\"86\",\"fix\":\"87\"},\"Update the dependencies array to be: [dispatch, history, match, orphanage, orphanageId, success]\",{\"range\":\"88\",\"text\":\"89\"},[1198,1224],\"[dispatch, history, match, orphanage, orphanageId, success]\"]"
  },
  {
    "path": ".gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\nnode_modules/\n\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/frontend/build\n/frontend/dist\n/frontend/node_modules\n\n# misc\n.DS_Store\n.env\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n    \"cmake.configureOnOpen\": true\n}"
  },
  {
    "path": "Procfile",
    "content": "web: node server/index.js"
  },
  {
    "path": "README.md",
    "content": "# 🏠 Hostel Management\n\n**MERN-ish chaos, now with Vite** — Express + MongoDB in the back, React + Redux up front. No Next.js; we’re not that fancy. Yet.\n\n---\n\n## 🚀 Run this thing (3 steps, you’ve got this)\n\n1. **Feed the machine**  \n   ```bash\n   npm install && npm install --prefix frontend\n   ```\n\n2. **Summon Mongo** 🍃  \n   Have MongoDB running somewhere. If it’s not up, the API will ghost you harder than a bad roommate.\n\n3. **Whisper secrets** (repo root, `.env`)  \n   ```env\n   NODE_ENV=development\n   PORT=5000\n   MONGO_URI=mongodb://127.0.0.1:27017/your_db_name\n   JWT_SECRET=make_it_long_and_random_no_password123_pls\n   ```\n\n4. **Hit go** 🎬  \n   ```bash\n   npm run dev\n   ```\n   - UI: [http://localhost:3000](http://localhost:3000)  \n   - API: [http://localhost:5000](http://localhost:5000) (dev says “API is running” — it’s shy, not broken)\n\n**Production build** (when you’re showing off):  \n`npm run build --prefix frontend` then `NODE_ENV=production npm start`\n\n---\n\n## ✨ What it does (feature buffet)\n\n| | |\n|---|---|\n| 🔐 | Register / login (navbar stays minimal until you’re in — we’re not nosy) |\n| 👤 | Student CRUD + details |\n| 📍 | Update student whereabouts |\n| ✅ | Daily attendance |\n| 📊 | Analysis views |\n| 📥 | CSV export for attendance |\n| 🗑️ | Nuke old attendance by “last N days” |\n| 👑 | Admin: user list + toggle admin status |\n\n---\n\n## 🤝 Contributing\n\nPRs welcome. Big ideas? Open an issue first so we can panic together constructively.\n\nTests: `npm test --prefix frontend` (Vitest; add tests if you’re feeling brave).\n"
  },
  {
    "path": "frontend/.eslintcache",
    "content": "[{\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/App.js\":\"1\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/homeView.jsx\":\"2\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/addStudentView.jsx\":\"3\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/index.js\":\"4\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/store.jsx\":\"5\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/header.jsx\":\"6\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/message.jsx\":\"7\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/rating.jsx\":\"8\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/searchBox.jsx\":\"9\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/reducers/studentsReducer.jsx\":\"10\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/constants/studentConstant.jsx\":\"11\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/actions/studentActions.jsx\":\"12\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/student.jsx\":\"13\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/actions/userActions.jsx\":\"14\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/reducers/userReducers.jsx\":\"15\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/Authentication Screens/LoginView.jsx\":\"16\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/formContainer.jsx\":\"17\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/Authentication Screens/RegisterView.jsx\":\"18\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/constants/userConstants.jsx\":\"19\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/analysisView.jsx\":\"20\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/loader.jsx\":\"21\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/footer.jsx\":\"22\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/reportWebVitals.js\":\"23\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/paginate.jsx\":\"24\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/studentDetailsView.jsx\":\"25\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/studentTableView.jsx\":\"26\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/attendanceView.jsx\":\"27\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/reducers/attendanceReducer.jsx\":\"28\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/actions/attendanceActions.jsx\":\"29\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/constants/attendanceConstant.jsx\":\"30\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/analysisComponent.jsx\":\"31\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/attendanceTable.jsx\":\"32\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/attendanceTableComponent.jsx\":\"33\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/profileView.jsx\":\"34\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/userListView.jsx\":\"35\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/userEditView.jsx\":\"36\"},{\"size\":2000,\"mtime\":1612457509687,\"results\":\"37\",\"hashOfConfig\":\"38\"},{\"size\":2760,\"mtime\":1612458544737,\"results\":\"39\",\"hashOfConfig\":\"38\"},{\"size\":7160,\"mtime\":1612266721633,\"results\":\"40\",\"hashOfConfig\":\"38\"},{\"size\":595,\"mtime\":1611587355656,\"results\":\"41\",\"hashOfConfig\":\"38\"},{\"size\":1760,\"mtime\":1612540038213,\"results\":\"42\",\"hashOfConfig\":\"38\"},{\"size\":2509,\"mtime\":1612455514013,\"results\":\"43\",\"hashOfConfig\":\"38\"},{\"size\":236,\"mtime\":1611587355656,\"results\":\"44\",\"hashOfConfig\":\"38\"},{\"size\":1670,\"mtime\":1611587355656,\"results\":\"45\",\"hashOfConfig\":\"38\"},{\"size\":783,\"mtime\":1611588125620,\"results\":\"46\",\"hashOfConfig\":\"38\"},{\"size\":3180,\"mtime\":1612338704456,\"results\":\"47\",\"hashOfConfig\":\"38\"},{\"size\":1297,\"mtime\":1612276158097,\"results\":\"48\",\"hashOfConfig\":\"38\"},{\"size\":4652,\"mtime\":1612511277820,\"results\":\"49\",\"hashOfConfig\":\"38\"},{\"size\":861,\"mtime\":1612458074420,\"results\":\"50\",\"hashOfConfig\":\"38\"},{\"size\":6593,\"mtime\":1612243543269,\"results\":\"51\",\"hashOfConfig\":\"38\"},{\"size\":3520,\"mtime\":1612243170023,\"results\":\"52\",\"hashOfConfig\":\"38\"},{\"size\":2146,\"mtime\":1612242755929,\"results\":\"53\",\"hashOfConfig\":\"38\"},{\"size\":331,\"mtime\":1611587355653,\"results\":\"54\",\"hashOfConfig\":\"38\"},{\"size\":3149,\"mtime\":1612243440719,\"results\":\"55\",\"hashOfConfig\":\"38\"},{\"size\":1502,\"mtime\":1612242844223,\"results\":\"56\",\"hashOfConfig\":\"38\"},{\"size\":3733,\"mtime\":1612540523853,\"results\":\"57\",\"hashOfConfig\":\"38\"},{\"size\":386,\"mtime\":1611587355656,\"results\":\"58\",\"hashOfConfig\":\"38\"},{\"size\":280,\"mtime\":1611587355653,\"results\":\"59\",\"hashOfConfig\":\"38\"},{\"size\":362,\"mtime\":1611587355656,\"results\":\"60\",\"hashOfConfig\":\"38\"},{\"size\":743,\"mtime\":1612503930076,\"results\":\"61\",\"hashOfConfig\":\"38\"},{\"size\":5749,\"mtime\":1612511177533,\"results\":\"62\",\"hashOfConfig\":\"38\"},{\"size\":2402,\"mtime\":1612440885763,\"results\":\"63\",\"hashOfConfig\":\"38\"},{\"size\":1116,\"mtime\":1612453105207,\"results\":\"64\",\"hashOfConfig\":\"38\"},{\"size\":1789,\"mtime\":1612540078413,\"results\":\"65\",\"hashOfConfig\":\"38\"},{\"size\":2462,\"mtime\":1612540492013,\"results\":\"66\",\"hashOfConfig\":\"38\"},{\"size\":859,\"mtime\":1612539882713,\"results\":\"67\",\"hashOfConfig\":\"38\"},{\"size\":2641,\"mtime\":1612539718740,\"results\":\"68\",\"hashOfConfig\":\"38\"},{\"size\":2085,\"mtime\":1612454468233,\"results\":\"69\",\"hashOfConfig\":\"38\"},{\"size\":3361,\"mtime\":1612453607120,\"results\":\"70\",\"hashOfConfig\":\"38\"},{\"size\":3635,\"mtime\":1612455338080,\"results\":\"71\",\"hashOfConfig\":\"38\"},{\"size\":2730,\"mtime\":1612457423720,\"results\":\"72\",\"hashOfConfig\":\"38\"},{\"size\":3182,\"mtime\":1612457679380,\"results\":\"73\",\"hashOfConfig\":\"38\"},{\"filePath\":\"74\",\"messages\":\"75\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"76\"},\"cy2yr9\",{\"filePath\":\"77\",\"messages\":\"78\",\"errorCount\":0,\"warningCount\":1,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"source\":\"79\",\"usedDeprecatedRules\":\"76\"},{\"filePath\":\"80\",\"messages\":\"81\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"82\"},{\"filePath\":\"83\",\"messages\":\"84\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"85\"},{\"filePath\":\"86\",\"messages\":\"87\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"88\",\"messages\":\"89\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"82\"},{\"filePath\":\"90\",\"messages\":\"91\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"92\"},{\"filePath\":\"93\",\"messages\":\"94\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"95\"},{\"filePath\":\"96\",\"messages\":\"97\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"98\"},{\"filePath\":\"99\",\"messages\":\"100\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"101\"},{\"filePath\":\"102\",\"messages\":\"103\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"76\"},{\"filePath\":\"104\",\"messages\":\"105\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"106\",\"messages\":\"107\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"101\"},{\"filePath\":\"108\",\"messages\":\"109\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"76\"},{\"filePath\":\"110\",\"messages\":\"111\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"101\"},{\"filePath\":\"112\",\"messages\":\"113\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"95\"},{\"filePath\":\"114\",\"messages\":\"115\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"101\"},{\"filePath\":\"116\",\"messages\":\"117\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"82\"},{\"filePath\":\"118\",\"messages\":\"119\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"101\"},{\"filePath\":\"120\",\"messages\":\"121\",\"errorCount\":0,\"warningCount\":2,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"source\":\"122\"},{\"filePath\":\"123\",\"messages\":\"124\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"95\"},{\"filePath\":\"125\",\"messages\":\"126\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"101\"},{\"filePath\":\"127\",\"messages\":\"128\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"101\"},{\"filePath\":\"129\",\"messages\":\"130\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"101\"},{\"filePath\":\"131\",\"messages\":\"132\",\"errorCount\":0,\"warningCount\":1,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"source\":\"133\",\"usedDeprecatedRules\":\"101\"},{\"filePath\":\"134\",\"messages\":\"135\",\"errorCount\":0,\"warningCount\":1,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"source\":\"136\",\"usedDeprecatedRules\":\"82\"},{\"filePath\":\"137\",\"messages\":\"138\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"76\"},{\"filePath\":\"139\",\"messages\":\"140\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"141\",\"messages\":\"142\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"143\",\"messages\":\"144\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"145\",\"messages\":\"146\",\"errorCount\":0,\"warningCount\":1,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"source\":null},{\"filePath\":\"147\",\"messages\":\"148\",\"errorCount\":0,\"warningCount\":3,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"source\":\"149\",\"usedDeprecatedRules\":\"82\"},{\"filePath\":\"150\",\"messages\":\"151\",\"errorCount\":0,\"warningCount\":1,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"source\":\"152\"},{\"filePath\":\"153\",\"messages\":\"154\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"95\"},{\"filePath\":\"155\",\"messages\":\"156\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0},{\"filePath\":\"157\",\"messages\":\"158\",\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0,\"usedDeprecatedRules\":\"101\"},\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/App.js\",[],[\"159\",\"160\"],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/homeView.jsx\",[\"161\"],\"import React, { useEffect, useState } from \\\"react\\\";\\nimport { useDispatch, useSelector } from \\\"react-redux\\\";\\nimport Student from \\\"../components/student\\\";\\nimport Loading from \\\"../components/loader.jsx\\\";\\nimport Message from \\\"../components/message.jsx\\\";\\nimport { listStudents } from \\\"../actions/studentActions\\\";\\nimport Paginate from \\\"../components/paginate\\\";\\nimport {\\n  Row,\\n  Col,\\n  ButtonGroup,\\n  ToggleButton,\\n  Container,\\n} from \\\"react-bootstrap\\\";\\nimport StudentsTableView from \\\"./studentTableView\\\";\\n\\nconst HomeView = ({ match, history }) => {\\n  const [isGrid, setIsGrid] = useState(true);\\n  const keyword = match.params.keyword;\\n\\n  const pageNumber = match.params.pageNumber || 1;\\n  const userLogin = useSelector((state) => state.userLogin);\\n  const { loading: userLoading, userInfo } = userLogin;\\n\\n  const dispatch = useDispatch();\\n\\n  const studentsList = useSelector((state) => state.studentsList);\\n  const { loading, error, students, page, pages } = studentsList;\\n\\n  useEffect(() => {\\n    if (!userLoading && !userInfo) {\\n      history.push(\\\"/login\\\");\\n    }\\n    dispatch(listStudents(keyword, pageNumber));\\n  }, [keyword, pageNumber]);\\n\\n  return (\\n    <>\\n      <>\\n        <Container>\\n          <Row className=\\\"justify-content-md-center\\\">\\n            <Col xs lg=\\\"2\\\"></Col>\\n            <Col md=\\\"auto\\\">\\n              <ButtonGroup toggle>\\n                {[\\\"Grid\\\", \\\"Table\\\"].map((type) => (\\n                  <ToggleButton\\n                    key={type}\\n                    type=\\\"radio\\\"\\n                    variant=\\\"secondary\\\"\\n                    name=\\\"radio\\\"\\n                    value={type}\\n                    checked={(isGrid ? \\\"Grid\\\" : \\\"Table\\\") === type}\\n                    onChange={(e) =>\\n                      setIsGrid(e.target.value === \\\"Grid\\\" ? true : false)\\n                    }\\n                  >\\n                    {type === \\\"Grid\\\" ? <> Grid</> : <> Table </>}\\n                  </ToggleButton>\\n                ))}\\n              </ButtonGroup>\\n            </Col>\\n            <Col xs lg=\\\"2\\\"></Col>\\n          </Row>\\n        </Container>\\n      </>\\n\\n      <h1>Students</h1>\\n      {loading ? (\\n        <Loading />\\n      ) : error ? (\\n        <Message variant=\\\"danger\\\">{error}</Message>\\n      ) : isGrid ? (\\n        <>\\n          <Row>\\n            {students.map((student) => (\\n              <Col key={student._id} sm={12} md={6} lg={4} xl={3}>\\n                <Student stuentDetails={student} />\\n              </Col>\\n            ))}\\n          </Row>\\n          <Paginate\\n            pages={pages}\\n            page={page}\\n            keyword={keyword ? keyword : \\\"\\\"}\\n          />\\n        </>\\n      ) : (\\n        <>\\n          <StudentsTableView keyword={keyword} pageNumber={pageNumber} />\\n        </>\\n      )}\\n    </>\\n  );\\n};\\n\\nexport default HomeView;\\n\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/addStudentView.jsx\",[],[\"162\",\"163\"],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/index.js\",[],[\"164\",\"165\"],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/store.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/header.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/message.jsx\",[],[\"166\",\"167\"],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/rating.jsx\",[],[\"168\",\"169\"],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/searchBox.jsx\",[],[\"170\",\"171\"],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/reducers/studentsReducer.jsx\",[],[\"172\",\"173\"],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/constants/studentConstant.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/actions/studentActions.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/student.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/actions/userActions.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/reducers/userReducers.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/Authentication Screens/LoginView.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/formContainer.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/Authentication Screens/RegisterView.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/constants/userConstants.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/analysisView.jsx\",[\"174\",\"175\"],\"import React, { useState, useEffect } from \\\"react\\\";\\nimport { Link } from \\\"react-router-dom\\\";\\nimport { Row, Col, Button, Modal, Form } from \\\"react-bootstrap\\\";\\nimport DatePicker from \\\"react-datepicker\\\";\\nimport { useDispatch, useSelector } from \\\"react-redux\\\";\\nimport \\\"react-datepicker/dist/react-datepicker.css\\\";\\nimport {\\n  deleteAttendanceByDate,\\n  getAnalysisByDate,\\n} from \\\"../actions/attendanceActions\\\";\\nimport AnalysisComponent from \\\"../components/analysisComponent\\\";\\nimport Loading from \\\"../components/loader\\\";\\nimport Message from \\\"../components/message\\\";\\n\\nconst AnalysisView = () => {\\n  const dispatch = useDispatch();\\n  const [modal, setModal] = useState(false);\\n  const [days, setDays] = useState(0);\\n  const [idList, setIdList] = useState([]);\\n  const [startDate, setStartDate] = useState(new Date());\\n  const attendanceAnalysis = useSelector((state) => state.attendanceAnalysis);\\n  const { attendance } = attendanceAnalysis;\\n  const attendanceDelete = useSelector((state) => state.attendanceDelete);\\n  const {\\n    loading: loadingDelete,\\n    success: successDelete,\\n    error: errorDelete,\\n  } = attendanceDelete;\\n  useEffect(() => {\\n    if (attendance) {\\n      var temp = idList;\\n      Object.entries(attendance.details).map((at) => {\\n        temp.push(at[0]);\\n      });\\n\\n      setIdList(temp);\\n    } else {\\n      dispatch(getAnalysisByDate(startDate.toString().substring(0, 15)));\\n    }\\n  }, [attendance, dispatch]);\\n\\n  const changeDate = (date) => {\\n    dispatch(getAnalysisByDate(date.toString().substring(0, 15)));\\n    setStartDate(date);\\n  };\\n  const showModal = () => {\\n    setModal(true);\\n  };\\n  const closeModal = () => {\\n    setModal(false);\\n  };\\n\\n  const startDelete = () => {\\n    setModal(false);\\n    dispatch(deleteAttendanceByDate(days));\\n  };\\n\\n  return (\\n    <>\\n      <Row className=\\\"flex justify-content-between\\\">\\n        <Link to=\\\"/\\\" className=\\\"btn btn-light my-3\\\">\\n          Go Back\\n        </Link>\\n        <div style={{ height: \\\"40px\\\", display: \\\"flex\\\" }}>\\n          <Button variant=\\\"outline-danger\\\" size=\\\"sm\\\" onClick={showModal}>\\n            Delete Attendance\\n          </Button>\\n        </div>\\n      </Row>\\n      {loadingDelete && <Loading />}\\n      {errorDelete && <Message variant=\\\"success\\\">{errorDelete}</Message>}\\n      {successDelete && <Message variant=\\\"success\\\">Attendance Deleted</Message>}\\n\\n      <Col>\\n        <Row>\\n          <Col>\\n            <Row>Analysis for </Row>\\n            <strong>\\n              {startDate.toISOString().toString().substring(0, 10)}\\n            </strong>\\n          </Col>\\n          <Col>\\n            <DatePicker\\n              selected={startDate}\\n              onChange={(date) => changeDate(date)}\\n            />\\n          </Col>\\n        </Row>\\n        <Modal show={modal} animation={true} onHide={closeModal}>\\n          <Modal.Header closeButton>\\n            <Modal.Title>Enter Number of days before to delete</Modal.Title>\\n          </Modal.Header>\\n          <Modal.Body>\\n            <Form>\\n              <Form.Group controlId=\\\"days\\\">\\n                <Form.Label>Enter no of days</Form.Label>\\n                <Form.Control\\n                  type=\\\"number\\\"\\n                  placeholder=\\\"Enter days\\\"\\n                  value={days}\\n                  onChange={(e) => setDays(e.target.value)}\\n                ></Form.Control>\\n              </Form.Group>\\n            </Form>\\n          </Modal.Body>\\n          <Modal.Footer>\\n            <Button variant=\\\"secondary\\\" onClick={closeModal}>\\n              Close\\n            </Button>\\n            <Button variant=\\\"primary\\\" onClick={startDelete}>\\n              Save Changes\\n            </Button>\\n          </Modal.Footer>\\n        </Modal>\\n        {<AnalysisComponent />}\\n      </Col>\\n    </>\\n  );\\n};\\n\\nexport default AnalysisView;\\n\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/loader.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/footer.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/reportWebVitals.js\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/paginate.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/studentDetailsView.jsx\",[\"176\"],\"import React, { useState, useEffect } from \\\"react\\\";\\nimport { Link } from \\\"react-router-dom\\\";\\nimport { useDispatch, useSelector } from \\\"react-redux\\\";\\nimport {\\n  Row,\\n  Col,\\n  Image,\\n  ListGroup,\\n  Card,\\n  Button,\\n  Form,\\n} from \\\"react-bootstrap\\\";\\nimport Loading from \\\"../components/loader\\\";\\nimport Message from \\\"../components/message\\\";\\nimport {\\n  getStudentDetails,\\n  updateStudent,\\n  deleteStudent,\\n} from \\\"../actions/studentActions\\\";\\nimport { STUDENT_UPDATE_RESET } from \\\"../constants/studentConstant\\\";\\nconst StudentDetailsView = ({ match, history }) => {\\n  const [status, setStatus] = useState(\\\"\\\");\\n  const dispatch = useDispatch();\\n  const studentDetails = useSelector((state) => state.studentDetails);\\n  const { loading, error, student } = studentDetails;\\n  const studentUpdate = useSelector((state) => state.studentUpdate);\\n  const {\\n    loading: loadingUpdate,\\n    error: errorUpdate,\\n    success: successUpdate,\\n  } = studentUpdate;\\n  const studentDelete = useSelector((state) => state.studentDelete);\\n  const {\\n    loading: loadingDelete,\\n    error: errorDelete,\\n    success: successDelete,\\n  } = studentDelete;\\n\\n  useEffect(() => {\\n    if (successDelete) {\\n      history.push(\\\"/\\\");\\n    }\\n    if (successUpdate) {\\n      dispatch({ type: STUDENT_UPDATE_RESET });\\n    }\\n    if (!student || !student._id || student._id !== match.params.id) {\\n      dispatch(getStudentDetails(match.params.id));\\n    }\\n    if (student && student._id && !status) {\\n      setStatus(student.status);\\n    }\\n  }, [dispatch, match, successUpdate, successDelete]);\\n\\n  const navigateToEdit = () => {\\n    history.push({\\n      pathname: `/student/edit/${student._id}`,\\n      state: { studentProps: student },\\n    });\\n  };\\n  const updateStatus = () => {\\n    student.status = status;\\n    dispatch(updateStudent(student));\\n  };\\n\\n  const deleteStuden = () => {\\n    if (window.confirm(\\\"Are you sure\\\")) {\\n      dispatch(deleteStudent(student._id));\\n    }\\n  };\\n  return (\\n    <>\\n      <Link className=\\\"btn btn-light my-3\\\" to=\\\"/\\\">\\n        Go Back\\n      </Link>\\n      {loading || loadingUpdate || loadingDelete ? (\\n        <Loading />\\n      ) : error ? (\\n        <Message variant=\\\"danger\\\">{error}</Message>\\n      ) : (\\n        <>\\n          {errorUpdate && <Message variant=\\\"danger\\\">{errorUpdate}</Message>}\\n          {errorDelete && <Message variant=\\\"danger\\\">{errorDelete}</Message>}\\n          {student && (\\n            <Row>\\n              <Col md={3}>\\n                <Image src={student.image} alt={student.name} fluid />\\n              </Col>\\n              <Col md={3}>\\n                <ListGroup variant=\\\"flush\\\">\\n                  <ListGroup.Item>\\n                    <h3>{student.name}</h3>\\n                  </ListGroup.Item>\\n                  <ListGroup.Item>\\n                    <span>Phone No:{student.contact}</span>\\n                  </ListGroup.Item>\\n                  <ListGroup.Item>\\n                    <span>Father Contact:{student.fatherContact}</span>\\n                  </ListGroup.Item>\\n                  <ListGroup.Item>\\n                    <span>City:{student.city}</span>\\n                  </ListGroup.Item>\\n                  <ListGroup.Item>\\n                    <span>Address:{student.address}</span>\\n                  </ListGroup.Item>\\n                </ListGroup>\\n              </Col>\\n              <Col md={4}>\\n                <Card>\\n                  <ListGroup variant=\\\"flush\\\">\\n                    <ListGroup.Item>\\n                      <Row>\\n                        <Col>Room No:</Col>\\n                        <Col> {student.roomNo}</Col>\\n                      </Row>\\n                    </ListGroup.Item>\\n                    <ListGroup.Item>\\n                      <Row>\\n                        <Col>Block No:</Col>\\n                        <Col> {student.blockNo}</Col>\\n                      </Row>\\n                    </ListGroup.Item>\\n                    <ListGroup.Item>\\n                      <Row>\\n                        <Col>Status:</Col>\\n                        <Col>\\n                          <Form.Control\\n                            size=\\\"sm\\\"\\n                            as=\\\"select\\\"\\n                            value={status}\\n                            onChange={(e) => setStatus(e.target.value)}\\n                          >\\n                            {[\\\"Hostel\\\", \\\"Outside\\\", \\\"Home\\\"].map((x) => (\\n                              <option key={x} value={x}>\\n                                {x}\\n                              </option>\\n                            ))}\\n                          </Form.Control>\\n                        </Col>\\n                      </Row>\\n                    </ListGroup.Item>\\n                    <ListGroup.Item>\\n                      <Button\\n                        className=\\\"btn-block\\\"\\n                        type=\\\"button\\\"\\n                        onClick={updateStatus}\\n                      >\\n                        Update\\n                      </Button>\\n                    </ListGroup.Item>\\n                  </ListGroup>\\n                </Card>\\n              </Col>\\n              <Col>\\n                <ListGroup variant=\\\"flush\\\">\\n                  <Row>\\n                    <ListGroup.Item variant=\\\"secondary\\\">\\n                      <Button onClick={navigateToEdit}>\\n                        <i className=\\\"fas fa-edit\\\"></i>\\n                      </Button>\\n                    </ListGroup.Item>\\n                    <ListGroup.Item>\\n                      <Button variant=\\\"danger\\\" onClick={deleteStuden}>\\n                        <i className=\\\"fas fa-trash\\\"></i>\\n                      </Button>\\n                    </ListGroup.Item>\\n                  </Row>\\n                </ListGroup>\\n              </Col>\\n            </Row>\\n          )}\\n        </>\\n      )}\\n    </>\\n  );\\n};\\n\\nexport default StudentDetailsView;\\n\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/studentTableView.jsx\",[\"177\"],\"import React, { useEffect } from \\\"react\\\";\\nimport { Table } from \\\"react-bootstrap\\\";\\nimport { useDispatch, useSelector } from \\\"react-redux\\\";\\nimport Message from \\\"../components/message\\\";\\nimport Loader from \\\"../components/loader\\\";\\nimport Paginate from \\\"../components/paginate\\\";\\nimport { listStudents } from \\\"../actions/studentActions\\\";\\nimport { Link } from \\\"react-router-dom\\\";\\n\\nconst StudentsTableView = ({ keyword, pageNumber }) => {\\n  const dispatch = useDispatch();\\n\\n  const studentsList = useSelector((state) => state.studentsList);\\n  const { loading, error, students, page, pages } = studentsList;\\n  useEffect(() => {\\n    if (!students) {\\n      dispatch(listStudents(keyword, pageNumber));\\n    }\\n  }, [dispatch, keyword, pageNumber]);\\n  return (\\n    <>\\n      {loading ? (\\n        <Loader />\\n      ) : error ? (\\n        <Message variant=\\\"danger\\\">{error}</Message>\\n      ) : (\\n        <>\\n          <Table striped bordered hover responsive className=\\\"table-sm\\\">\\n            <thead>\\n              <tr>\\n                <th>Stream</th>\\n                <th>NAME</th>\\n                <th>STATUS</th>\\n                <th>CONTACT</th>\\n                <th>ROOM NO</th>\\n                <th>CITY</th>\\n              </tr>\\n            </thead>\\n            <tbody>\\n              {students.map((student) => (\\n                <tr key={student._id}>\\n                  <td>{student.category}</td>\\n                  <td>\\n                    <Link to={`/student/${student._id}`}>{student.name}</Link>\\n                  </td>\\n                  <td>\\n                    <span\\n                      style={{\\n                        color:\\n                          student.status === \\\"Outside\\\"\\n                            ? \\\"red\\\"\\n                            : student.status === \\\"Home\\\"\\n                            ? \\\"blue\\\"\\n                            : \\\"black\\\",\\n                      }}\\n                    >\\n                      {student.status}\\n                    </span>\\n                  </td>\\n                  <td>\\n                    <a href={`tel:${student.contact}`}>{student.contact}</a>\\n                  </td>\\n                  <td>{student.roomNo}</td>\\n                  <td>{student.city}</td>\\n                </tr>\\n              ))}\\n            </tbody>\\n          </Table>\\n          <Paginate pages={pages} page={page} isAdmin={true} />\\n        </>\\n      )}\\n    </>\\n  );\\n};\\n\\nexport default StudentsTableView;\\n\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/attendanceView.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/reducers/attendanceReducer.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/actions/attendanceActions.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/constants/attendanceConstant.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/analysisComponent.jsx\",[\"178\"],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/attendanceTable.jsx\",[\"179\",\"180\",\"181\"],\"import React, { useEffect, useState } from \\\"react\\\";\\nimport { useSelector, useDispatch } from \\\"react-redux\\\";\\nimport Loading from \\\"./loader\\\";\\nimport Message from \\\"./message\\\";\\nimport AttendanceTableComponent from \\\"./attendanceTableComponent\\\";\\n\\nconst AttendanceTable = ({ roomNo }) => {\\n  const dispatch = useDispatch();\\n  const [attendanceMap, setAttendanceMap] = useState({});\\n\\n  const getStudentsByRoomNo = useSelector((state) => state.getStudentsByRoomNo);\\n  const { loading, error, students, attendance } = getStudentsByRoomNo;\\n  const attendanceDataEnter = useSelector((state) => state.attendanceDataEnter);\\n  const {\\n    loading: loadingAttendance,\\n    error: errorAttendance,\\n  } = attendanceDataEnter;\\n  useEffect(() => {\\n    if (students) {\\n      arrangeTable();\\n    }\\n  }, [dispatch, attendance, attendanceMap, students]);\\n\\n  const arrangeTable = () => {\\n    if (attendance) {\\n      var tempMap = attendanceMap;\\n      students.map((student) => {\\n        if (attendance.data[student._id]) {\\n          tempMap[student._id] = attendance.data[student._id];\\n        } else {\\n          tempMap[student._id] = \\\"Hostel\\\";\\n        }\\n      });\\n      setAttendanceMap(attendanceMap);\\n    } else {\\n      students.map((student) => {\\n        var temp = attendanceMap;\\n        temp[student._id] = \\\"Hostel\\\";\\n        setAttendanceMap(temp);\\n      });\\n    }\\n    var temp = attendanceMap;\\n    setAttendanceMap(temp);\\n  };\\n\\n  return (\\n    <>\\n      {error && <Message variant=\\\"danger\\\">{error}</Message>}\\n      {loading || loadingAttendance ? (\\n        <Loading />\\n      ) : (\\n        <>\\n          {errorAttendance && (\\n            <Message variant=\\\"danger\\\">{errorAttendance}</Message>\\n          )}\\n          {students && (\\n            <>\\n              <AttendanceTableComponent\\n                students={students}\\n                attendanceMap={attendanceMap}\\n                setAttendanceMap={setAttendanceMap}\\n                attendance={attendance}\\n                roomNo={roomNo}\\n              />\\n            </>\\n          )}\\n        </>\\n      )}\\n    </>\\n  );\\n};\\n\\nexport default AttendanceTable;\\n\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/components/attendanceTableComponent.jsx\",[\"182\"],\"import React, { useEffect } from \\\"react\\\";\\nimport { Table, Form, Button } from \\\"react-bootstrap\\\";\\nimport { useDispatch } from \\\"react-redux\\\";\\nimport { postAttendance } from \\\"../actions/attendanceActions\\\";\\nimport { Link } from \\\"react-router-dom\\\";\\nconst AttendanceTableComponent = ({\\n  students,\\n  attendanceMap,\\n  setAttendanceMap,\\n  attendance,\\n  roomNo,\\n}) => {\\n  const dispatch = useDispatch();\\n  useEffect(() => {}, [dispatch, attendanceMap]);\\n  const updateAttendance = () => {\\n    if (attendance) {\\n      if (!attendance.roomNo.includes(roomNo)) {\\n        attendance.roomNo.push(roomNo);\\n      }\\n    }\\n    const roomData = attendance ? attendance.roomNo : roomNo;\\n    const dataData = attendanceMap;\\n    const detailsData = attendance ? attendance.details : {};\\n    students.map((student) => {\\n      detailsData[student._id] = {\\n        name: student.name,\\n        contact: student.contact,\\n        roomNo: student.roomNo,\\n      };\\n    });\\n\\n    dispatch(\\n      postAttendance({\\n        roomNo: roomData,\\n        details: detailsData,\\n        data: dataData,\\n      })\\n    );\\n  };\\n  return (\\n    <>\\n      <Table striped bordered hover responsive className=\\\"table-sm\\\">\\n        <thead>\\n          <tr>\\n            <th>NAME</th>\\n            <th>Attendance</th>\\n            <th>STATUS</th>\\n            <th>CONTACT</th>\\n            <th>CITY</th>\\n          </tr>\\n        </thead>\\n        <tbody>\\n          {students &&\\n            students.map((student) => (\\n              <>\\n                <tr key={student._id}>\\n                  <td>\\n                    <Link to={`/student/${student._id}`}>{student.name}</Link>\\n                  </td>\\n                  <td>\\n                    <Form>\\n                      <Form.Group controlId=\\\"status\\\">\\n                        <Form.Control\\n                          as=\\\"select\\\"\\n                          size=\\\"sm\\\"\\n                          defaultValue={attendanceMap[student._id]}\\n                          onChange={(e) => {\\n                            var tempMap = attendanceMap;\\n                            tempMap[student._id] = e.target.value;\\n                            setAttendanceMap(tempMap);\\n                          }}\\n                        >\\n                          <option>Hostel</option>\\n                          <option>Home</option>\\n                          <option>outside</option>\\n                        </Form.Control>\\n                      </Form.Group>\\n                    </Form>\\n                  </td>\\n                  <td>\\n                    <span\\n                      style={{\\n                        color:\\n                          student.status === \\\"Outside\\\"\\n                            ? \\\"red\\\"\\n                            : student.status === \\\"Home\\\"\\n                            ? \\\"blue\\\"\\n                            : \\\"black\\\",\\n                      }}\\n                    >\\n                      {student.status}\\n                    </span>\\n                  </td>\\n                  <td>\\n                    <a href={`tel:${student.contact}`}>{student.contact}</a>\\n                  </td>\\n                  <td>{student.city}</td>\\n                </tr>\\n              </>\\n            ))}\\n        </tbody>\\n      </Table>\\n      <Button variant=\\\"success\\\" onClick={updateAttendance}>\\n        Update Attendance\\n      </Button>\\n    </>\\n  );\\n};\\n\\nexport default AttendanceTableComponent;\\n\",\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/profileView.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/userListView.jsx\",[],\"/home/shashi/Projects/React Projects/hostel-app/frontend/src/screens/userEditView.jsx\",[],{\"ruleId\":\"183\",\"replacedBy\":\"184\"},{\"ruleId\":\"185\",\"replacedBy\":\"186\"},{\"ruleId\":\"187\",\"severity\":1,\"message\":\"188\",\"line\":35,\"column\":6,\"nodeType\":\"189\",\"endLine\":35,\"endColumn\":27,\"suggestions\":\"190\"},{\"ruleId\":\"183\",\"replacedBy\":\"191\"},{\"ruleId\":\"185\",\"replacedBy\":\"192\"},{\"ruleId\":\"183\",\"replacedBy\":\"193\"},{\"ruleId\":\"185\",\"replacedBy\":\"194\"},{\"ruleId\":\"183\",\"replacedBy\":\"195\"},{\"ruleId\":\"185\",\"replacedBy\":\"196\"},{\"ruleId\":\"183\",\"replacedBy\":\"197\"},{\"ruleId\":\"185\",\"replacedBy\":\"198\"},{\"ruleId\":\"183\",\"replacedBy\":\"199\"},{\"ruleId\":\"185\",\"replacedBy\":\"200\"},{\"ruleId\":\"183\",\"replacedBy\":\"201\"},{\"ruleId\":\"185\",\"replacedBy\":\"202\"},{\"ruleId\":\"203\",\"severity\":1,\"message\":\"204\",\"line\":32,\"column\":51,\"nodeType\":\"205\",\"messageId\":\"206\",\"endLine\":32,\"endColumn\":53},{\"ruleId\":\"187\",\"severity\":1,\"message\":\"207\",\"line\":40,\"column\":6,\"nodeType\":\"189\",\"endLine\":40,\"endColumn\":28,\"suggestions\":\"208\"},{\"ruleId\":\"187\",\"severity\":1,\"message\":\"209\",\"line\":52,\"column\":6,\"nodeType\":\"189\",\"endLine\":52,\"endColumn\":53,\"suggestions\":\"210\"},{\"ruleId\":\"187\",\"severity\":1,\"message\":\"211\",\"line\":19,\"column\":6,\"nodeType\":\"189\",\"endLine\":19,\"endColumn\":37,\"suggestions\":\"212\"},{\"ruleId\":\"203\",\"severity\":1,\"message\":\"204\",\"line\":22,\"column\":56,\"nodeType\":\"205\",\"messageId\":\"206\",\"endLine\":22,\"endColumn\":58},{\"ruleId\":\"187\",\"severity\":1,\"message\":\"213\",\"line\":22,\"column\":6,\"nodeType\":\"189\",\"endLine\":22,\"endColumn\":53,\"suggestions\":\"214\"},{\"ruleId\":\"203\",\"severity\":1,\"message\":\"204\",\"line\":27,\"column\":30,\"nodeType\":\"205\",\"messageId\":\"206\",\"endLine\":27,\"endColumn\":32},{\"ruleId\":\"203\",\"severity\":1,\"message\":\"204\",\"line\":36,\"column\":30,\"nodeType\":\"205\",\"messageId\":\"206\",\"endLine\":36,\"endColumn\":32},{\"ruleId\":\"203\",\"severity\":1,\"message\":\"204\",\"line\":24,\"column\":28,\"nodeType\":\"205\",\"messageId\":\"206\",\"endLine\":24,\"endColumn\":30},\"no-native-reassign\",[\"215\"],\"no-negated-in-lhs\",[\"216\"],\"react-hooks/exhaustive-deps\",\"React Hook useEffect has missing dependencies: 'dispatch', 'history', 'userInfo', and 'userLoading'. Either include them or remove the dependency array.\",\"ArrayExpression\",[\"217\"],[\"215\"],[\"216\"],[\"215\"],[\"216\"],[\"215\"],[\"216\"],[\"215\"],[\"216\"],[\"215\"],[\"216\"],[\"215\"],[\"216\"],\"array-callback-return\",\"Array.prototype.map() expects a return value from arrow function.\",\"ArrowFunctionExpression\",\"expectedInside\",\"React Hook useEffect has missing dependencies: 'idList' and 'startDate'. Either include them or remove the dependency array.\",[\"218\"],\"React Hook useEffect has missing dependencies: 'history', 'status', and 'student'. Either include them or remove the dependency array.\",[\"219\"],\"React Hook useEffect has a missing dependency: 'students'. Either include it or remove the dependency array.\",[\"220\"],\"React Hook useEffect has a missing dependency: 'arrangeTable'. Either include it or remove the dependency array.\",[\"221\"],\"no-global-assign\",\"no-unsafe-negation\",{\"desc\":\"222\",\"fix\":\"223\"},{\"desc\":\"224\",\"fix\":\"225\"},{\"desc\":\"226\",\"fix\":\"227\"},{\"desc\":\"228\",\"fix\":\"229\"},{\"desc\":\"230\",\"fix\":\"231\"},\"Update the dependencies array to be: [dispatch, history, keyword, pageNumber, userInfo, userLoading]\",{\"range\":\"232\",\"text\":\"233\"},\"Update the dependencies array to be: [attendance, dispatch, idList, startDate]\",{\"range\":\"234\",\"text\":\"235\"},\"Update the dependencies array to be: [dispatch, match, successUpdate, successDelete, student, status, history]\",{\"range\":\"236\",\"text\":\"237\"},\"Update the dependencies array to be: [dispatch, keyword, pageNumber, students]\",{\"range\":\"238\",\"text\":\"239\"},\"Update the dependencies array to be: [dispatch, attendance, attendanceMap, students, arrangeTable]\",{\"range\":\"240\",\"text\":\"241\"},[1116,1137],\"[dispatch, history, keyword, pageNumber, userInfo, userLoading]\",[1402,1424],\"[attendance, dispatch, idList, startDate]\",[1494,1541],\"[dispatch, match, successUpdate, successDelete, student, status, history]\",[702,733],\"[dispatch, keyword, pageNumber, students]\",[780,827],\"[dispatch, attendance, attendanceMap, students, arrangeTable]\"]"
  },
  {
    "path": "frontend/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" href=\"/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta name=\"description\" content=\"Hostel management application\" />\n    <link rel=\"apple-touch-icon\" href=\"/logo192.png\" />\n    <link\n      rel=\"stylesheet\"\n      href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css\"\n      integrity=\"sha512-+4zCK9k+qNFUR5X+cKL9EIR+ZOhtIloNl9GIKS57V1MyNsYpYcUrUeQc9vNfzsWfV28IaLL3i96P9sdNyeRssA==\"\n      crossorigin=\"anonymous\"\n    />\n    <link rel=\"manifest\" href=\"/manifest.json\" />\n    <title>Hostel Management</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.jsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "frontend/package.json",
    "content": "{\n  \"name\": \"hostel-app\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"preview\": \"vite preview\",\n    \"test\": \"vitest run --passWithNoTests\"\n  },\n  \"dependencies\": {\n    \"@redux-devtools/extension\": \"^3.3.0\",\n    \"axios\": \"^1.7.9\",\n    \"react\": \"^18.3.1\",\n    \"react-bootstrap\": \"^1.6.8\",\n    \"react-csv\": \"^2.2.2\",\n    \"react-datepicker\": \"^4.25.0\",\n    \"react-dom\": \"^18.3.1\",\n    \"react-redux\": \"^8.1.3\",\n    \"react-router-bootstrap\": \"^0.25.0\",\n    \"react-router-dom\": \"^5.3.4\",\n    \"redux\": \"^4.2.1\",\n    \"redux-thunk\": \"^2.4.2\",\n    \"web-vitals\": \"^4.2.4\"\n  },\n  \"devDependencies\": {\n    \"@testing-library/jest-dom\": \"^6.6.3\",\n    \"@testing-library/react\": \"^14.3.1\",\n    \"@testing-library/user-event\": \"^14.5.2\",\n    \"@vitejs/plugin-react\": \"^4.3.4\",\n    \"jsdom\": \"^25.0.1\",\n    \"vite\": \"^6.0.11\",\n    \"vitest\": \"^3.0.4\"\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}\n"
  },
  {
    "path": "frontend/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    },\n    {\n      \"src\": \"logo192.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    },\n    {\n      \"src\": \"logo512.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"512x512\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "frontend/public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "frontend/src/App.jsx",
    "content": "import React from \"react\";\nimport HomeView from \"./screens/homeView\";\nimport { BrowserRouter as Router, Route } from \"react-router-dom\";\nimport { Container } from \"react-bootstrap\";\nimport Header from \"./components/header\";\nimport Footer from \"./components/footer\";\nimport AddStudentView from \"./screens/addStudentView\";\nimport AnalysisView from \"./screens/analysisView\";\nimport LoginView from \"./screens/Authentication Screens/LoginView\";\nimport RegisterView from \"./screens/Authentication Screens/RegisterView\";\nimport StudentDetailsView from \"./screens/studentDetailsView\";\nimport AttendanceView from \"./screens/attendanceView\";\nimport ProfileView from \"./screens/profileView\";\nimport UserListView from \"./screens/userListView\";\nimport UserEditView from \"./screens/userEditView\";\n\nconst App = () => {\n  return (\n    <Router>\n      <Header />\n      <main className=\"py-3\">\n        <Container>\n          <Route path=\"/user/:userId/edit\" component={UserEditView} />\n          <Route path=\"/userList\" component={UserListView} />\n          <Route path=\"/profile\" component={ProfileView} />\n          <Route path=\"/attendance\" component={AttendanceView} />\n          <Route path=\"/analysis\" component={AnalysisView} />\n          <Route path=\"/addStudent\" component={AddStudentView} />\n          <Route path=\"/student/edit/:id\" component={AddStudentView} exact />\n          <Route path=\"/student/:id\" component={StudentDetailsView} exact />\n          <Route path=\"/login\" component={LoginView} exact />\n          <Route path=\"/register\" component={RegisterView} exact />\n          <Route path=\"/search/:keyword\" component={HomeView} exact />\n          <Route path=\"/page/:pageNumber\" component={HomeView} exact />\n          <Route\n            path=\"/search/:keyword/page/:pageNumber\"\n            component={HomeView}\n            exact\n          />\n          <Route path=\"/\" component={HomeView} exact />\n        </Container>\n      </main>\n      <Footer />\n    </Router>\n  );\n};\n\nexport default App;\n"
  },
  {
    "path": "frontend/src/actions/attendanceActions.jsx",
    "content": "import {\n  ATTENDANCE_DATA_ENTER_FAIL,\n  ATTENDANCE_DATA_ENTER_REQUEST,\n  ATTENDANCE_DATA_ENTER_SUCCESS,\n  ATTENDANCE_ANALYSIS_FAIL,\n  ATTENDANCE_ANALYSIS_REQUEST,\n  ATTENDANCE_ANALYSIS_SUCCESS,\n  ATTENDANCE_DELETE_REQUEST,\n  ATTENDANCE_DELETE_SUCCESS,\n  ATTENDANCE_DELETE_FAIL,\n} from \"../constants/attendanceConstant\";\nimport axios from \"axios\";\n\nexport const postAttendance = (attendance) => async (dispatch, getState) => {\n  try {\n    dispatch({ type: ATTENDANCE_DATA_ENTER_REQUEST });\n    const {\n      userLogin: { userInfo },\n    } = getState();\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n\n    const { data } = await axios.post(`/attendance/`, attendance, config);\n    dispatch({\n      type: ATTENDANCE_DATA_ENTER_SUCCESS,\n      payload: data,\n    });\n  } catch (error) {\n    dispatch({\n      type: ATTENDANCE_DATA_ENTER_FAIL,\n      payload:\n        error.response && error.response.data.message\n          ? error.response.data.message\n          : error.message,\n    });\n  }\n};\n\nexport const getAnalysisByDate = (date) => async (dispatch, getState) => {\n  try {\n    dispatch({ type: ATTENDANCE_ANALYSIS_REQUEST });\n    const {\n      userLogin: { userInfo },\n    } = getState();\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n    const { data } = await axios.post(\n      `/attendance/getAnalysis`,\n      { date: date },\n      config\n    );\n\n    dispatch({\n      type: ATTENDANCE_ANALYSIS_SUCCESS,\n      payload: data,\n    });\n  } catch (error) {\n    dispatch({\n      type: ATTENDANCE_ANALYSIS_FAIL,\n      payload:\n        error.response && error.response.data.message\n          ? error.response.data.message\n          : error.message,\n    });\n  }\n};\n\nexport const deleteAttendanceByDate = (days) => async (dispatch, getState) => {\n  try {\n    dispatch({ type: ATTENDANCE_DELETE_REQUEST });\n    const {\n      userLogin: { userInfo },\n    } = getState();\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n    const { data } = await axios.delete(`/attendance/${days}`, config);\n\n    dispatch({\n      type: ATTENDANCE_DELETE_SUCCESS,\n      payload: data,\n    });\n  } catch (error) {\n    dispatch({\n      type: ATTENDANCE_DELETE_FAIL,\n      payload:\n        error.response && error.response.data.message\n          ? error.response.data.message\n          : error.message,\n    });\n  }\n};\n"
  },
  {
    "path": "frontend/src/actions/studentActions.jsx",
    "content": "import {\n  STUDENT_LIST_REQUEST,\n  STUDENT_LIST_SUCCESS,\n  STUDENT_LIST_ERROR,\n  STUDENT_ADD_ERROR,\n  STUDENT_ADD_REQUEST,\n  STUDENT_ADD_SUCCESS,\n  STUDENT_DELETE_ERROR,\n  STUDENT_DELETE_REQUEST,\n  STUDENT_DELETE_SUCCESS,\n  STUDENT_UPDATE_ERROR,\n  STUDENT_UPDATE_REQUEST,\n  STUDENT_UPDATE_SUCCESS,\n  STUDENT_DETAILS_REQUEST,\n  STUDENT_DETAILS_SUCCESS,\n  STUDENT_DETAILS_ERROR,\n  STUDENT_ROOM_NO_REQUEST,\n  STUDENT_ROOM_NO_SUCCESS,\n  STUDENT_ROOM_NO_ERROR,\n} from \"../constants/studentConstant\";\nimport axios from \"axios\";\n\nexport const listStudents = (keyword = \"\", pageNumber = \"\") => async (\n  dispatch,\n  getState\n) => {\n  try {\n    dispatch({ type: STUDENT_LIST_REQUEST });\n    const {\n      userLogin: { userInfo },\n    } = getState();\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n\n    const { data } = await axios.get(\n      `/student/all?keyword=${keyword}&pageNumber=${pageNumber}`,\n      config\n    );\n    dispatch({\n      type: STUDENT_LIST_SUCCESS,\n      payload: data,\n    });\n  } catch (error) {\n    dispatch({\n      type: STUDENT_LIST_ERROR,\n      payload:\n        error.response && error.response.data.message\n          ? error.response.data.message\n          : error.message,\n    });\n  }\n};\n\nexport const addStudent = (student) => async (dispatch, getState) => {\n  try {\n    dispatch({ type: STUDENT_ADD_REQUEST });\n    const {\n      userLogin: { userInfo },\n    } = getState();\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n\n    const { data } = await axios.post(`/student/addStudent`, student, config);\n\n    dispatch({\n      type: STUDENT_ADD_SUCCESS,\n      payload: data,\n    });\n  } catch (error) {\n    dispatch({\n      type: STUDENT_ADD_ERROR,\n      payload:\n        error.response && error.response.data.message\n          ? error.response.data.message\n          : error.message,\n    });\n  }\n};\n\nexport const getStudentDetails = (id) => async (dispatch, getState) => {\n  try {\n    dispatch({ type: STUDENT_DETAILS_REQUEST });\n    const {\n      userLogin: { userInfo },\n    } = getState();\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n\n    const { data } = await axios.get(`/student/${id}`, config);\n\n    dispatch({\n      type: STUDENT_DETAILS_SUCCESS,\n      payload: data,\n    });\n  } catch (error) {\n    dispatch({\n      type: STUDENT_DETAILS_ERROR,\n      payload:\n        error.response && error.response.data.message\n          ? error.response.data.message\n          : error.message,\n    });\n  }\n};\n\nexport const updateStudent = (student) => async (dispatch, getState) => {\n  try {\n    dispatch({ type: STUDENT_UPDATE_REQUEST });\n    const {\n      userLogin: { userInfo },\n    } = getState();\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n    const { data } = await axios.put(\n      `/student/${student._id}`,\n      student,\n      config\n    );\n\n    dispatch({\n      type: STUDENT_UPDATE_SUCCESS,\n      payload: data,\n    });\n  } catch (error) {\n    dispatch({\n      type: STUDENT_UPDATE_ERROR,\n      payload:\n        error.response && error.response.data.message\n          ? error.response.data.message\n          : error.message,\n    });\n  }\n};\n\nexport const deleteStudent = (id) => async (dispatch, getState) => {\n  try {\n    dispatch({ type: STUDENT_DELETE_REQUEST });\n    const {\n      userLogin: { userInfo },\n    } = getState();\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n\n    const { data } = await axios.delete(`/student/${id}`, config);\n\n    dispatch({\n      type: STUDENT_DELETE_SUCCESS,\n      payload: data,\n    });\n  } catch (error) {\n    dispatch({\n      type: STUDENT_DELETE_ERROR,\n      payload:\n        error.response && error.response.data.message\n          ? error.response.data.message\n          : error.message,\n    });\n  }\n};\n\nexport const getStudentsByRoomNo = (roomNo) => async (dispatch, getState) => {\n  try {\n    dispatch({ type: STUDENT_ROOM_NO_REQUEST });\n    const {\n      userLogin: { userInfo },\n    } = getState();\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n\n    const { data } = await axios.get(`/student/room/${roomNo}`, config);\n    dispatch({\n      type: STUDENT_ROOM_NO_SUCCESS,\n      payload: data,\n    });\n  } catch (error) {\n    dispatch({\n      type: STUDENT_ROOM_NO_ERROR,\n      payload:\n        error.response && error.response.data.message\n          ? error.response.data.message\n          : error.message,\n    });\n  }\n};\n"
  },
  {
    "path": "frontend/src/actions/userActions.jsx",
    "content": "import axios from \"axios\";\nimport {\n  USER_DETAILS_FAIL,\n  USER_DETAILS_REQUEST,\n  USER_DETAILS_SUCCESS,\n  USER_LOGIN_FAIL,\n  USER_LOGIN_REQUEST,\n  USER_LOGIN_SUCCESS,\n  USER_LOGOUT,\n  USER_REGISTER_FAIL,\n  USER_REGISTER_REQUEST,\n  USER_REGISTER_SUCCESS,\n  USER_UPDATE_PROFILE_FAIL,\n  USER_UPDATE_PROFILE_REQUEST,\n  USER_UPDATE_PROFILE_SUCCESS,\n  USER_DETAILS_RESET,\n  USER_LIST_FAIL,\n  USER_LIST_SUCCESS,\n  USER_LIST_REQUEST,\n  USER_LIST_RESET,\n  USER_DELETE_REQUEST,\n  USER_DELETE_SUCCESS,\n  USER_DELETE_FAIL,\n  USER_UPDATE_FAIL,\n  USER_UPDATE_SUCCESS,\n  USER_UPDATE_REQUEST,\n} from \"../constants/userConstants\";\n\nexport const login = (email, password) => async (dispatch) => {\n  try {\n    dispatch({\n      type: USER_LOGIN_REQUEST,\n    });\n\n    const config = {\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n    };\n\n    const { data } = await axios.post(\n      \"/users/login\",\n      { email, password },\n      config\n    );\n\n    dispatch({\n      type: USER_LOGIN_SUCCESS,\n      payload: data,\n    });\n\n    localStorage.setItem(\"userInfo\", JSON.stringify(data));\n  } catch (error) {\n    dispatch({\n      type: USER_LOGIN_FAIL,\n      payload:\n        error.response && error.response.data.message\n          ? error.response.data.message\n          : error.message,\n    });\n  }\n};\n\nexport const logout = () => (dispatch) => {\n  localStorage.removeItem(\"userInfo\");\n  dispatch({ type: USER_LOGOUT });\n  dispatch({ type: USER_DETAILS_RESET });\n  dispatch({ type: USER_LIST_RESET });\n  document.location.href = \"/login\";\n};\n\nexport const register = (name, email, password) => async (dispatch) => {\n  try {\n    dispatch({\n      type: USER_REGISTER_REQUEST,\n    });\n\n    const config = {\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n    };\n\n    const { data } = await axios.post(\n      \"/users\",\n      { name, email, password },\n      config\n    );\n\n    dispatch({\n      type: USER_REGISTER_SUCCESS,\n      payload: data,\n    });\n\n    dispatch({\n      type: USER_LOGIN_SUCCESS,\n      payload: data,\n    });\n\n    localStorage.setItem(\"userInfo\", JSON.stringify(data));\n  } catch (error) {\n    dispatch({\n      type: USER_REGISTER_FAIL,\n      payload:\n        error.response && error.response.data.message\n          ? error.response.data.message\n          : error.message,\n    });\n  }\n};\n\nexport const getUserDetails = (id) => async (dispatch, getState) => {\n  try {\n    dispatch({\n      type: USER_DETAILS_REQUEST,\n    });\n\n    const {\n      userLogin: { userInfo },\n    } = getState();\n\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n\n    const { data } = await axios.get(`/users/${id}`, config);\n\n    dispatch({\n      type: USER_DETAILS_SUCCESS,\n      payload: data,\n    });\n  } catch (error) {\n    const message =\n      error.response && error.response.data.message\n        ? error.response.data.message\n        : error.message;\n    if (message === \"Not authorized, token failed\") {\n      dispatch(logout());\n    }\n    dispatch({\n      type: USER_DETAILS_FAIL,\n      payload: message,\n    });\n  }\n};\n\nexport const updateUserProfile = (user) => async (dispatch, getState) => {\n  try {\n    dispatch({\n      type: USER_UPDATE_PROFILE_REQUEST,\n    });\n\n    const {\n      userLogin: { userInfo },\n    } = getState();\n\n    const config = {\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n\n    const { data } = await axios.put(`/users/profile`, user, config);\n\n    dispatch({\n      type: USER_UPDATE_PROFILE_SUCCESS,\n      payload: data,\n    });\n    dispatch({\n      type: USER_LOGIN_SUCCESS,\n      payload: data,\n    });\n    localStorage.setItem(\"userInfo\", JSON.stringify(data));\n  } catch (error) {\n    const message =\n      error.response && error.response.data.message\n        ? error.response.data.message\n        : error.message;\n    if (message === \"Not authorized, token failed\") {\n      dispatch(logout());\n    }\n    dispatch({\n      type: USER_UPDATE_PROFILE_FAIL,\n      payload: message,\n    });\n  }\n};\n\nexport const listUsers = () => async (dispatch, getState) => {\n  try {\n    dispatch({\n      type: USER_LIST_REQUEST,\n    });\n\n    const {\n      userLogin: { userInfo },\n    } = getState();\n\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n\n    const { data } = await axios.get(`/users`, config);\n\n    dispatch({\n      type: USER_LIST_SUCCESS,\n      payload: data,\n    });\n  } catch (error) {\n    const message =\n      error.response && error.response.data.message\n        ? error.response.data.message\n        : error.message;\n    if (message === \"Not authorized, token failed\") {\n      dispatch(logout());\n    }\n    dispatch({\n      type: USER_LIST_FAIL,\n      payload: message,\n    });\n  }\n};\n\nexport const deleteUser = (id) => async (dispatch, getState) => {\n  try {\n    dispatch({\n      type: USER_DELETE_REQUEST,\n    });\n\n    const {\n      userLogin: { userInfo },\n    } = getState();\n\n    const config = {\n      headers: {\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n\n    await axios.delete(`/users/${id}`, config);\n\n    dispatch({ type: USER_DELETE_SUCCESS });\n  } catch (error) {\n    const message =\n      error.response && error.response.data.message\n        ? error.response.data.message\n        : error.message;\n    if (message === \"Not authorized, token failed\") {\n      dispatch(logout());\n    }\n    dispatch({\n      type: USER_DELETE_FAIL,\n      payload: message,\n    });\n  }\n};\n\nexport const updateUser = (user) => async (dispatch, getState) => {\n  try {\n    dispatch({\n      type: USER_UPDATE_REQUEST,\n    });\n\n    const {\n      userLogin: { userInfo },\n    } = getState();\n\n    const config = {\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${userInfo.token}`,\n      },\n    };\n\n    const { data } = await axios.put(`/users/${user._id}`, user, config);\n\n    dispatch({ type: USER_UPDATE_SUCCESS });\n\n    dispatch({ type: USER_DETAILS_SUCCESS, payload: data });\n\n    dispatch({ type: USER_DETAILS_RESET });\n  } catch (error) {\n    const message =\n      error.response && error.response.data.message\n        ? error.response.data.message\n        : error.message;\n    if (message === \"Not authorized, token failed\") {\n      dispatch(logout());\n    }\n    dispatch({\n      type: USER_UPDATE_FAIL,\n      payload: message,\n    });\n  }\n};\n"
  },
  {
    "path": "frontend/src/components/analysisComponent.jsx",
    "content": "import React, { useEffect, useState } from \"react\";\nimport { Table } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport Loading from \"./loader\";\nimport Message from \"./message\";\nimport { CSVLink } from \"react-csv\";\n\nconst AnalysisComponent = () => {\n  const attendanceAnalysis = useSelector((state) => state.attendanceAnalysis);\n  const { loading, error, attendance } = attendanceAnalysis;\n  const [data, setData] = useState([]);\n  const [headers, setHeaders] = useState([]);\n  useEffect(() => {\n    if (attendance) {\n      setHeaders([\n        { label: \"Name\", key: \"name\" },\n        { label: \"Contact\", key: \"contact\" },\n        { label: \"Room No\", key: \"roomNo\" },\n        { label: \"Status\", key: \"attendance\" },\n      ]);\n      var csvMapList = [];\n      Object.entries(attendance.details).map((student) => {\n        var csvMap = {};\n        csvMap[\"name\"] = student[1].name;\n        csvMap[\"contact\"] = student[1].contact;\n        csvMap[\"roomNo\"] = student[1].roomNo;\n        csvMap[\"attendance\"] = attendance.data[student[0]];\n        csvMapList.push(csvMap);\n      });\n\n      setData(csvMapList);\n    }\n  }, [attendance]);\n  return (\n    <>\n      {error && <Message variant=\"danger\">{error}</Message>}\n      {loading ? (\n        <Loading />\n      ) : (\n        <>\n          {attendance && (\n            <>\n              <Table striped bordered hover responsive className=\"table-sm\">\n                <thead>\n                  <tr>\n                    <th>Name</th>\n                    <th>Contact No</th>\n                    <th>Room No</th>\n                    <th>Attendance</th>\n                  </tr>\n                </thead>\n                <tbody>\n                  {attendance &&\n                    Object.entries(attendance.details).map((student) => {\n                      return (\n                        <tr key={student[0]}>\n                          <th>{student[1].name}</th>\n                          <td>{student[1].contact}</td>\n                          <td>{student[1].roomNo}</td>\n                          <td>{attendance.data[student[0]]}</td>\n                        </tr>\n                      );\n                    })}\n                </tbody>\n              </Table>\n              <CSVLink\n                data={data}\n                headers={headers}\n                filename={`attendance_${Date()\n                  .toString()\n                  .substring(0, 15)}.csv`}\n                className=\"btn btn-primary\"\n              >\n                Download\n              </CSVLink>\n            </>\n          )}\n        </>\n      )}\n    </>\n  );\n};\n\nexport default AnalysisComponent;\n"
  },
  {
    "path": "frontend/src/components/attendanceTable.jsx",
    "content": "import React, { useEffect, useState } from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport Loading from \"./loader\";\nimport Message from \"./message\";\nimport AttendanceTableComponent from \"./attendanceTableComponent\";\n\nconst AttendanceTable = ({ roomNo }) => {\n  const dispatch = useDispatch();\n  const [attendanceMap, setAttendanceMap] = useState({});\n\n  const getStudentsByRoomNo = useSelector((state) => state.getStudentsByRoomNo);\n  const { loading, error, students, attendance } = getStudentsByRoomNo;\n  const attendanceDataEnter = useSelector((state) => state.attendanceDataEnter);\n  const {\n    loading: loadingAttendance,\n    error: errorAttendance,\n  } = attendanceDataEnter;\n  useEffect(() => {\n    if (students) {\n      arrangeTable();\n    }\n  }, [dispatch, attendance, attendanceMap, students]);\n\n  const arrangeTable = () => {\n    if (attendance) {\n      var tempMap = attendanceMap;\n      students.map((student) => {\n        if (attendance.data[student._id]) {\n          tempMap[student._id] = attendance.data[student._id];\n        } else {\n          tempMap[student._id] = \"Hostel\";\n        }\n      });\n      setAttendanceMap(attendanceMap);\n    } else {\n      students.map((student) => {\n        var temp = attendanceMap;\n        temp[student._id] = \"Hostel\";\n        setAttendanceMap(temp);\n      });\n    }\n    var temp = attendanceMap;\n    setAttendanceMap(temp);\n  };\n\n  return (\n    <>\n      {error && <Message variant=\"danger\">{error}</Message>}\n      {loading || loadingAttendance ? (\n        <Loading />\n      ) : (\n        <>\n          {errorAttendance && (\n            <Message variant=\"danger\">{errorAttendance}</Message>\n          )}\n          {students && (\n            <>\n              <AttendanceTableComponent\n                students={students}\n                attendanceMap={attendanceMap}\n                setAttendanceMap={setAttendanceMap}\n                attendance={attendance}\n                roomNo={roomNo}\n              />\n            </>\n          )}\n        </>\n      )}\n    </>\n  );\n};\n\nexport default AttendanceTable;\n"
  },
  {
    "path": "frontend/src/components/attendanceTableComponent.jsx",
    "content": "import React, { useEffect } from \"react\";\nimport { Table, Form, Button } from \"react-bootstrap\";\nimport { useDispatch } from \"react-redux\";\nimport { postAttendance } from \"../actions/attendanceActions\";\nimport { Link } from \"react-router-dom\";\nconst AttendanceTableComponent = ({\n  students,\n  attendanceMap,\n  setAttendanceMap,\n  attendance,\n  roomNo,\n}) => {\n  const dispatch = useDispatch();\n  useEffect(() => {}, [dispatch, attendanceMap]);\n  const updateAttendance = () => {\n    if (attendance) {\n      if (!attendance.roomNo.includes(roomNo)) {\n        attendance.roomNo.push(roomNo);\n      }\n    }\n    const roomData = attendance ? attendance.roomNo : roomNo;\n    const dataData = attendanceMap;\n    const detailsData = attendance ? attendance.details : {};\n    students.map((student) => {\n      detailsData[student._id] = {\n        name: student.name,\n        contact: student.contact,\n        roomNo: student.roomNo,\n      };\n    });\n\n    dispatch(\n      postAttendance({\n        roomNo: roomData,\n        details: detailsData,\n        data: dataData,\n      })\n    );\n  };\n  return (\n    <>\n      <Table striped bordered hover responsive className=\"table-sm\">\n        <thead>\n          <tr>\n            <th>NAME</th>\n            <th>Attendance</th>\n            <th>STATUS</th>\n            <th>CONTACT</th>\n            <th>CITY</th>\n          </tr>\n        </thead>\n        <tbody>\n          {students &&\n            students.map((student) => (\n              <>\n                <tr key={student._id}>\n                  <td>\n                    <Link to={`/student/${student._id}`}>{student.name}</Link>\n                  </td>\n                  <td>\n                    <Form>\n                      <Form.Group controlId=\"status\">\n                        <Form.Control\n                          as=\"select\"\n                          size=\"sm\"\n                          defaultValue={attendanceMap[student._id]}\n                          onChange={(e) => {\n                            var tempMap = attendanceMap;\n                            tempMap[student._id] = e.target.value;\n                            setAttendanceMap(tempMap);\n                          }}\n                        >\n                          <option>Hostel</option>\n                          <option>Home</option>\n                          <option>outside</option>\n                        </Form.Control>\n                      </Form.Group>\n                    </Form>\n                  </td>\n                  <td>\n                    <span\n                      style={{\n                        color:\n                          student.status === \"Outside\"\n                            ? \"red\"\n                            : student.status === \"Home\"\n                            ? \"blue\"\n                            : \"black\",\n                      }}\n                    >\n                      {student.status}\n                    </span>\n                  </td>\n                  <td>\n                    <a href={`tel:${student.contact}`}>{student.contact}</a>\n                  </td>\n                  <td>{student.city}</td>\n                </tr>\n              </>\n            ))}\n        </tbody>\n      </Table>\n      <Button variant=\"success\" onClick={updateAttendance}>\n        Update Attendance\n      </Button>\n    </>\n  );\n};\n\nexport default AttendanceTableComponent;\n"
  },
  {
    "path": "frontend/src/components/footer.jsx",
    "content": "import React from 'react'\nimport { Container, Row, Col } from 'react-bootstrap'\n\nconst Footer = () => {\n  return (\n    <Container>\n      <Row>\n        <Col className='text-center py-3'>Copyright &copy;NSD Solutions</Col>\n      </Row>\n    </Container>\n  )\n}\n\nexport default Footer\n"
  },
  {
    "path": "frontend/src/components/formContainer.jsx",
    "content": "import React from 'react'\nimport { Col, Container, Row } from 'react-bootstrap'\n\nconst FormContainer = ({ children }) => {\n  return (\n    <Container>\n      <Row className='justify-content-md-center'>\n        <Col xs={12} md={6}>\n          {children}\n        </Col>\n      </Row>\n    </Container>\n  )\n}\n\nexport default FormContainer\n"
  },
  {
    "path": "frontend/src/components/header.jsx",
    "content": "import React from \"react\";\nimport { Container, Nav, Navbar, NavDropdown } from \"react-bootstrap\";\nimport { Route, useHistory } from \"react-router-dom\";\nimport { LinkContainer } from \"react-router-bootstrap\";\nimport SearchBox from \"./searchBox\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { logout } from \"../actions/userActions\";\n\nconst Header = () => {\n  const dispatch = useDispatch();\n  const history = useHistory();\n  const userLogin = useSelector((state) => state.userLogin);\n  const { userInfo } = userLogin;\n\n  const logoutHandler = () => {\n    dispatch(logout());\n    history.push(\"/login\");\n  };\n  return (\n    <header>\n      <Navbar bg=\"dark\" variant=\"dark\" expand=\"lg\" collapseOnSelect>\n        <Container>\n          <LinkContainer to=\"/\">\n            <Navbar.Brand>NSD Solutions</Navbar.Brand>\n          </LinkContainer>\n          <Navbar.Toggle aria-controls=\"basic-navbar-nav\" />\n          <Navbar.Collapse id=\"basic-navbar-nav\">\n            {userInfo && (\n              <Route render={({ history }) => <SearchBox history={history} />} />\n            )}\n            <Nav className=\"ml-auto\">\n              {userInfo && (\n                <NavDropdown title=\"More\">\n                  <LinkContainer to=\"/attendance\">\n                    <NavDropdown.Item>Attendance</NavDropdown.Item>\n                  </LinkContainer>\n                  <LinkContainer to=\"/addStudent\">\n                    <NavDropdown.Item>Add Student</NavDropdown.Item>\n                  </LinkContainer>\n                  <LinkContainer to=\"/analysis\">\n                    <NavDropdown.Item>View Analysis</NavDropdown.Item>\n                  </LinkContainer>\n                </NavDropdown>\n              )}\n              {userInfo ? (\n                <NavDropdown title={userInfo.name} id=\"username\">\n                  <LinkContainer to=\"/profile\">\n                    <NavDropdown.Item>Profile</NavDropdown.Item>\n                  </LinkContainer>\n                  {userInfo.isAdmin && (\n                    <LinkContainer to=\"/userList\">\n                      <NavDropdown.Item>Users List</NavDropdown.Item>\n                    </LinkContainer>\n                  )}\n                  <NavDropdown.Item onClick={logoutHandler}>\n                    Logout\n                  </NavDropdown.Item>\n                </NavDropdown>\n              ) : (\n                <LinkContainer to=\"/login\">\n                  <Nav.Link>\n                    <i className=\"fas fa-user\"></i> Sign In\n                  </Nav.Link>\n                </LinkContainer>\n              )}\n            </Nav>\n          </Navbar.Collapse>\n        </Container>\n      </Navbar>\n    </header>\n  );\n};\n\nexport default Header;\n"
  },
  {
    "path": "frontend/src/components/loader.jsx",
    "content": "import React from 'react'\nimport { Spinner } from 'react-bootstrap'\n\nconst Loading = () => {\n  return (\n    <Spinner\n      animation='border'\n      role='status'\n      style={{\n        width: '100px',\n        height: '100px',\n        margin: 'auto',\n        display: 'block',\n      }}\n    >\n      <span className='sr-only'>Loading...</span>\n    </Spinner>\n  )\n}\n\nexport default Loading\n"
  },
  {
    "path": "frontend/src/components/message.jsx",
    "content": "import React from 'react'\nimport { Alert } from 'react-bootstrap'\nconst Message = ({ variant, children }) => {\n  return <Alert variant={variant}>{children}</Alert>\n}\nMessage.defaultProps = {\n  variant: 'info',\n}\n\nexport default Message\n"
  },
  {
    "path": "frontend/src/components/paginate.jsx",
    "content": "import React from \"react\";\nimport { Pagination } from \"react-bootstrap\";\nimport { LinkContainer } from \"react-router-bootstrap\";\n\nconst Paginate = ({ pages, page, isAdmin = false, keyword = \"\" }) => {\n  return (\n    pages > 1 && (\n      <Pagination>\n        {[...Array(pages).keys()].map((x) => (\n          <LinkContainer\n            key={x + 1}\n            to={\n              !isAdmin\n                ? keyword\n                  ? `/search/${keyword}/page/${x + 1}`\n                  : `/page/${x + 1}`\n                : `/page/${x + 1}`\n            }\n          >\n            <Pagination.Item active={x + 1 === page}>{x + 1}</Pagination.Item>\n          </LinkContainer>\n        ))}\n      </Pagination>\n    )\n  );\n};\n\nexport default Paginate;\n"
  },
  {
    "path": "frontend/src/components/rating.jsx",
    "content": "import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst Rating = ({ value, text, color }) => {\n  return (\n    <div className='rating'>\n      <span>\n        <i\n          style={{ color }}\n          className={\n            value >= 1\n              ? 'fas fa-star'\n              : value >= 0.5\n              ? 'fas fa-star-half-alt'\n              : 'far fa-star'\n          }\n        ></i>\n      </span>\n      <span>\n        <i\n          style={{ color }}\n          className={\n            value >= 2\n              ? 'fas fa-star'\n              : value >= 1.5\n              ? 'fas fa-star-half-alt'\n              : 'far fa-star'\n          }\n        ></i>\n      </span>\n      <span>\n        <i\n          style={{ color }}\n          className={\n            value >= 3\n              ? 'fas fa-star'\n              : value >= 2.5\n              ? 'fas fa-star-half-alt'\n              : 'far fa-star'\n          }\n        ></i>\n      </span>\n      <span>\n        <i\n          style={{ color }}\n          className={\n            value >= 4\n              ? 'fas fa-star'\n              : value >= 3.5\n              ? 'fas fa-star-half-alt'\n              : 'far fa-star'\n          }\n        ></i>\n      </span>\n      <span>\n        <i\n          style={{ color }}\n          className={\n            value >= 5\n              ? 'fas fa-star'\n              : value >= 4.5\n              ? 'fas fa-star-half-alt'\n              : 'far fa-star'\n          }\n        ></i>\n      </span>\n      <span>{text && text}</span>\n    </div>\n  )\n}\n\nRating.defaultProps = {\n  color: '#f8e825',\n}\n\nRating.propTypes = {\n  text: PropTypes.string,\n  color: PropTypes.string,\n}\n\nexport default Rating\n"
  },
  {
    "path": "frontend/src/components/searchBox.jsx",
    "content": "import React, { useState } from 'react'\nimport { Form, Button } from 'react-bootstrap'\n\nconst SearchBox = ({history}) => {\n  const [keyword, setKeyword] = useState('')\n  const submitHandler = (e) => {\n      e.preventDefault ()\n      if(keyword.trim()){\n        history.push(`/search/${keyword}`)\n      }else{\n          history.push(`/`)\n      }\n  }\n  return (\n    <Form onSubmit={submitHandler} inline>\n      <Form.Control\n        type='text'\n        value={keyword}\n        name='q'\n        placeholder='Search students...'\n        className='mr-sm-2 ml-sm-5'\n        onChange={(e) => setKeyword(e.target.value)}\n      ></Form.Control>\n      <Button className='p-2' type='submit' variant='outline-success'>\n        Search\n      </Button>\n    </Form>\n  )\n}\n\nexport default SearchBox\n"
  },
  {
    "path": "frontend/src/components/student.jsx",
    "content": "import React from \"react\";\nimport { Card, Col, Row, Image } from \"react-bootstrap\";\nimport { Link } from \"react-router-dom\";\nconst Student = ({ stuentDetails: student }) => {\n  return (\n    <Card className=\"my-3 p-3 rounded\">\n      <Link to={`/student/${student._id}`}>\n        <Image src={student.image} rounded fluid />\n      </Link>\n      <Card.Body>\n        <Link to={`/student/${student._id}`}>\n          <Card.Title as=\"div\">\n            <strong>{student.name}</strong>\n          </Card.Title>\n        </Link>\n\n        <Row>\n          <Col>Room No: {student.roomNo}</Col>\n        </Row>\n        <Row>\n          <Col>Stream: {student.category}</Col>\n        </Row>\n        <Card.Text>\n          Contact:\n          <a href={`tel:${student.contact}`}>{student.contact}</a>\n        </Card.Text>\n      </Card.Body>\n    </Card>\n  );\n};\n\nexport default Student;\n"
  },
  {
    "path": "frontend/src/constants/attendanceConstant.jsx",
    "content": "export const ATTENDANCE_DATA_ENTER_REQUEST = \"ATTENDANCE_DATA_ENTER_REQUEST\";\nexport const ATTENDANCE_DATA_ENTER_SUCCESS = \"ATTENDANCE_DATA_ENTER_SUCCESS\";\nexport const ATTENDANCE_DATA_ENTER_FAIL = \"ATTENDANCE_DATA_ENTER_FAIL\";\nexport const ATTENDANCE_DATA_ENTER_RESET = \"ATTENDANCE_DATA_ENTER_RESET\";\n\nexport const ATTENDANCE_ANALYSIS_REQUEST = \"ATTENDANCE_ANALYSIS_REQUEST\";\nexport const ATTENDANCE_ANALYSIS_SUCCESS = \"ATTENDANCE_ANALYSIS_SUCCESS\";\nexport const ATTENDANCE_ANALYSIS_FAIL = \"ATTENDANCE_ANALYSIS_FAIL\";\nexport const ATTENDANCE_ANALYSIS_RESET = \"ATTENDANCE_ANALYSIS_RESET\";\n\nexport const ATTENDANCE_DELETE_REQUEST = \"ATTENDANCE_DELETE_REQUEST\";\nexport const ATTENDANCE_DELETE_SUCCESS = \"ATTENDANCE_DELETE_SUCCESS\";\nexport const ATTENDANCE_DELETE_FAIL = \"ATTENDANCE_DELETE_FAIL\";\nexport const ATTENDANCE_DELETE_RESET = \"ATTENDANCE_DELETE_RESET\";"
  },
  {
    "path": "frontend/src/constants/studentConstant.jsx",
    "content": "export const STUDENT_LIST_REQUEST = \"STUDENT_LIST_REQUEST\";\nexport const STUDENT_LIST_SUCCESS = \"STUDENT_LIST_SUCCESS\";\nexport const STUDENT_LIST_ERROR = \"STUDENT_LIST_ERROR\";\n\nexport const STUDENT_ADD_REQUEST = \"STUDENT_ADD_REQUEST\";\nexport const STUDENT_ADD_SUCCESS = \"STUDENT_ADD_SUCCESS\";\nexport const STUDENT_ADD_ERROR = \"STUDENT_ADD_ERROR\";\n\nexport const STUDENT_DETAILS_REQUEST = \"STUDENT_DETAILS_REQUEST\";\nexport const STUDENT_DETAILS_SUCCESS = \"STUDENT_DETAILS_SUCCESS\";\nexport const STUDENT_DETAILS_ERROR = \"STUDENT_DETAILS_ERROR\";\n\nexport const STUDENT_UPDATE_REQUEST = \"STUDENT_UPDATE_REQUEST\";\nexport const STUDENT_UPDATE_SUCCESS = \"STUDENT_UPDATE_SUCCESS\";\nexport const STUDENT_UPDATE_ERROR = \"STUDENT_UPDATE_ERROR\";\nexport const STUDENT_UPDATE_RESET = \"STUDENT_UPDATE_RESET\";\n\nexport const STUDENT_DELETE_REQUEST = \"STUDENT_DELETE_REQUEST\";\nexport const STUDENT_DELETE_SUCCESS = \"STUDENT_DELETE_SUCCESS\";\nexport const STUDENT_DELETE_ERROR = \"STUDENT_DELETE_ERROR\";\nexport const STUDENT_DELETE_RESET = \"STUDENT_DELETE_RESET\";\n\nexport const STUDENT_ROOM_NO_REQUEST = \"STUDENT_ROOM_NO_REQUEST\";\nexport const STUDENT_ROOM_NO_SUCCESS = \"STUDENT_ROOM_NO_SUCCESS\";\nexport const STUDENT_ROOM_NO_ERROR = \"STUDENT_ROOM_NO_ERROR\";\nexport const STUDENT_ROOM_NO_RESET = \"STUDENT_ROOM_NO_RESET\";\n"
  },
  {
    "path": "frontend/src/constants/userConstants.jsx",
    "content": "export const USER_LOGIN_REQUEST = \"USER_LOGIN_REQUEST\";\nexport const USER_LOGIN_SUCCESS = \"USER_LOGIN_SUCCESS\";\nexport const USER_LOGIN_FAIL = \"USER_LOGIN_FAIL\";\nexport const USER_LOGOUT = \"USER_LOGOUT\";\n\nexport const USER_REGISTER_REQUEST = \"USER_REGISTER_REQUEST\";\nexport const USER_REGISTER_SUCCESS = \"USER_REGISTER_SUCCESS\";\nexport const USER_REGISTER_FAIL = \"USER_REGISTER_FAIL\";\n\nexport const USER_DETAILS_REQUEST = \"USER_DETAILS_REQUEST\";\nexport const USER_DETAILS_SUCCESS = \"USER_DETAILS_SUCCESS\";\nexport const USER_DETAILS_FAIL = \"USER_DETAILS_FAIL\";\nexport const USER_DETAILS_RESET = \"USER_DETAILS_RESET\";\n\nexport const USER_UPDATE_PROFILE_REQUEST = \"USER_UPDATE_PROFILE_REQUEST\";\nexport const USER_UPDATE_PROFILE_SUCCESS = \"USER_UPDATE_PROFILE_SUCCESS\";\nexport const USER_UPDATE_PROFILE_FAIL = \"USER_UPDATE_PROFILE_FAIL\";\nexport const USER_UPDATE_PROFILE_RESET = \"USER_UPDATE_PROFILE_RESET\";\n\nexport const USER_LIST_REQUEST = \"USER_LIST_REQUEST\";\nexport const USER_LIST_SUCCESS = \"USER_LIST_SUCCESS\";\nexport const USER_LIST_FAIL = \"USER_LIST_FAIL\";\nexport const USER_LIST_RESET = \"USER_LIST_RESET\";\n\nexport const USER_DELETE_REQUEST = \"USER_DELETE_REQUEST\";\nexport const USER_DELETE_SUCCESS = \"USER_DELETE_SUCCESS\";\nexport const USER_DELETE_FAIL = \"USER_DELETE_FAIL\";\n\nexport const USER_UPDATE_REQUEST = \"USER_UPDATE_REQUEST\";\nexport const USER_UPDATE_SUCCESS = \"USER_UPDATE_SUCCESS\";\nexport const USER_UPDATE_FAIL = \"USER_UPDATE_FAIL\";\nexport const USER_UPDATE_RESET = \"USER_UPDATE_RESET\";\n"
  },
  {
    "path": "frontend/src/css/index.css",
    "content": "main {\n  min-height: 80vh;\n}\n.rating span {\n  margin: 0.1rem;\n}\nh3 {\n  padding: 1rem 0;\n}\nh1 {\n  font-size: 1.8rem;\n  padding: 1rem 0;\n}\nh2 {\n  font-size: 1.4rem;\n  padding: 0.5rem 0;\n}\n"
  },
  {
    "path": "frontend/src/main.jsx",
    "content": "import React from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport \"./css/index.css\";\nimport { Provider } from \"react-redux\";\nimport store from \"./store\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\nimport \"./css/bootstrap.min.css\";\n\nconst root = createRoot(document.getElementById(\"root\"));\nroot.render(\n  <Provider store={store}>\n    <App />\n  </Provider>\n);\n\nreportWebVitals();\n"
  },
  {
    "path": "frontend/src/reducers/attendanceReducer.jsx",
    "content": "import {\n  ATTENDANCE_DATA_ENTER_FAIL,\n  ATTENDANCE_DATA_ENTER_REQUEST,\n  ATTENDANCE_DATA_ENTER_RESET,\n  ATTENDANCE_DATA_ENTER_SUCCESS,\n  ATTENDANCE_ANALYSIS_FAIL,\n  ATTENDANCE_ANALYSIS_REQUEST,\n  ATTENDANCE_ANALYSIS_RESET,\n  ATTENDANCE_ANALYSIS_SUCCESS,\n  ATTENDANCE_DELETE_REQUEST,\n  ATTENDANCE_DELETE_SUCCESS,\n  ATTENDANCE_DELETE_FAIL,\n} from \"../constants/attendanceConstant\";\n\nexport const attendanceDataEnterReducer = (state = {}, action) => {\n  switch (action.type) {\n    case ATTENDANCE_DATA_ENTER_REQUEST:\n      return { ...state, loading: true };\n    case ATTENDANCE_DATA_ENTER_SUCCESS:\n      return {\n        loading: false,\n        attendance: action.payload,\n      };\n    case ATTENDANCE_DATA_ENTER_FAIL:\n      return { loading: false, error: action.payload };\n    case ATTENDANCE_DATA_ENTER_RESET:\n      return {};\n\n    default:\n      return state;\n  }\n};\n\nexport const attendanceAnalysisReducer = (state = {}, action) => {\n  switch (action.type) {\n    case ATTENDANCE_ANALYSIS_REQUEST:\n      return { loading: true };\n    case ATTENDANCE_ANALYSIS_SUCCESS:\n      return {\n        loading: false,\n        attendance: action.payload,\n      };\n    case ATTENDANCE_ANALYSIS_FAIL:\n      return { loading: false, error: action.payload };\n    case ATTENDANCE_ANALYSIS_RESET:\n      return {};\n\n    default:\n      return state;\n  }\n};\n\nexport const deleteAttendanceReducer = (state = {}, action) => {\n  switch (action.type) {\n    case ATTENDANCE_DELETE_REQUEST:\n      return { loading: true };\n    case ATTENDANCE_DELETE_SUCCESS:\n      return {\n        loading: false,\n        success: true,\n      };\n    case ATTENDANCE_DELETE_FAIL:\n      return { loading: false, error: action.payload };\n    case ATTENDANCE_ANALYSIS_RESET:\n      return {};\n\n    default:\n      return state;\n  }\n};\n"
  },
  {
    "path": "frontend/src/reducers/studentsReducer.jsx",
    "content": "import {\n  STUDENT_LIST_REQUEST,\n  STUDENT_LIST_SUCCESS,\n  STUDENT_LIST_ERROR,\n  STUDENT_ADD_ERROR,\n  STUDENT_ADD_REQUEST,\n  STUDENT_ADD_SUCCESS,\n  STUDENT_UPDATE_ERROR,\n  STUDENT_UPDATE_REQUEST,\n  STUDENT_UPDATE_SUCCESS,\n  STUDENT_UPDATE_RESET,\n  STUDENT_DELETE_ERROR,\n  STUDENT_DELETE_REQUEST,\n  STUDENT_DELETE_SUCCESS,\n  STUDENT_DELETE_RESET,\n  STUDENT_DETAILS_REQUEST,\n  STUDENT_DETAILS_SUCCESS,\n  STUDENT_DETAILS_ERROR,\n  STUDENT_ROOM_NO_REQUEST,\n  STUDENT_ROOM_NO_SUCCESS,\n  STUDENT_ROOM_NO_ERROR,\n  STUDENT_ROOM_NO_RESET,\n} from \"../constants/studentConstant\";\n\nexport const studentListReducer = (state = { students: [] }, action) => {\n  switch (action.type) {\n    case STUDENT_LIST_REQUEST:\n      return { ...state, loading: true };\n    case STUDENT_LIST_SUCCESS:\n      return {\n        loading: false,\n        students: action.payload.students,\n        pages: action.payload.pages,\n        page: action.payload.page,\n      };\n    case STUDENT_LIST_ERROR:\n      return { loading: false, error: action.payload };\n\n    default:\n      return state;\n  }\n};\n\nexport const studentAddReducer = (state = { students: {} }, action) => {\n  switch (action.type) {\n    case STUDENT_ADD_REQUEST:\n      return { ...state, loading: true };\n    case STUDENT_ADD_SUCCESS:\n      return { loading: false, success: true };\n    case STUDENT_ADD_ERROR:\n      return { loading: false, error: action.payload };\n\n    default:\n      return state;\n  }\n};\n\nexport const studentDetailsReducer = (state = {}, action) => {\n  switch (action.type) {\n    case STUDENT_DETAILS_REQUEST:\n      return { ...state, loading: true };\n    case STUDENT_DETAILS_SUCCESS:\n      return { loading: false, student: action.payload };\n    case STUDENT_DETAILS_ERROR:\n      return { loading: false, error: action.payload };\n\n    default:\n      return state;\n  }\n};\n\nexport const studentUpdateReducer = (state = {}, action) => {\n  switch (action.type) {\n    case STUDENT_UPDATE_REQUEST:\n      return { ...state, loading: true };\n    case STUDENT_UPDATE_SUCCESS:\n      return { loading: false, success: true };\n    case STUDENT_UPDATE_ERROR:\n      return { loading: false, error: action.payload };\n    case STUDENT_UPDATE_RESET:\n      return {};\n\n    default:\n      return state;\n  }\n};\n\nexport const studentDeleteReducer = (state = {}, action) => {\n  switch (action.type) {\n    case STUDENT_DELETE_REQUEST:\n      return { ...state, loading: true };\n    case STUDENT_DELETE_SUCCESS:\n      return { loading: false, success: true };\n    case STUDENT_DELETE_ERROR:\n      return { loading: false, error: action.payload };\n    case STUDENT_DELETE_RESET:\n      return {};\n\n    default:\n      return state;\n  }\n};\nexport const getStudentsByRoomNoReducer = (state = {}, action) => {\n  switch (action.type) {\n    case STUDENT_ROOM_NO_REQUEST:\n      return { ...state, loading: true };\n    case STUDENT_ROOM_NO_SUCCESS:\n      return {\n        loading: false,\n        students: action.payload.students,\n        attendance: action.payload.attendance,\n      };\n    case STUDENT_ROOM_NO_ERROR:\n      return { loading: false, error: action.payload };\n    case STUDENT_ROOM_NO_RESET:\n      return {};\n\n    default:\n      return state;\n  }\n};\n"
  },
  {
    "path": "frontend/src/reducers/userReducers.jsx",
    "content": "import {\n  USER_DETAILS_FAIL,\n  USER_DETAILS_REQUEST,\n  USER_DETAILS_RESET,\n  USER_DETAILS_SUCCESS,\n  USER_LIST_REQUEST,\n  USER_LIST_SUCCESS,\n  USER_LIST_FAIL,\n  USER_LIST_RESET,\n  USER_LOGIN_FAIL,\n  USER_LOGIN_REQUEST,\n  USER_LOGIN_SUCCESS,\n  USER_LOGOUT,\n  USER_REGISTER_FAIL,\n  USER_REGISTER_REQUEST,\n  USER_REGISTER_SUCCESS,\n  USER_UPDATE_PROFILE_FAIL,\n  USER_UPDATE_PROFILE_REQUEST,\n  USER_UPDATE_PROFILE_SUCCESS,\n  USER_DELETE_REQUEST,\n  USER_DELETE_SUCCESS,\n  USER_DELETE_FAIL,\n  USER_UPDATE_RESET,\n  USER_UPDATE_REQUEST,\n  USER_UPDATE_SUCCESS,\n  USER_UPDATE_FAIL,\n  USER_UPDATE_PROFILE_RESET,\n} from \"../constants/userConstants\";\n\nexport const userLoginReducer = (state = {}, action) => {\n  switch (action.type) {\n    case USER_LOGIN_REQUEST:\n      return { loading: true };\n    case USER_LOGIN_SUCCESS:\n      return { loading: false, userInfo: action.payload };\n    case USER_LOGIN_FAIL:\n      return { loading: false, error: action.payload };\n    case USER_LOGOUT:\n      return {};\n    default:\n      return state;\n  }\n};\n\nexport const userRegisterReducer = (state = {}, action) => {\n  switch (action.type) {\n    case USER_REGISTER_REQUEST:\n      return { loading: true };\n    case USER_REGISTER_SUCCESS:\n      return { loading: false, userInfo: action.payload };\n    case USER_REGISTER_FAIL:\n      return { loading: false, error: action.payload };\n    case USER_LOGOUT:\n      return {};\n    default:\n      return state;\n  }\n};\n\nexport const userDetailsReducer = (state = { user: {} }, action) => {\n  switch (action.type) {\n    case USER_DETAILS_REQUEST:\n      return { ...state, loading: true };\n    case USER_DETAILS_SUCCESS:\n      return { loading: false, user: action.payload };\n    case USER_DETAILS_FAIL:\n      return { loading: false, error: action.payload };\n    case USER_DETAILS_RESET:\n      return { user: {} };\n    default:\n      return state;\n  }\n};\n\nexport const userUpdateProfileReducer = (state = {}, action) => {\n  switch (action.type) {\n    case USER_UPDATE_PROFILE_REQUEST:\n      return { loading: true };\n    case USER_UPDATE_PROFILE_SUCCESS:\n      return { loading: false, success: true, userInfo: action.payload };\n    case USER_UPDATE_PROFILE_FAIL:\n      return { loading: false, error: action.payload };\n    case USER_UPDATE_PROFILE_RESET:\n      return {};\n    default:\n      return state;\n  }\n};\n\nexport const userListReducer = (state = { users: [] }, action) => {\n  switch (action.type) {\n    case USER_LIST_REQUEST:\n      return { loading: true };\n    case USER_LIST_SUCCESS:\n      return { loading: false, users: action.payload };\n    case USER_LIST_FAIL:\n      return { loading: false, error: action.payload };\n    case USER_LIST_RESET:\n      return { users: [] };\n    default:\n      return state;\n  }\n};\n\nexport const userDeleteReducer = (state = {}, action) => {\n  switch (action.type) {\n    case USER_DELETE_REQUEST:\n      return { loading: true };\n    case USER_DELETE_SUCCESS:\n      return { loading: false, success: true };\n    case USER_DELETE_FAIL:\n      return { loading: false, error: action.payload };\n    default:\n      return state;\n  }\n};\n\nexport const userUpdateReducer = (state = { user: {} }, action) => {\n  switch (action.type) {\n    case USER_UPDATE_REQUEST:\n      return { loading: true };\n    case USER_UPDATE_SUCCESS:\n      return { loading: false, success: true };\n    case USER_UPDATE_FAIL:\n      return { loading: false, error: action.payload };\n    case USER_UPDATE_RESET:\n      return {\n        user: {},\n      };\n    default:\n      return state;\n  }\n};\n"
  },
  {
    "path": "frontend/src/reportWebVitals.js",
    "content": "const reportWebVitals = (onPerfEntry) => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import(\"web-vitals\").then(\n      ({ onCLS, onINP, onFCP, onLCP, onTTFB }) => {\n        onCLS(onPerfEntry);\n        onINP(onPerfEntry);\n        onFCP(onPerfEntry);\n        onLCP(onPerfEntry);\n        onTTFB(onPerfEntry);\n      }\n    );\n  }\n};\n\nexport default reportWebVitals;\n"
  },
  {
    "path": "frontend/src/screens/Authentication Screens/LoginView.jsx",
    "content": "import React, { useState, useEffect } from 'react'\nimport { Link } from 'react-router-dom'\nimport { Form, Button, Row, Col } from 'react-bootstrap'\nimport { useDispatch, useSelector } from 'react-redux'\nimport Message from '../../components/message'\nimport Loader from '../../components/loader'\nimport FormContainer from '../../components/formContainer'\nimport { login } from '../../actions/userActions'\n\nconst LoginView = ({ location, history }) => {\n  const [email, setEmail] = useState('')\n  const [password, setPassword] = useState('')\n\n  const dispatch = useDispatch()\n\n  const userLogin = useSelector((state) => state.userLogin)\n  const { loading, error, userInfo } = userLogin\n\n  const redirect = location.search ? location.search.split('=')[1] : '/'\n\n  useEffect(() => {\n    if (userInfo) {\n      history.push(redirect)\n    }\n  }, [history, userInfo, redirect])\n\n  const submitHandler = (e) => {\n    e.preventDefault()\n    dispatch(login(email, password))\n  }\n\n  return (\n    <FormContainer>\n      <h1>Sign In</h1>\n      {error && <Message variant='danger'>{error}</Message>}\n      {loading && <Loader />}\n      <Form onSubmit={submitHandler}>\n        <Form.Group controlId='email'>\n          <Form.Label>Email Address</Form.Label>\n          <Form.Control\n            type='email'\n            placeholder='Enter email'\n            value={email}\n            onChange={(e) => setEmail(e.target.value)}\n          ></Form.Control>\n        </Form.Group>\n\n        <Form.Group controlId='password'>\n          <Form.Label>Password</Form.Label>\n          <Form.Control\n            type='password'\n            placeholder='Enter password'\n            value={password}\n            onChange={(e) => setPassword(e.target.value)}\n          ></Form.Control>\n        </Form.Group>\n\n        <Button type='submit' variant='primary'>\n          Sign In\n        </Button>\n      </Form>\n\n      <Row className='py-3'>\n        <Col>\n          New Customer?{' '}\n          <Link to={redirect ? `/register?redirect=${redirect}` : '/register'}>\n            Register\n          </Link>\n        </Col>\n      </Row>\n    </FormContainer>\n  )\n}\n\nexport default LoginView\n"
  },
  {
    "path": "frontend/src/screens/Authentication Screens/RegisterView.jsx",
    "content": "import React, { useState, useEffect } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Form, Button, Row, Col } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Message from \"../../components/message\";\nimport Loader from \"../../components/loader\";\nimport FormContainer from \"../../components/formContainer\";\nimport { register } from \"../../actions/userActions\";\n\nconst RegisterView = ({ location, history }) => {\n  const [name, setName] = useState(\"\");\n  const [email, setEmail] = useState(\"\");\n  const [password, setPassword] = useState(\"\");\n  const [confirmPassword, setConfirmPassword] = useState(\"\");\n  const [message, setMessage] = useState(null);\n\n  const dispatch = useDispatch();\n\n  const userRegister = useSelector((state) => state.userRegister);\n  const { loading, error, userInfo } = userRegister;\n\n  const redirect = location.search ? location.search.split(\"=\")[1] : \"/\";\n\n  useEffect(() => {\n    if (userInfo) {\n      history.push(redirect);\n    }\n  }, [history, userInfo, redirect]);\n\n  const submitHandler = (e) => {\n    e.preventDefault();\n    if (password !== confirmPassword) {\n      setMessage(\"Passwords do not match\");\n    } else {\n      dispatch(register(name, email, password));\n    }\n  };\n\n  return (\n    <FormContainer>\n      <h1>Sign Up</h1>\n      {message && <Message variant=\"danger\">{message}</Message>}\n      {error && <Message variant=\"danger\">{error}</Message>}\n      {loading && <Loader />}\n      <Form onSubmit={submitHandler}>\n        <Form.Group controlId=\"name\">\n          <Form.Label>Name</Form.Label>\n          <Form.Control\n            type=\"name\"\n            placeholder=\"Enter name\"\n            value={name}\n            onChange={(e) => setName(e.target.value)}\n          ></Form.Control>\n        </Form.Group>\n\n        <Form.Group controlId=\"email\">\n          <Form.Label>Email Address</Form.Label>\n          <Form.Control\n            type=\"email\"\n            placeholder=\"Enter email\"\n            value={email}\n            onChange={(e) => setEmail(e.target.value)}\n          ></Form.Control>\n        </Form.Group>\n\n        <Form.Group controlId=\"password\">\n          <Form.Label>Password</Form.Label>\n          <Form.Control\n            type=\"password\"\n            placeholder=\"Enter password\"\n            value={password}\n            onChange={(e) => setPassword(e.target.value)}\n          ></Form.Control>\n        </Form.Group>\n\n        <Form.Group controlId=\"confirmPassword\">\n          <Form.Label>Confirm Password</Form.Label>\n          <Form.Control\n            type=\"password\"\n            placeholder=\"Confirm password\"\n            value={confirmPassword}\n            onChange={(e) => setConfirmPassword(e.target.value)}\n          ></Form.Control>\n        </Form.Group>\n\n        <Button type=\"submit\" variant=\"primary\">\n          Register\n        </Button>\n      </Form>\n\n      <Row className=\"py-3\">\n        <Col>\n          Have an Account?{\" \"}\n          <Link to={redirect ? `/login?redirect=${redirect}` : \"/login\"}>\n            Login\n          </Link>\n        </Col>\n      </Row>\n    </FormContainer>\n  );\n};\n\nexport default RegisterView;\n"
  },
  {
    "path": "frontend/src/screens/addStudentView.jsx",
    "content": "import React, { useState, useEffect } from \"react\";\nimport { Button, Form } from \"react-bootstrap\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport FormContainer from \"../components/formContainer\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { addStudent, updateStudent } from \"../actions/studentActions\";\nimport Loading from \"../components/loader.jsx\";\nimport Message from \"../components/message.jsx\";\nimport { STUDENT_UPDATE_RESET } from \"../constants/studentConstant\";\nimport Loader from \"../components/loader\";\n\nconst AddStudentView = () => {\n  const history = useHistory();\n  const [isEdit, setIsEdit] = useState(false);\n  const [name, setName] = useState(\"\");\n  const [address, setAddress] = useState(\"\");\n  const [category, setCategory] = useState(\"\");\n  const [city, setCity] = useState(\"\");\n  const [contact, setContact] = useState(\"\");\n  const [fatherContact, setFatherContact] = useState(\"\");\n  const [image, setImage] = useState(\"\");\n  const [roomNo, setRoomNo] = useState(\"\");\n  const [blockNo, setBlockNo] = useState(\"\");\n  const [status, setStatus] = useState(\"Hostel\");\n\n  const dispatch = useDispatch();\n  const studentAdd = useSelector((state) => state.studentAdd);\n  const { loading, error, success } = studentAdd;\n  const studentUpdate = useSelector((state) => state.studentUpdate);\n  const {\n    loading: loadingUpdate,\n    error: errorUpdate,\n    success: successUpdate,\n  } = studentUpdate;\n\n  useEffect(() => {\n    if (successUpdate) {\n      dispatch({ type: STUDENT_UPDATE_RESET });\n      history.push(\"/\");\n    }\n    if (history.location.state && history.location.state.studentProps) {\n      setIsEdit(true);\n      const student = history.location.state.studentProps;\n      setName(student.name);\n      setAddress(student.address);\n      setCategory(student.category);\n      setCity(student.city);\n      setContact(student.contact);\n      setFatherContact(student.fatherContact);\n      setImage(student.image);\n      setRoomNo(student.roomNo);\n      setBlockNo(student.blockNo);\n      setStatus(student.status);\n    }\n    if (success) {\n      history.push(\"/\");\n    }\n  }, [dispatch, history, success, successUpdate]);\n\n  const submitHandler = () => {\n    if (isEdit === true) {\n      const _id = history.location.state.studentProps._id;\n      dispatch(\n        updateStudent({\n          _id,\n          name,\n          address,\n          category,\n          city,\n          contact,\n          fatherContact,\n          image,\n          roomNo,\n          blockNo,\n          status,\n        })\n      );\n    } else {\n      dispatch(\n        addStudent({\n          name,\n          address,\n          category,\n          city,\n          contact,\n          fatherContact,\n          image,\n          roomNo,\n          blockNo,\n          status,\n        })\n      );\n    }\n  };\n\n  return (\n    <>\n      <Link to=\"/\" className=\"btn btn-light my-3\">\n        Go Back\n      </Link>\n\n      {loading || loadingUpdate ? (\n        <Loader />\n      ) : (\n        <>\n          {errorUpdate && <Message variant=\"danger\">{errorUpdate}</Message>}\n          <FormContainer>\n            <h1>{isEdit ? \"Edit Student\" : \"Add Student\"}</h1>\n            {loading && <Loading />}\n            {error && <Message variant=\"danger\">{error}</Message>}\n            <Form onSubmit={submitHandler}></Form>\n            <Form.Group controlId=\"name\">\n              <Form.Label>Name</Form.Label>\n              <Form.Control\n                type=\"name\"\n                placeholder=\"Enter name\"\n                value={name}\n                onChange={(e) => setName(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n            <Form.Group controlId=\"status\">\n              <Form.Label>Status</Form.Label>\n              <Form.Control\n                as=\"select\"\n                value={status}\n                onChange={(e) => setStatus(e.target.value)}\n              >\n                {[\"Hostel\", \"Outside\", \"Home\"].map((x) => (\n                  <option key={x + 1} value={x + 1}>\n                    {x}\n                  </option>\n                ))}\n              </Form.Control>\n            </Form.Group>\n            <Form.Group controlId=\"address\">\n              <Form.Label>Address</Form.Label>\n              <Form.Control\n                type=\"text\"\n                placeholder=\"Enter address\"\n                value={address}\n                onChange={(e) => setAddress(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n            <Form.Group controlId=\"city\">\n              <Form.Label>City</Form.Label>\n              <Form.Control\n                type=\"text\"\n                placeholder=\"Enter city\"\n                value={city}\n                onChange={(e) => setCity(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n            <Form.Group controlId=\"contact\">\n              <Form.Label>Contact</Form.Label>\n              <Form.Control\n                type=\"number\"\n                placeholder=\"Enter phone number\"\n                value={contact}\n                onChange={(e) => setContact(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n            <Form.Group controlId=\"fatherContact\">\n              <Form.Label>Father Contact</Form.Label>\n              <Form.Control\n                type=\"number\"\n                placeholder=\"Enter Father Phone Number\"\n                value={fatherContact}\n                onChange={(e) => setFatherContact(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n            <Form.Group controlId=\"roomNo\">\n              <Form.Label>Room No</Form.Label>\n              <Form.Control\n                type=\"text\"\n                placeholder=\"Enter Room no\"\n                value={roomNo}\n                onChange={(e) => setRoomNo(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n            <Form.Group controlId=\"b\">\n              <Form.Label>Block Number</Form.Label>\n              <Form.Control\n                type=\"text\"\n                placeholder=\"Enter Block Number\"\n                value={blockNo}\n                onChange={(e) => setBlockNo(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n            <Form.Group controlId=\"image\">\n              <Form.Label>Image Url</Form.Label>\n              <Form.Control\n                type=\"text\"\n                placeholder=\"Enter Image Url\"\n                value={image}\n                onChange={(e) => setImage(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n            <Form.Group controlId=\"category\">\n              <Form.Label>Category</Form.Label>\n              <Form.Control\n                type=\"text\"\n                placeholder=\"Enter Stream\"\n                value={category}\n                onChange={(e) => setCategory(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n            <Button type=\"submit\" variant=\"primary\" onClick={submitHandler}>\n              {isEdit ? \"Update\" : \"Add Student\"}\n            </Button>\n          </FormContainer>\n        </>\n      )}\n    </>\n  );\n};\n\nexport default AddStudentView;\n"
  },
  {
    "path": "frontend/src/screens/analysisView.jsx",
    "content": "import React, { useState, useEffect } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Row, Col, Button, Modal, Form } from \"react-bootstrap\";\nimport DatePicker from \"react-datepicker\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport {\n  deleteAttendanceByDate,\n  getAnalysisByDate,\n} from \"../actions/attendanceActions\";\nimport AnalysisComponent from \"../components/analysisComponent\";\nimport Loading from \"../components/loader\";\nimport Message from \"../components/message\";\n\nconst AnalysisView = () => {\n  const dispatch = useDispatch();\n  const [modal, setModal] = useState(false);\n  const [days, setDays] = useState(0);\n  const [idList, setIdList] = useState([]);\n  const [startDate, setStartDate] = useState(new Date());\n  const attendanceAnalysis = useSelector((state) => state.attendanceAnalysis);\n  const { attendance } = attendanceAnalysis;\n  const attendanceDelete = useSelector((state) => state.attendanceDelete);\n  const {\n    loading: loadingDelete,\n    success: successDelete,\n    error: errorDelete,\n  } = attendanceDelete;\n  useEffect(() => {\n    if (attendance) {\n      var temp = idList;\n      Object.entries(attendance.details).map((at) => {\n        temp.push(at[0]);\n      });\n\n      setIdList(temp);\n    } else {\n      dispatch(getAnalysisByDate(startDate.toString().substring(0, 15)));\n    }\n  }, [attendance, dispatch]);\n\n  const changeDate = (date) => {\n    dispatch(getAnalysisByDate(date.toString().substring(0, 15)));\n    setStartDate(date);\n  };\n  const showModal = () => {\n    setModal(true);\n  };\n  const closeModal = () => {\n    setModal(false);\n  };\n\n  const startDelete = () => {\n    setModal(false);\n    dispatch(deleteAttendanceByDate(days));\n  };\n\n  return (\n    <>\n      <Row className=\"flex justify-content-between\">\n        <Link to=\"/\" className=\"btn btn-light my-3\">\n          Go Back\n        </Link>\n        <div style={{ height: \"40px\", display: \"flex\" }}>\n          <Button variant=\"outline-danger\" size=\"sm\" onClick={showModal}>\n            Delete Attendance\n          </Button>\n        </div>\n      </Row>\n      {loadingDelete && <Loading />}\n      {errorDelete && <Message variant=\"success\">{errorDelete}</Message>}\n      {successDelete && <Message variant=\"success\">Attendance Deleted</Message>}\n\n      <Col>\n        <Row>\n          <Col>\n            <Row>Analysis for </Row>\n            <strong>\n              {startDate.toISOString().toString().substring(0, 10)}\n            </strong>\n          </Col>\n          <Col>\n            <DatePicker\n              selected={startDate}\n              onChange={(date) => changeDate(date)}\n            />\n          </Col>\n        </Row>\n        <Modal show={modal} animation={true} onHide={closeModal}>\n          <Modal.Header closeButton>\n            <Modal.Title>Enter Number of days before to delete</Modal.Title>\n          </Modal.Header>\n          <Modal.Body>\n            <Form>\n              <Form.Group controlId=\"days\">\n                <Form.Label>Enter no of days</Form.Label>\n                <Form.Control\n                  type=\"number\"\n                  placeholder=\"Enter days\"\n                  value={days}\n                  onChange={(e) => setDays(e.target.value)}\n                ></Form.Control>\n              </Form.Group>\n            </Form>\n          </Modal.Body>\n          <Modal.Footer>\n            <Button variant=\"secondary\" onClick={closeModal}>\n              Close\n            </Button>\n            <Button variant=\"outline-danger\" onClick={startDelete}>\n              Delete\n            </Button>\n          </Modal.Footer>\n        </Modal>\n        {<AnalysisComponent />}\n      </Col>\n    </>\n  );\n};\n\nexport default AnalysisView;\n"
  },
  {
    "path": "frontend/src/screens/attendanceView.jsx",
    "content": "import React, { useState, useEffect } from \"react\";\nimport { Form, Button } from \"react-bootstrap\";\nimport { useDispatch } from \"react-redux\";\nimport { getStudentsByRoomNo as action } from \"../actions/studentActions\";\nimport AttendanceTable from \"../components/attendanceTable\";\n\nconst AttendanceView = () => {\n  const [roomNo, setRoomNo] = useState(\"\");\n  const dispatch = useDispatch();\n  useEffect(() => {}, [dispatch]);\n  const submitHandler = (e) => {\n    e.preventDefault();\n    dispatch(action(roomNo));\n  };\n\n  const changeRoomNo = (e) => {\n    setRoomNo(e.target.value);\n  };\n  return (\n    <>\n      <h2>Take Attendance</h2>\n      <Form onSubmit={submitHandler} inline>\n        <Form.Control\n          type=\"text\"\n          value={roomNo}\n          name=\"roomNo\"\n          placeholder=\"Enter RoomNo\"\n          className=\"mr-sm-2 ml-sm-5\"\n          onChange={(e) => changeRoomNo(e)}\n        ></Form.Control>\n        <Button type=\"submit\" onClick={submitHandler}>\n          Get Students\n        </Button>\n      </Form>\n      <AttendanceTable roomNo={roomNo} />\n    </>\n  );\n};\n\nexport default AttendanceView;\n"
  },
  {
    "path": "frontend/src/screens/homeView.jsx",
    "content": "import React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Student from \"../components/student\";\nimport Loading from \"../components/loader.jsx\";\nimport Message from \"../components/message.jsx\";\nimport { listStudents } from \"../actions/studentActions\";\nimport Paginate from \"../components/paginate\";\nimport {\n  Row,\n  Col,\n  ButtonGroup,\n  ToggleButton,\n  Container,\n} from \"react-bootstrap\";\nimport StudentsTableView from \"./studentTableView\";\n\nconst HomeView = ({ match, history }) => {\n  const [isGrid, setIsGrid] = useState(true);\n  const keyword = match.params.keyword;\n\n  const pageNumber = match.params.pageNumber || 1;\n  const userLogin = useSelector((state) => state.userLogin);\n  const { loading: userLoading, userInfo } = userLogin;\n\n  const dispatch = useDispatch();\n\n  const studentsList = useSelector((state) => state.studentsList);\n  const { loading, error, students, page, pages } = studentsList;\n\n  useEffect(() => {\n    if (!userLoading && !userInfo) {\n      history.push(\"/login\");\n    }\n    dispatch(listStudents(keyword, pageNumber));\n  }, [keyword, pageNumber]);\n\n  return (\n    <>\n      <>\n        <Container>\n          <Row className=\"justify-content-md-center\">\n            <Col xs lg=\"2\"></Col>\n            <Col md=\"auto\">\n              <ButtonGroup toggle>\n                {[\"Grid\", \"Table\"].map((type) => (\n                  <ToggleButton\n                    key={type}\n                    type=\"radio\"\n                    variant=\"secondary\"\n                    name=\"radio\"\n                    value={type}\n                    checked={(isGrid ? \"Grid\" : \"Table\") === type}\n                    onChange={(e) =>\n                      setIsGrid(e.target.value === \"Grid\" ? true : false)\n                    }\n                  >\n                    {type === \"Grid\" ? <> Grid</> : <> Table </>}\n                  </ToggleButton>\n                ))}\n              </ButtonGroup>\n            </Col>\n            <Col xs lg=\"2\"></Col>\n          </Row>\n        </Container>\n      </>\n\n      <h1>Students</h1>\n      {loading ? (\n        <Loading />\n      ) : error ? (\n        <Message variant=\"danger\">{error}</Message>\n      ) : isGrid ? (\n        <>\n          <Row>\n            {students.map((student) => (\n              <Col key={student._id} sm={12} md={6} lg={4} xl={3}>\n                <Student stuentDetails={student} />\n              </Col>\n            ))}\n          </Row>\n          <Paginate\n            pages={pages}\n            page={page}\n            keyword={keyword ? keyword : \"\"}\n          />\n        </>\n      ) : (\n        <>\n          <StudentsTableView keyword={keyword} pageNumber={pageNumber} />\n        </>\n      )}\n    </>\n  );\n};\n\nexport default HomeView;\n"
  },
  {
    "path": "frontend/src/screens/profileView.jsx",
    "content": "import React, { useState, useEffect } from \"react\";\nimport { Form, Button, Row, Col } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Message from \"../components/message\";\nimport Loader from \"../components/loader\";\nimport { getUserDetails, updateUserProfile } from \"../actions/userActions\";\nimport { USER_UPDATE_PROFILE_RESET } from \"../constants/userConstants\";\n\nconst ProfileView = ({ history }) => {\n  const [name, setName] = useState(\"\");\n  const [email, setEmail] = useState(\"\");\n  const [password, setPassword] = useState(\"\");\n  const [confirmPassword, setConfirmPassword] = useState(\"\");\n  const [message, setMessage] = useState(null);\n\n  const dispatch = useDispatch();\n\n  const userDetails = useSelector((state) => state.userDetails);\n  const { loading, error, user } = userDetails;\n\n  const userLogin = useSelector((state) => state.userLogin);\n  const { userInfo } = userLogin;\n\n  const userUpdateProfile = useSelector((state) => state.userUpdateProfile);\n  const { success } = userUpdateProfile;\n  useEffect(() => {\n    if (!userInfo) {\n      history.push(\"/login\");\n    } else {\n      if (!user || !user.name || success) {\n        dispatch({ type: USER_UPDATE_PROFILE_RESET });\n        dispatch(getUserDetails(\"profile\"));\n      } else {\n        setName(user.name);\n        setEmail(user.email);\n      }\n    }\n  }, [dispatch, history, userInfo, user, success]);\n\n  const submitHandler = (e) => {\n    e.preventDefault();\n    if (password !== confirmPassword) {\n      setMessage(\"Passwords do not match\");\n    } else {\n      dispatch(updateUserProfile({ id: user._id, name, email, password }));\n    }\n  };\n\n  return (\n    <Row>\n      <Col md={3}>\n        <h2>Profile</h2>\n        {message && <Message variant=\"danger\">{message}</Message>}\n\n        {success && <Message variant=\"success\">Profile Updated</Message>}\n        {loading ? (\n          <Loader />\n        ) : error ? (\n          <Message variant=\"danger\">{error}</Message>\n        ) : (\n          <Form onSubmit={submitHandler}>\n            <Form.Group controlId=\"name\">\n              <Form.Label>Name</Form.Label>\n              <Form.Control\n                type=\"name\"\n                placeholder=\"Enter name\"\n                value={name}\n                onChange={(e) => setName(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n\n            <Form.Group controlId=\"email\">\n              <Form.Label>Email Address</Form.Label>\n              <Form.Control\n                type=\"email\"\n                placeholder=\"Enter email\"\n                value={email}\n                onChange={(e) => setEmail(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n\n            <Form.Group controlId=\"password\">\n              <Form.Label>Password</Form.Label>\n              <Form.Control\n                type=\"password\"\n                placeholder=\"Enter password\"\n                value={password}\n                onChange={(e) => setPassword(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n\n            <Form.Group controlId=\"confirmPassword\">\n              <Form.Label>Confirm Password</Form.Label>\n              <Form.Control\n                type=\"password\"\n                placeholder=\"Confirm password\"\n                value={confirmPassword}\n                onChange={(e) => setConfirmPassword(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n\n            <Button type=\"submit\" variant=\"primary\">\n              Update\n            </Button>\n          </Form>\n        )}\n      </Col>\n      \n    </Row>\n  );\n};\n\nexport default ProfileView;\n"
  },
  {
    "path": "frontend/src/screens/studentDetailsView.jsx",
    "content": "import React, { useState, useEffect } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n  Row,\n  Col,\n  Image,\n  ListGroup,\n  Card,\n  Button,\n  Form,\n} from \"react-bootstrap\";\nimport Loading from \"../components/loader\";\nimport Message from \"../components/message\";\nimport {\n  getStudentDetails,\n  updateStudent,\n  deleteStudent,\n} from \"../actions/studentActions\";\nimport { STUDENT_UPDATE_RESET } from \"../constants/studentConstant\";\nconst StudentDetailsView = ({ match, history }) => {\n  const [status, setStatus] = useState(\"\");\n  const dispatch = useDispatch();\n  const studentDetails = useSelector((state) => state.studentDetails);\n  const { loading, error, student } = studentDetails;\n  const studentUpdate = useSelector((state) => state.studentUpdate);\n  const {\n    loading: loadingUpdate,\n    error: errorUpdate,\n    success: successUpdate,\n  } = studentUpdate;\n  const studentDelete = useSelector((state) => state.studentDelete);\n  const {\n    loading: loadingDelete,\n    error: errorDelete,\n    success: successDelete,\n  } = studentDelete;\n\n  useEffect(() => {\n    if (successDelete) {\n      history.push(\"/\");\n    }\n    if (successUpdate) {\n      dispatch({ type: STUDENT_UPDATE_RESET });\n    }\n    if (!student || !student._id || student._id !== match.params.id) {\n      dispatch(getStudentDetails(match.params.id));\n    }\n    if (student && student._id && !status) {\n      setStatus(student.status);\n    }\n  }, [dispatch, match, successUpdate, successDelete]);\n\n  const navigateToEdit = () => {\n    history.push({\n      pathname: `/student/edit/${student._id}`,\n      state: { studentProps: student },\n    });\n  };\n  const updateStatus = () => {\n    student.status = status;\n    dispatch(updateStudent(student));\n  };\n\n  const deleteStuden = () => {\n    if (window.confirm(\"Are you sure\")) {\n      dispatch(deleteStudent(student._id));\n    }\n  };\n  return (\n    <>\n      <Link className=\"btn btn-light my-3\" to=\"/\">\n        Go Back\n      </Link>\n      {loading || loadingUpdate || loadingDelete ? (\n        <Loading />\n      ) : error ? (\n        <Message variant=\"danger\">{error}</Message>\n      ) : (\n        <>\n          {errorUpdate && <Message variant=\"danger\">{errorUpdate}</Message>}\n          {errorDelete && <Message variant=\"danger\">{errorDelete}</Message>}\n          {student && (\n            <Row>\n              <Col md={3}>\n                <Image src={student.image} alt={student.name} fluid />\n              </Col>\n              <Col md={3}>\n                <ListGroup variant=\"flush\">\n                  <ListGroup.Item>\n                    <h3>{student.name}</h3>\n                  </ListGroup.Item>\n                  <ListGroup.Item>\n                    <span>Phone No:{student.contact}</span>\n                  </ListGroup.Item>\n                  <ListGroup.Item>\n                    <span>Father Contact:{student.fatherContact}</span>\n                  </ListGroup.Item>\n                  <ListGroup.Item>\n                    <span>City:{student.city}</span>\n                  </ListGroup.Item>\n                  <ListGroup.Item>\n                    <span>Address:{student.address}</span>\n                  </ListGroup.Item>\n                </ListGroup>\n              </Col>\n              <Col md={4}>\n                <Card>\n                  <ListGroup variant=\"flush\">\n                    <ListGroup.Item>\n                      <Row>\n                        <Col>Room No:</Col>\n                        <Col> {student.roomNo}</Col>\n                      </Row>\n                    </ListGroup.Item>\n                    <ListGroup.Item>\n                      <Row>\n                        <Col>Block No:</Col>\n                        <Col> {student.blockNo}</Col>\n                      </Row>\n                    </ListGroup.Item>\n                    <ListGroup.Item>\n                      <Row>\n                        <Col>Status:</Col>\n                        <Col>\n                          <Form.Control\n                            size=\"sm\"\n                            as=\"select\"\n                            value={status}\n                            onChange={(e) => setStatus(e.target.value)}\n                          >\n                            {[\"Hostel\", \"Outside\", \"Home\"].map((x) => (\n                              <option key={x} value={x}>\n                                {x}\n                              </option>\n                            ))}\n                          </Form.Control>\n                        </Col>\n                      </Row>\n                    </ListGroup.Item>\n                    <ListGroup.Item>\n                      <Button\n                        className=\"btn-block\"\n                        type=\"button\"\n                        onClick={updateStatus}\n                      >\n                        Update\n                      </Button>\n                    </ListGroup.Item>\n                  </ListGroup>\n                </Card>\n              </Col>\n              <Col>\n                <ListGroup variant=\"flush\">\n                  <Row>\n                    <ListGroup.Item variant=\"secondary\">\n                      <Button onClick={navigateToEdit}>\n                        <i className=\"fas fa-edit\"></i>\n                      </Button>\n                    </ListGroup.Item>\n                    <ListGroup.Item>\n                      <Button variant=\"danger\" onClick={deleteStuden}>\n                        <i className=\"fas fa-trash\"></i>\n                      </Button>\n                    </ListGroup.Item>\n                  </Row>\n                </ListGroup>\n              </Col>\n            </Row>\n          )}\n        </>\n      )}\n    </>\n  );\n};\n\nexport default StudentDetailsView;\n"
  },
  {
    "path": "frontend/src/screens/studentTableView.jsx",
    "content": "import React, { useEffect } from \"react\";\nimport { Table } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Message from \"../components/message\";\nimport Loader from \"../components/loader\";\nimport Paginate from \"../components/paginate\";\nimport { listStudents } from \"../actions/studentActions\";\nimport { Link } from \"react-router-dom\";\n\nconst StudentsTableView = ({ keyword, pageNumber }) => {\n  const dispatch = useDispatch();\n\n  const studentsList = useSelector((state) => state.studentsList);\n  const { loading, error, students, page, pages } = studentsList;\n  useEffect(() => {\n    if (!students) {\n      dispatch(listStudents(keyword, pageNumber));\n    }\n  }, [dispatch, keyword, pageNumber]);\n  return (\n    <>\n      {loading ? (\n        <Loader />\n      ) : error ? (\n        <Message variant=\"danger\">{error}</Message>\n      ) : (\n        <>\n          <Table striped bordered hover responsive className=\"table-sm\">\n            <thead>\n              <tr>\n                <th>Stream</th>\n                <th>NAME</th>\n                <th>STATUS</th>\n                <th>CONTACT</th>\n                <th>ROOM NO</th>\n                <th>CITY</th>\n              </tr>\n            </thead>\n            <tbody>\n              {students.map((student) => (\n                <tr key={student._id}>\n                  <td>{student.category}</td>\n                  <td>\n                    <Link to={`/student/${student._id}`}>{student.name}</Link>\n                  </td>\n                  <td>\n                    <span\n                      style={{\n                        color:\n                          student.status === \"Outside\"\n                            ? \"red\"\n                            : student.status === \"Home\"\n                            ? \"blue\"\n                            : \"black\",\n                      }}\n                    >\n                      {student.status}\n                    </span>\n                  </td>\n                  <td>\n                    <a href={`tel:${student.contact}`}>{student.contact}</a>\n                  </td>\n                  <td>{student.roomNo}</td>\n                  <td>{student.city}</td>\n                </tr>\n              ))}\n            </tbody>\n          </Table>\n          <Paginate pages={pages} page={page} isAdmin={true} />\n        </>\n      )}\n    </>\n  );\n};\n\nexport default StudentsTableView;\n"
  },
  {
    "path": "frontend/src/screens/userEditView.jsx",
    "content": "import React, { useState, useEffect } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Form, Button } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Message from \"../components/message\";\nimport Loader from \"../components/loader\";\nimport FormContainer from \"../components/formContainer\";\nimport { getUserDetails, updateUser } from \"../actions/userActions\";\nimport { USER_UPDATE_RESET } from \"../constants/userConstants\";\n\nconst UserEditView = ({ match, history }) => {\n  const userId = match.params.userId;\n\n  const [name, setName] = useState(\"\");\n  const [email, setEmail] = useState(\"\");\n  const [isAdmin, setIsAdmin] = useState(false);\n\n  const dispatch = useDispatch();\n\n  const userDetails = useSelector((state) => state.userDetails);\n  const { loading, error, user } = userDetails;\n\n  const userUpdate = useSelector((state) => state.userUpdate);\n  const {\n    loading: loadingUpdate,\n    error: errorUpdate,\n    success: successUpdate,\n  } = userUpdate;\n\n  useEffect(() => {\n    console.log(userId);\n    if (successUpdate) {\n      dispatch({ type: USER_UPDATE_RESET });\n      history.push(\"/userList\");\n    } else {\n      if (!user || !user.name || user._id !== userId) {\n        dispatch(getUserDetails(userId));\n      } else {\n        setName(user.name);\n        setEmail(user.email);\n        setIsAdmin(user.isAdmin);\n      }\n    }\n  }, [dispatch, history, userId, user, successUpdate]);\n\n  const submitHandler = (e) => {\n    e.preventDefault();\n    dispatch(updateUser({ _id: userId, name, email, isAdmin }));\n  };\n\n  return (\n    <>\n      <Link to=\"/admin/userList\" className=\"btn btn-light my-3\">\n        Go Back\n      </Link>\n      <FormContainer>\n        <h1>Edit User</h1>\n        {loadingUpdate && <Loader />}\n        {errorUpdate && <Message variant=\"danger\">{errorUpdate}</Message>}\n        {loading ? (\n          <Loader />\n        ) : error ? (\n          <Message variant=\"danger\">{error}</Message>\n        ) : (\n          <Form onSubmit={submitHandler}>\n            <Form.Group controlId=\"name\">\n              <Form.Label>Name</Form.Label>\n              <Form.Control\n                type=\"name\"\n                placeholder=\"Enter name\"\n                value={name}\n                onChange={(e) => setName(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n\n            <Form.Group controlId=\"email\">\n              <Form.Label>Email Address</Form.Label>\n              <Form.Control\n                type=\"email\"\n                placeholder=\"Enter email\"\n                value={email}\n                onChange={(e) => setEmail(e.target.value)}\n              ></Form.Control>\n            </Form.Group>\n\n            <Form.Group controlId=\"isadmin\">\n              <Form.Check\n                type=\"checkbox\"\n                label=\"Is Admin\"\n                checked={isAdmin}\n                onChange={(e) => setIsAdmin(e.target.checked)}\n              ></Form.Check>\n            </Form.Group>\n\n            <Button type=\"submit\" variant=\"primary\">\n              Update\n            </Button>\n          </Form>\n        )}\n      </FormContainer>\n    </>\n  );\n};\n\nexport default UserEditView;\n"
  },
  {
    "path": "frontend/src/screens/userListView.jsx",
    "content": "import React, { useEffect } from \"react\";\nimport { LinkContainer } from \"react-router-bootstrap\";\nimport { Table, Button } from \"react-bootstrap\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Message from \"../components/message\";\nimport Loader from \"../components/loader\";\nimport { listUsers, deleteUser } from \"../actions/userActions\";\n\nconst UserListView = ({ history }) => {\n  const dispatch = useDispatch();\n\n  const userList = useSelector((state) => state.userList);\n  const { loading, error, users } = userList;\n\n  const userLogin = useSelector((state) => state.userLogin);\n  const { userInfo } = userLogin;\n\n  const userDelete = useSelector((state) => state.userDelete);\n  const { success: successDelete } = userDelete;\n\n  useEffect(() => {\n    if (userInfo && userInfo.isAdmin) {\n      dispatch(listUsers());\n    } else {\n      history.push(\"/login\");\n    }\n  }, [dispatch, history, successDelete, userInfo]);\n\n  const deleteHandler = (id) => {\n    if (window.confirm(\"Are you sure\")) {\n      dispatch(deleteUser(id));\n    }\n  };\n\n  return (\n    <>\n      <h1>Users</h1>\n      {loading ? (\n        <Loader />\n      ) : error ? (\n        <Message variant=\"danger\">{error}</Message>\n      ) : (\n        <Table striped bordered hover responsive className=\"table-sm\">\n          <thead>\n            <tr>\n              <th>ID</th>\n              <th>NAME</th>\n              <th>EMAIL</th>\n              <th>ADMIN</th>\n              <th></th>\n            </tr>\n          </thead>\n          <tbody>\n            {users.map((user) => (\n              <tr key={user._id}>\n                <td>{user._id}</td>\n                <td>{user.name}</td>\n                <td>\n                  <a href={`mailto:${user.email}`}>{user.email}</a>\n                </td>\n                <td>\n                  {user.isAdmin ? (\n                    <i className=\"fas fa-check\" style={{ color: \"green\" }}></i>\n                  ) : (\n                    <i className=\"fas fa-times\" style={{ color: \"red\" }}></i>\n                  )}\n                </td>\n                <td>\n                  <LinkContainer to={`/user/${user._id}/edit`}>\n                    <Button variant=\"light\" className=\"btn-sm\">\n                      <i className=\"fas fa-edit\"></i>\n                    </Button>\n                  </LinkContainer>\n                  <Button\n                    variant=\"danger\"\n                    className=\"btn-sm\"\n                    onClick={() => deleteHandler(user._id)}\n                  >\n                    <i className=\"fas fa-trash\"></i>\n                  </Button>\n                </td>\n              </tr>\n            ))}\n          </tbody>\n        </Table>\n      )}\n    </>\n  );\n};\n\nexport default UserListView;\n"
  },
  {
    "path": "frontend/src/store.jsx",
    "content": "import { createStore, combineReducers, applyMiddleware } from \"redux\";\nimport thunk from \"redux-thunk\";\nimport { composeWithDevTools } from \"@redux-devtools/extension\";\nimport {\n  studentListReducer,\n  studentAddReducer,\n  studentDetailsReducer,\n  getStudentsByRoomNoReducer,\n  studentUpdateReducer,\n  studentDeleteReducer,\n} from \"./reducers/studentsReducer\";\nimport {\n  userLoginReducer,\n  userRegisterReducer,\n  userDetailsReducer,\n  userUpdateProfileReducer,\n  userListReducer,\n  userDeleteReducer,\n  userUpdateReducer,\n} from \"./reducers/userReducers\";\nimport {\n  attendanceDataEnterReducer,\n  attendanceAnalysisReducer,\n  deleteAttendanceReducer,\n} from \"./reducers/attendanceReducer\";\n\nconst reducer = combineReducers({\n  studentsList: studentListReducer,\n  studentDetails: studentDetailsReducer,\n  studentAdd: studentAddReducer,\n  studentUpdate: studentUpdateReducer,\n  studentDelete: studentDeleteReducer,\n  getStudentsByRoomNo: getStudentsByRoomNoReducer,\n  userLogin: userLoginReducer,\n  userRegister: userRegisterReducer,\n  userDetails: userDetailsReducer,\n  userUpdateProfile: userUpdateProfileReducer,\n  userList: userListReducer,\n  userDelete: userDeleteReducer,\n  userUpdate: userUpdateReducer,\n  attendanceDataEnter: attendanceDataEnterReducer,\n  attendanceAnalysis: attendanceAnalysisReducer,\n  attendanceDelete: deleteAttendanceReducer,\n});\nconst userInfoFromStorage = localStorage.getItem(\"userInfo\")\n  ? JSON.parse(localStorage.getItem(\"userInfo\"))\n  : null;\n\nconst initialState = {\n  userLogin: { userInfo: userInfoFromStorage },\n};\n\nconst middleware = [thunk];\nconst store = createStore(\n  reducer,\n  initialState,\n  composeWithDevTools(applyMiddleware(...middleware))\n);\n\nexport default store;\n"
  },
  {
    "path": "frontend/vite.config.js",
    "content": "import { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\n\nexport default defineConfig({\n  plugins: [react()],\n  server: {\n    port: 3000,\n    proxy: {\n      \"/users\": { target: \"http://127.0.0.1:5000\", changeOrigin: true },\n      \"/student\": { target: \"http://127.0.0.1:5000\", changeOrigin: true },\n      \"/attendance\": { target: \"http://127.0.0.1:5000\", changeOrigin: true },\n    },\n  },\n});\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"server\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"type\": \"module\",\n  \"engines\": {\n    \"node\": \">=20\"\n  },\n  \"scripts\": {\n    \"start\": \"node server/index.js\",\n    \"server\": \"nodemon server/index.js\",\n    \"client\": \"npm run dev --prefix frontend\",\n    \"dev\": \"concurrently \\\"npm run server\\\" \\\"npm run client\\\"\",\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n    \"heroku-postbuild\": \"NPM_CONFIG_PRODUCTION=false npm install --prefix frontend && npm run build --prefix frontend\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"bcryptjs\": \"^2.4.3\",\n    \"dotenv\": \"^16.4.7\",\n    \"express\": \"^4.21.2\",\n    \"express-async-handler\": \"^1.2.0\",\n    \"jsonwebtoken\": \"^9.0.2\",\n    \"mongoose\": \"^8.9.5\",\n    \"morgan\": \"^1.10.0\"\n  },\n  \"devDependencies\": {\n    \"concurrently\": \"^9.1.2\",\n    \"nodemon\": \"^3.1.9\"\n  }\n}\n"
  },
  {
    "path": "server/config/mongoDBConfig.js",
    "content": "import mongoose from \"mongoose\";\n\nconst connectDB = async () => {\n  try {\n    const conn = await mongoose.connect(process.env.MONGO_URI);\n    console.log(`MongoDB Connected: ${conn.connection.host}`);\n  } catch (error) {\n    console.error(`Error: ${error.message}`);\n    process.exit(1);\n  }\n};\n\nexport default connectDB;\n"
  },
  {
    "path": "server/controllers/attendanceController.js",
    "content": "import asyncHandler from \"express-async-handler\";\nimport Attendance from \"../models/attendance.js\";\n\nconst getAttendanceByRoomNo = asyncHandler(async (req, res) => {\n  const date = req.body.date || Date().toString().substring(0, 15);\n  const attendance = await Attendance.findOne({\n    roomNo: { $in: [req.body.roomNo] },\n    date: date,\n  });\n  if (attendance) {\n    res.json(attendance);\n  } else {\n    res.status(404);\n    throw new Error(\n      `You didn't take attendance today for room  No:${req.params.roomId}`\n    );\n  }\n});\n\nconst getAttendance = asyncHandler(async (req, res) => {\n  const date = req.body.date || Date().toString().substring(0, 15);\n  const attendance = await Attendance.findOne({\n    date: date,\n  });\n  if (attendance) {\n    res.json(attendance);\n  } else {\n    res.status(404);\n    throw new Error(`You didn't take attendance ${date}!!`);\n  }\n});\n\nconst enterAttendanceByRoomNo = asyncHandler(async (req, res) => {\n  const date = req.body.date || Date().toString().substring(0, 15);\n  const attendance = await Attendance.findOne({\n    date: date,\n  });\n  if (attendance) {\n    const dataTemp = attendance.data;\n    const detailsTemp = attendance.details;\n    for (const [key, value] of Object.entries(req.body.data)) {\n      dataTemp.set(key, value);\n    }\n    for (const [key, value] of Object.entries(req.body.details)) {\n      detailsTemp.set(key, value);\n    }\n    attendance.details = detailsTemp;\n    attendance.data = dataTemp;\n\n    const updatedAttendance = await attendance.save();\n    res.json(updatedAttendance);\n  } else {\n    const newAttendance = await Attendance.create({\n      roomNo: [req.body.roomNo],\n      date: date,\n      data: req.body.data,\n      details: req.body.details,\n    });\n    res.json(newAttendance);\n  }\n});\n\nconst deleteAttendanceByDays = asyncHandler(async (req, res) => {\n  const days = req.params.days;\n  var date = new Date();\n  var deletionDate = new Date(date.setDate(date.getDate() - days));\n  await Attendance.deleteMany({\n    createdAt: { $lt: deletionDate },\n  });\n  res.json({ message: `Deleted Attendance for before past ${days} days` });\n});\n\nexport {\n  getAttendanceByRoomNo,\n  enterAttendanceByRoomNo,\n  getAttendance,\n  deleteAttendanceByDays,\n};\n"
  },
  {
    "path": "server/controllers/studentController.js",
    "content": "import asyncHandler from \"express-async-handler\";\nimport Student from \"../models/student.js\";\nimport Attendance from \"../models/attendance.js\";\n\nconst addStudent = asyncHandler(async (req, res) => {\n  const {\n    name,\n    address,\n    category,\n    city,\n    contact,\n    fatherContact,\n    image,\n    roomNo,\n    blockNo,\n    status,\n  } = req.body;\n\n  const studentExist = await Student.findOne({ name: name });\n\n  if (studentExist) {\n    res.status(400);\n    throw new Error(\"Student already exists\");\n  }\n\n  const student = await Student.create({\n    name,\n    address,\n    category,\n    city,\n    contact,\n    fatherContact,\n    image,\n    roomNo,\n    blockNo,\n    status,\n  });\n\n  if (student) {\n    res.status(201).json({\n      _id: student._id,\n      name: student.name,\n      address: student.address,\n      category: student.category,\n      city: student.city,\n      contact: student.contact,\n      fatherContact: student.fatherContact,\n      image: student.image,\n      roomNo: student.roomNo,\n      blockNo: student.blockNo,\n      status: student.status,\n    });\n  } else {\n    res.status(400);\n    throw new Error(\"Invalid Student data\");\n  }\n});\nconst updateStudentProfile = asyncHandler(async (req, res) => {\n  const student = await Student.findById(req.body._id);\n\n  if (student) {\n    student.name = req.body.name || student.name;\n    student.address = req.body.address || student.address;\n    student.category = req.body.category || student.category;\n    student.city = req.body.city || student.city;\n    student.contact = req.body.contact || student.contact;\n    student.fatherContact = req.body.fatherContact || student.fatherContact;\n    student.image = req.body.image || student.image;\n    student.roomNo = req.body.roomNo || student.roomNo;\n    student.blockNo = req.body.blockNo || student.blockNo;\n    student.status = req.body.status || student.status;\n    const updatedStudent = await student.save();\n\n    res.json({\n      _id: updatedStudent._id,\n      name: updatedStudent.name,\n      address: updatedStudent.address,\n      category: updatedStudent.category,\n      city: updatedStudent.city,\n      contact: updatedStudent.contact,\n      fatherContact: updatedStudent.fatherContact,\n      image: updatedStudent.image,\n      roomNo: updatedStudent.roomNo,\n      blockNo: updatedStudent.blockNo,\n      status: updatedStudent.status,\n    });\n  } else {\n    res.status(404);\n    throw new Error(\"Student not found\");\n  }\n});\nconst getAllStudents = asyncHandler(async (req, res) => {\n  const pageSize = 15;\n  const page = Number(req.query.pageNumber) || 1;\n\n  const keyword = req.query.keyword\n    ? {\n        name: {\n          $regex: req.query.keyword,\n          $options: \"i\",\n        },\n      }\n    : {};\n\n  const count = await Student.countDocuments({ ...keyword });\n  const students = await Student.find({ ...keyword })\n    .limit(pageSize)\n    .skip(pageSize * (page - 1));\n  if (students && students.length != 0) {\n    res.json({ students, page, pages: Math.ceil(count / pageSize) });\n  } else {\n    res.status(404);\n    throw new Error(\"No Students Found\");\n  }\n});\n\nconst deleteStudent = asyncHandler(async (req, res) => {\n  const student = await Student.findById(req.params.id);\n\n  if (student) {\n    await student.remove();\n    res.json({ message: \"Student removed\" });\n  } else {\n    res.status(404);\n    throw new Error(\"Student not found\");\n  }\n});\nconst getStudentById = asyncHandler(async (req, res) => {\n  const student = await Student.findById(req.params.id);\n  if (student) {\n    res.json(student);\n  } else {\n    res.status(404);\n    throw new Error(\"Students not found\");\n  }\n});\n\nconst getStudentByRoomNo = asyncHandler(async (req, res) => {\n  const attendance = await Attendance.findOne({\n    date: Date().toString().substring(0, 15),\n    roomNo: { $in: [req.params.roomId] },\n  });\n  const students = await Student.find({ roomNo: req.params.roomId });\n  if (students) {\n    attendance\n      ? res.json({ students: students, attendance: attendance })\n      : res.json({ students: students });\n  } else {\n    res.status(404);\n    throw new Error(\"Students not found\");\n  }\n});\n\nexport {\n  addStudent,\n  updateStudentProfile,\n  getAllStudents,\n  deleteStudent,\n  getStudentById,\n  getStudentByRoomNo,\n};\n"
  },
  {
    "path": "server/controllers/userController.js",
    "content": "import asyncHandler from \"express-async-handler\";\nimport generateToken from \"../utils/generateToken.js\";\nimport User from \"../models/user.js\";\n\nconst authUser = asyncHandler(async (req, res) => {\n  const { email, password } = req.body;\n\n  const user = await User.findOne({ email });\n\n  if (user && (await user.matchPassword(password))) {\n    res.json({\n      _id: user._id,\n      name: user.name,\n      email: user.email,\n      isAdmin: user.isAdmin,\n      token: generateToken(user._id),\n    });\n  } else {\n    res.status(401);\n    throw new Error(\"Invalid email or password\");\n  }\n});\n\nconst registerUser = asyncHandler(async (req, res) => {\n  const { name, email, password } = req.body;\n\n  const userExists = await User.findOne({ email });\n\n  if (userExists) {\n    res.status(400);\n    throw new Error(\"User already exists\");\n  }\n\n  const user = await User.create({\n    name,\n    email,\n    password,\n  });\n\n  if (user) {\n    const token = generateToken(user._id);\n    res.status(201).json({\n      _id: user._id,\n      name: user.name,\n      email: user.email,\n      isAdmin: user.isAdmin,\n      token: token,\n    });\n  } else {\n    res.status(400);\n    throw new Error(\"Invalid user data\");\n  }\n});\n\nconst getUserProfile = asyncHandler(async (req, res) => {\n  const user = await User.findById(req.user._id);\n\n  if (user) {\n    res.json({\n      _id: user._id,\n      name: user.name,\n      email: user.email,\n      isAdmin: user.isAdmin,\n    });\n  } else {\n    res.status(404);\n    throw new Error(\"User not found\");\n  }\n});\n\nconst updateUserProfile = asyncHandler(async (req, res) => {\n  const user = await User.findById(req.user._id);\n\n  if (user) {\n    user.name = req.body.name || user.name;\n    user.email = req.body.email || user.email;\n    if (req.body.password) {\n      user.password = req.body.password;\n    }\n\n    const updatedUser = await user.save();\n\n    res.json({\n      _id: updatedUser._id,\n      name: updatedUser.name,\n      email: updatedUser.email,\n      isAdmin: updatedUser.isAdmin,\n      token: generateToken(updatedUser._id),\n    });\n  } else {\n    res.status(404);\n    throw new Error(\"User not found\");\n  }\n});\n\nconst getUsers = asyncHandler(async (req, res) => {\n  const users = await User.find({});\n  res.json(users);\n});\n\nconst deleteUser = asyncHandler(async (req, res) => {\n  const user = await User.findById(req.params.id);\n\n  if (user) {\n    await user.remove();\n    res.json({ message: \"User removed\" });\n  } else {\n    res.status(404);\n    throw new Error(\"User not found\");\n  }\n});\n\nconst getUserById = asyncHandler(async (req, res) => {\n  const user = await User.findById(req.params.id).select(\"-password\");\n\n  if (user) {\n    res.json(user);\n  } else {\n    res.status(404);\n    throw new Error(\"User not found\");\n  }\n});\n\nconst updateUser = asyncHandler(async (req, res) => {\n  const user = await User.findById(req.params.id);\n\n  if (user) {\n    user.name = req.body.name || user.name;\n    user.email = req.body.email || user.email;\n    user.isAdmin = req.body.isAdmin;\n\n    const updatedUser = await user.save();\n\n    res.json({\n      _id: updatedUser._id,\n      name: updatedUser.name,\n      email: updatedUser.email,\n      isAdmin: updatedUser.isAdmin,\n    });\n  } else {\n    res.status(404);\n    throw new Error(\"User not found\");\n  }\n});\n\nexport {\n  authUser,\n  registerUser,\n  getUserProfile,\n  updateUserProfile,\n  getUsers,\n  deleteUser,\n  getUserById,\n  updateUser,\n};\n"
  },
  {
    "path": "server/data/students.js",
    "content": "const students = [];\nexport default students;\n"
  },
  {
    "path": "server/index.js",
    "content": "import express from \"express\";\nimport userRoutes from \"./routes/userRoutes.js\";\nimport studentRoutes from \"./routes/studentRoutes.js\";\nimport attendanceRoutes from \"./routes/attendanceRoutes.js\";\nimport path from \"path\";\nimport morgan from \"morgan\";\n\nimport dotenv from \"dotenv\";\nimport connectDB from \"./config/mongoDBConfig.js\";\nimport { errorHandler, notFound } from \"./middleware/errorMiddleware.js\";\ndotenv.config();\nconnectDB();\nconst app = express();\n\nif (process.env.NODE_ENV === \"development\") {\n  app.use(morgan(\"dev\"));\n}\napp.use(express.json());\napp.use(express.urlencoded({ extended: false }));\napp.use(\"/users\", userRoutes);\napp.use(\"/student\", studentRoutes);\napp.use(\"/attendance\", attendanceRoutes);\n\nconst __dirname = path.resolve();\nif (process.env.NODE_ENV === \"production\") {\n  app.use(express.static(path.join(__dirname, \"/frontend/dist\")));\n\n  app.get(\"*\", (req, res) =>\n    res.sendFile(path.resolve(__dirname, \"frontend\", \"dist\", \"index.html\"))\n  );\n} else {\n  app.get(\"/\", (req, res) => {\n    res.send(\"API is running....\");\n  });\n}\napp.use(notFound);\napp.use(errorHandler);\n\nconst PORT = process.env.PORT || 5000;\n\napp.listen(PORT, () => {\n  console.log(\n    `Server running in ${process.env.NODE_ENV || \"development\"} mode on port ${PORT}`\n  );\n});\n"
  },
  {
    "path": "server/middleware/authMiddleware.js",
    "content": "import jwt from \"jsonwebtoken\";\nimport asyncHandler from \"express-async-handler\";\nimport User from \"../models/user.js\";\n\nconst protect = asyncHandler(async (req, res, next) => {\n  let token;\n\n  if (\n    req.headers.authorization &&\n    req.headers.authorization.startsWith(\"Bearer\")\n  ) {\n    try {\n      token = req.headers.authorization.split(\" \")[1];\n\n      const decoded = jwt.verify(token, process.env.JWT_SECRET);\n\n      req.user = await User.findById(decoded.id).select(\"-password\");\n\n      next();\n    } catch (error) {\n      console.error(error);\n      res.status(401);\n      throw new Error(\"Not authorized, token failed\");\n    }\n  }\n\n  if (!token) {\n    res.status(401);\n    throw new Error(\"Not authorized, no token\");\n  }\n});\n\nconst admin = (req, res, next) => {\n  if (req.user && req.user.isAdmin) {\n    next();\n  } else {\n    res.status(401);\n    throw new Error(\"Not authorized as an admin\");\n  }\n};\n\nexport { protect, admin };\n"
  },
  {
    "path": "server/middleware/errorMiddleware.js",
    "content": "const notFound = (req, res, next) => {\n  const error = new Error(`Not Found - ${req.originalUrl}`);\n  res.status(404);\n  next(error);\n};\n\nconst errorHandler = (err, req, res, next) => {\n  const statusCode = res.statusCode === 200 ? 500 : res.statusCode;\n  res.status(statusCode);\n  res.json({\n    message: err.message,\n    stack: process.env.NODE_ENV === \"production\" ? null : err.stack,\n  });\n};\n\nexport { notFound, errorHandler };\n"
  },
  {
    "path": "server/models/attendance.js",
    "content": "import mongoose from \"mongoose\";\n\nconst attendanceSchema = mongoose.Schema(\n  {\n    roomNo: {\n      type: Array,\n      required: true,\n    },\n    date: {\n      type: String,\n      default: Date().toString().substring(0, 15),\n    },\n    data: {\n      type: Map,\n      required: true,\n      default: {},\n    },\n    details: {\n      type: Map,\n      required: true,\n      default: {},\n    },\n  },\n  {\n    timestamps: true,\n  }\n);\n\nconst Attendance = mongoose.model(\"Attendance\", attendanceSchema);\n\nexport default Attendance;\n"
  },
  {
    "path": "server/models/student.js",
    "content": "import mongoose from \"mongoose\";\n\nconst studentSchema = mongoose.Schema(\n  {\n    name: {\n      type: String,\n      required: true,\n    },\n    address: {\n      type: String,\n      required: true,\n    },\n    category: {\n      type: String,\n      required: true,\n    },\n    city: {\n      type: String,\n      required: true,\n    },\n    contact: {\n      type: Number,\n      required: true,\n    },\n    fatherContact: {\n      type: Number,\n      required: true,\n    },\n    image: {\n      type: String,\n      required: true,\n    },\n    roomNo: {\n      type: String,\n      required: true,\n    },\n    blockNo: {\n      type: String,\n      required: true,\n    },\n    status: {\n      type: String,\n      required: true,\n    },\n  },\n  {\n    timestamps: true,\n  }\n);\n\nconst Student = mongoose.model(\"Student\", studentSchema);\n\nexport default Student;\n"
  },
  {
    "path": "server/models/user.js",
    "content": "import mongoose from \"mongoose\";\nimport bcrypt from \"bcryptjs\";\n\nconst userSchema = mongoose.Schema(\n  {\n    name: {\n      type: String,\n      required: true,\n    },\n    email: {\n      type: String,\n      required: true,\n      unique: true,\n    },\n    password: {\n      type: String,\n      required: true,\n    },\n    isAdmin: {\n      type: Boolean,\n      required: true,\n      default: false,\n    },\n  },\n  {\n    timestamps: true,\n  }\n);\n\nuserSchema.methods.matchPassword = async function (enteredPassword) {\n  return await bcrypt.compare(enteredPassword, this.password);\n};\n\nuserSchema.pre(\"save\", async function () {\n  if (!this.isModified(\"password\")) {\n    return;\n  }\n  const salt = await bcrypt.genSalt(10);\n  this.password = await bcrypt.hash(this.password, salt);\n});\n\nconst User = mongoose.model(\"User\", userSchema);\n\nexport default User;\n"
  },
  {
    "path": "server/routes/attendanceRoutes.js",
    "content": "import express from \"express\";\nimport {\n  deleteAttendanceByDays,\n  enterAttendanceByRoomNo,\n  getAttendance,\n  getAttendanceByRoomNo,\n} from \"../controllers/attendanceController.js\";\nimport { protect, admin } from \"../middleware/authMiddleware.js\";\nconst router = express.Router();\nrouter.route(\"/:roomId\").get(protect, getAttendanceByRoomNo);\nrouter.route(\"/\").post(protect, admin, enterAttendanceByRoomNo);\nrouter.route(\"/:days\").delete(protect, admin, deleteAttendanceByDays);\nrouter.route(\"/getAnalysis\").post(protect, getAttendance);\n\nexport default router;\n"
  },
  {
    "path": "server/routes/studentRoutes.js",
    "content": "import express from \"express\";\nimport {\n  addStudent,\n  deleteStudent,\n  getAllStudents,\n  getStudentById,\n  updateStudentProfile,\n  getStudentByRoomNo,\n} from \"../controllers/studentController.js\";\nimport { protect, admin } from \"../middleware/authMiddleware.js\";\n\nconst router = express.Router();\nrouter.route(\"/all\").get(protect, getAllStudents);\nrouter.route(\"/addStudent\").post(protect, admin, addStudent);\nrouter\n  .route(\"/:id\")\n  .get(protect, getStudentById)\n  .delete(protect, admin, deleteStudent)\n  .put(protect, admin, updateStudentProfile);\nrouter.route(\"/room/:roomId\").get(getStudentByRoomNo);\nexport default router;\n"
  },
  {
    "path": "server/routes/userRoutes.js",
    "content": "import express from \"express\";\nconst router = express.Router();\nimport {\n  authUser,\n  registerUser,\n  getUserProfile,\n  updateUserProfile,\n  getUsers,\n  deleteUser,\n  getUserById,\n  updateUser,\n} from \"../controllers/userController.js\";\nimport { protect, admin } from \"../middleware/authMiddleware.js\";\n\nrouter.route(\"/\").post(registerUser).get(protect, admin, getUsers);\nrouter.post(\"/login\", authUser);\nrouter\n  .route(\"/profile\")\n  .get(protect, getUserProfile)\n  .put(protect, updateUserProfile);\nrouter\n  .route(\"/:id\")\n  .delete(protect, admin, deleteUser)\n  .get(protect, admin, getUserById)\n  .put(protect, admin, updateUser);\n\nexport default router;\n"
  },
  {
    "path": "server/seeder.js",
    "content": "import dotenv from \"dotenv\";\nimport Student from \"./models/student.js\";\n\nimport connectDB from \"./config/mongoDBConfig.js\";\n\ndotenv.config();\n\nconst importData = async () => {\n  try {\n    await connectDB();\n    await Student.deleteMany();\n    console.log(\"Data Imported!\");\n    process.exit();\n  } catch (error) {\n    console.error(`${error}`);\n    process.exit(1);\n  }\n};\n\nconst destroyData = async () => {\n  try {\n    await connectDB();\n    await Student.deleteMany();\n    console.log(\"Data Destroyed!\");\n    process.exit();\n  } catch (error) {\n    console.error(`${error}`);\n    process.exit(1);\n  }\n};\n\nif (process.argv[2] === \"-d\") {\n  destroyData();\n} else {\n  importData();\n}\n"
  },
  {
    "path": "server/utils/generateToken.js",
    "content": "import jwt from 'jsonwebtoken'\n\nconst generateToken = (id) => {  \n  return jwt.sign({ id }, process.env.JWT_SECRET, {\n    expiresIn: '30d',\n  })\n}\n\nexport default generateToken\n"
  }
]