/02-PayHere-wanted-D

페이히어 과제(가계부 REST API 제작)

Primary LanguageTypeScript

2주차: PayHere 기업과제

RUN

$ git clone https://github.com/3rd-wanted-pre-onboarding-team-D/02-PayHere-wanted-D.git
$ cd 02-PayHere-wanted-D
$ npm i
$ npm run start

환경변수 설정

# mysql
DB_HOST=
DB_USERNAME=
DB_PASSWORD=
DB_DATABASE=

# jwt
JWT_ACCESS_TOKEN_SECRET=
JWT_ACCESS_TOKEN_EXPIRATION_TIME=
JWT_REFRESH_TOKEN_SECRET=
JWT_REFRESH_TOKEN_EXPIRATION_TIME=

API 명세 문서

요구사항 분석

  1. 고객은 이메일과 비밀번호 입력을 통해서 회원 가입을 할 수 있습니다.

    • 유저는 이메일과 비밀번호 속성을 가진다.
    • 중복 회원 가입은 할 수 없다.
    • 비밀번호는 보안을 위해 해싱해서 저장한다.
    • 비밀번호는 문자, 숫자, 특수문자를 최소 한 개 포함하며 최소 8글자에서 최대 16글자이다.
  2. 고객은 회원 가입이후, 로그인과 로그아웃을 할 수 있습니다.

    • 이미 회원 가입된 유저만 로그인 할 수 있다.
    • 이메일과 비밀번호가 같은 유저만 로그인 할 수 있다.
    • 로그인에 성공하면 유저에게 토큰 모듈을 통해 토큰을 발급한다.
    • 로그인한 유저만 로그아웃 할 수 있다.
    • 로그아웃에 성공하면 유저의 리프레시 토큰을 삭제한다.
  3. 가계부에 오늘 사용한 돈의 금액과 관련된 메모를 남길 수 있습니다.

    • 로그인 후 지출, 수입, 날짜, 내용을 입력하여 메모를 작성할 수 있습니다.
  4. 가계부에서 수정을 원하는 내역은 금액과 메모를 수정 할 수 있습니다.

    • PUT /financial-ledgers/:id 를 통해 수입, 지출, 메모 정보를 수정할 수 있다.
  5. 가계부에서 삭제를 원하는 내역은 삭제 할 수 있습니다.

  6. 삭제한 내역은 언제든지 다시 복구 할 수 있어야 한다.

    • 삭제한 내역은 복구할 수 있어야 하므로 실제 데이터를 삭제하지 않고 soft delete가 필요하다.
    • deletedAt 컬럼을 사용해 삭제여부 확인 및 삭제 날짜를 알 수 있다.
    • PUT /financial-ledgers/:id/cancellation 가계부 삭제
    • PUT /financial-ledgers/:id/restoration 삭제된 가계부 복구
  7. 가계부에서 이제까지 기록한 가계부 리스트를 볼 수 있습니다.

    • GET /financial-ledgers 본인이 작성한 가계부 내역을 일자별로 확인할 수 있다.
    • 삭제한 메모는 볼 수 없다.
    • 날짜 (date) - 하루단위
      • 사용금액 (money)
      • 리스트 (memolist)
        • 글번호 (id)
        • 지출 (expenditure)
        • 수입 (income)
        • 내용 (remarks)
  8. 가계부에서 상세한 세부 내역을 볼 수 있습니다.

    • GET /financial-ledgers/:id 입력한 아이디를 가진 가계부 내역을 확인할 수 있다.
    • 삭제한 메모는 볼 수 없다.
  9. 로그인하지 않은 고객은 가계부 내역에 대한 접근 제한 처리가 되어야 합니다.

    • 401 Unauthorized 로 로그인을 하지 않은 경우 접근이 제한된다.
  10. 설치되어 있는 os, node 버전에 상관없이 Docker를 기반으로 서버를 실행

    • docker-compose를 통해 mysql을 설치하여 CI를 구성한다.
    • docker image와 container를 통해 CD를 구성한다.

ERD

DFD

Auth Flow

스크린샷 2022-07-08 오후 9 50 15

CICD

cicd

팀원별 역할

  • 프로젝트 세팅 및 배포 자동화
    • 담당: @khsexk
    • NestJS 프로젝트 세팅, DevOps
  • JWT 토큰 인증 및 사용자 인증 처리
    • 담당: @YongsHub
    • 토큰 모듈 제작 및 테스트
    • User Login시, Access Token 및 Refresh Token 발급
    • Refresh Token 암호화 하여 Database에 저장
    • Access Token 만료시 Database에 있는 Refresh Token 비교 후, 재발급
    • User Logout시, Refresh Token Delete
  • 고객 회원가입, 로그인, 로그아웃 기능 구현
    • 담당: @JuyeopJang
    • 유저 모듈 제작 및 테스트
  • 가계부 생성 및 조회 기능 구현
    • 담당: @reumachoi
    • 가계부 모듈 (작성, 세부내역조회, 리스트조회) 제작 및 테스트
  • 가계부 수정 및 삭제 기능 구현
    • 담당: @username1103
    • 가계부 모듈 (수정, 삭제, 복구) 제작 및 테스트