카테고리 없음

5주차 (5)

jaeoun0238 2024. 11. 29. 20:49

최종 Item-Simulator 완성본!

// app.js
//express 서버 3000포트 띄우기
import routesAccount from './routes/account.js';
import routesCharacter from './routes/character.js';
import routesItem from './routes/item.js';
import express from 'express'; // 모듈 불러오기

const app = express(); // exoress()함수를 호출해서 app라는 객체생성
const PORT = 3000; // 서버기 실행될 포트, 3000번 사용

//app.get() 메서드를 사용해서 http get 요청 루트 ("/")에 대한 요청이 들어오면 "Hello World" 출력
// req = 요청 객체 res = 응답 객체
// localhost:3000/ 으로 get 요청이 들어오면 함수 실행 (req, res) => { }
app.get('/', (req, res) => {
  res.send('Hello World!');
});
app.use(express.json());

// /api 주소로 접근하였을 때, router와 TodosRouter로 클라이언트의 요청이 전달됩니다.
// app.use("/", router);
// app.use("/api", TodosRouter); // http://localhost:3000/

// localhost:3000/api
app.use('/api', [routesAccount, routesCharacter, routesItem]); // http://localhost:3000/api

// app.listen()메서드를 호출하여 서버를 시작 , 포트를 불러오고 클라이언트요청을 대기
// 서버가 성공적으로 시작되면 메세지 출력
// localhost:3000/
app.listen(PORT, () => {
  console.log(PORT, '포트로 서버가 열렸어요!');
});

// / : root -> 최상위 경로
// /test1.txt -> /text/test1.txt
// /test2.txt -> /text/test2.txt
// /test3.txt -> /text/test3.txt
// /routes/account.js

// 라우터 만들기 account.js를 만들기
// /api/signup api만들기 post로 만들기
// id password로 전달 -> consol.log로 만들어서
// signup에서 유저정보 생성하여 users 배열에 저장.
// 로그인 만들기 (signin) => post
// 회원조회 만들기 (account) => get

import express from 'express';

const router = express.Router();

// '/' => http://localhost:3000/api/signup 으로 요청이 들어오면 함수 실행.
// request : 내가 받은 정보
// response : 내가 보낼 정보
router.post('/signup', (request, response) => {
  const { id, password } = request.body; // { id: 'test', password: 'test' }
  const userUid = users.length + 1;
  const characters = [];
  const createdUser = { id, password, userUid, characters };
  users.push(createdUser);
  return response.json(createdUser);
});

// id, pw 받아서
// users 배열에서 id, pw가 일치하는지 확인
// 일치하면 로그인되었습니다. 출력
router.post('/signin', function (request, response) {
  const { id, password } = request.body;

  // 일반 함수를 사용하여 사용자 찾기
  // const login = function (user) {
  //   return user.id == id && user.password === password;
  // };
  const userLogin = users.find(
    (user) => user.id === id && user.password === password,
  );
  // console.log(user);
  if (!userLogin) {
    return response.json('로그인실패');
  }
  return response.json(userLogin);
});

// id를 받아서
// users 배열에서 id가 일치하는지 확인
// 일치하면 해당 id의 정보를 출력
router.get('/account', (request, response) => {
  const { id } = request.query; // { id: 'test', password: 'test' }
  const account = function (user) {
    return user.id === id;
  };
  const userAccount = users.find(account);
  // console.log(user);
  if (!userAccount) {
    return response.json('유저를 찾지 못했습니다.');
  }
  return response.json(userAccount);
});

//   const { id } = request.body; // { id: 'test', password: 'test' }
//   const account = function (user) {
//     return user.id === id;
//   };
//   const userAccount = users.find(account);
//   // console.log(user);
//   if (userAccount) {
//     return response.json(`유저 ${id} 입니다`);
//   }
//   //
//   else {
//     return response.json('유저를 찾지 못했습니다.');
//   }
// });

export const users = []; //users 내보내기
export default router;
//routes/character.js

//id 패스워드 말고 캐릭터로
// create , status , item
// users 에서 id와 password가 일치하는 유저 찾기 ㅜㅜ
// 찾은 유저 정보안에 charater에 nickname 과 level 1을 넣어 주기
// 그리고 다른 api 에서 users 로그찍어서 확인해보기
// 캐릭터 삭제, 조회
// id, password가 아닌 userUid 를 받아서 캐릭터 생성
// 캐릭터 정보가 바로 나오도록

