Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
students
reservation-service
Commits
813db703
Commit
813db703
authored
Oct 09, 2020
by
Choi Ga Young
Browse files
채린 머지
parents
6aa8c061
d0f6f520
Changes
20
Hide whitespace changes
Inline
Side-by-side
server/app.js
View file @
813db703
...
...
@@ -8,6 +8,7 @@ const indexRouter = require('./routes/index');
const
usersRouter
=
require
(
'
./routes/users
'
);
const
loginRouter
=
require
(
'
./routes/login
'
);
const
reserveRouter
=
require
(
'
./routes/reserves
'
);
const
noticeRouter
=
require
(
'
./routes/notices
'
);
const
connect
=
require
(
'
./schemas
'
);
const
app
=
express
();
...
...
@@ -33,6 +34,7 @@ app.use('/', indexRouter);
app
.
use
(
'
/users
'
,
usersRouter
);
app
.
use
(
'
/login
'
,
loginRouter
);
app
.
use
(
'
/reserves
'
,
reserveRouter
);
app
.
use
(
'
/notices
'
,
noticeRouter
);
// catch 404 and forward to error handler
app
.
use
(
function
(
req
,
res
,
next
)
{
...
...
server/client/src/App.css
deleted
100644 → 0
View file @
6aa8c061
.App
{
text-align
:
center
;
}
.App-logo
{
height
:
40vmin
;
pointer-events
:
none
;
}
@media
(
prefers-reduced-motion
:
no-preference
)
{
.App-logo
{
animation
:
App-logo-spin
infinite
20s
linear
;
}
}
.App-header
{
background-color
:
#282c34
;
min-height
:
100vh
;
display
:
flex
;
flex-direction
:
column
;
align-items
:
center
;
justify-content
:
center
;
font-size
:
calc
(
10px
+
2vmin
);
color
:
white
;
}
.App-link
{
color
:
#61dafb
;
}
@keyframes
App-logo-spin
{
from
{
transform
:
rotate
(
0deg
);
}
to
{
transform
:
rotate
(
360deg
);
}
}
server/client/src/App.js
deleted
100644 → 0
View file @
6aa8c061
import
React
from
'
react
'
;
import
logo
from
'
./logo.svg
'
;
import
'
./App.css
'
;
function
App
()
{
return
(
<
div
className
=
"
App
"
>
<
header
className
=
"
App-header
"
>
<
img
src
=
{
logo
}
className
=
"
App-logo
"
alt
=
"
logo
"
/>
<
p
>
Edit
<
code
>
src
/
App
.
js
<
/code> and save to reload
.
<
/p
>
<
a
className
=
"
App-link
"
href
=
"
https://reactjs.org
"
target
=
"
_blank
"
rel
=
"
noopener noreferrer
"
>
Learn
React
<
/a
>
<
/header
>
<
/div
>
);
}
export
default
App
;
server/client/src/Components/List.js
deleted
100644 → 0
View file @
6aa8c061
import
React
,
{
useState
,
useEffect
}
from
'
react
'
;
import
{
Field
,
Formik
}
from
'
formik
'
;
import
axios
from
'
axios
'
;
import
{
render
}
from
'
react-dom
'
;
import
{
Link
,
Redirect
}
from
'
react-router-dom
'
;
import
styled
from
'
styled-components
'
;
function
List
(
props
)
{
function
remove
()
{
console
.
log
(
props
.
_id
)
axios
.
delete
(
`/reserves/
${
props
.
_id
}
`
,
{
data
:
{
_id
:
props
.
_id
,
}})
.
then
(
res
=>
{
if
(
res
.
status
===
404
)
return
alert
(
res
.
data
.
error
)
alert
(
"
신청이 완료되었습니다!
"
)
})
.
catch
(
err
=>
{
alert
(
err
.
error
)
});
};
return
(
<
div
>
<
div
>
날짜
:
{
props
.
date
}
<
/div
>
<
div
>
이름
:
{
props
.
name
}
<
/div
>
<
div
>
강의실
:
{
props
.
room
}
<
/div
>
<
div
>
시간
:
{
props
.
time
}
<
/div
>
<
div
>
사용인원
:
{
props
.
num
}
<
/div
>
<
div
>
{
props
.
_id
}
<
/div
>
<
form
onSubmit
=
{
remove
}
className
=
"
col-sm-3
"
>
<
button
type
=
"
submit
"
className
=
"
btn btn-dark
"
>
신청
취소
<
/button
>
<
/form
>
<
/div
>
)
}
export
default
List
;
\ No newline at end of file
server/client/src/Components/Menu.js
View file @
813db703
...
...
@@ -3,7 +3,12 @@ import { Link, Redirect } from 'react-router-dom';
import
styled
from
'
styled-components
'
;
const
Nav
=
styled
.
nav
`
background-color: #981e1e;
background-color: #7B031D;
height: 6vh;
a {
color: #ffffff;
}
`
function
Menu
()
{
...
...
@@ -20,17 +25,24 @@ function Menu() {
return
(
<
Nav
className
=
"
navbar sticky-top navbar-expand-md
"
>
<
Link
to
=
"
/home
"
class
Name
=
"
navbar-brand
"
>
대관
서비스
<
/
Link
>
<
a
class
=
"
navbar-brand
"
href
=
"
#
"
>
대관
서비스
<
/
a
>
<
button
className
=
"
navbar-toggler
"
type
=
"
button
"
data
-
toggle
=
"
collapse
"
data
-
target
=
"
#collapsibleNavbar
"
aria
-
controls
=
"
collapsibleNavbar
"
>
<
span
className
=
"
navbar-toggler-icon
"
><
/span
>
<
/button
>
<
div
className
=
"
collapse navbar-collapse justify-content-between
"
id
=
"
collapsibleNavbar
"
>
<
ul
className
=
"
navbar-nav
"
>
<
li
className
=
"
nav-item
"
>
<
Link
to
=
"
/notice
"
className
=
"
nav-link
"
>
공지사항
<
/Link
>
<
/li
>
<
li
className
=
"
nav-item
"
>
{
console
.
log
(
name
)}
<
Link
to
=
"
/home
"
className
=
"
nav-link
"
>
대관
현황
<
/Link
>
<
/li
>
<
li
className
=
"
nav-item
"
>
<
Link
to
=
"
/apply
"
className
=
"
nav-link
"
>
대관
신청
<
/Link
>
<
Link
to
=
{{
pathname
:
`/apply/
${
localStorage
.
getItem
(
'
_id
'
)}
`
,
state
:
{
id
:
localStorage
.
getItem
(
'
_id
'
)
},
}}
className
=
"
nav-link
"
>
대관
신청
<
/Link
>
<
/li
>
<
li
className
=
"
nav-item
"
>
<
Link
to
=
{{
...
...
@@ -39,14 +51,10 @@ function Menu() {
}}
className
=
"
nav-link
"
>
대관
확인
/
취소
<
/Link
>
<
/li
>
<
li
className
=
"
nav-item
"
>
<
Link
to
=
"
/notice
"
className
=
"
nav-link
"
>
공지사항
<
/Link
>
<
/li
>
<
/ul
>
<
div
>
<
div
>
{
name
}
님
안녕하세요
.
<
/div
>
<
button
onClick
=
{
logout
}
type
=
"
button
"
>
로그아웃
<
/button
>
<
button
><
Link
to
=
"
/signup
"
>
회원가입
<
/Link></
button
>
<
/div
>
<
/div
>
<
/Nav
>
...
...
server/client/src/Pages/ApplyPage.js
View file @
813db703
import
React
from
'
react
'
;
import
{
Formik
}
from
'
formik
'
;
import
React
,
{
useState
,
useEffect
}
from
'
react
'
;
import
{
Formik
,
Field
,
ErrorMessage
,
FieldArray
}
from
'
formik
'
;
import
Menu
from
'
../Components/Menu
'
;
import
axios
from
'
axios
'
;
import
'
bootstrap/dist/css/bootstrap.css
'
;
import
*
as
Yup
from
'
yup
'
;
import
{
Redirect
}
from
'
react-router-dom
'
;
function
Apply
(
props
)
{
const
[
state
,
setState
]
=
useState
();
const
[
user
,
setUser
]
=
useState
({
name
:
""
});
useEffect
(()
=>
{
getUser
();
},
[])
if
(
state
)
{
return
<
Redirect
to
=
{{
pathname
:
`/check/
${
props
.
match
.
params
.
id
}
`
,
state
:
{
id
:
props
.
match
.
params
.
id
},
}}
/>
;
}
function
getUser
()
{
axios
.
get
(
`/users/
${
props
.
match
.
params
.
id
}
`
,
{
headers
:
{
authorization
:
localStorage
.
getItem
(
'
token
'
)
},
})
.
then
(
res
=>
{
if
(
res
.
status
!==
201
)
{
alert
(
res
.
data
.
error
);
}
console
.
log
(
res
.
data
);
setUser
(
res
.
data
);
})
.
catch
(
err
=>
{
alert
(
err
.
error
)
});
}
function
Apply
()
{
return
(
<
div
>
<
Menu
/>
<
div
className
=
"
container
"
>
apply
<
Formik
initialValues
=
{{
date
:
''
,
time
:
''
,
room
:
''
,
name
:
''
,
_id
:
"
5f786720c45bbf6c68899c51
"
,
reason
:
''
,
member
:
''
,
approve
:
false
,
num
:
5
,
}}
validationSchema
=
{
Yup
.
object
({
date
:
Yup
.
string
()
.
required
(
'
날짜를 입력해주세요.
'
),
time
:
Yup
.
string
()
.
required
(
'
시간을 입력해주세요.
'
),
room
:
Yup
.
string
()
.
required
(
'
강의실 번호를 입력해주세요.
'
),
reason
:
Yup
.
string
()
.
required
(
'
대관목적을 입력해주세요.
'
),
name
:
Yup
.
string
()
.
required
(
'
대표자 성함을 입력해주세요.
'
),
member
:
Yup
.
string
()
.
required
(
'
이용자 성함을 입력해주세요.
'
),
})}
onSubmit
=
{(
values
,
{
setSubmitting
})
=>
{
axios
({
method
:
'
post
'
,
url
:
'
/reserves
'
,
data
:
values
,
}).
then
(
res
=>
{
if
(
res
.
status
===
404
)
return
alert
(
res
.
data
.
error
)
alert
(
"
신청이 완료되었습니다!
"
)
initialValues
=
{{
_id
:
`
${
props
.
match
.
params
.
id
}
`
,
date
:
''
,
time
:
''
,
room
:
''
,
reason
:
''
,
students
:
[
{
member
:
''
,
},
],
}}
validationSchema
=
{
Yup
.
object
({
date
:
Yup
.
string
()
.
required
(
'
날짜를 입력해주세요.
'
),
time
:
Yup
.
string
()
.
required
(
'
시간을 입력해주세요.
'
),
room
:
Yup
.
string
()
.
required
(
'
강의실 번호를 입력해주세요.
'
),
reason
:
Yup
.
string
()
.
required
(
'
대관목적을 입력해주세요.
'
),
})}
onSubmit
=
{(
values
,
{
setSubmitting
})
=>
{
console
.
log
(
values
)
axios
({
method
:
'
post
'
,
url
:
'
/reserves
'
,
data
:
values
}).
then
(
res
=>
{
if
(
res
.
status
===
404
)
return
alert
(
res
.
data
.
error
)
alert
(
"
신청이 완료되었습니다!
"
);
setState
(
true
);
})
.
catch
(
err
=>
{
alert
(
err
.
error
)
});
})
.
catch
(
err
=>
{
alert
(
err
.
error
)
});
// setTimeout(() => {
// setSubmitting(false);
// }, 400); // finish the cycle in handler
}}
>
{({
errors
,
touched
,
values
,
handleSubmit
,
getFieldProps
,
isSubmitting
,
})
=>
(
<
div
className
=
"
row justify-content-center align-items-center
"
>
{
console
.
log
(
user
)}
<
form
onSubmit
=
{
handleSubmit
}
className
=
"
col-sm-3
"
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
대표자
<
/label
>
<
div
>
{
user
.
name
}
<
/div
>
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
신청날짜
<
/label
>
<
input
className
=
{(
touched
.
date
&&
errors
.
date
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
number
"
name
=
"
date
"
{...
getFieldProps
(
'
date
'
)}
placeholder
=
"
2020mmdd
"
/>
{
touched
.
date
&&
errors
.
date
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
date
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
이용시간
<
/label
>
<
input
className
=
{(
touched
.
time
&&
errors
.
time
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
time
"
{...
getFieldProps
(
'
time
'
)}
placeholder
=
"
ex) 11:00~14:00
"
/>
{
touched
.
time
&&
errors
.
time
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
time
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
강의실
<
/label
>
<
input
className
=
{(
touched
.
room
&&
errors
.
room
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
room
"
{...
getFieldProps
(
'
room
'
)}
placeholder
=
"
bn-nnn
"
/>
{
touched
.
room
&&
errors
.
room
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
room
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
대관목적
<
/label
>
<
input
className
=
{(
touched
.
reason
&&
errors
.
reason
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
reason
"
{...
getFieldProps
(
'
reason
'
)}
placeholder
=
"
대관목적을 입력해 주세요.
"
/>
{
touched
.
reason
&&
errors
.
reason
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
reason
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
FieldArray
name
=
"
students
"
>
{({
insert
,
remove
,
push
})
=>
(
<
div
>
<
label
>
이용자
<
/label
>
{
values
.
students
.
map
((
student
,
index
)
=>
(
<
div
className
=
"
row
"
key
=
{
index
}
>
<
div
className
=
"
col
"
>
<
Field
name
=
{
`students.
${
index
}
.member`
}
placeholder
=
"
이용자 성함을 입력하세요.
"
type
=
"
text
"
/>
<
ErrorMessage
name
=
{
`friends.
${
index
}
.name`
}
component
=
"
div
"
className
=
"
field-error
"
/>
<
button
type
=
"
button
"
className
=
"
secondary
"
onClick
=
{()
=>
remove
(
index
)}
>
X
<
/button
>
setTimeout
(()
=>
{
setSubmitting
(
false
);
},
400
);
// finish the cycle in handler
}}
>
{({
errors
,
touched
,
handleSubmit
,
getFieldProps
,
isSubmitting
,
})
=>
(
<
div
className
=
"
row justify-content-center align-items-center
"
>
<
form
onSubmit
=
{
handleSubmit
}
className
=
"
col-sm-3
"
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
신청날짜
<
/label
>
<
input
className
=
{(
touched
.
date
&&
errors
.
date
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
number
"
name
=
"
date
"
{...
getFieldProps
(
'
date
'
)}
placeholder
=
"
2020mmdd
"
/>
{
touched
.
date
&&
errors
.
date
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
date
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
이용시간
<
/label
>
<
input
className
=
{(
touched
.
time
&&
errors
.
time
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
time
"
{...
getFieldProps
(
'
time
'
)}
placeholder
=
"
ex) 11:00~14:00
"
/>
{
touched
.
time
&&
errors
.
time
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
time
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
강의실
<
/label
>
<
input
className
=
{(
touched
.
room
&&
errors
.
room
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
room
"
{...
getFieldProps
(
'
room
'
)}
placeholder
=
"
bn-nnn
"
/>
{
touched
.
room
&&
errors
.
room
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
room
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
대관목적
<
/label
>
<
input
className
=
{(
touched
.
reason
&&
errors
.
reason
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
reason
"
{...
getFieldProps
(
'
reason
'
)}
placeholder
=
"
대관목적을 입력해 주세요.
"
/>
{
touched
.
reason
&&
errors
.
reason
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
reason
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
대표자
<
/label
>
<
input
className
=
{(
touched
.
name
&&
errors
.
name
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
name
"
{...
getFieldProps
(
'
name
'
)}
placeholder
=
"
대표자 성함을 입력해 주세요
"
/>
{
touched
.
name
&&
errors
.
name
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
name
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
이용자
<
/label
>
<
input
className
=
{(
touched
.
member
&&
errors
.
member
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
member
"
{...
getFieldProps
(
'
member
'
)}
placeholder
=
"
이용자 성함을 입력해 주세요.
"
/>
{
touched
.
member
&&
errors
.
member
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
member
}
<
/div
>
)
:
null
}
<
/div
>
<
button
type
=
"
submit
"
className
=
"
btn btn-dark
"
disabled
=
{
isSubmitting
}
>
신청하기
<
/button
>
<
/form
>
<
/div
>
)}
<
/Formik
>
<
/div
>
<
/div
>
<
/div
>
))}
<
button
type
=
"
button
"
className
=
"
btn btn-primary
"
onClick
=
{()
=>
push
({
member
:
''
})}
>
추가
<
/button
>
<
/div
>
)}
<
/FieldArray
>
<
/div
>
<
button
type
=
"
submit
"
className
=
"
btn btn-dark
"
disabled
=
{
isSubmitting
}
>
신청하기
<
/button
>
<
/form
>
<
/div
>
)}
<
/Formik
>
<
/div
>
)
}
...
...
server/client/src/Pages/CheckPage.js
View file @
813db703
...
...
@@ -4,6 +4,10 @@ import axios from 'axios';
import
'
bootstrap/dist/css/bootstrap.css
'
;
function
Check
(
props
)
{
const
[
reserve
,
setReserve
]
=
useState
([]);
useEffect
(()
=>
{
getReserve
();
},
[])
function
getReserve
()
{
axios
.
get
(
`/reserves/
${
props
.
match
.
params
.
id
}
`
,
{
...
...
@@ -24,7 +28,7 @@ function Check(props) {
axios
.
delete
(
`/reserves/
${
reserve
[
index
].
_id
}
`
)
.
then
(
res
=>
{
if
(
res
.
status
===
404
)
return
alert
(
res
.
data
.
error
)
alert
(
"
삭제되었습니다!
"
)
alert
(
"
삭제되었습니다!
"
)
;
getReserve
();
})
.
catch
(
err
=>
{
...
...
@@ -32,22 +36,18 @@ function Check(props) {
});
};
const
[
reserve
,
setReserve
]
=
useState
([]);
useEffect
(()
=>
{
getReserve
();
},
[])
return
(
<
div
>
<
Menu
/>
<
div
className
=
""
>
check
<
div
className
=
""
>
<
table
className
=
"
table
"
>
<
thead
>
<
tr
>
<
th
>
아이디
<
/th
>
<
th
>
이름
<
/th
>
<
th
>
날짜
<
/th
>
<
th
>
시간
<
/th
>
<
th
>
강의실
<
/th
>
<
th
>
사용인원
<
/th
>
<
th
>
승인여부
<
/th
>
<
th
>
예약취소
<
/th
>
<
/tr
>
<
/thead
>
...
...
@@ -55,10 +55,11 @@ function Check(props) {
{
reserve
.
map
((
reserve
,
index
)
=>
{
return
(
<
tr
key
=
{
index
}
>
<
td
>
{
props
.
match
.
params
.
id
}
<
/td
>
<
td
>
{
reserve
.
name
}
<
/td
>
<
td
>
{
reserve
.
date
}
<
/td
>
<
td
>
{
reserve
.
time
}
<
/td
>
<
td
>
{
reserve
.
room
}
<
/td
>
<
td
>
{
reserve
.
num
}
<
/td
>
<
td
>
{
reserve
.
approve
?
"
사용허가
"
:
"
글쎄...
"
}
<
/td
>
<
td
>
<
button
onClick
=
{()
=>
remove
(
index
)}
className
=
"
btn btn-danger
"
>
취소
...
...
server/client/src/Pages/LoginPage.js
View file @
813db703
import
React
,
{
useState
}
from
'
react
'
;
import
React
,
{
useState
,
useEffect
}
from
'
react
'
;
import
styled
from
'
styled-components
'
;
import
{
Link
,
Redirect
}
from
'
react-router-dom
'
;
import
{
Formik
}
from
'
formik
'
;
import
*
as
Yup
from
'
yup
'
;
import
axios
from
'
axios
'
;
import
'
bootstrap/dist/css/bootstrap.css
'
;
import
Logo
from
'
../icon.png
'
;
const
Log
=
styled
.
div
`
const
Asd
=
styled
.
div
`
background-color: #7B031D;
&.web {
display : flex;
align-items: center;
}
&.mobile {
height : 20vh;
display : flex;
padding:0;
}
& .mob-head {
display: flex;
flex-direction: row;
height : 100%;
width: 100%;
justify-content: space-evenly;
}
& .mob-img {
max-width: 30vw;
}
`
const
Logo
=
styled
.
div
`
const
Asdf
=
styled
.
div
`
background-color: rgb(239, 218, 200);
`
a {
color : #7B031D;
}
&.mob-formik {
height : 80vh;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
&.web-formik {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
& .mobb {
height: 35vh;
display: flex;
flex-direction: column;
justify-content: space-around;
}
& .webb {
flex-direction: column;
}
& .qwer {
display: flex;
justify-content: space-between;
height: 12vh;
width: 30vw;
margin-bottom: 25px;
}
& .web-input-form {
width: 80%;
justify-content: space-between;
align-content: space-around;
flex-direction: column;
display: flex;
}
& .mob-input-form {
}
`
function
Login
()
{
const
[
state
,
setState
]
=
useState
(
false
);
const
[
state
,
setState
]
=
useState
(
false
);
const
[
mobile
,
setMobile
]
=
useState
(
false
);
useEffect
(()
=>
{
if
(
window
.
innerWidth
<
960
)
{
setMobile
(
true
)
}
else
{
setMobile
(
false
)
}
},
[]);
if
(
state
)
{
return
<
Redirect
to
=
"
/home
"
/>
;
}
if
(
state
)
{
return
<
Redirect
to
=
"
/home
"
/>
;
}
return
(
<
div
className
=
"
container-fluid
"
>
<
div
className
=
"
row
"
>
<
Logo
className
=
"
col-md-5 col-12
"
>
<
h2
>
고려대학교
<
/h2
>
<
h4
>
대관
시스템
<
/h4
>
<
/Logo
>
<
Log
className
=
"
col-md-7 col-12
"
>
<
Formik
initialValues
=
{{
id
:
''
,
password
:
''
}}
validationSchema
=
{
Yup
.
object
({
id
:
Yup
.
string
()
.
required
(
'
학번을 입력해주세요.
'
),
password
:
Yup
.
string
()
.
required
(
'
비밀번호를 입력해주세요.
'
)
.
min
(
8
,
'
8자 이상 입력해주세요.
'
),
})}
onSubmit
=
{(
values
,
{
setSubmitting
})
=>
{
axios
({
method
:
'
post
'
,
url
:
'
/login
'
,
data
:
values
,
}).
then
(
res
=>
{
if
(
res
.
status
===
404
)
return
alert
(
res
.
data
.
error
)
localStorage
.
setItem
(
'
token
'
,
res
.
data
.
token
);
localStorage
.
setItem
(
'
_id
'
,
res
.
data
.
users
.
_id
);
localStorage
.
setItem
(
'
name
'
,
res
.
data
.
users
.
name
);
setState
(
true
);
})
.
catch
(
err
=>
{
<
div
className
=
"
row vw-100 vh-100 m-0
"
>
<
Asd
className
=
{
"
col-md-4 col-12
"
+
(
mobile
?
"
mobile
"
:
"
web
"
)}
>
<
div
className
=
{
mobile
?
"
mob-head
"
:
""
}
>
<
img
className
=
{
mobile
?
"
mob-img
"
:
"
img-fluid
"
}
src
=
{
Logo
}
/
>
<
div
className
=
{
"
d-flex
"
+
(
mobile
?
"
align-items-center
"
:
"
justify-content-center
"
)}
>
<
h1
className
=
"
font-weight-bold text-white
"
>
고려대학교
<
br
/>
대관
서비스
<
/h1
>
<
/div
>
<
/div
>
<
/Asd
>
<
Asdf
className
=
{
"
col-md-8 col-12
"
+
(
mobile
?
"
mob-formik p-0
"
:
"
web-formik
"
)}
>
<
Formik
initialValues
=
{{
id
:
''
,
password
:
''
}}
validationSchema
=
{
Yup
.
object
({
id
:
Yup
.
string
()
.
required
(
'
학번을 입력해주세요.
'
),
password
:
Yup
.
string
()
.
required
(
'
비밀번호를 입력해주세요.
'
)
.
min
(
8
,
'
8자 이상 입력해주세요.
'
),
})}
onSubmit
=
{(
values
,
{
setSubmitting
})
=>
{
axios
({
method
:
'
post
'
,
url
:
'
/login
'
,
data
:
values
,
}).
then
(
res
=>
{
if
(
res
.
status
===
404
)
return
alert
(
res
.
data
.
error
)
localStorage
.
setItem
(
'
token
'
,
res
.
data
.
token
);
localStorage
.
setItem
(
'
_id
'
,
res
.
data
.
users
.
_id
);
localStorage
.
setItem
(
'
name
'
,
res
.
data
.
users
.
name
);
setState
(
true
);
})
.
catch
(
err
=>
{
alert
(
err
.
error
)
});
setTimeout
(()
=>
{
setSubmitting
(
false
);
},
400
);
// finish the cycle in handler
}}
>
{({
errors
,
touched
,
handleSubmit
,
getFieldProps
,
// contain values, handleChange, handleBlur
isSubmitting
,
})
=>
(
<
div
className
=
"
row justify-content-center align-items-center
"
>
<
form
onSubmit
=
{
handleSubmit
}
className
=
"
col-sm-3
"
>
<
div
className
=
"
form-group mb-4
"
>
});
setTimeout
(()
=>
{
setSubmitting
(
false
);
},
400
);
// finish the cycle in handler
}}
>
{({
errors
,
touched
,
handleSubmit
,
getFieldProps
,
// contain values, handleChange, handleBlur
isSubmitting
,
})
=>
(
<
form
onSubmit
=
{
handleSubmit
}
className
=
{
mobile
?
"
w-75 h-50vh
"
:
"
d-flex webb
"
}
>
<
div
className
=
{
mobile
?
"
mobb
"
:
"
qwer
"
}
>
<
div
className
=
{(
mobile
?
"
mob-
"
:
"
web-
"
)
+
"
input-form
"
}
>
<
div
className
=
{
"
form-group m-0
"
+
(
mobile
?
"
mb-2
"
:
""
)}
>
<
input
className
=
{(
touched
.
id
&&
errors
.
id
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
number
"
...
...
@@ -75,11 +163,8 @@ function Login() {
{...
getFieldProps
(
'
id
'
)}
placeholder
=
"
Input Student Id
"
/>
{
touched
.
id
&&
errors
.
id
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
id
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group m
b-4
"
>
<
div
className
=
"
form-group m
-0
"
>
<
input
className
=
{(
touched
.
password
&&
errors
.
password
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
password
"
...
...
@@ -87,26 +172,20 @@ function Login() {
{...
getFieldProps
(
'
password
'
)}
placeholder
=
"
Input Password
"
/>
{
touched
.
password
&&
errors
.
password
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
password
}
<
/div
>
)
:
null
}
<
/div
>
<
button
type
=
"
submit
"
className
=
"
btn btn-dark
"
disabled
=
{
isSubmitting
}
>
Login
<
/button
>
<
button
><
Link
to
=
"
/home
"
>
홈
<
/Link></
button
>
<
div
><
/div
>
<
Link
to
=
"
/find
"
>
비밀번호를
잊으셨나요
?
<
/Link
>
<
div
><
/div
>
<
Link
to
=
"
/signup
"
>
회원이
아니신가요
?
<
/Link
>
<
/form
>
<
/div
>
<
button
type
=
"
submit
"
className
=
{
"
btn btn-dark
"
+
(
mobile
?
"
w-100
"
:
"
w-20
"
)}
disabled
=
{
isSubmitting
}
>
Login
<
/button
>
<
/div
>
)}
<
/Formik
>
<
/Log
>
<
/div
>
<
/div
>
<
div
><
Link
to
=
"
/find
"
>
비밀번호를
잊으셨나요
?
<
/Link></
div
>
<
div
><
Link
to
=
"
/signup
"
>
회원이
아니신가요
?
<
/Link></
div
>
<
/form
>
)}
<
/Formik
>
<
/Asdf
>
<
/div
>
)
}
...
...
server/client/src/Pages/NoticePage.js
View file @
813db703
import
React
,
{
useState
,
useEffect
}
from
'
react
'
;
import
Menu
from
'
../Components/Menu
'
;
import
axios
from
'
axios
'
;
function
Notice
()
{
const
[
notices
,
setNotices
]
=
useState
([]);
useEffect
(()
=>
{
getNotice
();
},
[]);
function
getNotice
()
{
axios
.
get
(
`/notices`
)
.
then
(
res
=>
{
if
(
res
.
status
!==
201
)
{
alert
(
res
.
data
.
error
);
}
console
.
log
(
res
.
data
);
setNotices
(
res
.
data
);
})
.
catch
(
err
=>
{
alert
(
err
.
error
)
});
}
return
(
<
div
>
<
Menu
/>
<
div
className
=
"
container
"
>
notice
<
div
className
=
"
container
"
>
<
div
className
=
"
row
"
>
<
div
className
=
"
col-12
"
>
{
notices
.
map
((
notice
)
=>
<
div
>
{
notice
.
notice_title
}
<
/div>
)
}
<
/div
>
<
/div
>
<
/div
>
<
/div
>
)
...
...
server/client/src/Pages/SignupPage.js
View file @
813db703
...
...
@@ -4,139 +4,183 @@ import * as Yup from 'yup';
import
axios
from
'
axios
'
;
import
'
bootstrap/dist/css/bootstrap.css
'
;
import
{
Link
,
Redirect
}
from
'
react-router-dom
'
;
import
styled
from
'
styled-components
'
;
const
Nav
=
styled
.
nav
`
background-color: #7B031D;
height: 10vh;
a {
color: #ffffff;
}
`
const
Wow
=
styled
.
div
`
height: 90vh;
& #reCheck::after {
content: '비밀번호를 다시 입력하세요';
}
& #reCheck:not(.right) {
content: '비밀번호가 다릅니다.';
color: red;
}
& .asd {
display: flex;
flex-direction: column;
}
`
function
Signup
()
{
const
[
state
,
setState
]
=
useState
(
false
);
const
[
checkPw
,
setCheckPw
]
=
useState
(
true
);
if
(
state
)
{
return
<
Redirect
to
=
"
/login
"
/>
;
}
return
(
<
div
className
=
"
d-flex flex-column justify-content-between vh-100
"
>
<
Formik
initialValues
=
{{
name
:
''
,
id
:
''
,
password
:
''
,
password2
:
''
,
question
:
''
,
answer
:
''
}}
validationSchema
=
{
Yup
.
object
({
name
:
Yup
.
string
()
.
required
(
'
이름을 입력해주세요.
'
),
id
:
Yup
.
string
()
.
required
(
'
학번을 입력해주세요.
'
),
password
:
Yup
.
string
()
.
required
(
'
비밀번호를 입력해주세요.
'
)
.
min
(
8
,
'
8자 이상 입력해주세요.
'
),
password2
:
Yup
.
string
()
.
required
(
'
비밀번호를 다시 입력해주세요.
'
)
.
min
(
8
,
'
8자 이상 입력해주세요.
'
)
.
oneOf
([
Yup
.
ref
(
"
password
"
),
null
],
'
비밀번호가 일치하지 않습니다.
'
),
answer
:
Yup
.
string
()
.
required
(
'
답변을 입력해주세요.
'
),
})}
onSubmit
=
{(
values
,
{
setSubmitting
})
=>
{
axios
({
method
:
'
post
'
,
url
:
'
/users
'
,
data
:
values
,
}).
then
(
res
=>
{
if
(
res
.
status
===
404
)
return
alert
(
res
.
data
.
error
)
alert
(
"
회원가입이 완료되었습니다!
"
)
setState
(
true
);
})
.
catch
(
err
=>
{
alert
(
err
.
error
)
});
setTimeout
(()
=>
{
setSubmitting
(
false
);
},
400
);
// finish the cycle in handler
}}
>
{({
errors
,
touched
,
handleSubmit
,
getFieldProps
,
// contain values, handleChange, handleBlur
isSubmitting
,
})
=>
(
<
div
className
=
"
row justify-content-center align-items-center
"
>
<
form
onSubmit
=
{
handleSubmit
}
className
=
"
col-sm-3
"
>
<
div
className
=
"
form-group mb-4
"
>
<
input
className
=
{(
touched
.
name
&&
errors
.
name
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
name
"
{...
getFieldProps
(
'
name
'
)}
placeholder
=
"
이름
"
/>
{
touched
.
name
&&
errors
.
name
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
name
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
input
className
=
{(
touched
.
id
&&
errors
.
id
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
id
"
{...
getFieldProps
(
'
id
'
)}
placeholder
=
"
학번/교번
"
/>
{
touched
.
id
&&
errors
.
id
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
id
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
input
className
=
{(
touched
.
password
&&
errors
.
password
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
password
"
name
=
"
password
"
{...
getFieldProps
(
'
password
'
)}
placeholder
=
"
비밀번호
"
/>
{
touched
.
password
&&
errors
.
password
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
password
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
input
className
=
{(
touched
.
password2
&&
errors
.
password2
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
password
"
name
=
"
password2
"
{...
getFieldProps
(
'
password2
'
)}
placeholder
=
"
비밀번호 확인
"
/>
{
touched
.
password2
&&
errors
.
password2
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
password2
}
<
/div
>
)
:
null
}
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
label
>
본인
확인
질문
<
/label
>
<
Field
as
=
"
select
"
name
=
"
question
"
>
<
option
value
=
""
>
질문을
선택하세요
<
/option
>
<
option
value
=
"
life
"
>
자신의
인생
좌우명은
?
<
/option
>
<
option
value
=
"
school
"
>
자신이
다녔던
초등학교의
이름은
?
<
/option
>
<
option
value
=
"
place
"
>
기억에
남는
추억의
장소는
?
<
/option
>
<
/Field
>
<
/div
>
<
div
className
=
"
form-group mb-4
"
>
<
input
className
=
{(
touched
.
answer
&&
errors
.
answer
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
answer
"
{...
getFieldProps
(
'
answer
'
)}
placeholder
=
"
Input answer
"
/>
{
touched
.
answer
&&
errors
.
answer
?
(
<
div
className
=
"
invalid-feedback text-left
"
>
{
errors
.
answer
}
<
/div
>
)
:
null
}
<
/div
>
<
button
type
=
"
submit
"
className
=
"
btn btn-dark
"
disabled
=
{
isSubmitting
}
>
Sign
Up
<
/button
>
<
button
class
=
"
btn btn-light
"
><
Link
to
=
"
/login
"
>
로그인
<
/Link></
button
>
<
button
class
=
"
btn btn-light
"
><
Link
to
=
"
/
"
>
홈
<
/Link></
button
>
<
/form
>
<
/div
>
)}
<
/Formik
>
<
/div
>
<
div
className
=
"
vh-100
"
>
<
Nav
className
=
"
navbar sticky-top navbar-expand-md
"
>
<
a
class
=
"
navbar-brand
"
href
=
"
#
"
>
회원가입
<
/a
>
<
/Nav
>
<
div
className
=
"
container-fluid
"
>
<
Wow
className
=
"
row justify-content-center rrooww
"
>
<
div
className
=
"
col-md-4 col-12 d-flex align-items-center h-100
"
>
<
Formik
initialValues
=
{{
name
:
''
,
id
:
''
,
password
:
''
,
password2
:
''
,
question
:
''
,
answer
:
''
}}
validationSchema
=
{
Yup
.
object
({
name
:
Yup
.
string
()
.
required
(
'
이름을 입력해주세요.
'
),
id
:
Yup
.
string
()
.
required
(
'
학번을 입력해주세요.
'
),
password
:
Yup
.
string
()
.
required
(
'
비밀번호를 입력해주세요.
'
)
.
min
(
8
,
'
8자 이상 입력해주세요.
'
),
password2
:
Yup
.
string
()
.
required
(
'
비밀번호를 다시 입력해주세요.
'
)
.
min
(
8
,
'
8자 이상 입력해주세요.
'
)
.
oneOf
([
Yup
.
ref
(
"
password
"
),
null
],
'
비밀번호가 일치하지 않습니다.
'
),
answer
:
Yup
.
string
()
.
required
(
'
답변을 입력해주세요.
'
),
})}
onSubmit
=
{(
values
,
{
setSubmitting
})
=>
{
axios
({
method
:
'
post
'
,
url
:
'
/users
'
,
data
:
values
,
}).
then
(
res
=>
{
if
(
res
.
status
===
404
)
return
alert
(
res
.
data
.
error
)
alert
(
"
회원가입이 완료되었습니다!
"
)
setState
(
true
);
})
.
catch
(
err
=>
{
alert
(
err
.
error
)
});
setTimeout
(()
=>
{
setSubmitting
(
false
);
},
400
);
// finish the cycle in handler
}}
>
{({
errors
,
touched
,
handleSubmit
,
getFieldProps
,
// contain values, handleChange, handleBlur
isSubmitting
,
})
=>
(
<
form
onSubmit
=
{
handleSubmit
}
className
=
"
asd
"
>
{
/* col-sm-3 */
}
<
div
className
=
"
form-group
"
>
{
/* mb-4 */
}
<
div
className
=
{
touched
.
name
&&
errors
.
name
?
"
text-danger
"
:
""
}
>
이름을
입력하세요
<
/div
>
<
input
className
=
{(
touched
.
name
&&
errors
.
name
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
name
"
{...
getFieldProps
(
'
name
'
)}
placeholder
=
"
이름
"
/>
<
/div
>
<
div
className
=
"
form-group
"
>
{
/* mb-4 */
}
<
div
className
=
{
touched
.
id
&&
errors
.
id
?
"
text-danger
"
:
""
}
>
학번을
입력하세요
<
/div
>
<
input
className
=
{(
touched
.
id
&&
errors
.
id
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
id
"
{...
getFieldProps
(
'
id
'
)}
placeholder
=
"
학번/교번
"
/>
{
/* {touched.id && errors.id ? (
<div className="invalid-feedback text-left">{errors.id}</div>
) : null} */
}
<
/div
>
<
div
className
=
"
form-group
"
>
{
/* mb-4 */
}
<
div
className
=
{
touched
.
password
&&
errors
.
password
?
"
text-danger
"
:
""
}
>
비밀번호를
입력하세요
(
8
자리
이상
)
<
/div
>
<
input
className
=
{(
touched
.
password
&&
errors
.
password
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
password
"
name
=
"
password
"
{...
getFieldProps
(
'
password
'
)}
placeholder
=
"
비밀번호
"
/>
{
/* {touched.password && errors.password ? (
<div className="invalid-feedback text-left">{errors.password}</div>
) : null} */
}
<
/div
>
<
div
className
=
"
form-group
"
>
{
/* mb-4 */
}
{
touched
.
password2
&&
errors
.
password2
?
setCheckPw
(
false
)
:
null
}
<
div
id
=
"
reCheck
"
className
=
{
checkPw
?
"
right
"
:
"
err
"
}
><
/div
>
<
input
className
=
{
touched
.
password2
&&
errors
.
password2
?
"
form-control is-invalid
"
:
"
form-control
"
}
type
=
"
password
"
name
=
"
password2
"
{...
getFieldProps
(
'
password2
'
)}
placeholder
=
"
비밀번호 확인
"
/>
<
/div
>
<
div
className
=
"
form-group
"
>
{
/* mb-4 */
}
<
label
>
본인
확인
질문
<
/label
>
<
Field
as
=
"
select
"
name
=
"
question
"
>
<
option
value
=
""
>
질문을
선택하세요
<
/option
>
<
option
value
=
"
life
"
>
자신의
인생
좌우명은
?
<
/option
>
<
option
value
=
"
school
"
>
자신이
다녔던
초등학교의
이름은
?
<
/option
>
<
option
value
=
"
place
"
>
기억에
남는
추억의
장소는
?
<
/option
>
<
/Field
>
<
/div
>
<
div
className
=
"
form-group
"
>
{
/* mb-4 */
}
<
div
className
=
{
touched
.
answer
&&
errors
.
answer
?
"
text-danger
"
:
""
}
>
답변을
입력해주세요
.
<
/div
>
<
input
className
=
{(
touched
.
answer
&&
errors
.
answer
?
'
form-control is-invalid
'
:
"
form-control
"
)}
type
=
"
text
"
name
=
"
answer
"
{...
getFieldProps
(
'
answer
'
)}
placeholder
=
"
Input answer
"
/>
<
/div
>
<
button
type
=
"
submit
"
className
=
"
btn btn-dark
"
disabled
=
{
isSubmitting
}
>
회원가입
<
/button
>
<
button
class
=
"
btn btn-light
"
><
Link
to
=
"
/login
"
>
로그인
<
/Link></
button
>
<
button
class
=
"
btn btn-light
"
><
Link
to
=
"
/
"
>
홈
<
/Link></
button
>
<
/form
>
)}
<
/Formik
>
<
/div
>
<
/Wow
>
<
/div
>
<
/div
>
);
}
...
...
server/client/src/icon.png
0 → 100644
View file @
813db703
2.44 MB
server/client/src/index.css
deleted
100644 → 0
View file @
6aa8c061
body
{
margin
:
0
;
font-family
:
-apple-system
,
BlinkMacSystemFont
,
'Segoe UI'
,
'Roboto'
,
'Oxygen'
,
'Ubuntu'
,
'Cantarell'
,
'Fira Sans'
,
'Droid Sans'
,
'Helvetica Neue'
,
sans-serif
;
-webkit-font-smoothing
:
antialiased
;
-moz-osx-font-smoothing
:
grayscale
;
}
code
{
font-family
:
source-code-pro
,
Menlo
,
Monaco
,
Consolas
,
'Courier New'
,
monospace
;
}
server/client/src/index.js
View file @
813db703
...
...
@@ -2,7 +2,8 @@ import React from 'react';
import
ReactDOM
from
'
react-dom
'
;
import
*
as
serviceWorker
from
'
./serviceWorker
'
;
import
{
BrowserRouter
as
Router
,
Route
,
Redirect
,
Switch
}
from
'
react-router-dom
'
;
import
'
bootstrap/dist/css/bootstrap.css
'
;
// import 'bootstrap';
// import 'bootstrap/dist/css/bootstrap.css';
import
axios
from
'
axios
'
;
import
{
PrivateRoute
}
from
'
./Components/PrivateRoute
'
;
...
...
@@ -28,7 +29,7 @@ ReactDOM.render(
<
Route
path
=
"
/signup
"
component
=
{
Signup
}
/
>
<
Route
path
=
"
/find
"
component
=
{
Find
}
/
>
<
Route
path
=
"
/change
"
component
=
{
Change
}
/
>
<
Route
path
=
"
/apply
"
component
=
{
Apply
}
/
>
<
Route
path
=
"
/apply
/:id
"
component
=
{
Apply
}
/
>
<
Route
path
=
"
/check/:id
"
component
=
{
Check
}
/
>
<
Route
path
=
"
/notice
"
component
=
{
Notice
}
/
>
<
Redirect
path
=
"
/
"
to
=
"
/
"
/>
...
...
server/client/src/logo.svg
deleted
100644 → 0
View file @
6aa8c061
<svg
xmlns=
"http://www.w3.org/2000/svg"
viewBox=
"0 0 841.9 595.3"
>
<g
fill=
"#61DAFB"
>
<path
d=
"M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"
/>
<circle
cx=
"420.9"
cy=
"296.5"
r=
"45.7"
/>
<path
d=
"M520.5 78.1z"
/>
</g>
</svg>
server/package-lock.json
View file @
813db703
...
...
@@ -4,24 +4,17 @@
"lockfileVersion"
:
1
,
"requires"
:
true
,
"dependencies"
:
{
"@
babel/helper-validator-identifier
"
:
{
"version"
:
"7.
1
0.
4
"
,
"resolved"
:
"https://registry.npmjs.org/@
babel/helper-validator-identifier/-/helper-validator-identifier
-7.
1
0.
4
.tgz"
,
"integrity"
:
"sha512-
3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw
=="
"@
types/babel-types
"
:
{
"version"
:
"7.0.
9
"
,
"resolved"
:
"https://registry.npmjs.org/@
types/babel-types/-/babel-types
-7.0.
9
.tgz"
,
"integrity"
:
"sha512-
qZLoYeXSTgQuK1h7QQS16hqLGdmqtRmN8w/rl3Au/l5x/zkHx+a4VHrHyBsi1I1vtK2oBHxSzKIu0R5p6spdOA
=="
},
"@babel/parser"
:
{
"version"
:
"7.11.5"
,
"resolved"
:
"https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz"
,
"integrity"
:
"sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q=="
},
"@babel/types"
:
{
"version"
:
"7.11.5"
,
"resolved"
:
"https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz"
,
"integrity"
:
"sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q=="
,
"@types/babylon"
:
{
"version"
:
"6.16.5"
,
"resolved"
:
"https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz"
,
"integrity"
:
"sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w=="
,
"requires"
:
{
"@babel/helper-validator-identifier"
:
"^7.10.4"
,
"lodash"
:
"^4.17.19"
,
"to-fast-properties"
:
"^2.0.0"
"@types/babel-types"
:
"*"
}
},
"abbrev"
:
{
...
...
@@ -39,9 +32,39 @@
}
},
"acorn"
:
{
"version"
:
"7.4.0"
,
"resolved"
:
"https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz"
,
"integrity"
:
"sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w=="
"version"
:
"3.3.0"
,
"resolved"
:
"https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz"
,
"integrity"
:
"sha1-ReN/s56No/JbruP/U2niu18iAXo="
},
"acorn-globals"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz"
,
"integrity"
:
"sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8="
,
"requires"
:
{
"acorn"
:
"^4.0.4"
},
"dependencies"
:
{
"acorn"
:
{
"version"
:
"4.0.13"
,
"resolved"
:
"https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz"
,
"integrity"
:
"sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
}
}
},
"align-text"
:
{
"version"
:
"0.1.4"
,
"resolved"
:
"https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz"
,
"integrity"
:
"sha1-DNkKVhCT810KmSVsIrcGlDP60Rc="
,
"requires"
:
{
"kind-of"
:
"^3.0.2"
,
"longest"
:
"^1.0.1"
,
"repeat-string"
:
"^1.5.2"
}
},
"amdefine"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz"
,
"integrity"
:
"sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
},
"ansi-regex"
:
{
"version"
:
"2.1.1"
,
...
...
@@ -72,19 +95,31 @@
"resolved"
:
"https://registry.npmjs.org/asap/-/asap-2.0.6.tgz"
,
"integrity"
:
"sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"assert-never"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz"
,
"integrity"
:
"sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw=="
"babel-runtime"
:
{
"version"
:
"6.26.0"
,
"resolved"
:
"https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz"
,
"integrity"
:
"sha1-llxwWGaOgrVde/4E/yM3vItWR/4="
,
"requires"
:
{
"core-js"
:
"^2.4.0"
,
"regenerator-runtime"
:
"^0.11.0"
}
},
"babel-
walk
"
:
{
"version"
:
"
3.0.0-canary-5
"
,
"resolved"
:
"https://registry.npmjs.org/babel-
walk
/-/babel-
walk-3.0.0-canary-5
.tgz"
,
"integrity"
:
"sha
512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw=
="
,
"babel-
types
"
:
{
"version"
:
"
6.26.0
"
,
"resolved"
:
"https://registry.npmjs.org/babel-
types
/-/babel-
types-6.26.0
.tgz"
,
"integrity"
:
"sha
1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc
="
,
"requires"
:
{
"@babel/types"
:
"^7.9.6"
"babel-runtime"
:
"^6.26.0"
,
"esutils"
:
"^2.0.2"
,
"lodash"
:
"^4.17.4"
,
"to-fast-properties"
:
"^1.0.3"
}
},
"babylon"
:
{
"version"
:
"6.18.0"
,
"resolved"
:
"https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz"
,
"integrity"
:
"sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
},
"balanced-match"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"
,
...
...
@@ -129,48 +164,29 @@
"integrity"
:
"sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
},
"body-parser"
:
{
"version"
:
"1.1
9.0
"
,
"resolved"
:
"https://registry.npmjs.org/body-parser/-/body-parser-1.1
9.0
.tgz"
,
"integrity"
:
"sha
512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw=
="
,
"version"
:
"1.1
8.3
"
,
"resolved"
:
"https://registry.npmjs.org/body-parser/-/body-parser-1.1
8.3
.tgz"
,
"integrity"
:
"sha
1-WykhmP/dVTs6DyDe0FkrlWlVyLQ
="
,
"requires"
:
{
"bytes"
:
"3.
1
.0"
,
"bytes"
:
"3.
0
.0"
,
"content-type"
:
"~1.0.4"
,
"debug"
:
"2.6.9"
,
"depd"
:
"~1.1.2"
,
"http-errors"
:
"1.
7.2
"
,
"iconv-lite"
:
"0.4.2
4
"
,
"http-errors"
:
"
~
1.
6.3
"
,
"iconv-lite"
:
"0.4.2
3
"
,
"on-finished"
:
"~2.3.0"
,
"qs"
:
"6.
7.0
"
,
"raw-body"
:
"2.
4.0
"
,
"type-is"
:
"~1.6.1
7
"
"qs"
:
"6.
5.2
"
,
"raw-body"
:
"2.
3.3
"
,
"type-is"
:
"~1.6.1
6
"
},
"dependencies"
:
{
"
http-errors
"
:
{
"version"
:
"
1.7
.2"
,
"resolved"
:
"https://registry.npmjs.org/
http-errors/-/http-errors-1.7
.2.tgz"
,
"integrity"
:
"sha512-
uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg
=="
,
"
iconv-lite
"
:
{
"version"
:
"
0.4
.2
3
"
,
"resolved"
:
"https://registry.npmjs.org/
iconv-lite/-/iconv-lite-0.4
.2
3
.tgz"
,
"integrity"
:
"sha512-
neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA
=="
,
"requires"
:
{
"depd"
:
"~1.1.2"
,
"inherits"
:
"2.0.3"
,
"setprototypeof"
:
"1.1.1"
,
"statuses"
:
">= 1.5.0 < 2"
,
"toidentifier"
:
"1.0.0"
"safer-buffer"
:
">= 2.1.2 < 3"
}
},
"inherits"
:
{
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
"integrity"
:
"sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"setprototypeof"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"
,
"integrity"
:
"sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"statuses"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
,
"integrity"
:
"sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
}
}
},
...
...
@@ -194,9 +210,23 @@
"integrity"
:
"sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
},
"bytes"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz"
,
"integrity"
:
"sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz"
,
"integrity"
:
"sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
},
"camelcase"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz"
,
"integrity"
:
"sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
},
"center-align"
:
{
"version"
:
"0.1.3"
,
"resolved"
:
"https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz"
,
"integrity"
:
"sha1-qg0yYptu6XIgBBHL1EYckHvCt60="
,
"requires"
:
{
"align-text"
:
"^0.1.3"
,
"lazy-cache"
:
"^1.0.3"
}
},
"character-parser"
:
{
"version"
:
"2.2.0"
,
...
...
@@ -211,11 +241,38 @@
"resolved"
:
"https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz"
,
"integrity"
:
"sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
},
"clean-css"
:
{
"version"
:
"3.4.28"
,
"resolved"
:
"https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz"
,
"integrity"
:
"sha1-vxlF6C/ICPVWlebd6uwBQA79A/8="
,
"requires"
:
{
"commander"
:
"2.8.x"
,
"source-map"
:
"0.4.x"
}
},
"cliui"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz"
,
"integrity"
:
"sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE="
,
"requires"
:
{
"center-align"
:
"^0.1.1"
,
"right-align"
:
"^0.1.1"
,
"wordwrap"
:
"0.0.2"
}
},
"code-point-at"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz"
,
"integrity"
:
"sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
"commander"
:
{
"version"
:
"2.8.1"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-2.8.1.tgz"
,
"integrity"
:
"sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ="
,
"requires"
:
{
"graceful-readlink"
:
">= 1.0.0"
}
},
"concat-map"
:
{
"version"
:
"0.0.1"
,
"resolved"
:
"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
,
...
...
@@ -227,28 +284,20 @@
"integrity"
:
"sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
},
"constantinople"
:
{
"version"
:
"
4.0.1
"
,
"resolved"
:
"https://registry.npmjs.org/constantinople/-/constantinople-
4.0.1
.tgz"
,
"integrity"
:
"sha512-
vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZI
w=="
,
"version"
:
"
3.1.2
"
,
"resolved"
:
"https://registry.npmjs.org/constantinople/-/constantinople-
3.1.2
.tgz"
,
"integrity"
:
"sha512-
yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZou
w=="
,
"requires"
:
{
"@babel/parser"
:
"^7.6.0"
,
"@babel/types"
:
"^7.6.1"
"@types/babel-types"
:
"^7.0.0"
,
"@types/babylon"
:
"^6.16.2"
,
"babel-types"
:
"^6.26.0"
,
"babylon"
:
"^6.18.0"
}
},
"content-disposition"
:
{
"version"
:
"0.5.3"
,
"resolved"
:
"https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz"
,
"integrity"
:
"sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g=="
,
"requires"
:
{
"safe-buffer"
:
"5.1.2"
},
"dependencies"
:
{
"safe-buffer"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
"integrity"
:
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
}
}
"version"
:
"0.5.2"
,
"resolved"
:
"https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz"
,
"integrity"
:
"sha1-DPaLud318r55YcOoUXjLhdunjLQ="
},
"content-type"
:
{
"version"
:
"1.0.4"
,
...
...
@@ -274,6 +323,11 @@
"resolved"
:
"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
,
"integrity"
:
"sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"core-js"
:
{
"version"
:
"2.6.11"
,
"resolved"
:
"https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz"
,
"integrity"
:
"sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
},
"core-util-is"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"
,
...
...
@@ -294,6 +348,11 @@
}
}
},
"decamelize"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"
,
"integrity"
:
"sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
"deep-extend"
:
{
"version"
:
"0.6.0"
,
"resolved"
:
"https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz"
,
...
...
@@ -357,84 +416,77 @@
"resolved"
:
"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
,
"integrity"
:
"sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"esutils"
:
{
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
,
"integrity"
:
"sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
},
"etag"
:
{
"version"
:
"1.8.1"
,
"resolved"
:
"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"
,
"integrity"
:
"sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"express"
:
{
"version"
:
"4.1
7.1
"
,
"resolved"
:
"https://registry.npmjs.org/express/-/express-4.1
7.1
.tgz"
,
"integrity"
:
"sha512-
mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4
g=="
,
"version"
:
"4.1
6.4
"
,
"resolved"
:
"https://registry.npmjs.org/express/-/express-4.1
6.4
.tgz"
,
"integrity"
:
"sha512-
j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuO
g=="
,
"requires"
:
{
"accepts"
:
"~1.3.
7
"
,
"accepts"
:
"~1.3.
5
"
,
"array-flatten"
:
"1.1.1"
,
"body-parser"
:
"1.1
9.0
"
,
"content-disposition"
:
"0.5.
3
"
,
"body-parser"
:
"1.1
8.3
"
,
"content-disposition"
:
"0.5.
2
"
,
"content-type"
:
"~1.0.4"
,
"cookie"
:
"0.
4.0
"
,
"cookie"
:
"0.
3.1
"
,
"cookie-signature"
:
"1.0.6"
,
"debug"
:
"2.6.9"
,
"depd"
:
"~1.1.2"
,
"encodeurl"
:
"~1.0.2"
,
"escape-html"
:
"~1.0.3"
,
"etag"
:
"~1.8.1"
,
"finalhandler"
:
"
~
1.1.
2
"
,
"finalhandler"
:
"1.1.
1
"
,
"fresh"
:
"0.5.2"
,
"merge-descriptors"
:
"1.0.1"
,
"methods"
:
"~1.1.2"
,
"on-finished"
:
"~2.3.0"
,
"parseurl"
:
"~1.3.
3
"
,
"parseurl"
:
"~1.3.
2
"
,
"path-to-regexp"
:
"0.1.7"
,
"proxy-addr"
:
"~2.0.
5
"
,
"qs"
:
"6.
7.0
"
,
"range-parser"
:
"~1.2.
1
"
,
"proxy-addr"
:
"~2.0.
4
"
,
"qs"
:
"6.
5.2
"
,
"range-parser"
:
"~1.2.
0
"
,
"safe-buffer"
:
"5.1.2"
,
"send"
:
"0.1
7.1
"
,
"serve-static"
:
"1.1
4.1
"
,
"setprototypeof"
:
"1.1.
1
"
,
"statuses"
:
"~1.
5
.0"
,
"type-is"
:
"~1.6.1
8
"
,
"send"
:
"0.1
6.2
"
,
"serve-static"
:
"1.1
3.2
"
,
"setprototypeof"
:
"1.1.
0
"
,
"statuses"
:
"~1.
4
.0"
,
"type-is"
:
"~1.6.1
6
"
,
"utils-merge"
:
"1.0.1"
,
"vary"
:
"~1.1.2"
},
"dependencies"
:
{
"cookie"
:
{
"version"
:
"0.3.1"
,
"resolved"
:
"https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz"
,
"integrity"
:
"sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
},
"safe-buffer"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
"integrity"
:
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"setprototypeof"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"
,
"integrity"
:
"sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"statuses"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
,
"integrity"
:
"sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
}
}
},
"finalhandler"
:
{
"version"
:
"1.1.
2
"
,
"resolved"
:
"https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.
2
.tgz"
,
"integrity"
:
"sha512-
aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA
=="
,
"version"
:
"1.1.
1
"
,
"resolved"
:
"https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.
1
.tgz"
,
"integrity"
:
"sha512-
Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg
=="
,
"requires"
:
{
"debug"
:
"2.6.9"
,
"encodeurl"
:
"~1.0.2"
,
"escape-html"
:
"~1.0.3"
,
"on-finished"
:
"~2.3.0"
,
"parseurl"
:
"~1.3.
3
"
,
"statuses"
:
"~1.
5
.0"
,
"parseurl"
:
"~1.3.
2
"
,
"statuses"
:
"~1.
4
.0"
,
"unpipe"
:
"~1.0.0"
},
"dependencies"
:
{
"statuses"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
,
"integrity"
:
"sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
}
}
},
"forwarded"
:
{
...
...
@@ -488,6 +540,11 @@
"path-is-absolute"
:
"^1.0.0"
}
},
"graceful-readlink"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz"
,
"integrity"
:
"sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
},
"has-symbols"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz"
,
...
...
@@ -556,13 +613,25 @@
"resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
,
"integrity"
:
"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is-buffer"
:
{
"version"
:
"1.1.6"
,
"resolved"
:
"https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
,
"integrity"
:
"sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
},
"is-expression"
:
{
"version"
:
"
4
.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-expression/-/is-expression-
4
.0.0.tgz"
,
"integrity"
:
"sha
512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A=
="
,
"version"
:
"
3
.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-expression/-/is-expression-
3
.0.0.tgz"
,
"integrity"
:
"sha
1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8
="
,
"requires"
:
{
"acorn"
:
"^7.1.1"
,
"object-assign"
:
"^4.1.1"
"acorn"
:
"~4.0.2"
,
"object-assign"
:
"^4.0.1"
},
"dependencies"
:
{
"acorn"
:
{
"version"
:
"4.0.13"
,
"resolved"
:
"https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz"
,
"integrity"
:
"sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
}
}
},
"is-fullwidth-code-point"
:
{
...
...
@@ -646,6 +715,19 @@
"resolved"
:
"https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz"
,
"integrity"
:
"sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw=="
},
"kind-of"
:
{
"version"
:
"3.2.2"
,
"resolved"
:
"https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz"
,
"integrity"
:
"sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ="
,
"requires"
:
{
"is-buffer"
:
"^1.1.5"
}
},
"lazy-cache"
:
{
"version"
:
"1.0.4"
,
"resolved"
:
"https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz"
,
"integrity"
:
"sha1-odePw6UEdMuAhF07O24dpJpEbo4="
},
"lodash"
:
{
"version"
:
"4.17.20"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz"
,
...
...
@@ -686,6 +768,11 @@
"resolved"
:
"https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz"
,
"integrity"
:
"sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
},
"longest"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/longest/-/longest-1.0.1.tgz"
,
"integrity"
:
"sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
},
"media-typer"
:
{
"version"
:
"0.3.0"
,
"resolved"
:
"https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
,
...
...
@@ -708,9 +795,9 @@
"integrity"
:
"sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
},
"mime"
:
{
"version"
:
"1.
6.0
"
,
"resolved"
:
"https://registry.npmjs.org/mime/-/mime-1.
6.0
.tgz"
,
"integrity"
:
"sha512-
x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg
=="
"version"
:
"1.
4.1
"
,
"resolved"
:
"https://registry.npmjs.org/mime/-/mime-1.
4.1
.tgz"
,
"integrity"
:
"sha512-
KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ
=="
},
"mime-db"
:
{
"version"
:
"1.44.0"
,
...
...
@@ -1036,121 +1123,123 @@
}
},
"pug"
:
{
"version"
:
"
3
.0.0"
,
"resolved"
:
"https://registry.npmjs.org/pug/-/pug-
3
.0.0.tgz"
,
"integrity"
:
"sha
512-inmsJyFBSHZaiGLaguoFgJGViX0If6AcfcElimvwj9perqjDpUpw79UIEDZbWFmoGVidh08aoE+e8tVkjVJPCw=
="
,
"version"
:
"
2
.0.0
-beta11
"
,
"resolved"
:
"https://registry.npmjs.org/pug/-/pug-
2
.0.0
-beta11
.tgz"
,
"integrity"
:
"sha
1-Favmr1AEx+LPRhPksnRlyVRrXwE
="
,
"requires"
:
{
"pug-code-gen"
:
"^
3.0.0
"
,
"pug-filters"
:
"^
4.0.0
"
,
"pug-lexer"
:
"^
5
.0.0"
,
"pug-linker"
:
"^
4
.0.
0
"
,
"pug-load"
:
"^
3
.0.
0
"
,
"pug-parser"
:
"^
6
.0.
0
"
,
"pug-runtime"
:
"^
3
.0.
0
"
,
"pug-strip-comments"
:
"^
2
.0.
0
"
"pug-code-gen"
:
"^
1.1.1
"
,
"pug-filters"
:
"^
2.1.1
"
,
"pug-lexer"
:
"^
3
.0.0"
,
"pug-linker"
:
"^
2
.0.
2
"
,
"pug-load"
:
"^
2
.0.
5
"
,
"pug-parser"
:
"^
2
.0.
2
"
,
"pug-runtime"
:
"^
2
.0.
3
"
,
"pug-strip-comments"
:
"^
1
.0.
2
"
}
},
"pug-attrs"
:
{
"version"
:
"
3
.0.
0
"
,
"resolved"
:
"https://registry.npmjs.org/pug-attrs/-/pug-attrs-
3
.0.
0
.tgz"
,
"integrity"
:
"sha512-
azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA
=="
,
"version"
:
"
2
.0.
4
"
,
"resolved"
:
"https://registry.npmjs.org/pug-attrs/-/pug-attrs-
2
.0.
4
.tgz"
,
"integrity"
:
"sha512-
TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ
=="
,
"requires"
:
{
"constantinople"
:
"^
4
.0.1"
,
"js-stringify"
:
"^1.0.
2
"
,
"pug-runtime"
:
"^
3
.0.
0
"
"constantinople"
:
"^
3
.0.1"
,
"js-stringify"
:
"^1.0.
1
"
,
"pug-runtime"
:
"^
2
.0.
5
"
}
},
"pug-code-gen"
:
{
"version"
:
"
3.0
.1"
,
"resolved"
:
"https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-
3.0
.1.tgz"
,
"integrity"
:
"sha
512-xJIGvmXTQlkJllq6hqxxjRWcay2F9CU69TuAuiVZgHK0afOhG5txrQOcZyaPHBvSWCU/QQOqEp5XCH94rRZpBQ=
="
,
"version"
:
"
1.1
.1"
,
"resolved"
:
"https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-
1.1
.1.tgz"
,
"integrity"
:
"sha
1-HPcnRO8qA56uajNAyqoRBYcSWOg
="
,
"requires"
:
{
"constantinople"
:
"^
4
.0.1"
,
"constantinople"
:
"^
3
.0.1"
,
"doctypes"
:
"^1.1.0"
,
"js-stringify"
:
"^1.0.
2
"
,
"pug-attrs"
:
"^
3
.0.
0
"
,
"pug-error"
:
"^
2.0.0
"
,
"pug-runtime"
:
"^
3
.0.
0
"
,
"void-elements"
:
"^
3.1.0
"
,
"with"
:
"^
7
.0.0"
"js-stringify"
:
"^1.0.
1
"
,
"pug-attrs"
:
"^
2
.0.
2
"
,
"pug-error"
:
"^
1.3.2
"
,
"pug-runtime"
:
"^
2
.0.
3
"
,
"void-elements"
:
"^
2.0.1
"
,
"with"
:
"^
5
.0.0"
}
},
"pug-error"
:
{
"version"
:
"
2.0.0
"
,
"resolved"
:
"https://registry.npmjs.org/pug-error/-/pug-error-
2.0.0
.tgz"
,
"integrity"
:
"sha512-
sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btay
Q=="
"version"
:
"
1.3.3
"
,
"resolved"
:
"https://registry.npmjs.org/pug-error/-/pug-error-
1.3.3
.tgz"
,
"integrity"
:
"sha512-
qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWi
Q=="
},
"pug-filters"
:
{
"version"
:
"
4.0.0
"
,
"resolved"
:
"https://registry.npmjs.org/pug-filters/-/pug-filters-
4.0.0
.tgz"
,
"integrity"
:
"sha512-
yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A
=="
,
"version"
:
"
2.1.5
"
,
"resolved"
:
"https://registry.npmjs.org/pug-filters/-/pug-filters-
2.1.5
.tgz"
,
"integrity"
:
"sha512-
xkw71KtrC4sxleKiq+cUlQzsiLn8pM5+vCgkChW2E6oNOzaqTSIBKIQ5cl4oheuDzvJYCTSYzRaVinMUrV4YLQ
=="
,
"requires"
:
{
"constantinople"
:
"^4.0.1"
,
"clean-css"
:
"^3.3.0"
,
"constantinople"
:
"^3.0.1"
,
"jstransformer"
:
"1.0.0"
,
"pug-error"
:
"^2.0.0"
,
"pug-walk"
:
"^2.0.0"
,
"resolve"
:
"^1.15.1"
"pug-error"
:
"^1.3.2"
,
"pug-walk"
:
"^1.1.5"
,
"resolve"
:
"^1.1.6"
,
"uglify-js"
:
"^2.6.1"
}
},
"pug-lexer"
:
{
"version"
:
"
5.0
.0"
,
"resolved"
:
"https://registry.npmjs.org/pug-lexer/-/pug-lexer-
5.0
.0.tgz"
,
"integrity"
:
"sha
512-52xMk8nNpuyQ/M2wjZBN5gXQLIylaGkAoTk5Y1pBhVqaopaoj8Z0iVzpbFZAqitL4RHNVDZRnJDsqEYe99Ti0A=
="
,
"version"
:
"
3.1
.0"
,
"resolved"
:
"https://registry.npmjs.org/pug-lexer/-/pug-lexer-
3.1
.0.tgz"
,
"integrity"
:
"sha
1-/QhzdtSmdbT1n4/vQiiDQ06VgaI
="
,
"requires"
:
{
"character-parser"
:
"^2.
2.0
"
,
"is-expression"
:
"^
4
.0.0"
,
"pug-error"
:
"^
2.0.0
"
"character-parser"
:
"^2.
1.1
"
,
"is-expression"
:
"^
3
.0.0"
,
"pug-error"
:
"^
1.3.2
"
}
},
"pug-linker"
:
{
"version"
:
"
4
.0.
0
"
,
"resolved"
:
"https://registry.npmjs.org/pug-linker/-/pug-linker-
4
.0.
0
.tgz"
,
"integrity"
:
"sha
512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw=
="
,
"version"
:
"
2
.0.
3
"
,
"resolved"
:
"https://registry.npmjs.org/pug-linker/-/pug-linker-
2
.0.
3
.tgz"
,
"integrity"
:
"sha
1-szH/olc33eacEntWwQ/xf652bco
="
,
"requires"
:
{
"pug-error"
:
"^
2.0.0
"
,
"pug-walk"
:
"^
2.0.0
"
"pug-error"
:
"^
1.3.2
"
,
"pug-walk"
:
"^
1.1.2
"
}
},
"pug-load"
:
{
"version"
:
"
3
.0.
0
"
,
"resolved"
:
"https://registry.npmjs.org/pug-load/-/pug-load-
3
.0.
0
.tgz"
,
"integrity"
:
"sha512-
OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ
=="
,
"version"
:
"
2
.0.
12
"
,
"resolved"
:
"https://registry.npmjs.org/pug-load/-/pug-load-
2
.0.
12
.tgz"
,
"integrity"
:
"sha512-
UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg
=="
,
"requires"
:
{
"object-assign"
:
"^4.1.
1
"
,
"pug-walk"
:
"^
2.0.0
"
"object-assign"
:
"^4.1.
0
"
,
"pug-walk"
:
"^
1.1.8
"
}
},
"pug-parser"
:
{
"version"
:
"
6
.0.
0
"
,
"resolved"
:
"https://registry.npmjs.org/pug-parser/-/pug-parser-
6
.0.
0
.tgz"
,
"integrity"
:
"sha
512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw=
="
,
"version"
:
"
2
.0.
2
"
,
"resolved"
:
"https://registry.npmjs.org/pug-parser/-/pug-parser-
2
.0.
2
.tgz"
,
"integrity"
:
"sha
1-U6aAz9BQOdywwn0CkJS8SnkmibA
="
,
"requires"
:
{
"pug-error"
:
"^
2.0.0
"
,
"token-stream"
:
"
1
.0.
0
"
"pug-error"
:
"^
1.3.2
"
,
"token-stream"
:
"
0
.0.
1
"
}
},
"pug-runtime"
:
{
"version"
:
"
3
.0.
0
"
,
"resolved"
:
"https://registry.npmjs.org/pug-runtime/-/pug-runtime-
3
.0.
0
.tgz"
,
"integrity"
:
"sha512-
GoEPcmQNnaTsePEdVA05bDpY+Op5VLHKayg08AQiqJBWU/yIaywEYv7TetC5dEQS3fzBBoyb2InDcZEg3mPTIA
=="
"version"
:
"
2
.0.
5
"
,
"resolved"
:
"https://registry.npmjs.org/pug-runtime/-/pug-runtime-
2
.0.
5
.tgz"
,
"integrity"
:
"sha512-
P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw
=="
},
"pug-strip-comments"
:
{
"version"
:
"
2
.0.
0
"
,
"resolved"
:
"https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-
2
.0.
0
.tgz"
,
"integrity"
:
"sha512-
zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ
=="
,
"version"
:
"
1
.0.
4
"
,
"resolved"
:
"https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-
1
.0.
4
.tgz"
,
"integrity"
:
"sha512-
i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw
=="
,
"requires"
:
{
"pug-error"
:
"^
2.0.0
"
"pug-error"
:
"^
1.3.3
"
}
},
"pug-walk"
:
{
"version"
:
"
2.0.0
"
,
"resolved"
:
"https://registry.npmjs.org/pug-walk/-/pug-walk-
2.0.0
.tgz"
,
"integrity"
:
"sha512-
yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ
=="
"version"
:
"
1.1.8
"
,
"resolved"
:
"https://registry.npmjs.org/pug-walk/-/pug-walk-
1.1.8
.tgz"
,
"integrity"
:
"sha512-
GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA
=="
},
"qs"
:
{
"version"
:
"6.
7.0
"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.
7.0
.tgz"
,
"integrity"
:
"sha512-
VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ
=="
"version"
:
"6.
5.2
"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.
5.2
.tgz"
,
"integrity"
:
"sha512-
N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA
=="
},
"range-parser"
:
{
"version"
:
"1.2.1"
,
...
...
@@ -1158,42 +1247,23 @@
"integrity"
:
"sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body"
:
{
"version"
:
"2.
4.0
"
,
"resolved"
:
"https://registry.npmjs.org/raw-body/-/raw-body-2.
4.0
.tgz"
,
"integrity"
:
"sha512-
4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q
=="
,
"version"
:
"2.
3.3
"
,
"resolved"
:
"https://registry.npmjs.org/raw-body/-/raw-body-2.
3.3
.tgz"
,
"integrity"
:
"sha512-
9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw
=="
,
"requires"
:
{
"bytes"
:
"3.
1
.0"
,
"http-errors"
:
"1.
7.2
"
,
"iconv-lite"
:
"0.4.2
4
"
,
"bytes"
:
"3.
0
.0"
,
"http-errors"
:
"1.
6.3
"
,
"iconv-lite"
:
"0.4.2
3
"
,
"unpipe"
:
"1.0.0"
},
"dependencies"
:
{
"
http-errors
"
:
{
"version"
:
"
1.7
.2"
,
"resolved"
:
"https://registry.npmjs.org/
http-errors/-/http-errors-1.7
.2.tgz"
,
"integrity"
:
"sha512-
uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg
=="
,
"
iconv-lite
"
:
{
"version"
:
"
0.4
.2
3
"
,
"resolved"
:
"https://registry.npmjs.org/
iconv-lite/-/iconv-lite-0.4
.2
3
.tgz"
,
"integrity"
:
"sha512-
neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA
=="
,
"requires"
:
{
"depd"
:
"~1.1.2"
,
"inherits"
:
"2.0.3"
,
"setprototypeof"
:
"1.1.1"
,
"statuses"
:
">= 1.5.0 < 2"
,
"toidentifier"
:
"1.0.0"
"safer-buffer"
:
">= 2.1.2 < 3"
}
},
"inherits"
:
{
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
"integrity"
:
"sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"setprototypeof"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"
,
"integrity"
:
"sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"statuses"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
,
"integrity"
:
"sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
}
}
},
...
...
@@ -1229,11 +1299,21 @@
}
}
},
"regenerator-runtime"
:
{
"version"
:
"0.11.1"
,
"resolved"
:
"https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz"
,
"integrity"
:
"sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
},
"regexp-clone"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz"
,
"integrity"
:
"sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
},
"repeat-string"
:
{
"version"
:
"1.6.1"
,
"resolved"
:
"https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz"
,
"integrity"
:
"sha1-jcrkcOHIirwtYA//Sndihtp15jc="
},
"require_optional"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz"
,
...
...
@@ -1256,6 +1336,14 @@
"resolved"
:
"https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz"
,
"integrity"
:
"sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
},
"right-align"
:
{
"version"
:
"0.1.3"
,
"resolved"
:
"https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz"
,
"integrity"
:
"sha1-YTObci/mo1FWiSENJOFMlhSGE+8="
,
"requires"
:
{
"align-text"
:
"^0.1.1"
}
},
"rimraf"
:
{
"version"
:
"2.7.1"
,
"resolved"
:
"https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz"
,
...
...
@@ -1294,9 +1382,9 @@
"integrity"
:
"sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
},
"send"
:
{
"version"
:
"0.1
7.1
"
,
"resolved"
:
"https://registry.npmjs.org/send/-/send-0.1
7.1
.tgz"
,
"integrity"
:
"sha512-
BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg
=="
,
"version"
:
"0.1
6.2
"
,
"resolved"
:
"https://registry.npmjs.org/send/-/send-0.1
6.2
.tgz"
,
"integrity"
:
"sha512-
E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw
=="
,
"requires"
:
{
"debug"
:
"2.6.9"
,
"depd"
:
"~1.1.2"
,
...
...
@@ -1305,52 +1393,30 @@
"escape-html"
:
"~1.0.3"
,
"etag"
:
"~1.8.1"
,
"fresh"
:
"0.5.2"
,
"http-errors"
:
"~1.
7
.2"
,
"mime"
:
"1.
6.0
"
,
"ms"
:
"2.
1.1
"
,
"http-errors"
:
"~1.
6
.2"
,
"mime"
:
"1.
4.1
"
,
"ms"
:
"2.
0.0
"
,
"on-finished"
:
"~2.3.0"
,
"range-parser"
:
"~1.2.
1
"
,
"statuses"
:
"~1.
5
.0"
"range-parser"
:
"~1.2.
0
"
,
"statuses"
:
"~1.
4
.0"
},
"dependencies"
:
{
"http-errors"
:
{
"version"
:
"1.7.3"
,
"resolved"
:
"https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz"
,
"integrity"
:
"sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw=="
,
"requires"
:
{
"depd"
:
"~1.1.2"
,
"inherits"
:
"2.0.4"
,
"setprototypeof"
:
"1.1.1"
,
"statuses"
:
">= 1.5.0 < 2"
,
"toidentifier"
:
"1.0.0"
}
},
"ms"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.1.tgz"
,
"integrity"
:
"sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
},
"setprototypeof"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"
,
"integrity"
:
"sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"statuses"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
,
"integrity"
:
"sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"integrity"
:
"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
"serve-static"
:
{
"version"
:
"1.1
4.1
"
,
"resolved"
:
"https://registry.npmjs.org/serve-static/-/serve-static-1.1
4.1
.tgz"
,
"integrity"
:
"sha512-
JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg
=="
,
"version"
:
"1.1
3.2
"
,
"resolved"
:
"https://registry.npmjs.org/serve-static/-/serve-static-1.1
3.2
.tgz"
,
"integrity"
:
"sha512-
p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw
=="
,
"requires"
:
{
"encodeurl"
:
"~1.0.2"
,
"escape-html"
:
"~1.0.3"
,
"parseurl"
:
"~1.3.
3
"
,
"send"
:
"0.1
7.1
"
"parseurl"
:
"~1.3.
2
"
,
"send"
:
"0.1
6.2
"
}
},
"set-blocking"
:
{
...
...
@@ -1378,6 +1444,14 @@
"resolved"
:
"https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz"
,
"integrity"
:
"sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
},
"source-map"
:
{
"version"
:
"0.4.4"
,
"resolved"
:
"https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz"
,
"integrity"
:
"sha1-66T12pwNyZneaAMti092FzZSA2s="
,
"requires"
:
{
"amdefine"
:
">=0.0.4"
}
},
"sparse-bitfield"
:
{
"version"
:
"3.0.3"
,
"resolved"
:
"https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz"
,
...
...
@@ -1445,19 +1519,14 @@
}
},
"to-fast-properties"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz"
,
"integrity"
:
"sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
},
"toidentifier"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"
,
"integrity"
:
"sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz"
,
"integrity"
:
"sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
},
"token-stream"
:
{
"version"
:
"
1
.0.
0
"
,
"resolved"
:
"https://registry.npmjs.org/token-stream/-/token-stream-
1
.0.
0
.tgz"
,
"integrity"
:
"sha1-z
CAOqyYT9BZtJ/+a/HylbUnfbrQ
="
"version"
:
"
0
.0.
1
"
,
"resolved"
:
"https://registry.npmjs.org/token-stream/-/token-stream-
0
.0.
1
.tgz"
,
"integrity"
:
"sha1-z
u78cXp2xDFvEm0LnbqlXX598Bo
="
},
"type-is"
:
{
"version"
:
"1.6.18"
,
...
...
@@ -1468,6 +1537,29 @@
"mime-types"
:
"~2.1.24"
}
},
"uglify-js"
:
{
"version"
:
"2.8.29"
,
"resolved"
:
"https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz"
,
"integrity"
:
"sha1-KcVzMUgFe7Th913zW3qcty5qWd0="
,
"requires"
:
{
"source-map"
:
"~0.5.1"
,
"uglify-to-browserify"
:
"~1.0.0"
,
"yargs"
:
"~3.10.0"
},
"dependencies"
:
{
"source-map"
:
{
"version"
:
"0.5.7"
,
"resolved"
:
"https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
,
"integrity"
:
"sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
}
}
},
"uglify-to-browserify"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz"
,
"integrity"
:
"sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
,
"optional"
:
true
},
"unpipe"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
,
...
...
@@ -1489,9 +1581,9 @@
"integrity"
:
"sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"void-elements"
:
{
"version"
:
"
3.1.0
"
,
"resolved"
:
"https://registry.npmjs.org/void-elements/-/void-elements-
3.1.0
.tgz"
,
"integrity"
:
"sha1-
YU9/v42AHwu18GYfWy9XhXUOTwk
="
"version"
:
"
2.0.1
"
,
"resolved"
:
"https://registry.npmjs.org/void-elements/-/void-elements-
2.0.1
.tgz"
,
"integrity"
:
"sha1-
wGavtYK7HLQSjWDqkjkulNXp2+w
="
},
"wide-align"
:
{
"version"
:
"1.1.3"
,
...
...
@@ -1501,17 +1593,25 @@
"string-width"
:
"^1.0.2 || 2"
}
},
"window-size"
:
{
"version"
:
"0.1.0"
,
"resolved"
:
"https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz"
,
"integrity"
:
"sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
},
"with"
:
{
"version"
:
"
7.0.2
"
,
"resolved"
:
"https://registry.npmjs.org/with/-/with-
7.0.2
.tgz"
,
"integrity"
:
"sha
512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w=
="
,
"version"
:
"
5.1.1
"
,
"resolved"
:
"https://registry.npmjs.org/with/-/with-
5.1.1
.tgz"
,
"integrity"
:
"sha
1-+k2qktrzLE6pTtRTyB8EaGtXXf4
="
,
"requires"
:
{
"@babel/parser"
:
"^7.9.6"
,
"@babel/types"
:
"^7.9.6"
,
"assert-never"
:
"^1.2.1"
,
"babel-walk"
:
"3.0.0-canary-5"
"acorn"
:
"^3.1.0"
,
"acorn-globals"
:
"^3.0.0"
}
},
"wordwrap"
:
{
"version"
:
"0.0.2"
,
"resolved"
:
"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
,
"integrity"
:
"sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
},
"wrappy"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
,
...
...
@@ -1521,6 +1621,17 @@
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"
,
"integrity"
:
"sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
"yargs"
:
{
"version"
:
"3.10.0"
,
"resolved"
:
"https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz"
,
"integrity"
:
"sha1-9+572FfdfB0tOMDnTvvWgdFDH9E="
,
"requires"
:
{
"camelcase"
:
"^1.0.2"
,
"cliui"
:
"^2.1.0"
,
"decamelize"
:
"^1.0.0"
,
"window-size"
:
"0.1.0"
}
}
}
}
server/routes/notices.js
0 → 100644
View file @
813db703
const
express
=
require
(
'
express
'
);
const
Notice
=
require
(
'
../schemas/notice
'
);
const
router
=
express
.
Router
();
router
.
get
(
'
/
'
,
function
(
req
,
res
,
next
)
{
Notice
.
find
({}).
sort
({
post_date
:
-
1
})
.
then
((
notices
)
=>
{
res
.
json
(
notices
);
})
.
catch
((
err
)
=>
{
console
.
error
(
err
);
next
(
err
);
});
});
module
.
exports
=
router
;
\ No newline at end of file
server/routes/reserves.js
View file @
813db703
...
...
@@ -8,15 +8,15 @@ router.post('/', function (req, res, next) {
console
.
log
(
'
/reserve post req.body
'
,
req
.
body
)
const
reserve
=
new
Reserve
({
id
:
req
.
body
.
_id
,
date
:
req
.
body
.
date
,
time
:
req
.
body
.
time
,
room
:
req
.
body
.
room
,
name
:
req
.
body
.
name
,
id
:
req
.
body
.
_id
,
reason
:
req
.
body
.
reason
,
member
:
req
.
body
.
member
,
students
:
req
.
body
.
students
,
approve
:
req
.
body
.
approve
,
num
:
req
.
body
.
num
,
num
:
req
.
body
.
students
.
length
+
1
,
});
reserve
.
save
()
...
...
server/routes/users.js
View file @
813db703
...
...
@@ -34,6 +34,15 @@ router.post('/', function (req, res, next) {
})
});
router
.
get
(
'
/:_id
'
,
function
(
req
,
res
,
next
)
{
console
.
log
(
'
/users get req.params
'
,
req
.
params
)
User
.
findOne
({
_id
:
req
.
params
.
_id
},
function
(
err
,
user
)
{
if
(
err
)
return
res
.
status
(
500
).
json
({
error
:
err
});
res
.
status
(
201
).
json
(
user
);
})
})
router
.
put
(
'
/change/:id
'
,
function
(
req
,
res
,
next
)
{
console
.
log
(
'
/change put req.body
'
,
req
.
params
)
User
.
findOne
({
_id
:
req
.
params
.
id
},
'
password
'
,
function
(
err
,
user
)
{
...
...
server/schemas/notice.js
0 → 100644
View file @
813db703
const
mongoose
=
require
(
'
mongoose
'
);
const
{
Schema
}
=
mongoose
;
const
noticeSchema
=
new
Schema
({
notice_img
:
{
type
:
Array
,
},
notice_title
:
{
type
:
String
,
required
:
true
,
},
notice_author
:
{
type
:
String
,
// default: "나야나"
required
:
true
,
},
post_date
:
{
type
:
Date
,
default
:
Date
.
now
,
required
:
true
,
},
notice_content
:
{
type
:
String
,
required
:
true
,
},
});
module
.
exports
=
mongoose
.
model
(
'
Notice
'
,
noticeSchema
);
server/schemas/reserve.js
View file @
813db703
...
...
@@ -27,8 +27,8 @@ const reserveSchema = new Schema({
type
:
String
,
},
member
:
{
type
:
String
,
students
:
{
type
:
Array
,
},
approve
:
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment