T.time은 협업에서 발생하는 다양한 감정들을 솔직하게 공유하며 나와 팀 함께 발전할 수는 없을까? 라는 고민에서 시작되었습니다. 다양한 질문을 통해 나와 팀의 감정을 살피고 건강한 팀 문화를 만들어가도록 돕는 서비스입니다. 🙂
강민재 | 임채영 |
---|---|
@m1njae | @cha2y0oung |
프로젝트 초기 세팅 DB 설계 API 구현 테스트 코드 작성 https 설정 |
AWS 세팅 DB 설계 API 구현 테스트 코드 작성 |
👉 API Docs
기능명 | 담당자 | 완료 여부 |
---|---|---|
초대장 생성 | 임채영 | ✅ |
초대장으로 팀 입장 | 강민재 | ✅ |
해피니스 체크 답변 받기 | 임채영 | ✅ |
개인 결과 뷰 조회 | 임채영 | ✅ |
팀 해피니스 체크 유무 | 강민재 | ✅ |
개인 해피니스 체크 완료 | 임채영 | ✅ |
팀 상세 결과 조회 | 강민재 | ✅ |
팀 결과 조회 | 강민재 | ✅ |
팀 결과 항목별 점수 조회 | 강민재 | ✅ |
팀 정보 조회 | 임채영 | ✅ |
변수명
- Camel Case 사용
- lower Camel Case
- 함수의 경우 동사+명사 사용
- ex) getInformation()
- flag로 사용 되는 변수는 조동사 + flag 종류로 구성
- ex) isNum
- 약어는 되도록 사용하지 않는다.
- 부득이하게 약어가 필요하다고 판단되는 경우 팀원과 상의를 거친다.
주석
- 한줄 주석은 // 를 사용한다.
// 한줄 주석일 때
/**
* 여러줄
* 주석일 때
*/
- 함수에 대한 주석
/**
* @route Method /Route
* @desc Function Description
* @access Public
*/
- Bracket 사용 시 내부에 주석을 작성한다.
if (a == 5) {
// 주석
}
Bracket
- 한줄 if 문은 여러 줄로 작성한다.
// 한줄 if 문 - 여러 줄로 작성
if (trigger) {
return;
}
- 괄호는 한칸 띄우고 사용한다.
// 괄호 사용 한칸 띄우고 사용한다.
if (left == true) {
return;
}
- Bracket 양쪽 사이를 띄어서 사용한다.
const { userId } = request.user;
비동기 함수의 사용
- async, await 함수 사용을 지향한다.
- Promise 사용은 지양한다.
- 다만 로직을 짜는 데 있어 promise를 불가피하게 사용할 경우, 주석으로 표시하고 commit에 그 이유를 작성한다.
태그 이름 | 설명 |
---|---|
chore | 코드 수정, 내부 파일 수정 |
feat | 새로운 기능 구현 |
add | FEAT 이외의 부수적인 코드 추가, 라이브러리 추가, 새로운 파일 생성 |
fix | 버그, 오류 해결 |
style | 코드에 관련 없는 주석 달기, 줄바꿈 |
docs | README나 WIKI 등의 문서 개정 |
Git Workflow
main → develop → feature_# / fix_#
feature, fix 이하 번호는 issue 번호에 맞게 생성
1. issue 생성
2. local - feature_# / fix_# 에서 각자 기능 작업
3. remote - feature_# / fix_# 에 Push
4. remote - develop 으로 PR
5. 코드 리뷰 후 Confirm 받고 remote - develop Merge
6. remote - develop 에 Merge 될 때 마다 모든 팀원 local - develop pull 받아 최신 상태 유지
Branch Name | 설명 |
---|---|
main | 초기 세팅 존재 |
develop | 구현 완료 브랜치 |
feature_/# | 이슈 별 기능 구현 브랜치 |
fix_/# | 이슈 별 픽스 브랜치 |
🗃️ 3-Layer Architecture 적용
📂T.TIME_SERVER
└── 📂prisma
├── schema.prisma
└── 📂src
├── 📂config
├── index.ts
├── 📂controller
├── chatController.ts
├── index.ts
├── resultController.ts
├── teamController.ts
├── 📂interfaces
├── DTO.ts
├── 📂middleware
├── 📂error
├── errorGenerator.ts
├── errorHandler.ts
├── errorValidator.ts
├── 📂modules
├── 📂constants
├── index.ts
├── responseMessage.ts
├── statusCode.ts
├── util.ts
├── makeTeamId.ts
├── returnToSlackMessage.ts
├── slackAPI.ts
├── 📂router
├── chatRouter.ts
├── index.ts
├── resultRouter.ts
├── teamRouter.ts
├── 📂service
├── chatService.ts
├── index.ts
├── resultService.ts
├── teamService.ts
├── index.ts
{
"name": "T-Time",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"dev": "nodemon",
"build": "tsc && node dist",
"prepare": "husky install",
"lint": "./node_modules/.bin/eslint .",
"prettier": "./node_modules/.bin/prettier .",
"test": "jest --silent --runInBand --detectOpenHandles --verbose --forceExit"
},
"dependencies": {
"@prisma/client": "^4.8.0",
"axios": "^1.2.2",
"babel-jest": "^29.3.1",
"cors": "^2.8.5",
"cross-env": "^7.0.3",
"dayjs": "^1.11.7",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"express-validator": "^6.14.2",
"jest": "^29.3.1",
"prisma": "^4.8.0",
"supertest": "^6.3.3"
},
"devDependencies": {
"@babel/core": "^7.20.12",
"@babel/preset-env": "^7.20.2",
"@types/cors": "^2.8.13",
"@types/express": "^4.17.15",
"@types/express-validator": "^3.0.0",
"@types/jest": "^29.2.5",
"@types/node": "^18.11.18",
"@types/supertest": "^2.0.12",
"@typescript-eslint/eslint-plugin": "^5.47.1",
"@typescript-eslint/parser": "^5.47.1",
"eslint": "^8.31.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.2.1",
"husky": "^8.0.0",
"nodemon": "^2.0.20",
"prettier": "^2.8.1",
"ts-jest": "^29.0.3",
"typescript": "^4.9.4"
}
}