나도선배 NadoSunbae - Server
![nadosunbae](https://user-images.githubusercontent.com/58043306/150548239-bddd3d54-a790-4cab-bc89-6f52cffa2c2b.png)
제2전공생을 위한 학과 후기, 전공 정보 공유 플랫폼 "나도선배"
아는 선배 없어도 괜찮아. 우리 같이 서로의 선배가 되어주자!
나도선배는 후기와 과방 탭을 통해 인적 네트워크를 제공합니다.
SOPT 29th APPJAM
프로젝트 기간: 2021.12.18 ~
릴리즈: 2022.03
🌲 Menu Tree
📋 IA
📚 API 명세서
명세서 보기
📌 Branch Strategy
Git Workflow
```
1. local - feature에서 각자 기능 작업
2. 작업 완료 후 remote - develop에 PR
3. 코드 리뷰 후 Confirm 받고 Merge
4. remote - develop 에 Merge 될 때 마다 모든 팀원 remote - develop pull 받아 최신 상태 유지
```
Branch Name |
설명 |
main |
초기 세팅 존재 |
develop |
모든 기능 merge 브랜치 |
juhyeon |
주현 로컬 브랜치 |
eunji |
은지 로컬 브랜치 |
seol |
지원 로컬 브랜치 |
localdevelop_feature/#issue |
각자 기능 추가 브랜치 |
📌 Conventions
Commit Convention
* **[태그] 내용** 의 형태로 작성
ex) [FEAT] implement postGET
| 태그 이름| 설명 |
| :--: | :-----: |
| CHORE | 빌드 태스트 업데이트, 패키지 매니저를 설정하는 경우(프로덕션 코드 변경 X) |
| FEAT | 새로운 기능을 추가하는 경우 |
| !HOTFIX | 급하게 치명적인 버그를 고쳐야하는 경우 |
| FIX | 버그, 오류 해결 |
| STYLE | 코드 포맷 변경, 세미 콜론 누락, 코드 수정이 없는 경우 |
| DELETE | 쓸모없는 코드 삭제 |
| DOCS | README나 WIKI 등의 문서 개정 |
| MOVE | 프로젝트 내 파일이나 코드의 이동 |
| RENAME | 파일 이름 변경 |
| REFACTOR | 프로덕션 코드 리팩토링 |
| COMMENT | 필요한 주석 추가 및 변경 |
| TEST | 테스트 추가, 테스트 리팩토링(프로덕션 코드 변경 X)
Issue, PR Convention
* 변수나 폴더명은 영어로 쓰되, 설명은 한글로 작성
* Issue
* [영어 대문자] 내용
* PR
* [영어 대문자] #이슈 번호 - 해당 이슈 내용
* 이슈와 내용이 동일할 필요는 없음
* 이슈 번호는 동일 해야 함
Coding Convention
* 변수명
* Camel Case 사용
* 함수의 경우 동사+명사 사용 ex) getInformation()
* 길이는 20자로 제한
* flag로 사용 되는 변수는 조동사 + flag 종류로 구성
* 약어는 되도록 사용하지 않는다.
* 주석
* 한줄 주석은 // 를 사용한다.
* 그 이상은 /** */ 를 사용한다.
* 함수 설명 주석은 2번을 사용한다.
* Bracket
``` javascript
// 한줄 if 문 - 여러 줄로 작성
if(trigger) {
return;
}
```
``` javascript
// 괄호 사용 한칸 띄우고 사용한다.
if (left == true) {
return;
}
```
``` javascript
// 띄어쓰기
if (a == 5) { // 양쪽 사이로 띄어쓰기
return;
}
```
* 비동기 함수의 사용
* async, await 함수 사용을 지향한다.
* Promise 사용은 지양한다.
🗂 Foldering
펼쳐보기
```markdown
|-📋 firebaserc
|-📋 firebase.json
|-📋 .gitignore
|-📁 functions_
|- 📋 index.js
|- 📋 package.json
|- 📋 .gitignore
|- 📋 .env
|- 📁 api_
| |- 📋 index.js
| |- 📁 routes_
| |- 📋 index.js
|
|- 📁 config_
| |- 📋 dbConfig.js
| |- 📋 firebaseClient.js
|
|- 📁 constants_
| |- 📋 appVersion.js
| |- 📋 jwt.js
| |- 📋 notificationType.js
| |- 📋 postType.js
| |- 📋 reportPeriodType.js
| |- 📋 reportType.js
| |- 📋 responseMessage.js
| |- 📋 reviewPostContent.js
| |- 📋 statusCode.js
|
|- 📁 db_
| |- 📋 db.js
| |- 📋 index.js
| |- 📋 block.js
| |- 📋 classroomPost.js
| |- 📋 comment.js
| |- 📋 image.js
| |- 📋 like.js
| |- 📋 major.js
| |- 📋 notification.js
| |- 📋 relationReviewPostTag.js
| |- 📋 report.js
| |- 📋 reviewPost.js
| |- 📋 tag.js
| |- 📋 university.js
| |- 📋 user.js
|
|- 📁 lib_
| |- 📋 convertSnakeToCamel.js
| |- 📋 dateHandlers.js
| |- 📋 jwtHandlers.js
| |- 📋 pushAlarmHandlers.js
| |- 📋 util.js
|
|- 📁 middlewares_
|- 📋 auth.js
|- 📋 slackAPI.js
```
⚙️ Dependencies Module
펼쳐보기
```
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"lint": "eslint .",
"serve": "cross-env NODE_ENV=development firebase emulators:start --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "cross-env NODE_ENV=production firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "16"
},
"main": "index.js",
"dependencies": {
"axios": "^0.25.0",
"cookie-parser": "^1.4.6",
"cors": "^2.8.5",
"dayjs": "^1.10.7",
"dotenv": "^10.0.0",
"eslint-config-prettier": "^8.3.0",
"express": "^4.17.2",
"firebase": "^9.6.2",
"firebase-admin": "^9.8.0",
"firebase-functions": "^3.18.1",
"floor": "^0.0.0",
"helmet": "^5.0.1",
"hpp": "^0.2.3",
"jsonwebtoken": "^8.5.1",
"lodash": "^4.17.21",
"math-random": "^2.0.1",
"pg": "^8.7.1"
},
"devDependencies": {
"eslint": "^7.6.0",
"eslint-config-google": "^0.14.0",
"firebase-functions-test": "^0.2.0"
},
"private": true
}
```
🧩 Role
Name |
Role |
juhyeon |
DB 설계, API 명세서 작성, API 구현, README 작성 |
eunji |
DB 설계, API 명세서 작성, API 구현, 자동 테스트 환경 구축 |
seol |
DB 설계, API 명세서 작성, 초기 세팅, API 구현 |
👩🏻💻 Developers