Skip to content

협업성향테스트 기반 IT 사이드 프로젝트 팀 매칭 서비스, 팀블

Notifications You must be signed in to change notification settings

MoonGyu1/Teamble-Server

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


서로 다른 색의 우리가 만나는 공간, 팀블 💜


# 우리_팀블하자!

KakaoTalk_20220107_191904466

22.01.02 ~ 22.01.22 - SOPT 29th APPJAM



Main Service

1. 협업 성향 테스트

image 👉 협업 성향 테스트를 통해 나의 협업 유형을 알아보고, 태그에 등록하여 나와 잘 맞는 팀원들을 찾아보자

2. 마이 프로필 설정

image 👉 협업 성향 태그와 관심 프로젝트 분야, 협업 포지션 설정과 자기소개 글을 통해 나를 표현하자

3. 프로젝트 팀 만들기

image 👉 모집 포지션, 선호 협업 성향 및 프로젝트 분야 태그 등을 선택해 나와 잘 맞는 팀원들을 구해보자

4. 키워드 태그 필터 검색 (프로젝트 & 팀원)

image image 👉 키워드 태그 필터 검색을 통해 나와 잘 맞는 프로젝트와 팀원을 찾아보자

5. 콕 찌르기

image 👉 콕 찌르기를 통해 함께 하고 싶은 프로젝트 팀원에게 관심을 표현해 보자




Developers

박현지 문규원
dingding-21 MoonGyu1

Role

이름 역할
박현지 초기 환경 세팅, 데이터베이스 설계, API 명세서 작성 및 구현
문규원 README 작성, 데이터베이스 설계, API 명세서 작성 및 구현

IA

워너비팀 IA


Git Workflow

maindevelopname_feature/#issue

Click!

main은 모든 작업이 끝난 후 develop에서 Merge 시킨다.

—————————————————————————

  • main - 초기 세팅 존재

  • develop - local 작업 완료 후 Merge 브랜치

  • name_feature/#issue - 각자의 기능 추가 브랜치

    ex) gyuwon_login/#1

—————————————————————————

  1. 각 기능이 추가될 때마다 Issue 및 Branch 생성
  2. local - name_feature/#issue 에서 각자 기능 작업
  3. 작업 완료 후 remote - develop 에 Pull Request
  4. 코드 리뷰 후 Confirm 받고 Merge
  5. remote - develop 에 Merge 될 때 마다 모든 팀원 remote - develop pull 받아 최신 상태 유지

Commit Message Convention

Click!

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

Coding Convention

Click!

명명규칙(Naming Conventions)


  1. 이름으로부터 의도가 읽혀질 수 있게 쓴다.
  • ex)

    // bad
    function q() {
      // ...stuff...
    }
    
    // good
    function query() {
      // ..stuff..
    }

  1. 오브젝트, 함수, 그리고 인스턴스에는 camelCase를 사용한다.
  • ex)

    // bad
    const OBJEcttsssss = {};
    const this_is_my_object = {};
    function c() {}
    
    // good
    const thisIsMyObject = {};
    function thisIsMyFunction() {}

  1. 클래스나 constructor에는 PascalCase를 사용한다.
  • ex)

    // bad
    function user(options) {
      this.name = options.name;
    }
    
    const bad = new user({
      name: 'nope',
    });
    
    // good
    class User {
      constructor(options) {
        this.name = options.name;
      }
    }
    
    const good = new User({
      name: 'yup',
    });

  1. 함수 이름은 동사 - 명사 형태로 작성한다. ex) postUserInformation( )
  2. 약어 사용은 최대한 지양한다.

참조(References)


  1. 모든 참조는 const를 사용하고, var는 사용하지 않는다.

  2. 참조를 재할당 해야한다면 var대신 let을 사용한다.

    이때, constlet블록스코프임을 유의


블록(Blocks)


  1. 복수행의 블록에는 중괄호({})를 사용한다.
  • ex)

    // bad
    if (test)
      return false;
    
    // good
    if (test) return false;
    
    // good
    if (test) {
      return false;
    }
    
    // bad
    function() { return false; }
    
    // good
    function() {
      return false;
    }

  1. 복수행 블록의 ifelse 를 이용하는 경우 elseif 블록 끝의 중괄호(})와 같은 행에 위치시킨다.
  • ex)

    // bad
    if (test) {
      thing1();
      thing2();
    } else {
      thing3();
    }
    
    // good
    if (test) {
      thing1();
      thing2();
    } else {
      thing3();
    }

