diff --git a/routes/users.js b/routes/users.js index 887edf7..3a55c26 100644 --- a/routes/users.js +++ b/routes/users.js @@ -19,19 +19,25 @@ router.get('/', function(req, res, next) { // 회원 가입 router.post('/signup', async function (req, res, next) { try { - var username = req.body.username; + var email = req.body.email; var password = req.body.password; var nickname = req.body.nickname; var profileImageIndex = req.body.imageindex ?? 0; // 입력값 검증 - if( !username || !password || !nickname ){ + if( !email || !password || !nickname ){ return res.status(400).send("모든 필드를 입력하세요.") } + // 이메일 형식 검증 + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + if (!emailRegex.test(email)) { + return res.status(400).send("유효한 이메일 주소를 입력하세요."); + } + var database = req.app.get('database'); var users = database.collection('users'); - const existingUser = await users.findOne({username: username}) + const existingUser = await users.findOne({username: email}) if(existingUser){ return res.status(409).send("이미 존재하는 사용자입니다.") } @@ -42,12 +48,14 @@ router.post('/signup', async function (req, res, next) { // 신규 유저를 DB에 저장 await users.insertOne({ - username: username, + email: email, password: hash, nickname: nickname, profileImageIndex: profileImageIndex, rating: 18, - score:0 + score:0, + win:0, + lose:0 }); res.status(201).send("사용자가 성공적으로 생성되었습니다."); @@ -61,23 +69,23 @@ router.post('/signup', async function (req, res, next) { // 로그인 router.post("/signin", async function (req, res, next) { try { - var username = req.body.username; + var email = req.body.email; var password = req.body.password; var database = req.app.get('database'); var users = database.collection('users'); // 입력값 검증 - if (!username || !password) { + if (!email || !password) { return res.status(400).send("모든 필드를 입력해주세요."); } - const existingUser = await users.findOne({username: username}); + const existingUser = await users.findOne({email: email}); if(existingUser){ var compareResult = bcrypt.compareSync(password, existingUser.password); if(compareResult){ req.session.isAuthenticated = true; req.session.userId = existingUser._id.toString(); - req.session.username = existingUser.username; + req.session.email = existingUser.email; req.session.nickname = existingUser.nickname; req.session.profileImageIndex = existingUser.profileImageIndex || 0; req.session.rating = existingUser.rating; @@ -113,17 +121,17 @@ router.post("/signout", async function (req, res, next) { }); // 점수 추가 -router.post("/addscore", async function (req, res, next) { +router.post("/score-update", async function (req, res, next) { try { if(!req.session.isAuthenticated) { return res.status(400).send("로그인이 필요합니다."); } var userId = req.session.userId; - var addScore = req.body.score; + var isWin = req.body.isWin; // 점수 유효성 검사 - if(!addScore || isNaN(addScore)) { + if(!isWin || isNaN(isWin) || isWin > 1 || isWin < -1) { return res.status(400).send("유효한 점수를 입력해주세요."); } @@ -132,8 +140,16 @@ router.post("/addscore", async function (req, res, next) { var findUser = await users.findOne({_id: ObjectId.createFromHexString(userId) }); var userRating = findUser.rating; - var userScore = findUser.score + addScore; + var userScore = findUser.score + isWin; + var winCount = findUser.win; + var loseCount = findUser.lose; + + if (isWin > 0) { + winCount += 1; + } else { + loseCount += 1; + } // 급수에 따른 필요 승급 포인트 결정 let requiredPoints; @@ -173,6 +189,8 @@ router.post("/addscore", async function (req, res, next) { $set: { rating: Number(userRating), score: Number(userScore), + win: winCount, + lose: loseCount, updatedAt: new Date() } } @@ -186,6 +204,8 @@ router.post("/addscore", async function (req, res, next) { message: "점수가 성공적으로 업데이트되었습니다.", rating: Number(userRating), score: Number(userScore), + win: Number(winCount), + lose: Number(loseCount), }); } catch(err) { @@ -214,7 +234,6 @@ router.get("/score", async function (req, res, next) { res.json({ id: user._id.toString(), - username: user.username, nickname: user.nickname, rating: user.rating, score: Number(user.score) || 0,