[TIL] 24.09.09 MON

GDORI·2024년 9월 9일
0

TIL

목록 보기
36/79
post-thumbnail

[ 오늘 푼 알고리즘 코드카타 ]

150370. 개인정보 수집 유효기간
178871. 달리기 경주

CH3 개인과제 시작...

개발가이드

  1. 웹 프레임워크 사용 - Express
  2. 패키지 매너지 - Yarn
  3. 모듈 시스템 사용
  4. 데이터베이스 - AWS RDS
  5. ORM - Prisma

필수 기능

1. 인증 미들웨어 구현

  • Request Authrization 헤더에서 JWT 가져와서 인증 여부 확인
  • 클라이언트에서 JWT 쿠키로 전달하지 말 것
  • 오로지 Authrization 헤더에서만 전달
  • 인증 실패 시 Status Code , 에러메세지 전달
  • 인증 성공 시 req.locals.user 인증정보 respon
  • API JWT인증 필요 마킹부분 미들웨어 거칠 것

2. 데이터베이스 모델링

  • 아이템 테이블
  • 계정 테이블
  • 캐릭터 테이블 / 하나의 계정에는 여러 캐릭터 보유 가능
  • 캐릭터-인벤토리 테이블 / 캐릭터가 보유했으나 장착하지 않은 아이템 정보
  • 캐릭터-장비창 테이블 / 캐릭터 장착 아이템 정보

3. API 구현

  • 회원가입 API
    1) 비밀번호 해싱된 값 저장
    2) 아이디 중복 불가 및 영어 소문자 + 숫자 조합 구성
    3) 비밀번호 최소 6자 이상, 비밀번호 확인란과 일치
    4) 회원가입 성공 시 비밀번호를 제외 한 사용자 정보 반환

  • 로그인 API
    1) 아이디, 비밀번호로 로그인 요청
    2) 계정정보 불일치 시 Status Code, 에러메세지 반환 / 아이디 존재하지 않는 경우, 비밀번호 불일치
    3) 로그인 성공 시 액세스 토큰 생성 및 반환 / 액세스 토큰의 Payload에 로그인 계정 ID 삽입

  • 캐릭터 생성 API(JWT 인증 필요)
    1) 캐릭터명 request 전달받음, 생성 완료 시 response로 캐릭터 ID 반환
    2) 이미 존재하는 캐릭터명 생성 시도 시 생성 불가
    3) 캐릭터 기본스탯 health:500 / power:100 / money:10000 부여

  • 캐릭터 삭제 API(JWT 인증 필요)
    1) 삭제할 캐릭터 ID params로 전달받음
    2) 내가 보유한 캐릭터가 아닌 경우 삭제 불가

  • 캐릭터 상세 조회 API
    1) 조회할 캐릭터 ID params로 전달받음
    2) 캐릭터 이름, HP, 힘 스탯 반환
    3) 내 캐릭터를 조회할 때에는 게임머니까지 반환

  • 아이템 생성 API
    1) 아이템 코드, 아이템 명, 아이템 능력, 아이템 가격 request 전달 받아서 등록
    2) 아이템 능력은 JSON 포맷으로 전달받음

  • 아이템 수정 API
    1) 아이템 코드 params로 전달받음
    2) 아이템 명, 아이템 능력 request로 전달받음
    3) 아이템 가격은 수정 불가

  • 아이템 목록 조회 API
    1) 아이템 코드, 아이템 명, 아이템 가격 내용만 조회
    2) 아이템 생성 API를 통해 생성된 모든 아이템들이 목록으로 조회할 수 있어야 함

  • 아이템 상세 조회 API
    1) 아이템 코드를 params로 전달받아 아이템 코드, 능력, 가격을 조회

도전 기능은 필수를 완벽히 구현하고 정리하겠다...😁

DB 모델링 부분

요구사항에 맞는 DB

  • Users
  • Characters
  • Items
  • Inventories
  • Equips

Users

  • 유저는 아이디와 패스워드, 이름으로 계정을 생성할 수 있다.
  • 유저는 한 계정에 여러 캐릭터를 보유할 수 있다.

prisma model

model Users {
  userNo Int @id @default(autoincrement()) @map("userNo")
  userId String @unique @map("userId")
  userPw String @map("userPw")
  userName String @map("userName")

  Characters Characters[]

  @@map("Users")
}

Characters

  • 캐릭터는 캐릭터명으로만 생성이 가능하다.
  • 캐릭터는 생성 시 기본 체력과 힘, 머니를 가진다.
  • 캐릭터는 인벤토리와 장비창을 보유하고 있다.

prisma model

model Characters {
  characterNo Int @id @unique @default(autoincrement())
  userNo Int
  characterName String @unique
  health Int @default(500)
  power Int @default(100)
  money Int @default(10000)

  user Users @relation(fields: [userNo], references: [userNo], onDelete: Cascade)
  inventory Inventories?
  equip Equips?

  @@map("Characters")
}

Items

  • 아이템 테이블은 이름, 스탯, 가격으로 구성되어 있다.
  • inventories, equips와 n:m 구조로 이루어져 있다.
    라고 하려했으나 여러 고민 끝에 그냥 관계없이 가기로 했다.
    계정 귀속, n:m으로 만들었다가 그냥 지웠다.
    API로 인벤토리에 넣을 예정이다.

prisma model

model Items {
  itemNo Int @id @default(autoincrement())
  itemName String
  itemStat Json
  itemPrice Int

  @@map("Items")
}

Inventories

  • 인벤토리 번호는 캐릭터 번호를 따른다.(고유)
  • 아이템 목록은 JSON 객체에 담는다.

prisma model

model Inventories {
  inventoryNo Int @id @unique
  items Json 
  character Characters @relation(fields: [inventoryNo], references: [characterNo])

  @@map("Inventories")
}

Equips

  • 장비창은 인벤토리와 같다

prisma model

model Equips {
  equipNo Int @id @unique
  items Json 
  character Characters @relation(fields: [equipNo], references: [characterNo])

  @@map("Equips")
}
profile
하루 최소 1시간이라도 공부하자..

0개의 댓글