코멘트(Comments)


  1. 복수형의 코멘트는 /** ... */ 를 사용한다.
  • ex)

    // good
    /**
     * @param {String} tag
     * @return {Element} element
     */
    function make(tag) {
      // ...stuff...
    
      return element;
    }

  1. 단일행의 코멘트에는 // 을 사용하고 코멘트를 추가하고 싶은 코드의 상부에 배치한다. 그리고 코멘트의 앞에 빈행을 넣는다.
  • ex)

    // bad
    const active = true; // is current tab
    
    // good
    // is current tab
    const active = true;
    
    // good
    function getType() {
      console.log('fetching type...');
    
      // set the default type to 'no type'
      const type = this._type || 'no type';
    
      return type;
    }

공백(Whitespace)


  1. 주요 중괄호({}) 앞에는 스페이스 1개를 넣는다.
  • ex)

    // bad
    function test() {
      console.log('test');
    }
    
    // good
    function test() {
      console.log('test');
    }

  1. 제어구문 (if 문이나 while 문 등) 의 소괄호 (()) 앞에는 스페이스를 1개 넣고 함수 선언이나 함수 호출시 인수 리스트의 앞에는 스페이스를 넣지 않는다.
  • ex)

    // bad
    if (isJedi) {
      fight();
    }
    
    // good
    if (isJedi) {
      fight();
    }
    
    // bad
    function fight() {
      console.log('Swooosh!');
    }
    
    // good
    function fight() {
      console.log('Swooosh!');
    }

  1. 연산자 사이에는 스페이스를 넣는다.
  • ex)

    // bad
    const x = y + 5;
    
    // good
    const x = y + 5;

콤마(Commas)


  1. 선두의 콤마 BAD
  • ex)

    // bad
    const story = [once, upon, aTime];
    
    // good
    const story = [once, upon, aTime];

  1. 끝의 콤마 GOOD
  • ex)

    // bad
    const hero = {
      firstName: 'Dana',
      lastName: 'Scully',
    };
    
    // good
    const hero = {
      firstName: 'Dana',
      lastName: 'Scully',
    };

세미콜론(Seminolons)


  1. 세미콜론을 사용한다.
  • ex)
    // bad
    (function () {
      const name = 'Skywalker';
      return name;
    })()(
      // good
      () => {
        const name = 'Skywalker';
        return name;
      }
    )();

문자열(Strings)


  1. 문자열에는 싱크쿼트 '' 를 사용한다.
  • ex)

    ```jsx
    // bad
    const name = "Capt. Janeway";
    
    // good
    const name = 'Capt. Janeway';
    ```
    

  1. 프로그램에서 문자열을 생성하는 경우는 문자열 연결이 아닌 template strings를 이용한다.
  • ex)

    // bad
    function sayHi(name) {
      return 'How are you, ' + name + '?';
    }
    
    // bad
    function sayHi(name) {
      return ['How are you, ', name, '?'].join();
    }
    
    // good
    function sayHi(name) {
      return `How are you, ${name}?`;
    }

함수(Functions)


  1. 화살표 함수를 사용한다.
  • ex)

      ```jsx
      var arr1 = [1, 2, 3];
      var pow1 = arr.map(function (x) { // ES5 Not Good
        return x * x;
      });
    
      const arr2 = [1, 2, 3];
      const pow2 = arr.map(x => x * x); // ES6 Good
      ```
    

  1. 함수식보다 함수 선언을 이용한다.
  • ex)

      ```jsx
      // bad
      const foo = function () {
      };
    
      // good
      function foo() {
      }
      ```
    

조건식과 등가식(Comparison Operators & Equality)


  1. == 이나 != 보다 ===!== 을 사용한다.

  1. 단축형을 사용한다.
  • ex)

    // bad
    if (name !== '') {
      // ...stuff...
    }
    
    // good
    if (name) {
      // ...stuff...
    }
    
    // bad
    if (collection.length > 0) {
      // ...stuff...
    }
    
    // good
    if (collection.length) {
      // ...stuff...
    }

  1. 비동기 함수를 사용할 때 Promise함수의 사용은 지양하고 async, await를 쓰도록 한다.


API

👉 명세서 보러가기!

