※ 24.09.11 코드 리팩토링 - 부분수정 및 try-catch구문 추가 ※
{
"userId": "your_Id",
"userPw": "your_Password",
"confirmPw" : "one_more_your_Password",
"userName" : "your_name"
}
data: {
userNo: cretead_id_No,
userId: cretead_id,
userName: cretead_id_userName,
}
{errorMessage: "아이디는 소문자+숫자 형식만 가능합니다."}
{errorMessage: "비밀번호는 최소 6자리 이상만 가능합니다."}
{errorMessage: "비밀번호와 확인이 일치하지 않습니다."}
{errorMessage: "이미 존재하는 아이디 입니다."}
router.post("/sign-up", async (req, res, next) => {
const { userId, userPw, confirmPw, userName } = req.body;
const validUserId = /^[a-z0-9]+$/;
const isUser = await prisma.users.findFirst({
where: { userId },
});
if (isUser)
return res.status(409).json({
errorMessage: "이미 존재하는 아이디 입니다.",
});
if (!validUserId.test(userId))
return res.status(400).json({
errorMessage: "아이디는 소문자 + 숫자 형식만 가능합니다.",
});
if (userPw.length < 6)
return res.status(400).json({
errorMessage: "비밀번호는 최소 6자리 이상만 가능합니다.",
});
if (userPw !== confirmPw)
return res.status(401).json({
errorMessage: "비밀번호와 확인이 일치하지 않습니다.",
});
const hashedPw = await bcrypt.hash(userPw, 10);
const user = await prisma.users.create({
data: { userId, userPw: hashedPw, userName },
});
return res.status(201).json({
data: {
userNo: user.userNo,
userId: user.userId,
userName: user.userName,
},
});
});
router.post("/sign-up", async (req, res, next) => {
const {
body: { userId, userPw, confirmPw, userName },
} = req;
const validUserId = /^[a-z0-9]+$/;
try {
const isUser = await prisma.users.findFirst({
where: { userId },
});
if (isUser)
return res.status(409).json({
errorMessage: "이미 존재하는 아이디 입니다.",
});
if (!validUserId.test(userId))
return res.status(400).json({
errorMessage: "아이디는 소문자 + 숫자 형식만 가능합니다.",
});
if (userPw.length < 6)
return res.status(400).json({
errorMessage: "비밀번호는 최소 6자리 이상만 가능합니다.",
});
if (userPw !== confirmPw)
return res.status(401).json({
errorMessage: "비밀번호와 확인이 일치하지 않습니다.",
});
const hashedPw = await bcrypt.hash(userPw, 10);
const user = await prisma.users.create({
data: { userId, userPw: hashedPw, userName },
});
return res.status(201).json({
data: {
userNo: user.userNo,
userId: user.userId,
userName: user.userName,
},
});
} catch (err) {
res.status(500).json({ errorMessage: "서버 오류" });
}
});
{
"userId": "your_Id",
"userPw": "your_Password",
}
{ message: "로그인 성공, 헤더에 토큰값이 반환되었습니다." }
{errorMessage: "없는 아이디 입니다."}
{errorMessage: "틀린 비밀번호 입니다."}
router.post("/sign-in", async (req, res, next) => {
const { userId, userPw } = req.body;
const isUser = await prisma.users.findFirst({
where: { userId },
});
if (!isUser)
return res.status(400).json({
errorMessage: "없는 아이디 입니다.",
});
if (!(await bcrypt.compare(userPw, isUser.userPw)))
return res.status(401).json({
errorMessage: "틀린 비밀번호 입니다.",
});
const token = jwt.sign({ userId: userId }, SECRET_CODE);
res.setHeader("Authorization", `Bearer ${token}`);
return res
.status(200)
.json({ message: "로그인 성공, 헤더에 토큰값이 반환되었습니다." });
});
router.post("/sign-in", async (req, res, next) => {
const { userId, userPw } = req.body;
try {
const isUser = await prisma.users.findFirst({
where: { userId },
});
if (!isUser)
return res.status(400).json({
errorMessage: "없는 아이디 입니다.",
});
if (!(await bcrypt.compare(userPw, isUser.userPw)))
return res.status(401).json({
errorMessage: "틀린 비밀번호 입니다.",
});
const token = jwt.sign({ userId: userId }, SECRET_CODE);
res.setHeader("Authorization", `Bearer ${token}`);
return res
.status(200)
.json({ message: "로그인 성공, 헤더에 토큰값이 반환되었습니다." });
} catch (err) {
res.status(500).json({ errorMessage: "서버 오류" });
}
});
Authorization: Bearer <your_token>
{
"characterName" : "your_characterName"
}
{
"characterNo : your_created_characterNo"
}
{ message: "이미 있는 캐릭터명입니다. " }
router.post("/character", authMiddleware, async (req, res, next) => {
const { characterName } = req.body;
const { userNo } = req.user;
console.log(userNo);
const isCharacter = await prisma.characters.findFirst({
where: { characterName },
});
if (isCharacter)
return res.status(409).json({ message: "이미 있는 캐릭터명입니다. " });
const character = await prisma.characters.create({
data: {
characterName,
userNo,
inventory: {
create: {
items: JSON.stringify([]),
},
},
equip: {
create: {
items: JSON.stringify([]),
},
},
},
});
const characterNo = character.characterNo;
return res.status(201).json({
data: { characterNo },
});
});
router.post("/character", authMiddleware, async (req, res, next) => {
const {
body: { characterName },
user: { userNo },
} = req;
try {
const isCharacter = await prisma.characters.findFirst({
where: { characterName },
});
if (isCharacter)
return res.status(409).json({ message: "이미 있는 캐릭터명입니다. " });
const character = await prisma.characters.create({
data: {
characterName,
userNo,
inventory: {
create: { items: JSON.stringify({}) },
},
equip: { create: { items: JSON.stringify({}) } },
},
});
return res.status(201).json({
data: { characterNo: character.characterNo },
});
} catch (err) {
res.status(500).json({ errorMessage: "서버오류" });
}
});
GET /characters/delete/:characterId
Authorization: Bearer <your_token>
{ data: { deleteCharacter } }
{ message: "계정 주인이 아닙니다." }
{ message: "삭제하려는 계정이 없습니다. " }
router.delete(
"/character/delete/:characterNo",
authMiddleware,
async (req, res, next) => {
const { characterNo } = req.params;
const { userNo } = req.user;
const character = await prisma.characters.findFirst({
where: { characterNo: +characterNo },
});
if (!character)
return res.status(404).json({ message: "삭제하려는 계정이 없습니다. " });
if (character.userNo !== userNo)
return res.status(401).json({ message: "계정 주인이 아닙니다." });
const deleteCharacter = await prisma.characters.delete({
where: { characterNo: +characterNo },
});
return res.status(200).json({ data: { deleteCharacter } });
}
);
router.delete(
"/character/delete/:characterNo",
authMiddleware,
async (req, res, next) => {
const {
params: { characterNo },
user: { userNo },
} = req;
try {
const character = await prisma.characters.findFirst({
where: { characterNo: +characterNo },
});
if (!character)
return res
.status(404)
.json({ message: "삭제하려는 계정이 없습니다. " });
if (character.userNo !== userNo)
return res.status(401).json({ message: "계정 주인이 아닙니다." });
const deleteCharacter = await prisma.characters.delete({
where: { characterNo: +characterNo },
});
return res.status(200).json({ data: { deleteCharacter } });
} catch (err) {
res.status(500).json({ errorMessage: "서버오류" });
}
}
);
GET /characters/info/:characterId
// 본인의 캐릭터일 때
{
data: {
characterName: character.characterName,
money: character.money,
health: character.health,
power: character.power,
},
}
// 본인의 캐릭터가 아닐 때
{
data: {
characterName: character.characterName,
health: character.health,
power: character.power,
},
}
{ message: "삭제하려는 계정이 없습니다. " }
router.get(
"/character/info/:characterNo",
authMiddleware,
async (req, res, next) => {
const { characterNo } = req.params;
const { userNo } = req.user;
const character = await prisma.characters.findFirst({
where: { characterNo: +characterNo },
});
if (!character)
return res.status(404).json({ message: "삭제하려는 계정이 없습니다. " });
if (character.userNo === userNo) {
return res.status(200).json({
data: {
characterName: character.characterName,
money: character.money,
health: character.health,
power: character.power,
},
});
} else {
return res.status(200).json({
data: {
characterName: character.characterName,
health: character.health,
power: character.power,
},
});
}
}
);
router.get(
"/character/info/:characterNo",
authMiddleware,
async (req, res, next) => {
const {
params: { characterNo },
user: { userNo },
} = req;
try {
const character = await prisma.characters.findFirst({
where: { characterNo: +characterNo },
});
if (!character)
return res
.status(404)
.json({ message: "조회하려는 계정이 없습니다. " });
const returnData = {
characterName: character.characterName,
health: character.health,
power: character.power,
};
if (character.userNo === userNo) returnData.money = character.money;
return res.status(200).json({
data: returnData,
});
} catch (err) {
res.status(500).json({ errorMessage: "서버오류" });
}
}
);
{
"itemNo" : your_itemNo,
"itemName" : "your_itemName",
"itemPrice" : "your_itemPrice",
"itemStat" : "your_itemStat",
}
{ data: item }
{ message: "이미 있는 아이템 넘버입니다." }
router.post("/item", async (req, res, next) => {
const { itemNo, itemName, itemStat, itemPrice } = req.body;
const isItem = await prisma.items.findFirst({
where: { itemNo },
});
if (isItem)
return res.status(409).json({ message: "이미 있는 아이템 넘버입니다." });
const item = await prisma.items.create({
data: {
itemNo,
itemName,
itemPrice,
itemStat,
},
});
return res.status(201).json({ data: item });
});
router.post("/item", async (req, res, next) => {
const { itemNo, itemName, itemStat, itemPrice } = req.body;
try {
const isItem = await prisma.items.findFirst({
where: { itemNo },
});
if (isItem)
return res.status(409).json({ message: "이미 있는 아이템 넘버입니다." });
const item = await prisma.items.create({
data: {
itemNo,
itemName,
itemPrice,
itemStat,
},
});
return res.status(201).json({ data: item });
} catch (err) {
res.status(500).json({ errorMessage: "서버 오류" });
}
});
PATCH /updateItem/:itemNo
{
"itemName" : "change_itemName",
"itemStat" : {
wanted_stat_info
}
}
{ data: updateItem }
{ message: "없는 아이템입니다." }
router.patch("/updateItem/:itemNo", async (req, res, next) => {
const { itemNo } = req.params;
const { itemName, itemStat } = req.body;
const Item = await prisma.items.findFirst({
where: { itemNo: +itemNo },
});
if (!Item) return res.status(404).json({ message: "없는 아이템입니다." });
const updateItem = await prisma.items.update({
where: { itemNo: +itemNo },
data: {
itemName,
itemStat,
},
});
return res.status(200).json({ data: updateItem });
});
router.patch("/updateItem/:itemNo", async (req, res, next) => {
const {
params: { itemNo },
body: { itemName, itemStat },
} = req;
try {
const Item = await prisma.items.findFirst({
where: { itemNo: +itemNo },
});
if (!Item) return res.status(404).json({ message: "없는 아이템입니다." });
const updateItem = await prisma.items.update({
where: { itemNo: +itemNo },
data: {
itemName,
itemStat,
},
});
return res.status(200).json({ data: updateItem });
} catch (err) {
res.status(500).json({ errorMessage: "서버 오류" });
}
});
NULL
{ data: items }
{ message: "등록된 아이템이 없습니다." }
router.get("/item", async (req, res, next) => {
const items = await prisma.items.findMany();
if (!items)
return res.status(404).json({ message: "등록된 아이템이 없습니다." });
return res.status(200).json({ data: items });
});
router.get("/item", async (req, res, next) => {
const items = await prisma.items.findMany();
try {
if (!items)
return res.status(404).json({ message: "등록된 아이템이 없습니다." });
return res.status(200).json({ data: items });
} catch (err) {
res.status(500).json({ errorMessage: "서버 오류" });
}
});
GET /characters/:characterId
{ data: items }
{ message: "등록된 아이템이 없습니다." }
router.get("/item/:itemNo", async (req, res, next) => {
const { itemNo } = req.params;
const items = await prisma.items.findFirst({
where: { itemNo: +itemNo },
});
if (!items)
return res.status(404).json({ message: "등록된 아이템이 없습니다." });
return res.status(200).json({ data: items });
});
router.get("/item/:itemNo", async (req, res, next) => {
const { itemNo } = req.params;
try {
const items = await prisma.items.findFirst({
where: { itemNo: +itemNo },
});
if (!items)
return res.status(404).json({ message: "등록된 아이템이 없습니다." });
return res.status(200).json({ data: items });
} catch (err) {
res.status(500).json({ errorMessage: "서버 오류" });
}
});