import { users } from '../routes/account.js';
import express, { response } from 'express';
// import { items } from '../routes/item.js';

const router = express.Router();

router.post('/create', (request, response) => {
  const { nickname, userUid } = request.body;

  const user = users.find((user) => {
    return user.userUid === Number(userUid);
  });
  if (!user) {
    return response.json('id 또는 password가 잘못입력되었습니다.');
  }
  let character = { nickname: nickname, level: 1 };
  user.characters.push(character);

  //else안쓰는 이유 이미 다 걸러져서
  return response.json(user);
});

// 캐릭터 삭제 delete
// path : '/delete'
// userUid를 받아서 해당 userUid를 가진 유저의 캐릭터를 삭제

router.delete('/delete', (request, response) => {
  const { nickname, userUid } = request.body;

  const user = users.find((user) => {
    // console.log(user);
    return user.userUid === Number(userUid);
  });

  if (!user) {
    return response.json('존재하지 않는 유저 입니다.');
  }

  user.characters = user.characters.filter(
    (character) => character.nickname !== nickname,
  );
  return response.json({
    message: `${nickname}이 삭제되었습니다.`,
    users,
  });

  // console.log(user);
  // if (user.userUid === +userUid) {
  //   // console.log(user);
  //   return response.json({
  //     message: `${nickname}이 삭제되었습니다.`,
  //   });
  // }
  // return response.json({
  //   message: ' 불러오기 실패! ',
  // });

  // return response(user, `${nickname}이 삭제가 실패 되었습니다.`);
});

// 캐릭터 조회 get
// path : '/status'
// userUid를 받아서 해당 userUid를 가진 유저의 캐릭터 정보를 조회

router.get('/status', (request, response) => {
  const { nickname, userUid } = request.query;
  const user = users.find((user) => user.userUid === Number(userUid));
  // console.log(users);
  if (!user) {
    // console.log(user);
    return response.json('존재하지 않는 유저 입니다.');
  }
  const foundCharacter = user.characters.find(
    (character) => character.nickname === nickname,
  );
  // console.log(user);
  if (!foundCharacter) {
    return response.json(`${nickname} 캐릭터를 찾지 못했습니다.`);
  }
  //

  return response.json(foundCharacter);
});
//users 내보내기
export default router;
//
//[
//   {
//     id: 'abc',
//     password: '1234',
//     character: { nickname: '마법사', level: 1 }
//   }
//]

// const obj = {};

// console.log(obj.character); // undefined

// obj.character = { nickname: '마법사', level: 1 };

// console.log(obj.character); // { nickname: '마법사', level: 1 }

// const arr = [1, 2, 3, 4, 5];

// const result = arr.filter(function(item){
//   return item!==3;
// })
// /routes/item.js
import express from 'express';
import charactersInfo from './character.js';
// import { users } from './account.js';

const router = express.Router();

// 1. item 생성 , post
// 2. 수정(가격은 수정x), updateItem put
// 3. (아이템 코드, 아이템 명, 아이템 가격) 내용만 조회
const items = [];
// const item = {item_code, item_name, item_stat, item_price};
router.post('/makeItem', (request, response) => {
  const { item_code, item_name, item_stat, item_price } = request.body;
  items.push({ item_code, item_name, item_stat, item_price });
  return response.json({ items });
});

// 수정 완료
router.put('/editItem', (request, response) => {
  const { item_code, item_name, item_stat } = request.body;
  const item = items.find((item) => item.item_code === item_code);

  if (item) {
    item.item_name = item_name; // 이름 업데이트
    item.item_stat = item_stat; // 상태 업데이트
  }
  return response.json({ items });
});

router.get('/itemCheck', (request, response) => {
  const { item_code } = request.query;
  const item = items.find((item) => item.item_code === item_code);
  // console.log('//////////////////////////////');
  // console.log(item);
  // console.log(+item);
  if (!item) {
    return response.json('정보가 잘못 입력되었습니다.');
  }
  return response.json({ item });
});
export default router;

 

다시 와서 보게 될 때 보다 더 코드를 잘 볼 수 있는 내가 있길..!