기능 URI HTTP
메서드
설명 담당 완료
회원가입/
로그인
/auth/signup POST 유저 회원가입 규원 💜
/auth/login POST 유저 로그인 현지 💜
/auth/login GET 유저 자동 로그인 현지 💜
랜딩 페이지 /project/top GET 주목할만한 프로젝트 조회 규원 💜
프로젝트 /project/metadata GET 프로젝트 생성 - 더미 데이터 받기 현지 💜
/project POST 프로젝트 생성 현지 💜
/project/photo/:projectId POST 프로젝트 생성 - 사진 추가 현지 💜
/project/member POST 프로젝트 생성 - 팀 구성원 추가 현지 💜
/project/search/metadata GET 프로젝트 찾기 - 더미 데이터 받기 현지 💜
/project/search POST 프로젝트 찾기 - 조회 현지 💜
/project/:projectId GET 프로젝트 상세뷰 조회 현지 💜
/project/:projectId DELETE 프로젝트 모집 완료 현지 💜
팀원 찾기 /member/metadata GET 팀원 찾기 뷰 더미 데이터 받기 규원 💜
/member POST 팀원 찾기 조회 규원 💜
마이페이지/
팀원 상세뷰
/user/profile/:userId GET 유저 프로필 가져오기 규원 💜
/user/profile/metadata GET 유저 프로필 수정 더미 데이터 받기 규원 💜
/user/profile/:userId GET 유저 프로필 수정 규원 💜
/user/profile/photo
/:userId
POST 유저 프로필 사진 변경 규원 💜
콕 찌르기/
팀 지원하기
/user/poke-user POST 콕찌르기 규원 💜
/user/poke-project POST 팀 지원하기 현지 💜
/user/poke-user/:userId GET 나를 찔러본 사람 규원 💜
/user/poke-project/:userId GET 내 프로젝트에 지원한 사람 현지 💜
/user/poke-user
/:userId/:pokingUserId
DELETE 나를 찔러본 사람 삭제 규원 💜
/user/poke-project
/:projectId/:pokingUserId
DELETE 내 프로젝트에 지원한 사람 삭제 현지 💜

ERD

ERD


Foldering

|-📋 firebaserc
|-📋 firebase.json
|-📋 .gitignore
|-📁 db_query
|-📁 functions_
               |- 📋 index.js
               |- 📋 package.json
               |- 📋 .gitignore
               |- 📋 .env
               |- 📁 api_
               |         |- 📋 index.js
               |         |- 📁 routes_
               |                      |- 📋 index.js
               |                      |- 📁 auth
               |                      |- 📁 member
               |                      |- 📁 project
               |                      |- 📁 user
               |
               |- 📁 config_
               |            |- 📋 dbConfig.js
               |            |- 📋 firebaseClient.js
               |
               |- 📁 constants_
               |               |- 📋 jwt.js
               |               |- 📋 responseMessage.js
               |               |- 📋 statusCode.js
               |
               |- 📁 db_
               |        |- 📋 db.js
               |        |- 📋 index.js
               |
               |- 📁 lib_
               |         |- 📋 convertSnakeToCamel.js
               |         |- 📋 jwtHandlers.js
               |         |- 📋 util.js
               |
               |- 📁 middlewares_
                                 |- 📋 auth.js
                                 |- 📋 uploadImage.js

Dependencies Module

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "lint": "eslint .",
    "serve": "cross-env NODE_ENV=development firebase emulators:start --only functions --project dev",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "cross-env NODE_ENV=production firebase deploy --only functions --project prod",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "16"
  },
  "main": "index.js",
  "dependencies": {
    "axios": "^0.25.0",
    "busboy": "^0.3.1",
    "cookie-parser": "^1.4.6",
    "cors": "^2.8.5",
    "cross-env": "^7.0.3",
    "dayjs": "^1.10.7",
    "dotenv": "^11.0.0",
    "eslint-config-prettier": "^8.3.0",
    "express": "^4.17.2",
    "firebase": "^9.6.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",
    "pg": "^8.7.1"
  },
  "devDependencies": {
    "eslint": "^7.32.0",
    "eslint-config-google": "^0.14.0",
    "firebase-functions-test": "^0.2.0"
  },
  "private": true
}

About

협업성향테스트 기반 IT 사이드 프로젝트 팀 매칭 서비스, 팀블

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 99.8%
  • Shell 0.2%