Skip to content

Latest commit

 

History

History
352 lines (306 loc) · 11.3 KB

README.md

File metadata and controls

352 lines (306 loc) · 11.3 KB

JustPay-Server


⭐️서비스 한 줄 소개

트위터 DM 없는 아이돌 굿즈 최고가 매칭 서비스


⭐️서비스 핵심기능 소개

1️⃣
포토카드를 쉽게 판매하도록 도와주는 판매옵션이 한눈에 보이는 판매글 피드를 제공합니다.
판매자의 신뢰도를 높여주는 3가지 PAY정보도 함께 제공됩니다.
3 1 1 판매중 GNB

2️⃣
트위터DM 을 일일이 확인할 필요 없이 구매자들의 제시 옵션을 한눈에 파악할 수 있는 매칭 중 목록을 제공합니다.
4 1 판매중 GNB - 판매중 리스트

3️⃣
판매글을 올리고, 판매글에 구매 제시를 하여 쉽고 안전한 거래를 할 수 있도록 도와줍니다.
8 3 2 2개일부+제시가격 판매글 작성 - 대표사진 등록후 -일부 판매


👨‍👩‍👦 R&R(역할분담)

역할 담당자
협업 툴 관리 전희선
과제 제출 담당 천호영
과제 관리 담당 전희선
데일리 스크럼 업로드/리마인드 천호영
전체 일정 관리 천호영 전희선
회의록 작성 천호영
기술 / 코드관리 / 코드리뷰 천호영 전희선
Read Me 작성 천호영 전희선

✏️ DB ERD

스크린샷 2023-01-04 오후 3 57 17

📕 Cloud Service

Amazon AWS

  • AWS EC2 - 클라우드 컴퓨팅 시스템
  • AWS RDS - 클라우드 관계형 데이터베이스
  • AWS S3 - 클라우드 데이터 저장소
  • AWS Route 53 - 클라우드 DNS 웹 서비스

📚 기술 스택

Node.js Express npm PostgreSQL

  • Node.js
  • Express.js
  • Prisma
  • PostgreSQL

⚒ Server Architecture

아키텍쳐

🔔 Dependencies

"dependencies": {
    "@aws-sdk/client-s3": "^3.216.0",
    "@prisma/client": "^4.5.0",
    "axios": "^1.2.2",
    "bcryptjs": "^2.4.3",
    "cors": "^2.8.5",
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "express-validator": "^6.14.2",
    "jsonwebtoken": "^8.5.1",
    "multer": "^1.4.5-lts.1",
    "multer-s3": "^3.0.1",
    "prisma": "^4.5.0"
  },
  "devDependencies": {
    "@babel/core": "^7.20.12",
    "@babel/preset-env": "^7.20.2",
    "@babel/preset-typescript": "^7.18.6",
    "@types/bcryptjs": "^2.4.2",
    "@types/express": "^4.17.14",
    "@types/express-validator": "^3.0.0",
    "@types/jest": "^29.2.5",
    "@types/jsonwebtoken": "^9.0.0",
    "@types/multer": "^1.4.7",
    "@types/multer-s3": "^3.0.0",
    "@types/node": "^18.11.9",
    "@types/supertest": "^2.0.12",
    "@typescript-eslint/eslint-plugin": "^5.47.1",
    "@typescript-eslint/parser": "^5.47.1",
    "babel-jest": "^29.3.1",
    "eslint": "^8.30.0",
    "eslint-config-prettier": "^8.5.0",
    "eslint-plugin-import": "^2.26.0",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-prettier": "^4.2.1",
    "husky": "^8.0.0",
    "jest": "^29.3.1",
    "jest-mock-extended": "^3.0.1",
    "nodemon": "^2.0.20",
    "prettier": "^2.8.1",
    "supertest": "^6.3.3",
    "ts-jest": "^29.0.3",
    "typescript": "^4.9.4"
  }

🕸 API DOCS

↗️ API 명세서


✏️ 담당 기능 및 Progess Status

초기 세팅 및

기능 담당자 완료
AWS 세팅 천호영
배포 및 HTTPS 작업 천호영 전희선
깃헙 협업 기반 세팅 전희선
프로젝트 초기 세팅 천호영 전희선
ERD 구성 천호영 전희선
DB migration 천호영
API명세 작성 천호영 전희선

API

기능 담당자 완료
내 정보 조회 천호영
내 정보 수정 천호영
프로필 정보 조회(내가 아닌) 천호영
내 알리미 조회 전희선
내 구매중 정보 조회 (구매중/구매완료) 전희선
내 판매중 정보 조회 (판매중/판매종료) 천호영
판매글 등록 천호영
판매글 정보 조회 천호영
판매글 구매 제시 목록 전희선
구매 제시하기 전희선
판매글 상태 변경 천호영
인증사진 조회 천호영
구매 제시 내용 조회 전희선
구매 제시 삭제 전희선
구매 제시 상태변경 전희선
구매 제시 가격 올리기 전희선
운송장 정보 입력 전희선
임시 소셜 로그인 천호영
운송장 정보 확인 전희선
배송 정보 확인 천호영
결제 정보 조회 천호영
인증코드 생성 전희선

