Skip to content

TeamHavit/Havit-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Havit-Server

기억하고 싶은 모든 콘텐츠를 내 손 안에, HAVIT

Playstore 에서 다운 받기
Appstore 에서 다운 받기

HAVIT.mp4

해빗표지2

쉽고 빠르게 콘텐츠를 저장하고 카테고라이징하며
지식을 놓치지 않도록 리마인드 해줄 수 있는 지식 아카이빙 앱
해빗이 여러분의 성장과 함께 합니다.

SOPT 29th APPJAM

프로젝트 기간: 2022.01.02 ~ 2022.01.22

✅ 서비스 핵심 기능

1. Saving Process

나에게 유용한 콘텐츠를 낮은 뎁스로 간단하게 저장할 수 있습니다.
iOS의 Share Extension, Android의 Intent Filter를 사용하여 홈 화면으로 나가서 앱을 키지 않아도, 콘텐츠를 보다가 사용자가 원하는 카테고리에 저장할 수 있습니다.

2. Category

사용자가 카테고리를 직접 생성하며, 콘텐츠를 원하는대로 카테고라이징 할 수 있습니다. 카테고리는 여러 분야에서 적용 가능한 15개의 3D 아이콘을 제공합니다.

3. Contents

사용자가 저장한 콘텐츠를 잊지 않도록 도와줍니다. 저장 과정에서 기억하기 쉬운 제목으로 수정 가능하고, 저장한 콘텐츠는 직접 지정한 시간에 알림 받을 수 있습니다.

📋 IA

image

⚙️ Server Architecture

해빗앱서버아키텍쳐

🛠 Development Environment

📁 Foldering


📁 functions _ 
            |_ 📁 api _ 
            |         |_ 📋 index.js
            |         |_ 📁 routes _
            |                      |_ 📋 index.js
            |			   |_ 📁 user
            |                      |_ 📁 content           
            |                      |_ 📁 category
	    |                      |_ 📁 recommendation
            |
            |_ 📁 constants _ 
            |               |_ 📋responseMessage.js
            |               |_ 📋 statusCode.js
            |
            |_ 📁 lib _ 
            |	      |_ 📋 util.js
	    |         |_ 📋 convertSnakeToCamel.js
	    |         |_ 📋 jwtHandlers.js 
	    |
	    |_ 📁 config _ 
            |	        |_ 📋 dbConfig.js
	    |
	    |
	    |_ 📁 middlewares _
	    |                |_ 📋 auth.js
	    |                |_ 📋 slackAPI.js
	    |           
            |
            |_ 📁 db _
                      |_ 📋 index.js
                      |_ 📋 db.js
                      |_ 📋 user.js
                      |_ 📋 category.js
		      |_ 📋 content.js
		      |_ 📋 categoryContent.js
		      |_ 📋 recommendation.js

📌 Dependencies Module

{
  "dependencies": {
    "axios": "^0.24.0",
    "busboy": "^0.3.1",
    "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-admin": "^9.8.0",
    "firebase-functions": "^3.14.1",
    "helmet": "^5.0.1",
    "hpp": "^0.2.3",
    "jsonwebtoken": "^8.5.1",
    "lodash": "^4.17.21",
    "open-graph-scraper": "^4.11.0",
    "pg": "^8.7.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "eslint": "^7.6.0",
    "eslint-config-google": "^0.14.0",
    "firebase-functions-test": "^0.2.0",
    "mocha": "^9.1.4",
    "supertest": "^6.2.2"
  }
}

📌 담당 API 및 구현 진척도

기능명 담당자 완료 여부
카카오 로그인 주효식 앱잼 내 구현 X
마이페이지 조회 주효식
스크랩 주효식
콘텐츠 생성 주효식
콘텐츠 조회 여부 토글 주효식
전체 콘텐츠 조회 주효식
전체 콘텐츠 검색 주효식
콘텐츠 카테고리 이동 주효식
최근 저장 콘텐츠 조회 주효식
봐야 하는 콘텐츠 조회 주효식
콘텐츠 삭제 주효식
콘텐츠 제목 변경 주효식
카테고리 아이콘 이미지 조회 주효식
카테고리 순서 변경 주효식
추천 사이트 조회 채정아
카테고리 전체 조회 채정아
카테고리 생성 채정아
카테고리 수정 채정아
카테고리 삭제 채정아
카테고리 별 콘텐츠 조회 채정아
카테고리 이름 조회 채정아
카테고리 별 콘텐츠 검색 채정아 앱잼 내 구현 X
알림 전체 조회 채정아 앱잼 내 구현 X

FCM-Push-Server Gihub Link

기능명 담당자 완료 여부
유저 등록 채정아
알림 생성 채정아
알림 수정 채정아

📌 Mocha API 유닛 테스트

결과 보고서

📌 Branch Strategy

Git Workflow
 1. local - feature에서 각자 기능 작업
 2. 작업 완료 후 local - develop (ex. jobchae) 에 PR 후 Merge
 3. 이후 remote - develop 으로 PR
 4. 코드 리뷰 후 Confirm 받고 Merge
 5. remote - develop 에 Merge 될 때 마다 모든 팀원 remote - develop pull 받아 최신 상태 유지
Branch Name 설명
main 초기 세팅 존재
develop 로컬 develop merge 브랜치
philip 효식 로컬 develop 브랜치
jobchae 정아 로컬 develop 브랜치
localdevelop_#issue 각자 기능 추가 브랜치

📌 Commit Convention

[TAG] 메시지
태그 이름 설명
[CHORE] 코드 수정, 내부 파일 수정
[FEAT] 새로운 기능 구현
[ADD] FEAT 이외의 부수적인 코드 추가, 라이브러리 추가, 새로운 파일 생성
[HOTFIX] issue나 QA에서 급한 버그 수정에 사용
[FIX] 버그, 오류 해결
[DEL] 쓸모 없는 코드 삭제
[DOCS] README나 WIKI 등의 문서 개정
[CORRECT] 주로 문법의 오류나 타입의 변경, 이름 변경에 사용
[MOVE] 프로젝트 내 파일이나 코드의 이동
[RENAME] 파일 이름 변경이 있을 때 사용
[IMPROVE] 향상이 있을 때 사용
[REFACTOR] 전면 수정이 있을 때 사용

📌 Coding Convention

변수명
  1. Camel Case 사용
  • lower Camel Case
  1. 함수의 경우 동사+명사 사용
  • ex) getInformation()
  1. flag로 사용 되는 변수는 조동사 + flag 종류로 구성
  • ex) isNum
  1. 약어는 되도록 사용하지 않는다.
  • 부득이하게 약어가 필요하다고 판단되는 경우 팀원과 상의를 거친다.
주석
  1. 한줄 주석은 // 를 사용한다.
  // 한줄 주석일 때
  /**
  * 여러줄
  * 주석일 때
  */
  1. 함수에 대한 주석
  /**
  * api get /travel/:groupNumber
  * 그룹 여행 정보 가져오기
  1. Bracket 사용 시 내부에 주석을 작성한다.
  if (a === 5) {
    // 주석
  }
Bracket
  1. 한줄 if 문은 여러 줄로 작성한다.
// 한줄 if 문 - 여러 줄로 작성
 if(trigger) {
   return;
 }
  1. 괄호는 한칸 띄우고 사용한다.
// 괄호 사용 한칸 띄우고 사용한다.
 if (left === true) {
    return;
 }
  1. Bracket 양쪽 사이를 띄어서 사용한다.
// 띄어쓰기
 if (a === 5) { // 양쪽 사이로 띄어쓰기
    return;  
 }
비동기 함수의 사용
  1. async, await 함수 사용을 지향한다.
  2. Promise 사용은 지양한다.
  3. 다만 로직을 짜는 데 있어 promise를 불가피하게 사용할 경우, 주석으로 표시하고 commit에 그 이유를 작성한다.

👩🏻‍💻 Developers

주효식 채정아
HYOSITIVE jokj624