Commit ba5429cf authored by Kim, Subin's avatar Kim, Subin
Browse files

master 병합

parent c465b924
import jwt from "jsonwebtoken"; import jwt from "jsonwebtoken";
import config from "../config/app.config.js"; import config from "../config/app.config.js";
import { User, Role } from '../db/index.js'; import { User, Role, Guest, ConfirmNum } from '../db/index.js';
import Twilio from "twilio"; import fs from "fs";
import CryptoJS from "crypto-js";
import validator from "validator";
// 현재 유저 상태 결정
const getUser = async (req, res) => {
try {
if (req.cookies.butterStudio) {
const token = req.cookies.butterStudio;
const decoded = jwt.verify(token, config.jwtSecret);
res.json(decoded);
} else {
res.json({ id: 0, role: "user" });
}
} catch (error) {
console.error(error);
return res.status(500).send("유저를 가져오지 못했습니다.");
}
}
// 로그인
const login = async (req, res) => { const login = async (req, res) => {
try { try {
const { id, password } = req.body; const { id, password } = req.body;
//사용자 존재 확인 //사용자 존재 확인
const user = await User.scope("withPassword").findOne({ where: { userId: id } }); const user = await User.scope("withPassword").findOne({ where: { userId: id } });
console.log("user : ", user);
if (!user) { if (!user) {
return res.status(422).send(`사용자가 존재하지 않습니다`); return res.status(422).send(`사용자가 존재하지 않습니다`);
} }
...@@ -17,19 +34,13 @@ const login = async (req, res) => { ...@@ -17,19 +34,13 @@ const login = async (req, res) => {
if (passwordMatch) { if (passwordMatch) {
// 3) 비밀번호가 맞으면 토큰 생성 // 3) 비밀번호가 맞으면 토큰 생성
const userRole = await user.getRole(); const userRole = await user.getRole();
// const userId = await user.getId();
console.log("userRole1111 : ", userRole);
// console.log("userId : ", userId);
const signData = { const signData = {
id: user.id, id: user.id,
role: userRole.name, role: userRole.name,
}; };
console.log("signData : ", signData);
const token = jwt.sign(signData, config.jwtSecret, { const token = jwt.sign(signData, config.jwtSecret, {
expiresIn: config.jwtExpires, expiresIn: config.jwtExpires,
}); });
console.log(token);
// 4) 토큰을 쿠키에 저장 // 4) 토큰을 쿠키에 저장
res.cookie(config.cookieName, token, { res.cookie(config.cookieName, token, {
maxAge: config.cookieMaxAge, maxAge: config.cookieMaxAge,
...@@ -50,91 +61,421 @@ const login = async (req, res) => { ...@@ -50,91 +61,421 @@ const login = async (req, res) => {
console.error(error); console.error(error);
return res.status(500).send("로그인 에러"); return res.status(500).send("로그인 에러");
} }
} }
// 로그아웃
const logout = async (req, res) => { const logout = async (req, res) => {
try { try {
res.cookie(config.cookieName,"") res.clearCookie(config.cookieName);
res.json({
id: 0,
role: "user",
})
res.send('successfully cookie cleared.')
} catch (error) { } catch (error) {
console.error(error); console.error(error);
return res.status(500).send("로그인 에러"); return res.status(500).send("로그인 에러");
} }
} }
const compareId = async (req, res) => { // 인증번호 발송
const id = req.params.userId; const confirmMbnum = async (req, res) => {
const userid = await User.findOne({ where: { userId: id } }); try {
if (userid !== null) {
return res.json(true); // 휴대폰 인증
const NCP_serviceID = process.env.NCP_serviceID;
const NCP_accessKey = process.env.NCP_accessKey;
const NCP_secretKey = process.env.NCP_secretKey;
const date = Date.now().toString();
const uri = NCP_serviceID;
const accessKey = NCP_accessKey;
const secretKey = NCP_secretKey;
const method = 'POST';
const space = " ";
const newLine = "\n";
const url = `https://sens.apigw.ntruss.com/sms/v2/services/${uri}/messages`;
const url2 = `/sms/v2/services/${uri}/messages`;
//시크릿 키를 암호화하는 작업
const hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secretKey);
hmac.update(method);
hmac.update(space);
hmac.update(url2);
hmac.update(newLine);
hmac.update(date);
hmac.update(newLine);
hmac.update(accessKey);
const hash = hmac.finalize();
const signature = hash.toString(CryptoJS.enc.Base64);
const phoneNumber = req.params.phone;
console.log(phoneNumber);
//인증번호 생성
const verifyCode = Math.floor(Math.random() * (999999 - 100000)) + 100000;
console.log("verifyCode : ", verifyCode);
let today = new Date();
let time = String(today.getTime());
// let result = await axios({
// method: method,
// json: true,
// url: url,
// headers: {
// 'Content-Type': "application/json",
// 'x-ncp-apigw-timestamp': date,
// 'x-ncp-iam-access-key': accessKey,
// 'x-ncp-apigw-signature-v2': signature,
// },
// data: {
// type: 'SMS',
// contentType: 'COMM',
// countryCode: '82',
// from: '01086074580',
// content: `[본인 확인] 인증번호 [${verifyCode}]를 입력해주세요.`,
// messages: [
// {
// to: `${phoneNumber}`,
// },
// ],
// },
// });
// const resultMs = result.data.messages;
// console.log('resultMs', resultMs);
// console.log('response', res.data, res['data']);
const confirm = await ConfirmNum.findOne({ where: { phone: phoneNumber } });
if (confirm) {
await confirm.destroy();
// 5분 유효시간 설정
await ConfirmNum.create({
confirmNum: String(verifyCode),
phone: phoneNumber,
startTime: time,
});
} else { } else {
return res.json(false); await ConfirmNum.create({
confirmNum: String(verifyCode),
phone: phoneNumber,
startTime: time,
} }
} );
}
res.json({ startTime: time, isSuccess: true, code: 202, message: "본인인증 문자 발송 성공", result: res.data });
} catch (error) {
console.log("error: ", error);
if (error.res == undefined) {
res.json({ isSuccess: true, code: 200, message: "본인인증 문자 발송 성공", result: res.data });
}
else res.json({ isSuccess: true, code: 204, message: "본인인증 문자 발송에 문제가 있습니다.", result: error.res });
}
};
const confirmMbnum = async (req, res) => { // 인증번호 확인
const id = req.params.id; const confirmNum = async (req, res) => {
const token = req.params.token; try {
const { userMbnum, number, startTime } = req.body;
const client = Twilio(id, token); const confirm = await ConfirmNum.findOne({ where: { phone: userMbnum, startTime: startTime } });
// console.log(client);
client.messages let today = new Date();
.create({ let time = today.getTime();
to: '+8201086074580', const elapsedMSec = time - confirm.startTime;
from: '+14159428621', const elapsedMin = String(elapsedMSec / 1000 / 60);
body: '[ButterStudio] 인증번호[1234]를 입력해주세요', if (elapsedMin <= 5) {
}) if (number !== confirm.confirmNum) {
.then(message => console.log(message.sid)) res.send("실패");
.catch(e => console.log(error)); } else {
// console.log("id = ", id, "token = ", token); await confirm.destroy();
return res.json(true); res.send("성공");
} }
} else {
res.send("재전송")
}
} catch (error) {
console.error("error : ", error.message);
res.status(500).send("잘못된 접근입니다.");
}
};
//유효성 검사
const validation = (errorMsg, data, minLength, maxLength, dataType) => {
if (validator.isLength(data, minLength, maxLength)) {
errorMsg[dataType] = false;
} else {
errorMsg[dataType] = true;
}
if (dataType === "userEmail") {
if (validator.isEmail(data, minLength, maxLength)) {
errorMsg[dataType] = false;
} else {
errorMsg[dataType] = true;
}
}
};
// 회원정보
const signup = async (req, res) => { const signup = async (req, res) => {
const { userId, userEmail, userNickName, userBirthday, userPassword } = req.body; const { userId, userName, userEmail, userNickName, userBirthday, userMbnum, userPassword } = req.body;
// 휴대폰 중복 확인
const userMbnum = String(req.body.userMbnum);
try { try {
let errorMsg = {
errorId: false,
errorName: false,
errorEmail: false,
errorBirthday: false,
errorNickName: false,
errorMbnum: false,
errorPassword: false,
};
//유효성 검사
validation(errorMsg, userId, 5, 10, "errorId");
validation(errorMsg, userName, 1, 10, "errorName");
validation(errorMsg, userEmail, 3, 20, "errorEmail");
validation(errorMsg, userBirthday, 6, 6, "errorBirthday");
validation(errorMsg, userNickName, 1, 10, "errorNickName");
validation(errorMsg, userMbnum, 11, 11, "errorMbnum");
validation(errorMsg, userPassword, 8, 11, "errorPassword");
let valid = !(Object.values(errorMsg).some((element) => (element)));
// db에서 데이터 중복검사
const id = await User.findOne({ where: { userId: userId } });
const mbnum = await User.findOne({ where: { phoneNumber: userMbnum } }); const mbnum = await User.findOne({ where: { phoneNumber: userMbnum } });
if (mbnum) { const email = await User.findOne({ where: { email: userEmail } });
return res.status(422).send(`이미 있는 휴대폰번호입니다.`); if (!valid) {
} res.json(errorMsg);
} else {
if (id) {
return res.status(401).send(`이미 있는 아이디입니다.`);
} else if (email) {
return res.status(401).send(`이미 있는 이메일입니다.`);
} else if (mbnum) {
return res.status(401).send(`이미 있는 휴대폰번호입니다.`);
} else{
const role = await Role.findOne({ where: { name: "member" } }) const role = await Role.findOne({ where: { name: "member" } })
const newUser = await User.create({ await User.create({
userId: userId, userId: userId,
name: userName,
email: userEmail, email: userEmail,
nickname: userNickName, nickname: userNickName,
birth: userBirthday, birth: userBirthday,
phoneNumber: userMbnum, phoneNumber: userMbnum,
password: userPassword, password: userPassword,
img: "",
roleId: role.id roleId: role.id
}); });
res.json(newUser); res.json("성공");
}
}
} catch (error) { } catch (error) {
console.error(error.message); console.error(error.message);
res.status(500).send("회원가입 에러. 나중에 다시 시도 해주세요"); res.status(500).send("회원가입 에러. 나중에 다시 시도 해주세요");
} }
}; };
const getNickName = async (req, res) => { const getMember = async (req, res) => {
console.log("여기여기");
const id = req.params.id;
console.log("id : ", id);
try { try {
const userNickName = await User.findOne({ where: { id: id }, attributes:["nickname"] }); const token = req.cookies.butterStudio;
console.log("userNickName: ", userNickName); const decoded = jwt.verify(token, config.jwtSecret);
return res.json(userNickName.nickname) if (decoded.role === "member") {
const user = await User.findOne({ where: { id: decoded.id } });
res.json({ nickname: user.nickname, img: user.img });
} else {
res.status(500).send("잘못된 접근입니다.");
}
} catch (error) { } catch (error) {
console.error("error : ",error.message); console.error("error : ", error.message);
res.status(500).send("회원가입 에러. 나중에 다시 시도 해주세요"); res.status(500).send("잘못된 접근입니다.");
} }
} }
// 프로필 변경
const uploadProfile = async (req, res) => {
try {
const image = req.file.filename;
const token = req.cookies.butterStudio;
const decoded = jwt.verify(token, config.jwtSecret);
if (decoded) {
const img = await User.findOne({ where: { id: decoded.id }, attributes: ["img"] });
fs.unlink("upload" + `\\${img.img}`, function (data) { console.log(data); });
const user = await User.update({
img: image
}, { where: { id: decoded.id } });
if (user) {
const success = await User.findOne({ where: { id: decoded.id }, attributes: ["img"] });
res.json(success)
} else {
throw new Error("프로필 등록 실패")
}
}
} catch (error) {
console.error(error.message);
res.status(500).send("프로필 에러");
}
}
// 기본 비밀번호인지 확인
const comparePw = async (req, res) => {
try {
//쿠키 안 토큰에서 id추출
const token = req.cookies.butterStudio;
const decoded = jwt.verify(token, config.jwtSecret);
//해당 id의 행 추출
const user = await User.scope("withPassword").findOne({ where: { id: decoded.id } });
//입력한 비번과 해당 행 비번을 비교
const passwordMatch = await user.comparePassword(req.params.pw);
//클라이언트로 동일여부를 전송
if (passwordMatch) {
return res.json(true)
} else {
return res.json(false)
}
} catch (error) {
console.error("error : ", error.message);
res.status(500).send("인증 에러");
}
}
// 회원정보 수정할 때 쓰는 함수
const overlap = async (decoded, dataType, data) => {
try {
let overlap = await User.findOne({ where: { id: decoded.id } });
// 변경할 데이터가 자기자신이면 true
if (overlap[dataType] === data) {
return true
} else {
// 그렇지 않으면 다른 데이터들 중에서 중복되는지 검사
let overlap2 = await User.findOne({ attributes: [dataType] });
if (overlap2[dataType] === data) {
return false
} else {
return true
}
}
} catch (error) {
console.error(error.message);
}
}
// 회원정보 수정
const modifyUser = async (req, res) => {
try {
const token = req.cookies.butterStudio;
const decoded = jwt.verify(token, config.jwtSecret);
const { userName, userEmail, userNickName, userMbnum, userPassword } = req.body;
let errorMsg = {
errorName: false,
errorEmail: false,
errorNickName: false,
errorMbnum: false,
errorPassword: false,
};
//유효성 검사
validation(errorMsg, userName, 1, 10, "errorName");
validation(errorMsg, userEmail, 3, 20, "errorEmail");
validation(errorMsg, userNickName, 1, 10, "errorNickName");
validation(errorMsg, userMbnum, 11, 11, "errorMbnum");
validation(errorMsg, userPassword, 8, 11, "errorPassword");
let valid = !(Object.values(errorMsg).some((element) => (element)));
const overlapEmail = await overlap(decoded, "email", userEmail);
const overlapMbnum = await overlap(decoded, "phoneNumber", userMbnum);
if (!valid) {
res.json(errorMsg);
} else {
if (overlapEmail && overlapMbnum) {
await User.update({
name: userName,
email: userEmail,
nickname: userNickName,
phoneNumber: userMbnum,
password: userPassword,
}, { where: { id: decoded.id }, individualHooks: true });
res.json("성공");
} else if (!overlapEmail && overlapMbnum) {
res.status(500).send("이미 있는 이메일입니다.");
} else if (overlapEmail && !overlapMbnum) {
res.status(500).send("이미 있는 핸드폰번호입니다.");
} else {
res.status(500).send("이미 있는 이메일, 핸드폰번호입니다.");
}
}
} catch (error) {
console.error(error.message);
res.status(500).send("수정 에러. 나중에 다시 시도 해주세요");
}
};
const getUserInfo = async (req, res) => {
const { id } = req.body
// console.log(id)
try {
const userInfo = await User.findOne({
where: { id: id },
attributes: ["id", "userId", "email", "nickname", "birth", "phoneNumber"]
})
// console.log(userInfo)
res.json(userInfo)
} catch (error) {
res.status(500).send("회원정보 불러오기 실패");
}
}
const saveGuestInfo = async (req, res) => {
const { name, email, birth, phoneNumber, password } = req.body
try {
const newGuest = await Guest.create({
name: name,
email: email,
birth: birth,
phoneNumber: phoneNumber,
password: password,
});
// console.log(newGuest)
res.clearCookie(config.cookieName);
const token = jwt.sign({id: newGuest.id, role: "user"}, config.jwtSecret, {
expiresIn: config.jwtExpires,
});
res.cookie(config.cookieName,token , {
maxAge: config.cookieMaxAge,
path: "/",
httpOnly: config.env === "production",
secure: config.env === "production",
})
res.json(newGuest);
} catch (error) {
res.status(500).send("비회원정보 등록 실패");
}
}
const getGuestInfo = async (req,res) => {
const {guestId} = req.params
// console.log(req.body)
try {
const guestInfo = await Guest.findOne({
where: {
id:guestId
}
})
// console.log("guestInfo====", guestInfo)
res.json(guestInfo)
} catch (error) {
res.status(500).send("비회원정보 불러오기 실패");
}
}
export default { export default {
getUser,
login, login,
logout, logout,
compareId,
confirmMbnum, confirmMbnum,
confirmNum,
signup, signup,
getNickName comparePw,
modifyUser,
saveGuestInfo,
getMember,
uploadProfile,
getUserInfo,
getGuestInfo
} }
...@@ -8,6 +8,8 @@ import TheaterTypeModel from "../models/theatertype.model.js"; ...@@ -8,6 +8,8 @@ import TheaterTypeModel from "../models/theatertype.model.js";
import TicketFeeModel from "../models/ticketfee.model.js"; import TicketFeeModel from "../models/ticketfee.model.js";
import TimeTableModel from '../models/timetable.model.js'; import TimeTableModel from '../models/timetable.model.js';
import ReservationModel from '../models/reservation.model.js'; import ReservationModel from '../models/reservation.model.js';
import GuestModel from '../models/guest.model.js'
import ConfirmNumModel from '../models/confirmnum.model.js'
import dbConfig from "../config/db.config.js"; import dbConfig from "../config/db.config.js";
const sequelize = new Sequelize( const sequelize = new Sequelize(
...@@ -35,6 +37,8 @@ const TheaterType = TheaterTypeModel(sequelize) ...@@ -35,6 +37,8 @@ const TheaterType = TheaterTypeModel(sequelize)
const TicketFee = TicketFeeModel(sequelize) const TicketFee = TicketFeeModel(sequelize)
const TimeTable = TimeTableModel(sequelize) const TimeTable = TimeTableModel(sequelize)
const Reservation = ReservationModel(sequelize) const Reservation = ReservationModel(sequelize)
const Guest = GuestModel(sequelize)
const ConfirmNum = ConfirmNumModel(sequelize)
User.belongsTo(Role); User.belongsTo(Role);
Role.hasOne(User); Role.hasOne(User);
...@@ -53,5 +57,7 @@ export { ...@@ -53,5 +57,7 @@ export {
TheaterType, TheaterType,
TicketFee, TicketFee,
TimeTable, TimeTable,
Reservation Reservation,
Guest,
ConfirmNum
} }
\ No newline at end of file
import dotenv from "dotenv"; import dotenv from "dotenv";
import { sequelize, User, Role } from "./db/index.js";
import app from "./app.js"; import app from "./app.js";
import appConfig from "./config/app.config.js"; import appConfig from "./config/app.config.js";
import { sequelize, User, Role } from "./db/index.js";
import { ROLE_NAME } from './models/role.model.js'; import { ROLE_NAME } from './models/role.model.js';
dotenv.config({ dotenv.config({
...@@ -10,7 +10,7 @@ dotenv.config({ ...@@ -10,7 +10,7 @@ dotenv.config({
}); });
sequelize sequelize
.sync({ force: true }) .sync({ force: false })
.then(async () => { .then(async () => {
await Promise.all( await Promise.all(
Object.keys(ROLE_NAME).map((name) => { Object.keys(ROLE_NAME).map((name) => {
...@@ -19,17 +19,19 @@ sequelize ...@@ -19,17 +19,19 @@ sequelize
); );
const adminRole = await Role.findOne({ where: { name: "admin" } }); const adminRole = await Role.findOne({ where: { name: "admin" } });
// if (!adminRole) { if (!adminRole) {
await User.create({ await User.create({
userId: "admin", userId: "admin",
name: "관리자",
email: "han35799@naver.com", email: "han35799@naver.com",
nickname: "haha", nickname: "haha",
birth: "990926", birth: "990926",
phoneNumber: "01086074580", phoneNumber: "01086074580",
password: "admin!", password: "admin!",
img: "970aaa79673a39331d45d4b55ca05d25",
roleId: adminRole?.id, roleId: adminRole?.id,
}); });
// } } else { }
app.listen(appConfig.port, () => { app.listen(appConfig.port, () => {
console.log(`Server is running on port ${appConfig.port}`); console.log(`Server is running on port ${appConfig.port}`);
...@@ -39,4 +41,4 @@ sequelize ...@@ -39,4 +41,4 @@ sequelize
console.log(err); console.log(err);
}); });
export default {} export default {}
\ No newline at end of file \ No newline at end of file
import Sequelize from "sequelize";
const { DataTypes } = Sequelize;
const ConfirmNumModel = (sequelize) => {
const ConfirmNum = sequelize.define(
"confirmnum",
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
confirmNum: {
type: DataTypes.STRING,
},
phone: {
type: DataTypes.STRING
},
startTime: {
type: DataTypes.STRING
},
},
{
timestamps: true,
freezeTableName: true,
tableName: "confirmnum"
}
);
return ConfirmNum;
};
export default ConfirmNumModel;
\ No newline at end of file
import Sequelize from "sequelize";
const { DataTypes } = Sequelize;
const GuestModel = (sequelize) => {
const Guest = sequelize.define(
"guest",
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
name: {
type: DataTypes.STRING,
},
email: {
type: DataTypes.STRING,
},
birth: {
type: DataTypes.STRING,
},
phoneNumber: {
type: DataTypes.STRING
},
password: {
type: DataTypes.STRING,
},
},
{
timestamps: true,
freezeTableName: true,
tableName: "guests",
}
);
return Guest
};
export default GuestModel
\ No newline at end of file
...@@ -18,7 +18,7 @@ const ReservationModel = (sequelize) => { ...@@ -18,7 +18,7 @@ const ReservationModel = (sequelize) => {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
}, },
row: { row: {
type: DataTypes.STRING, type: DataTypes.INTEGER,
}, },
col: { col: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
...@@ -26,10 +26,16 @@ const ReservationModel = (sequelize) => { ...@@ -26,10 +26,16 @@ const ReservationModel = (sequelize) => {
timetable:{ timetable:{
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
}, },
userType:{
type: DataTypes.STRING,
},
user:{ user:{
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
}, },
payment:{ payment:{
type: DataTypes.STRING,
},
totalFee:{
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
} }
}, },
......
...@@ -15,7 +15,7 @@ const TheaterModel = (sequelize) => { ...@@ -15,7 +15,7 @@ const TheaterModel = (sequelize) => {
type: DataTypes.STRING type: DataTypes.STRING
}, },
rows: { rows: {
type: DataTypes.STRING, type: DataTypes.INTEGER,
}, },
columns: { columns: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
......
...@@ -14,23 +14,29 @@ const UserModel = (sequelize) => { ...@@ -14,23 +14,29 @@ const UserModel = (sequelize) => {
autoIncrement: true, autoIncrement: true,
}, },
userId: { userId: {
type: DataTypes.STRING, type: DataTypes.STRING
},
name: {
type: DataTypes.STRING
}, },
email: { email: {
type: DataTypes.STRING, type: DataTypes.STRING
}, },
nickname: { nickname: {
type: DataTypes.STRING, type: DataTypes.STRING
}, },
birth: { birth: {
type: DataTypes.STRING, type: DataTypes.STRING
}, },
phoneNumber: { phoneNumber: {
type: DataTypes.STRING type: DataTypes.STRING
}, },
password: { password: {
type: DataTypes.STRING, type: DataTypes.STRING
}, },
img: {
type: DataTypes.STRING
}
}, },
{ {
timestamps: true, timestamps: true,
......
...@@ -6,6 +6,7 @@ import timetableRouter from "./timetable.route.js"; ...@@ -6,6 +6,7 @@ import timetableRouter from "./timetable.route.js";
import cinemaRouter from "./cinema.route.js"; import cinemaRouter from "./cinema.route.js";
import kakaopayRouter from "./kakaopay.route.js"; import kakaopayRouter from "./kakaopay.route.js";
import emailRouter from './email.route.js' import emailRouter from './email.route.js'
import reservationRouter from './reservation.route.js'
const router = express.Router(); const router = express.Router();
...@@ -15,6 +16,7 @@ router.use('/kakaopay',kakaopayRouter) ...@@ -15,6 +16,7 @@ router.use('/kakaopay',kakaopayRouter)
router.use('/email',emailRouter) router.use('/email',emailRouter)
router.use('/info', cinemaRouter) router.use('/info', cinemaRouter)
router.use('/theater', theaterRouter) router.use('/theater', theaterRouter)
router.use('/reservation', reservationRouter)
router.use('/timetable', timetableRouter) router.use('/timetable', timetableRouter)
export default router; export default router;
\ No newline at end of file
...@@ -7,12 +7,9 @@ router ...@@ -7,12 +7,9 @@ router
.route("/") .route("/")
.get(movieCtrl.getListfromDB) .get(movieCtrl.getListfromDB)
router
.route('/showmovies/:category')
.get(movieCtrl.getMovieById)
router router
.route('/movielist') .route('/movielist/:category')
.get(movieCtrl.getMovieList) .get(movieCtrl.getMovieList)
router router
...@@ -38,6 +35,5 @@ router ...@@ -38,6 +35,5 @@ router
.post(movieCtrl.create) .post(movieCtrl.create)
.delete(movieCtrl.remove) .delete(movieCtrl.remove)
router.param('category', movieCtrl.getMovieByCategory)
export default router; export default router;
\ No newline at end of file
import express from "express";
import ReservationCtrl from "../controllers/reservation.controller.js";
const router = express.Router();
router.route('/findreservation')
.post(ReservationCtrl.findReservedSeats)
.get(ReservationCtrl.findReservation)
router.route('/findonereservation')
.post(ReservationCtrl.findOneReservation)
router.route('/save')
.post(ReservationCtrl.saveReservation)
export default router;
\ No newline at end of file
...@@ -3,6 +3,9 @@ import theaterCtrl from "../controllers/theater.controller.js"; ...@@ -3,6 +3,9 @@ import theaterCtrl from "../controllers/theater.controller.js";
const router = express.Router(); const router = express.Router();
router.route("/getInfo")
.post(theaterCtrl.getTheaterInfo)
router router
.route("/") .route("/")
.get(theaterCtrl.getAll) .get(theaterCtrl.getAll)
......
import express from "express"; import express from "express";
import multer from "multer";
import userCtrl from "../controllers/user.controller.js"; import userCtrl from "../controllers/user.controller.js";
const router = express.Router(); const router = express.Router();
const upload = multer({
dest: "upload/"
})
router
.route("/user")
.get(userCtrl.getUser)
router router
.route("/login") .route("/login")
.post(userCtrl.login) .post(userCtrl.login)
...@@ -16,15 +25,46 @@ router ...@@ -16,15 +25,46 @@ router
.post(userCtrl.signup) .post(userCtrl.signup)
router router
.route("/:userId") .route("/profile")
.get(userCtrl.compareId) .post(
upload.single("image"),
userCtrl.uploadProfile
)
router
.route("/modify")
.post(userCtrl.modifyUser)
router
.route("/member")
.get(userCtrl.getMember)
router
.route("/num")
.post(userCtrl.confirmNum)
router router
.route("/:id/:token") .route("/pw/:pw")
.get(userCtrl.confirmMbnum) .get(userCtrl.comparePw)
router router
.route("/:iddd") .route("/phone/:phone")
.get(userCtrl.getNickName) .post(userCtrl.confirmMbnum)
router
.route('/getuserinfo')
.post(userCtrl.getUserInfo)
router
.route('/guest/save')
.post(userCtrl.saveGuestInfo)
router
.route('/guestinfo/:guestId')
.get(userCtrl.getGuestInfo)
router
.route("/:userId")
.get(userCtrl.compareId)
export default router; export default router;
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment