diff --git a/server/client/package.json b/server/client/package.json index 2babfd03bb96b884004b565d56ecab590c80218a..a129c659299d2c5ac19c8206baaec063d1159136 100644 --- a/server/client/package.json +++ b/server/client/package.json @@ -12,7 +12,7 @@ "bootstrap": "^4.5.2", "formik": "^2.1.5", "jquery": "^3.5.1", - "moment": "^2.29.0", + "moment": "^2.29.1", "popper.js": "^1.16.1", "react": "^16.13.1", "react-dom": "^16.13.1", diff --git a/server/client/src/Components/Menu.js b/server/client/src/Components/Menu.js index 91d7007ce611fa54ba735b814d3975d24d1e9316..fc605209e81527ed7deab4b25b076dff12a7df17 100644 --- a/server/client/src/Components/Menu.js +++ b/server/client/src/Components/Menu.js @@ -1,3 +1,4 @@ +import axios from 'axios'; import React, { useState, useEffect } from 'react'; import { Link, Redirect } from 'react-router-dom'; import styled from 'styled-components'; @@ -17,8 +18,13 @@ const Nav = styled.nav` function Menu() { const [state, setState] = useState() + const [user, setUser] = useState({ role: "" }) const name = localStorage.getItem('name'); + useEffect(() => { + acheck(); + }, []) + if (state) return ; function logout() { @@ -27,6 +33,17 @@ function Menu() { setState(true); } + function acheck() { + axios.get(`/users/${localStorage.getItem('_id')}`) + .then(res => { + if (res.data.role == "admin") { + setUser(res.data) + } + }).catch(err => { + alert(err.error) + }); + } + return ( 대관 서비스 @@ -54,20 +71,21 @@ function Menu() { }} className="nav-link"> 대관 확인/취소 - - - 대관 확인/취소(관리자) - + {user.role === "admin" ? ( + + + 대관 확인/취소(관리자) + ) : null} {name}님 안녕하세요 비밀번호 변경 / 로그아웃 diff --git a/server/client/src/Pages/CheckPage.js b/server/client/src/Pages/CheckPage.js index 2b6dfef61467fe50e94b281cf3d3a2c4ace7e019..1aff6fc23a7fd241546fbf0eea683cea25b56810 100644 --- a/server/client/src/Pages/CheckPage.js +++ b/server/client/src/Pages/CheckPage.js @@ -59,7 +59,7 @@ function Check(props) { {reserve.starttime}시~{(Number(reserve.starttime) + reserve.usetime)}시 {reserve.room} {reserve.num} - {reserve.approve ? "승인" : "미승인"} + {reserve.check ? (reserve.approve ? "사용가능" : "사용불가") : "승인대기중"} remove(index)} className="btn btn-danger"> 취소 diff --git a/server/routes/reserves.js b/server/routes/reserves.js index 00cb740c76b2ad6952960fdbf551370ee0903484..359980191f2eb09fe941559421d2e4131efc5a99 100644 --- a/server/routes/reserves.js +++ b/server/routes/reserves.js @@ -7,14 +7,13 @@ const router = express.Router(); router.post('/', function (req, res, next) { console.log('/reserve post req.body', req.body) - const reserve = new Reserve({ user: req.body._id, date: req.body.date, starttime: Number(req.body.starttime), usetime: Number(req.body.usetime), - start: `${req.body.date}T`+`${req.body.starttime}:00:00`, - end: `${req.body.date}T`+`${Number(req.body.starttime)+Number(req.body.usetime)}:00:00`, + start: `${req.body.date}T` + `${req.body.starttime}:00:00`, + end: `${req.body.date}T` + `${Number(req.body.starttime) + Number(req.body.usetime)}:00:00`, room: req.body.room, reason: req.body.reason, students: req.body.students, @@ -22,26 +21,60 @@ router.post('/', function (req, res, next) { num: req.body.students.length + 1, }); - reserve.save() - .then((result) => { - console.log(result); - res.status(201).json(result); - }) - .catch((err) => { - console.error(err); - next(err); - }); + Reserve.find({ room: req.body.room, approve: true }, function (err, reserves) { + if (err) return res.status(500).json({ error: err }); + + if (!reserves) { + reserve.save() + .then((result) => { + console.log(result); + res.status(201).json(result); + }) + .catch((err) => { + console.error(err); + next(err); + }); + } + const strt = new Date(reserve.start) + const endt = new Date(reserve.end) + const reserveArr = reserves.map(item => ( + (strt >= new Date(item.start) && strt <= new Date(item.end)) || + (endt >= new Date(item.start) && endt <= new Date(item.end)) ? + "item" : + null + )) + console.log("array", reserveArr) + if (!reserveArr.includes("item")) { + reserve.save() + .then((result) => { + console.log(result); + res.status(201).json(reserves); + }) + .catch((err) => { + console.error(err); + next(err); + }); + } + else return res.status(404).json({ error: "다른 시간을 선택해주세요." }) + }) + }); +router.get('/room/:room', function (req, res, next) { + console.log('reserves get room req.params', req.params) + Reserve.find({ room: req.params.room, approve: true }, function (err, reserve) { + if (err) return res.status(500).json({ error: err }); + console.log('reserve room list', reserve); + res.status(201).json(reserve); + }) +}) + // router.get('/:_id', verifyToken, function (req, res, next) { router.get('/:_id', function (req, res, next) { console.log('/reserves get req.params', req.params) Reserve.find({ user: req.params._id }, function (err, reserve) { - console.log('id.name',reserve) if (err) return res.status(500).json({ error: err }); - console.log('reserve list', reserve) res.status(201).json(reserve); - }) }); @@ -73,9 +106,10 @@ router.delete('/:_id', function (req, res, next) { router.put('/:id', function (req, res, next) { console.log('/reserves put req.body', req.params) - Reserve.findOne({ _id: req.params.id }, 'approve', function (err, reserve) { + Reserve.findOne({ _id: req.params.id }, 'check approve', function (err, reserve) { if (err) return res.status(500).json({ error: err }); - reserve.approve = true; + reserve.check = true; + reserve.approve = req.body.approve; reserve.save() .then((result) => { console.log(result); diff --git a/server/schemas/index.js b/server/schemas/index.js index 6c82386c64cfe4af2f9a4bc649bcd1df8ff96ad0..92fa93316e1bb77d4a102f3070ea76627ee008d6 100644 --- a/server/schemas/index.js +++ b/server/schemas/index.js @@ -5,7 +5,7 @@ module.exports = () => { if (process.env.NODE_ENV !== 'production') { mongoose.set('debug', true); } - mongoose.connect('mongodb://kimpen:kim65811025@localhost:27017/admin', { + mongoose.connect('mongodb://cherry:1q2w3e4r@localhost:27017/admin', { dbName: 'ku_rental', useNewUrlParser: true, useUnifiedTopology: true, }, (error) => { if (error) { diff --git a/server/schemas/reserve.js b/server/schemas/reserve.js index fa3cda86eead5b360ed6802da79c2e647a4d5c5d..5850ce5e626a1bbec8ceafcbd85a39ad8a0ecf3c 100644 --- a/server/schemas/reserve.js +++ b/server/schemas/reserve.js @@ -39,7 +39,10 @@ const reserveSchema = new Schema({ approve: { type: Boolean, default: false, - + }, + check: { + type: Boolean, + default: false, }, num: { type: Number,