Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Dear Carmate


Dear Carmate - team5

👨‍👩‍👧‍👦 팀원

Team

최은영
@joyy303
신경렬
@Batur-s
박다슬
@Park-DaSeul
이상욱
@NewL1f3
손준영
@proteiin
이하영
@winnie4869
기획, 백엔드 기획, 백엔드 기획, 백엔드 기획, 백엔드 기획, 백엔드 기획, 백엔드

1. 프로젝트 소개

  • Dear Carmate는 중고차 딜러들의 효율적인 고객 및 차량 관리를 돕는 CRM 서비스입니다.
  • 프로젝트 기간 : 2025.09.30 ~ 2025.10.28

2. 주요 기능

  • 고객 관리: 신규 고객 등록, 정보 수정, 삭제 및 계약 이력 조회를 할 수 있습니다.
  • 차량 관리: 판매 차량 등록, 정보 수정, 삭제 및 상태(보유, 계약 진행, 계약 완료) 변경이 가능합니다.
  • 계약 관리: 고객과 차량을 연결하여 계약을 생성하고, 계약 진행 상태(차량 확인, 가격 협의, 계약서 작성 중, 계약 성공, 계약 실패)를 추적합니다.
  • 문서 관리: 계약 관련 문서를 업로드 및 다운로드할 수 있으며, 계약서를 업로드하면 고객에게 이메일로 자동 발송됩니다.
  • 대시보드: 월별 계약 수, 차량 판매 현황 등 주요 지표를 시각적으로 확인할 수 있습니다.
  • 사용자 관리: 관리자(admin)와 일반 사용자(user) 권한을 분리하여 회사별로 사용자를 관리합니다.
  • 대용량 업로드: 고객 및 차량 데이터를 CSV 파일로 한 번에 업로드할 수 있어 대량 데이터 등록이 용이합니다.

3. 기술 스택

  • Backend: Node.js, Express, TypeScript
  • Database: PostgreSQL, Prisma (ORM)
  • Authentication: JWT (Access Token, Refresh Token)
  • File Handling: Cloudinary, Busboy
  • Validation: Zod
  • Scheduling: node-cron
  • Email: SendGrid
  • Environment Variables: dotenv

4. 팀원별 구현 기능 상세

최은영

구현 내용 정리



Company(회사) API 모듈 주요 구현 내용

  • 회사 등록 (Create Company)

    • 관리자 권한에서만 사용 가능하며, 회사명/회사코드를 입력받아 신규 회사 데이터를 생성합니다.
  • 회사 목록 조회 및 검색 Get Companies

    • 관리자 권한만 접근 가능
    • 검색 조건(회사명/코드) 및 페이지네이션 지원
    • 전체 회사목록, 총 개수, 페이지 정보 반환
  • 회사별 소속 유저 목록 조회 Get Company Users

    • 관리자 권한에서 회사별 직원(유저) 목록 반환
    • 이름, 이메일, 사번, 전화번호 등 기본 정보 포함
    • 검색/페이지네이션 동시 지원
  • 회사 정보 수정 Update Company

    • 관리자가 회사명/회사코드 등 정보 수정
    • 잘못된 ID나 없는 회사 처리 시 404 오류 메시지 반환
  • 회사 삭제 Delete Company

    • 관리자가 특정 회사 데이터를 삭제
    • 성공 시 메시지, 실패 시 사유/오류 메시지 반환

모든 API는 JWT 인증(Authorization 헤더) 및 관리자권한이 필요 일관된 에러 핸들링을 적용하여 프론트엔드와 연동이 용이하도록 구성

신경렬

구현 내용 정리



  • 계약 관리 CRUD API
  • 차량, 고객 정보를 불러와 계약 등록 기능
  • 유저의 회사에 등록된 계약의 수정, 삭제 기능(계약 생성자만 가능)
  • 계약 거래 상태(차량 확인, 가격 협의, 계약 성공, 계약 실패)에 따른 드래그 앤 드랍 기능을 위한 모든 계약 불러오기
  • 고객, 담당자명으로 검색 기능
  • 계약 생성과 계약 성공에 따른 차의 상태, 고객의 계약 수 변동 기능
  • DB 스키마 설계
    • 팀원들과 공동 작업
    • 계약 생성을 위한 다른 유저 고객 등 다양한 테이블과의 구조 설계
  • 에러의 최소화를 위한 디버깅
  • 계약의 상태가 성공, 실패에서 이전 단계로 이동 불가 기능

박다슬

