/RecorDream-Server

레코드림은 베를린이야. 꿈쟁이들 마음에 치명적인 독일수도.

Primary LanguageTypeScript

💜RecorDream-Server

레코드림은 베를린이야. 꿈쟁이들 마음에 치명적인 독일수도. 🇩🇪


About

178281860-743ffefc-f92d-4b20-84ee-58904794afce



서비스 핵심 기능 소개

KakaoTalk_20220722_230635123_03



Collection 설계

디비설계



팀원 소개 및 역할 분담

황서경 추서연 김시연
@Seokyeong237 @ChooSeoyeon @ksiyeon27
DB 설계 DB 설계 DB 설계
API 명세서 작성 및 구현 API 명세서 작성 및 구현 API 명세서 작성 및 구현
프로젝트 세팅 리드미 작성


Branch 전략, Commit Convention

❗️ Git Workflow

main → develop → feature/이슈번호-기능, fix/이슈번호-기능, refactor/이슈번호-기능

  1. local - feature/이슈번호-기능 에서 각자 작업
  2. 작업 완료 후 remote - develop 에 PR
  3. 코드 리뷰 후 Confirm 받고 Merge
  4. remote - develop 에 Merge 될 때 마다 모든 팀원 remote - develop pull 받아 최신 상태 유지
❗️ Commit Convention
태그 이름 설명
[Feat] 새로운 기능 구현
[Fix] 버그, 오류 수정
[Hotfix] issue나 QA에서 급한 버그 수정
[Docs] 문서 수정
[Test] 테스트 코드 추가 및 업데이트
[Chore] 코드 수정, 내부 파일 수정
[Del] 불필요한 코드 삭제
[Refactor] 전면 수정
[Merge] 다른 브랜치를 merge 할 때 사용
[Add] Feat 이외의 부수적인 코드 추가, 라이브러리 추가, 새로운 파일 생성 시
[Rename] 파일 이름 변경 시 사용
[Move] 프로젝트 내 파일이나 코드의 이동


Code Convention

변수
  1. 변수나 함수명은 camelCase를 사용한다.
  2. 함수의 경우 동사+명사 사용한다.
  • ex) getRecords()
  1. flag로 사용 되는 변수는 조동사 + flag 종류로 구성한다.
  • ex) isDeleted
  1. Class / Interface / Type / Namespace / Enum 명은 PascalCase를 사용한다.
  2. 약어는 되도록 사용하지 않는다.
  • 부득이하게 약어가 필요하다고 판단되는 경우 팀원과 상의를 거친다.
주석 1. 한 줄 주석은 // 를 사용한다.
  // 한줄 주석일 때
  /**
  * 여러줄
  * 주석일 때
  */
  1. 컨트롤러에 대한 주석
/**
 * @route POST /record
 * @desc Create Record
 * @access Public
 */
Bracket


프로젝트 폴더 구조

---📁src
------📄index.ts
------📄app.ts
------📁tests
------📁config
---------📄agenda.ts
---------📄index.ts
---------📄multer.ts
---------📄s3Config.ts
---------📄firebase-admin.json
------📁controllers
---------📄index.ts
---------📄AuthController.ts
---------📄RecordController.ts
---------📄UserController.ts
---------📄VoiceController.ts
------📁interfaces
---------📁common
---------📁auth
---------📁record
---------📁user
---------📁voice
------📁loaders
---------📄db.ts
------📁models
---------📄Record.ts
---------📄User.ts
---------📄Voice.ts
---------📄VoiceMocking.ts
------📁modules
---------📄exceptionMessage.ts
---------📄jwtHandler.ts
---------📄pushMessage.ts
---------📄responseMessage.ts
---------📄returnToSlackMessage.ts
---------📄slackApI.ts
---------📄statusCode.ts
---------📄util.ts
------📁routes
---------📄index.ts
---------📄AuthRouter.ts
---------📄RecordRouter.ts
---------📄UserRouter.ts
---------📄VoiceRouter.ts
------📁services
---------📄index.ts
---------📄AuthService.ts
---------📄RecordService.ts
---------📄UserService.ts
---------📄VoiceService.ts


Dependency Module

{
  "name": "recordream-server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "nodemon",
    "build": "tsc",
    "test": "jest --detectOpenHandles --setupFiles dotenv/config --forceExit",
    "prepare": "husky install"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@types/express": "^4.17.13",
    "@types/jest": "^28.1.6",
    "@types/mongoose": "^5.11.97",
    "@types/multer": "^1.4.7",
    "@types/multer-s3": "^2.7.12",
    "@types/node": "^17.0.25",
    "@types/node-schedule": "^2.1.0",
    "@types/supertest": "^2.0.12",
    "@typescript-eslint/eslint-plugin": "^5.30.5",
    "@typescript-eslint/parser": "^5.30.5",
    "eslint": "^8.19.0",
    "eslint-config-prettier": "^8.5.0",
    "eslint-plugin-prettier": "^4.2.1",
    "husky": "^8.0.0",
    "jest": "^28.1.3",
    "nodemon": "^2.0.15",
    "prettier": "^2.7.1",
    "supertest": "^6.2.4",
    "ts-jest": "^28.0.7",
    "ts-node": "^10.7.0",
    "typescript": "^4.6.3"
  },
  "dependencies": {
    "@types/agenda": "^4.1.0",
    "aws-sdk": "^2.1171.0",
    "axios": "^0.27.2",
    "bcryptjs": "^2.4.3",
    "dayjs": "^1.11.3",
    "dotenv": "^16.0.1",
    "ejs": "^3.1.8",
    "express": "^4.18.1",
    "express-validator": "^6.14.2",
    "firebase-admin": "^11.0.0",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^6.4.3",
    "multer": "^1.4.5-lts.1",
    "multer-s3": "^2.10.0",
    "node-schedule": "^2.1.0",
    "slack-node": "^0.1.8"
  }
}



전체 API 로직 구현 진척도 및 담당자

기능 담당자 구현 여부
[PUT] 유저 닉네임 수정 황서경
[GET] 회원정보 조회 황서경
[PUT] 푸시알림 여부(토글) 변경 황서경
[POST] 음성녹음 업로드 김시연
[GET] 음성녹음 재생 김시연
[POST] 꿈 기록 작성 추서연
[GET] 꿈 기록 리스트 조회 (홈 뷰) 추서연
[GET] 꿈 기록 리스트 조회 (보관함 뷰) 추서연
[GET] 꿈 기록 조회 (상세보기 뷰) 김시연
[PATCH] 꿈 기록 일부 수정 김시연
[DELETE] 꿈 기록 삭제 김시연
[GET] 꿈 검색 추서연
[POST] 푸시알림 시간 설정 황서경
[PUT] 푸시알림 시간 수정 황서경
[PUT] 푸시알림 토큰 refresh 황서경


Architecture

architecture