♟ commit, coding convention, branch 전략

📍 Commit Convention

  • init: 따단~~ 첫 커밋
  • feat: 새로운 기능, UI 구현
  • fix: 버그 수정,리포트
  • docs: readme 등의 문서 수정
  • edit: 파일 삭제 및 수정, 이동
  • del: 쓸모없는 코드 삭제
  • chore: 기능상 변경 없는 코드 수정, 패키지 관리 등
  • refactor: 완성된 기능 구조 변경, 리팩토링

📍 coding convention

  • .eslintrc.json
    {
        "env": {
          "es2021": true,
          "node": true,
          "jest": true
        },
        "extends": [
          "eslint:recommended",
          "plugin:@typescript-eslint/eslint-recommended",
          "plugin:@typescript-eslint/recommended",
          "plugin:prettier/recommended",
          "prettier/prettier",
          "plugin:import/recommended"
        ],
        "parser": "@typescript-eslint/parser",
        "parserOptions": {
          "project": ["./tsconfig.json", "./jest.config.js"],
          "ecmaVersion": "latest",
          "sourceType": "module"
        },
        "plugins": ["@typescript-eslint", "prettier"],
        "rules": {
          "camelcase": "error",
          "comma-dangle": ["error", "always-multiline"],
          "no-console": ["warn"],
          "@typescript-eslint/no-var-requires": "off",
          "no-constant-condition": ["error", { "checkLoops": true }],
          "no-restricted-syntax": [
            "error",
            {
              "selector": "LabeledStatement",
              "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand."
            },
            {
              "selector": "WithStatement",
              "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize."
            }
          ],
          "no-use-before-define": ["off", { "functions": false }],
          "no-unused-expressions": ["error", { "allowTaggedTemplates": true }],
          "prefer-const": [
            "error",
            { "destructuring": "all" }
          ],
          "prefer-destructuring": ["error", { "array": false, "object": false }, { "enforceForRenamedProperties": true }],
          "spaced-comment": ["error", "always"],
          "import/extensions": ["error", "never"],
          "import/no-unresolved": "off",
          "import/order": [
            "error",
            {
              "groups": [
                "builtin",
                "external",
                "internal",
                "parent",
                "sibling"
              ],
              "newlines-between": "always",
              "alphabetize": {
                "order": "asc",
                "caseInsensitive": false
              }
            }
          ],
          "import/prefer-default-export": "off"
        },
        "ignorePatterns": ["dist/", "node_modules/", "jest.config.js", "babel.config.js", "__test__"]
      }
  • .prettierrc
{
  "singleQuote": true,
  "semi": true,
  "tabWidth": 2,
  "trailingComma": "all",
  "printWidth": 100,
  "endOfLine": "auto"
}

📍 Branch 전략

  • 배포 브랜치 : main
  • 개발 브랜치 : develop
  • pr 단위 브랜치 + 뒤에 이슈 번호 붙이기
    • feature/
    • fix/
    • refact/
    • hotfix/

📍 PR, 이슈 관리

💡 하나의 이슈를 올리면 이슈 단위로 pr 날리기
💡 코드리뷰 후 merge 하기

🏛 프로젝트 폴더 구조

__test__
prisma
src
├── config
│   ├── index.ts
│   └── s3Config.ts
├── constants
│   ├── index.ts
│   ├── notification.ts
│   ├── response.ts
│   ├── responseMessage.ts
│   ├── shippingInfo.ts
│   ├── statusCode.ts
│   ├── tokenType.ts
│   └── wordList.ts
├── controller
│   ├── authController.ts
│   ├── index.ts
│   ├── salespostController.ts
│   ├── suggestController.ts
│   └── userController.ts
├── db
│   ├── client.ts
│   └── data.ts
├── index.ts
├── interfaces
│   ├── image
│   │   └── imageCreateResponseDTO.ts
│   ├── salespost
│   │   ├── createSalespostDTO.ts
│   │   ├── getPurchaseListDTO.ts
│   │   └── suggestCreateDTO.ts
│   ├── type
│   │   └── shippingInfo.ts
│   └── user
│       └── userUpdateDTO.ts
├── middlewares
│   ├── auth.ts
│   ├── index.ts
│   └── upload.ts
├── modules
│   ├── date.ts
│   ├── dateNotification.ts
│   ├── jwtHandler.ts
│   ├── notification.ts
│   ├── shippingOption.ts
│   ├── slack.ts
│   └── testModule.ts
├── router
│   ├── authRouter.ts
│   ├── index.ts
│   ├── salespostRouter.ts
│   ├── suggestRouter.ts
│   └── userRouter.ts
├── server.ts
├── service
│   ├── authService.ts
│   ├── index.ts
│   ├── salespostService.ts
│   ├── suggestService.ts
│   └── userService.ts
└── singleton.ts