구현 내용 정리



  • 계약서 업로드 API

    • 계약서 목록, 상세 조회 기능 구현
    • 계약서 업로드, 다운로드 기능 구현
    • 계약서 업로드 시 고객 email로 계약서 자동 발송 기능 구현
  • 이미지 업로드 API

    • 사용자 프로필 이미지 기능 구현
  • 미들웨어 작성

    • error-handler.ts → 전역 에러 핸들러 작성 및 각 라우터 적용
    • async-handler.ts → 비동기 함수의 에러 처리를 위한 래퍼 함수 구현
    • cloudinary-upload-middleware.ts → Cloudinary를 통한 이미지 및 문서 업로드/다운로드 기능 구현
    • validate-middleware.ts → Zod를 활용한 요청 데이터 유효성 검사 구현
  • lib 함수 작성

    • cron-jobs.ts → 업로드된 문서 및 이미지 중 더미 파일을 정기적으로 삭제하는 스케줄러 구현
    • email-service.ts → SendGrid 기반의 이메일 발송 서비스 유틸 함수 구현
  • DB 스키마 설계

    • 팀원들과 공동 작업
    • 계약서 테이블 설계
  • 프로젝트 안정화 및 성능 테스트

    • k6를 이용한 부하 테스트 진행
    • Render 무료 플랜 환경에서 VU 15명 기준, p(95) = 452.74ms, 에러율 0% 결과 확인
  • 프로젝트 배포

    • 배포용 브랜치 관리 및 배포 자동화 프로세스 구축
    • Render(백엔드 및 데이터베이스), Vercel(프론트엔드)로 배포 진행

    k6 테스트 결과

이상욱

구현 내용 정리



-차량 시드 제작 차량시드1 차량시드

-차량 생성

차량생성

-차량 수정 상세 조회

차량정보수정상세조회

-차량 삭제

차량삭제

-차량 업로드 에러 처리

차량등록에러처리

-대용량 차량 업로드

대용량차량등록

-대용량 차량 업로드 에러 처리

대용량업로드에러처리

-ERD 이미지 제작 화면 캡처 2025-10-01 190415 Untitled (4)

-TSCONFIG 기초틀 제시 화면 캡처 2025-10-28 143354

-간단한 SQL, URL, CSV Injection 공격 방어 능력 테스트

손준영

구현 내용 정리



  • 고객 관리 API

    • 고객 목록 조회(이메일, 이름으로 검색 가능), 고객 단일 조회 구현
    • 고객 정보 수정, 고객 삭제, 고객 추가 구현 (고객과 직원이 같은 회사일 때만 가능)
    • 파라미터들에 대한 유효성 검사
  • DB 스키마 설계

    • 프로젝트 시작 전, 철저한 API 설계를 통한 작업 소요 감소
    • 데이터 정규화 및 API 구현, 웹사이트의 목적에 맞는 스키마 설계
  • 대시보드 API

    • 한달 사이 매출, 매출 증가율, 완료된 계약과 진행중인 계약 수, 차종별 계약 수와 이익을 구현했습니다
    • 값들마다 서비스 계층에서 각각 처리하여, 책임을 분리했습니다.
    • 웹사이트 설계에 적절하도록 값들을 검토하였습니다.
  • 함수를 이용한 추상화

    • 프론트엔드에서 온 데이터를 백엔드 데이터에 맞게 변환하는 함수를 적용하여 추상화
    • 프론트에서 요구하는 포맷으로 변환하는 포매팅 함수
    • 유저와 유저의 회사에 대한 유효성 검사, 인가를 함수로 구현
    • 더 읽기 쉽고 유지 보수가 원활한 코드

이하영

구현 내용 정리



1. 백엔드 시스템 설계 및 구축

  • Express 기반 RESTful API 서버를 구축하며, Service·Controller·Repository 3계층 구조로 리팩토링하여 유지보수성과 가독성을 향상시키고, auth-middleware.ts를 통해 JWT 기반 사용자 인증 및 권한 검증 로직을 구현함.

2. 회원 관리 기능 구현

  • 회원가입, 로그인, 내 정보 조회·수정·탈퇴 기능을 개발하고, bcrypt를 통한 비밀번호 암호화 및 검증 로직과 Prisma ORM 기반의 안전한 DB 접근 및 예외 처리를 구현하였으며, 각 API 요청별 HTTP 상태 코드와 오류 메시지를 세분화·표준화함.

3. 관리자(Admin) 기능 구현

  • 관리자만 접근 가능한 /users/:id DELETE 유저 삭제 API를 개발하고, 삭제 시 기업(Company) 테이블의 인원 수(userCount)를 자동 감소시키는 트랜잭션 로직과 userInfo.isAdmin을 통한 관리자 권한 검증 기능을 구현함.

4. 데이터베이스 설계 및 연동

  • Prisma ORM을 활용하여 User, Company, Car 테이블 간 관계를 설정하고, 회사 인증 시 companyName과 companyCode 매칭 검증 로직을 구현하였으며, $transaction을 통해 데이터 무결성을 보장함.

5. API 테스트 및 협업 지원

  • Postman을 활용해 API 통신 테스트 및 프론트엔드 팀과의 연동을 확인하고, 공통 JSON 응답 형식을 정의하여 협업 효율성을 높였으며, 회원가입 시 회사 등록 → 유저 등록 → 회사 인원 수 증가로 이어지는 전체 플로우를 완성함.

5. 시작하기

5.1. 설치

  1. 저장소를 클론합니다.
    git clone https://github.com/your-repository/nb4-Dear_Carmate-team5.git
  2. 프로젝트 디렉토리로 이동합니다.
    cd nb4-Dear_Carmate-team5
  3. 의존성을 설치합니다.
    npm install

