Skip to content

eojjeoda-nest/nest-attendance-batch-5

Repository files navigation

미션 - 출석 체크 랭킹 배치 구현

🎯 서버 세팅 방식

  • setup.sh 스크립트를 실행하여 서버를 세팅한다.
  • setup.sh 스크립트는 다음과 같은 작업을 수행한다.
    • orm typeorm, prisma, 패키지 매니저 npm, yarn, pnpm 선택
    • npm install | yarn | pnpm install 실행
./setup.sh

🔍 진행 방식

  • 미션은 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항 세 가지로 구성되어 있다.
  • 세 개의 요구 사항을 만족하기 위해 노력한다. 특히 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋 하는 방식으로 진행한다.
  • 기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다.
  • 지난 주 미션에서 구현한 코드에 추가적으로 이어서 구현해야한다.

📮 미션 제출 방법

  • 미션 구현을 완료한 후 GitHub PR 요청을 통해 제출합니다.

테스트 실행 가이드

  • 터미널에서 npm run test 명령을 실행하여 모든 테스트가 아래와 같이 통과하는지 확인한다.
Ran all test suites.

🚀 기능 요구 사항

출석 체크 랭킹 API/배치를 구현한다.

총 1개의 API 엔드포인트로 구성한다.

  • 출석 체크 랭킹 조회 API

API의 기능 요구 사항은 다음과 같다.

  • 조회하는 날짜 기준으로 1달 기준 출석체크 랭킹을 조회할 수 있어야한다.
ex) 2024-01-05일 기준으로 랭킹 조회시, 
2023-12-05 ~ 2024-01-05 기간 동안 랭킹을 조회한다.
  • 해당 날짜의 랭킹 데이터가 없는 경우, 현재 날짜 기준으로 제일 출석 많이한 학생순으로 조회한다.

출석 랭킹 산정 기준

  1. 1달 단위로 출석 상태인 출석 체크 기록이 제일 많은 학생 순으로 랭킹을 산정한다.
  2. 1달 기준으로 출석 상태인 출석 체크 기록 갯수가 동일한 학생들이 있는 경우, 공동 랭킹으로 처리하여 저장한다.
ex) 1달 기준으로 출석 체크 기록이 30개인 학생이 3명이 있는 경우, 
1등 3명, 4등 1명, 5등 1명...순으로 랭킹 데이터를 처리한다.

공통 필수 예외처리 사항

  • API에 요청받은 Body 값의 타입을 검증하여 올바르지 않은 타입일 경우 400 BadRequest 에러를 리턴해야한다.
  • API에 요청받은 Body 값의 필수 값이 누락되거나/빈 값인 경우 400 BadRequest 에러를 리턴해야한다.

API 요청/응답 요구 사항

  1. 모든 API의 요청/응답은 DTO를 통해 TypeSafe하게 이루어져야한다.
  2. DTO의 타입은 class-validator를 이용하여 검증한다.
  3. DTO 내부 요소의 명칭은 camelCase로 작성한다.

요청

  • 출석 랭킹 조회시 Pagination을 지원한다.
page : 1
limit : 10
  • 출석 상태는 string 타입이며, 출석, 지각, 결석 중 하나의 값이다.
status : 'LATE';

응답

  • 정상적으로 랭킹 조회시 랭킹 목록을 응답한다
 {
  "data" : [
    {
      "id": 1,
      "ranking": 1,
      "userId" : 1,
      "user": {
          "id": 1,
          "name": "어쩌다",
          "department": "컴퓨터 공학과",
          "studentId": "32201234"
      }
    },
    {
      "id": 2,
      "ranking": 1,
      "userId" : 2,
      "user": {
          "id": 2,
          "name": "오늘도",
          "department": "컴퓨터 공학과",
          "studentId": "32201235"
      }
    },
    {
      "id": 3,
      "ranking": 3,
      "userId" : 3,
      "user": {
          "id": 3,
          "name": "네스트",
          "department": "소프트웨어 공학과",
          "studentId": "32201236"
      }
    }
  ],
  "page" : 1,
  "totalPage" : 1,
  "limit" : 10
 }

🎯 프로그래밍 요구 사항

  • Javascript 코드가 아닌 Typescript 코드로만 구현해야 한다.

  • Swagger를 이용하여 API 명세를 작성한다.

  • package.json에 명시된 라이브러리만을 이용하여 구현한다.

  • eslint, prettier 등의 코드 포맷팅 라이브러리를 이용하여 제공된 코드 컨벤션에 맞추어 코드를 작성한다.

  • node, npm 버전은 package.json에 명시된 버전을 사용한다. Volta를 이용하여 node 버전을 관리한다.

  • (선택 사항) API 구현이 완료되고, 유닛 테스트, E2E 테스트등 모든 테스트 코드를 작성하여 테스트를 통과하면 굿!


✏️ 과제 진행 요구 사항

  • 미션은 [미션레포](#{ 미션 레포 주소 }) 저장소를 Fork & Clone 하고 시작한다.
  • 기능을 구현하기 전 README.md에 구현할 기능/예외처리를 목록으로 정리해 추가한다.

About

출석 체크 랭킹 배치 구현 미션

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published