카테고리 없음
6주차 (4)
jaeoun0238
2024. 12. 5. 21:07
function solution(seoul) {
var x = seoul.indexOf("Kim"); // "Kim"의 위치를 찾기
var answer = "김서방은 " + x + "에 있다"; // 위치를 포함한 문자열 생성
return answer; // 결과 반환
}
SoccerOnline 추가사항
import express, { request } from 'express';
import { prisma } from '../uts/prisma/index.js';
import errModel from '../middlewares/error.middleware.js';
import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';
import authMiddleware from '../middlewares/auth.middleware.js';
const router = express.Router();
// 회원가입api
/** 사용자 회원가입 API **/
router.post('/sign-up', async (req, res, next) => {
const { userID, userName, userPassword } = req.body;
try {
// 동일한 회원정보 확인하기
const sameUser = await prisma.userData.findUnique({
where: {
userID,
},
});
// 사용자 정보가 이미 존재하는 경우
if (sameUser) {
return res.status(409).json({ message: '이미 존재하는 유저입니다.' });
}
// 비밀번호 해시화 (변경된 부분)
const bcryptPassword = await bcrypt.hash(userPassword, 10); // salt rounds 추가
const players = await prisma.playerData.findMany({
take: 3,
});
const result = await prisma.$transaction(async (tx) => {
// 트랜잭션 내에서 사용자를 생성합니다.
const user = await tx.userData.create({
data: {
userID,
userName,
userPassword: bcryptPassword,
userScore: 1000,
userCash: 5000,
},
});
//스쿼드 만들기
const squard = await tx.playerSquadsData.create({
data: {
userPID: user.userPID,
},
});
for (let i = 0; i < players.length; i++) {
const player = players[i];
const defaultPlayer = await tx.playerRostersData.create({
data: {
userPID: user.userPID,
playerPID: player.playerPID,
playerEnchant: 0,
},
});
//playerPID를 이용해서 장착되게
const equipRoster = await tx.playerEquipRostersData.create({
data: {
playerSquadsPID: squard.playerSquadsPID,
playerRostersPID: defaultPlayer.playerRostersPID,
position: i,
},
});
console.log(equipRoster);
}
// 에러가 발생하여, 트랜잭션 내에서 실행된 모든 쿼리가 롤백됩니다.
return user;
});
// userData 테이블에 사용자를 추가
return res.status(201).json({ message: '회원가입이 완료되었습니다.' });
} catch (err) {
next(err);
// 오류 처리 시작 (변경된 부분)
// console.error(error); // 오류 로그 출력 (변경된 부분)
// return res.status(500).json({ message: '서버 오류가 발생했습니다.' }); // 오류 응답 반환 (변경된 부분)
}
});
// 로그인api
/** 로그인 API **/
router.post('/sign-in', async (req, res, next) => {
const { userID, userPassword } = req.body;
const user = await prisma.userData.findUnique({ where: { userID } });
if (!user)
return res.status(401).json({ message: '존재하지 않는 유저입니다.' });
// 입력받은 사용자의 비밀번호와 데이터베이스에 저장된 비밀번호를 비교합니다.
else if (!(await bcrypt.compare(userPassword, user.userPassword)))
return res.status(401).json({ message: '비밀번호가 일치하지 않습니다.' });
// 로그인에 성공하면, 사용자의 userId를 바탕으로 토큰을 생성합니다.
console.log(process.env.JWT_KEY);
const token = jwt.sign(
{
userPID: user.userPID,
},
process.env.JWT_KEY, // 비밀 키를 환경 변수에서 가져옴
{ expiresIn: '1h' }, // 토큰의 만료 시간을 설정 (1시간)
);
// 헤더로 주고받게 바꾸기
res.setHeader('authorization', `Bearer ${token}`);
return res.status(200).json({
message: '로그인 성공',
user: {
userID: user.userID,
},
});
});
// 캐시 구매
router.patch('/buyCash', authMiddleware, async (req, res, next) => {
try {
const { userPID } = req.user;
const { cash } = req.body;
// 현재 보유량 + 추가 캐시 하기위해 현재 user정보 가져옴
const user = await prisma.userData.findUnique({
where: { userPID: +userPID },
});
// cash가 존재하지 않으면 에러, middleware로 따로 빼도 됨
if (!cash) {
return res.status(400).json({ error: '캐시를 입력해 주세요.' });
}
// cash가 유효한 값인지 검사, middleware로 따로 빼도 됨
if (typeof cash !== 'number' || cash < 0) {
return res.status(400).json({ error: '유효한 캐시 값을 입력해 주세요.' });
}
// 캐시 추가해서 업데이트
const updateCash = await prisma.userData.update({
where: { userPID: +userPID },
data: { userCash: user.userCash + cash },
});
return res.status(200).json({ currentCash: updateCash.userCash });
} catch (err) {
next(err);
}
});
export default router;
회원가입부분에 튜토리얼처럼 자동으로 팀이 주어지게 수정하고 트랜젝션 추가!
확실한건.. create를 사용하면 data{}객체를 가져온다 라는것!
prisma를 확인하면서 계속 연결시켜줘야한다는게 중요한것 같다!