5.2. 환경 변수 설정

.env.sample 파일을 복사하여 .env 파일을 생성하고, 아래 환경 변수를 설정합니다.

DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE"

# JWT
ACCESS_TOKEN_SECRET="your_access_token_secret"
REFRESH_TOKEN_SECRET="your_refresh_token_secret"

# Cloudinary
CLOUDINARY_CLOUD_NAME="your_cloudinary_cloud_name"
CLOUDINARY_API_KEY="your_cloudinary_api_key"
CLOUDINARY_API_SECRET="your_cloudinary_api_secret"

# SendGrid
SENDGRID_API_KEY="your_sendgrid_api_key"
SENDGRID_SENDER_EMAIL="your_sender_email"

# CORS
CORS_ORIGIN="http://localhost:3000"

# PORT
PORT=3001

5.3. 데이터베이스 마이그레이션

Prisma를 사용하여 데이터베이스를 마이그레이션합니다.

npx prisma migrate dev

5.4. 실행

개발 서버를 시작합니다.

npm run dev

6. 폴더 구조

nb4-Dear_Carmate-team5/
├── prisma/
│   ├── schema.prisma
│   └── migrations/
├── src/
│   ├── app.ts
│   ├── lib/
│   ├── middlewares/
│   ├── modules/
│   │   ├── auth/
│   │   ├── cars/
│   │   ├── company/
│   │   ├── contract-documents/
│   │   ├── contracts/
│   │   ├── customers/
│   │   ├── dashboard/
│   │   ├── images/
│   │   └── user/
│   ├── types/
│   └── utils/
├── .env.sample
├── .gitignore
├── package.json
└── tsconfig.json

7. API 엔드포인트

Auth

  • POST /auth/login: 로그인
  • POST /auth/refresh: Access Token 재발급

User

  • POST /users: 신규 직원(사용자) 등록 (관리자용)
  • GET /users/me: 내 정보 조회
  • PATCH /users/me: 내 정보 수정
  • DELETE /users/me: 회원 탈퇴
  • DELETE /users/:userId: 특정 사용자 삭제 (관리자용)

Company

  • POST /companies: 회사 및 관리자 계정 생성 (회원가입)
  • GET /companies: 회사 목록 조회
  • GET /companies/users: 소속 직원 목록 조회
  • PATCH /companies/:companyId: 회사 정보 수정
  • DELETE /companies/:companyId: 회사 삭제

Customer

  • POST /customers: 신규 고객 추가
  • GET /customers: 고객 목록 조회
  • GET /customers/:customerId: 특정 고객 상세 조회
  • PATCH /customers/:customerId: 고객 정보 수정
  • DELETE /customers/:customerId: 고객 정보 삭제
  • POST /customers/upload: CSV 파일로 고객 대량 등록

Car

  • POST /cars: 신규 차량 추가
  • GET /cars: 차량 목록 조회
  • GET /cars/models: 차량 모델 목록 조회
  • GET /cars/:carId: 특정 차량 상세 조회
  • PATCH /cars/:carId: 차량 정보 수정
  • DELETE /cars/:carId: 차량 정보 삭제
  • POST /cars/upload: CSV 파일로 차량 대량 등록

Contract

  • POST /contracts: 신규 계약 생성
  • GET /contracts: 계약 목록 조회
  • PATCH /contracts/:id: 계약 정보 수정
  • DELETE /contracts/:id: 계약 삭제
  • GET /contracts/cars: 계약 생성을 위한 차량 정보 조회
  • GET /contracts/customers: 계약 생각을 위한 고객 정보 조회
  • GET /contracts/users: 계약 생성을 위한 직원 정보 조회

Contract Document

  • POST /contractDocuments/upload: 계약 문서 업로드
  • GET /contractDocuments: 계약 문서 목록 조회
  • GET /contractDocuments/draft: 문서 추가를 위한 계약 목록 조회
  • GET /contractDocuments/:id/download: 계약 문서 다운로드

Image

  • POST /images/upload: 사용자 프로필 이미지 업로드

Dashboard

  • GET /dashboard: 대시보드 데이터 조회

8. 데이터베이스 스키마

  • Company: 회사 정보
  • User: 사용자(직원) 정보
  • Customer: 고객 정보
  • Manufacturer: 자동차 제조사
  • Model: 자동차 모델
  • Car: 차량 정보
  • Contract: 계약 정보
  • Meeting: 미팅 정보
  • ContractDocument: 계약 문서 정보
  • Image: 사용자 프로필 이미지 정보

9. 주요 스크립트

  • npm run dev: 개발 서버 실행 (ts-node)
  • npm run build: TypeScript 컴파일
  • npm run start: 컴파일된 JavaScript 파일로 서버 실행
  • npm run format: Prettier를 사용하여 코드 포맷팅
  • npx prisma migrate dev: 데이터베이스 마이그레이션
  • npx prisma studio: Prisma Studio 실행
  • npx prisma db seed: Seed 데이터 추가

10. 배포 홈페이지

https://nb04-dear-carmate-team5-front.vercel.app/

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages