WooHyunTak / 1-view-my-startup-BE-1

0 stars 2 forks source link

View My StartUp

{스프린트1기 1팀}

팀 협업 [노션 링크: https://www.notion.so/c53f7e74366d4e99b092d8a63e62d73f?v=ed50033a7c7e4b6b9dc37608e88a0318&pvs=4]

팀원 구성

탁우현 [개인 Github 링크: https://github.com/WooHyunTak]

박상훈 [개인 Github 링크: https://github.com/dieuaimer]

임송이 [개인 Github 링크: https://github.com/Im-amberim]


프로젝트 소개


기술 스택


팀원별 구현 기능 상세

탁우현

  1. 기업 비교 기능

    • 기능 개요: 이 기능은 사용자가 선택한 여러 기업 간의 비교를 수행합니다. 사용자가 특정 기업들을 선택하면, 이 기업들의 투자금, 매출, 직원 수 등의 다양한 지표를 기준으로 비교 결과를 반환합니다.
    • 구현 내용
      • 엔드포인트: POST api/comparison
      • 요청 바디: 비교할 기업의 ID 목록을 JSON 배열 형식으로 받습니다. 예를 들어, {"comparisonIds": ["id1", "id2", "id3"]} 와 같은 형태로 기업들의 ID를 전달합니다.
      • 쿼리 파라미터: 비교 결과를 정렬할 기준(sortBy)과 정렬 순서(order)를 지정할 수 있습니다. 기본적으로 매출(revenue)을 기준으로 오름차순으로 정렬하지만, 투자금(actualInvestment)이나 직원 수(totalEmployees)를 기준으로 변경할 수 있습니다.
      • 응답: 성공적으로 비교가 이루어지면, 각 기업의 세부 정보와 함께 비교 결과를 반환합니다. 기업 정보를 찾을 수 없는 경우에는 404 Not Found 오류를 반환합니다.
  2. 특정 기업의 순위 조회 기능

    • 기능 개요: 사용자가 특정 기업의 순위를 조회하고, 해당 기업의 상위 2개 기업과 하위 기업 2개 기업의 정보를 제공하는 기능입니다. 만약 기준의 ID가 중간이 아닌 상위2위 이상이라면 자신을 포함한 5개의 데이터를 보장합니다.
    • 구현 내용
      • 엔드포인트: GET api/comparison/rank/:id
      • 요청 파라미터: 조회하려는 기업의 ID를 경로 파라미터로 전달합니다.
      • 쿼리 파라미터: 순위를 매길 기준(sortBy) 과 정렬 순서(order)를 선택할 수 있습니다. 기본적으로 매출을 기준으로 오름차순으로 정렬하지만, 투자금 또는 직원 수를 기준으로도 조회할 수 있습니다.
      • 응답: 기업의 순위와 함께 상위 2개 및 하위 2개 기업의 정보를 포함하여 반환합니다. 만약 해당 기업의 정보를 찾을 수 없으면 오류를 반환합니다.
  3. 기업 비교 카운팅 기능

    • 기능 개요: 사용자가 자신의 기업과 다른 기업을 비교할 때, 해당 기업들의 비교 선택 횟수와 비교된 횟수를 증가시키는 기능입니다.
    • 구현 내용
      • 엔드포인트: PATCH api/comparisons/comparison-counts
      • 요청 바디: 사용자의 기업 ID와 비교할 기업들의 ID 목록을 JSON 형식으로 받습니다. 예를 들어, {"myCompanyId": "id1", "comparisonIds: ["id2", "id3"]} 형태로 전달됩니다.
      • 응답: 성공적으로 카운트가 업데이트되면 204 No Content 응답을 반환하며, 해당 기업 정보를 차지 못한 경우에는 404 Not Found 오류를 반환합니다.

박상훈

  1. 가상 투자자 생성 기능

    • 기능 개요: 이 기능은 사용자가 특정 기업에 가상 투자자를 생성하는 기능입니다. 사용자는 투자자 이름, 투자 금액, 코멘트, 비밀번호, 그리고 투자 대상 기업의 ID를 입력하여 새로운 가상 투자자를 만들 수 있습니다.
    • 구현 내용
      • 엔드포인트: POST api/investment
      • 요청 바디: 가상 투자자의 이름, 투자 금액, 코멘트, 비밀번호, 그리고 투자할 기업의 ID를 JSON 형식으로 받습니다. 예를 들어 {"name": "Investor Name", "amount": "100000000", "commnet": "Great potential!", "password": "password999", "companyId": "00e7a018-a94b-4d6b-8c79-6b9cd2c2cfc1"}와 같은 형태로 데이터를 전달합니다.
      • 응답: 성공적으로 가상 투자자가 생성되면, 생성된 투자자의 세부 정보를 반환합니다. 이때 반환되는 정보에는 투자자 ID, 생성 및 수정 시간도 포함됩니다. 응답 상태 코드는 201 Created 입니다.
  2. 가상 투자자 수정 기능

    • 기능 개요: 기존에 생성된 가상 투자자의 정보를 수정하는 기능입니다. 사용자는 투자 금액, 코멘트, 비밀번호를 수정할 수 있으며, 비밀번호가 일치해야만 수정이 가능합니다.
    • 구현 내용
      • 엔드포인트: PATCH api/investments/:id
      • 요청 파라미터: 수정할 가상 투자자의 ID를 경로 파라미터로 전달합니다.
      • 요청 바디: 수정할 금액, 코멘트, 비밀번호를 JSON 형식으로 받습니다. 예를 들어, {"amount": "200000000", "comment": "Updated potential!", "password": "password999"}와 같은 데이터를 전달합니다.
      • 응답
        • 200 OK: 수정된 가상 투자자의 정보가 반환됩니다. 수정된 정보에는 투자자 ID, 이름, 금액, 코멘트, 비밀번호, 기업 ID, 생성 및 수정 시간이 포함됩니다.
        • 403 Forbidden: 비밀번호가 일치하지 않을 경우 수정이 거부됩니다.
        • 404 Not Found: 해당 ID의 가상 투자자를 찾을 수 없는 경우 반환됩니다.
  3. 가상 투자자 삭제 기능

    • 기능 개요: 사용자가 특정 가상 투자자를 삭제하는 기능입니다. 이 기능은 투자자의 비밀번호가 일치할 경우에만 삭제가 가능합니다.
    • 구현 내용
      • 엔드포인트: DELETE api/investments/:id
      • 요청 파라미터: 삭제할 가상 투자자의 ID를 경로 파라미터로 전달합니다.
      • 요청 바디: 삭제하려는 투자자의 비밀번호를 JSON 형식으로 받습니다. 예를 들어,{"password": "password999"}와 같은 데이터를 전달합니다.
      • 응답
        • 200 OK: 삭제가 성공적으로 이루어진 경우 성공 메시지가 반환됩니다.
        • 403 Forbidden: 비밀전호가 일치하지 않아 삭제가 거부된 경우 반환됩니다.
        • 404 Not Found: 해당 ID의 가상 투자자를 찾을 수 없는 경우 반환됩니다.
  4. 전체 기업 투자 현황 조회 기능

    • 기능 개요: 이 기능은 모든 기업의 가상 및 실제 투자 현황을 조회하는 기능입니다. 사용자는 투자 금액에 다라 기업을 정렬하고, 페이지네이션을 통해 특정 페이지의 기업 목록을 조회할 수 있습니다.
    • 구현 내용
      • 엔드포이트: GET api/companies/investments-status
      • 쿼리 파라미터
        • sortBy: 정렬 기준 필드명 (virtualInvestment, actualInvestment). 기본값은 virtualInvestment입니다.
        • order: 정렬 순서 (asc 또는 desc). 기본값은 desc입니다.
        • page: 페이지 번호. 기본값은 1입니다.
        • limit: 페이지당 항목 수. 기본값은 10입니다.
    • 처리 로직
      • 정렬 설정: 사용자가 선택한 정렬 기준(sortBy)에 따라 기업 목록을 정렬합니다. 예를 들어, sortByvirtualInvestment이면 가상 투자 금액을 기준으로 정렬합니다. 정렬 순서는 order 값에 따라 결정되며, 동일한 값을 가진 항목은 기업 이름(name)에 따라 오름차순으로 추가 정렬됩니다.
      • 데이터 필터링: 가상 투자금이 0 이상인 기업만 조회합니다.
      • 페이지네이션: 전체 기업 수를 기반으로 전체 페이지 수를 계산하고, 다음 페이지의 존재 여부(hasNextPage)를 확인합니다.

임송이

  1. 전체 기업 조회 기능

    • 기능 개요: 이 기능은 모든 기업의 정보를 조회하는 기능입니다. 사용자는 기업의 매출, 실제 투자금, 직원 수 등을 기준으로 정렬하거나, 특정 키워드로 기업을 검색할 수 있습니다.
    • 구현 내용
      • 엔드포인트: GET api/companies
      • 쿼리 파라미터: 사용자는 다음의 쿼리 파라미터를 통해 조회 결과를 필터링하거나 정렬할 수 있습니다.
        • sortBy: 정렬 기준 필드명 (revenue, actualInvestment, totalEmployees). 기본값은 revenue입니다.
        • order: 정렬 순서(asc 또는 desc). 기본값은 desc입니다.
        • keyword: 기업명 또는 기업 소개에 대한 키워드를 검색합니다.
        • limit: 가져올 데이터의 개수. 기본값은 10 입니다.
        • page: 페이지 번호, 기본값은 1 입니다.
      • 응답: 요청이 성공하면, 기업 리스트와 해당 기업의 세부 정보가 반환됩니다. 이 정보에는 기업의 이름, 설명, 투자금, 매출, 직원 수 등이 포함되며, 총 기업 수와 함께 페이지네이션 된 결과가 제공됩니다. 요청이 유효하지 않을 경우 400 Bad Request 를 반환합니다.
  2. 특정 기업 조회

    • 기능 개요: 이 기능은 특정 기업의 상세 정보를 조회하는 기능입니다. 기업의 ID를 사용하여 해당 기업의 모든 세부 정보를 확인할 수 있습니다.
    • 구현 내용
      • 엔드포인트: GET api/companies/id
      • 요청 파라미터: 조회할 기업의 ID를 경로 파라미터로 전달합니다.
      • 응답: 요청이 성공하면, 해당 기업의 모든 세부 정보가 반환됩니다. 이 정보에는 기업의 이름, 설명, 브랜드 이미지, 투자금, 매출, 직원 수, 생성 및 수정 시간이 포함됩니다. 해당 기업을 찾을 수 없는 경우 404 Not Found 오류를 반환합니다.
  3. 특정 기업에 대한 가상 투자자 조회 기능

    • 기능 개요: 이 기능은 특정 기업에 속한 모든 가상 투자자들의 정보를 조회하는 기능입니다. 이를 통해 사용자는 해당 기업에 어떤 투자자들이 투자했는지 확인할 수 있습니다.
    • 구현 내용
      • 엔드포인트: GET api/companies/:id
      • 요청 파라미터: 조회하려는 기업의 ID를 경로 파라미터로 전달합니다.
      • 처리 로직:
        • 회사 정보 조회: 경로 파라미터로 전달된 기업의 ID를 사용하여 해당 기업의 정보를 데이터베이스에서 조회합니다. 이때 해당 기업에 속한 모든 가상 투자자들(investments)을 투자 금액(amount) 기준으로 내림차순 정렬하여 함께 가져옵니다. 또한, 기업의 카테고리 (categories) 정보도 함께 포함시킵니다.
        • 투자자 순위 부여: 조회된 투자자 목록에 순위를 부여합니다. 투자 금액이 큰 순서대로 정렬된 목록에서 각 투자자에게 순위를 매기고, 이 순위를 rank 필드로 추가합니다.
      • 응답: 성공적으로 기업 정보와 함께 해당 기업의 모든 가상 투자자들의 정보가 반환됩니다. 반환되는 데이터에는 각 투자자의 ID, 이름, 투자 금액, 코멘트, 투자 순위(rank) 등이 포함됩니다.
  4. 기업 비교 현황 조회 기능

    • 기능 개요: 사용자가 특정 기준에 따라 기업의 비교 현황을 조회할 수 있는 기능입니다. 이 기능은 주로 어떤 기업이 얼마나 자주 비교되었는지를 확인하는 데 사용됩니다.
    • 구현 내용
      • 엔드포인트: GET api/comparisons/comparison-status
      • 쿼리 파라미터: 정렬 기준(sortBy), 정렬 순서(order), 한 페이지에 표시할 기업의 수(limit), 페이지 번호(page)를 쿼리 파라미터로 설정할 수 있습니다. 기본적으로 비교 선택 횟수(selectedCount)에 대해 내림차순으로 정렬하고, 한 페이지당 10개의 결과를 표시하며 첫 번째 페이지를 반환합니다.
      • 응답: 총 기업의 수(totalCount)와 함께 각 기업의 비교 횟수와 관련된 정보 리스트를 반환합니다. 만약 기업의 정보를 찾을 수 없을 경우 404 Not Found 오류를 반환합니다.

파일 구조


├── controllers
│   ├── companyController.js
│   ├── comparisonController.js
│   └── investmentController.js
├── https
│   ├── company.http
│   └── investment.http
├── node_modules
├── prisma
│   ├── migrations
│   ├── mock.js
│   ├── schema.prisma
│   └── seed.js
├── routes
│   ├── companyRoute.js
│   ├── comparisonRoute.js
│   └── investmentRoute.js
├── structs
├── utils
├── .env
├── .gitignore
├── app.js
├── env.js
├── package-lock.json
└── package.json

구현 홈페이지

https://view-my-startup-project.netlify.app