/Pic.me-server

Pic.me server 🌼

Primary LanguageTypeScript

image

✨ λΉ λ₯΄κ²Œ κ³¨λΌλ³΄λŠ” λ‚˜μ˜ 사진, 뭐 μ˜¬λ¦΄μ§€ κ³ λ―Ό 될 땐? ν”½λ―Έ! ✨

image image

πŸ’‘ Pic.me μ„œλΉ„μŠ€μ˜ 핡심 κΈ°λŠ₯

πŸ“₯ Maker

1️⃣ νˆ¬ν‘œ 생성

사진 선택 및 제λͺ© μž…λ ₯ 단 λ‘κ°€μ§€μ˜ μž…λ ₯만으둜 κ°„λ‹¨ν•œ νˆ¬ν‘œ 생성을 μ§„ν–‰ν•©λ‹ˆλ‹€.

2️⃣ 링크 생성 및 곡유

νˆ¬ν‘œ 링크 생성 및 μΈμŠ€νƒ€κ·Έλž¨ κ³΅μœ ν•˜κΈ° λ₯Ό 톡해 λ§ν¬κ²Œμ‹œλ₯Ό μœ λ„ν•©λ‹ˆλ‹€.

3️⃣ νˆ¬ν‘œ λͺ¨μ•„보기

μ§„ν–‰ν–ˆλ˜ νˆ¬ν‘œ λͺ©λ‘μ„ λͺ¨μ•„λ³΄λŠ” 라이브러리 κΈ°λŠ₯을 톡해 νˆ¬ν‘œ ν˜„ν™© 및 κ²°κ³Όλ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€.

πŸ“₯ Player

1️⃣ νˆ¬ν‘œ μ°Έμ—¬

μΈμŠ€νƒ€κ·Έλž¨ μŠ€ν† λ¦¬λ₯Ό 톡해 링크 μž…μž₯, 읡λͺ… νˆ¬ν‘œ λ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€
νˆ¬ν‘œ μ°Έμ—¬μžλŠ” 읡λͺ…μœΌλ‘œ νˆ¬ν‘œ πŸ‘‰ (μ°Έμ—¬μžλŠ” 둜그인 X)

2️⃣ 이유 선택

사진 선택 ν›„ 이유 선택 진행 μ΅œμ’…μ μœΌλ‘œ νˆ¬ν‘œν•˜κΈ° λ₯Ό 톡해 μ΅œμ’… νˆ¬ν‘œλ₯Ό μ™„λ£Œν•©λ‹ˆλ‹€.
κ°„λ‹¨ν•œ 이유 선택 πŸ‘‰ (이유의 μ•„μ΄μ½˜ ν™”) νˆ¬ν‘œν•˜κΈ° 클릭

3️⃣ μŠ€ν‹°μ»€ ν”½λ―Έ

μ„ νƒν•œ 사진 μœ„μ— λ‚˜μ˜ μ‹œμ„ μ΄ 머무λ₯Έ 곳에 μŠ€ν‹°μ»€λ₯Ό λΆ€μ°© ν•˜μ—¬ μ§κ΄€μ μœΌλ‘œ κ²°κ³Όλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
μŠ€ν‹°μ»€ λΆ€μ°© λ’€μ—λŠ” ν˜„μž¬κΉŒμ§€ 뢙여진 μŠ€ν‹°μ»€λ₯Ό λͺ¨λ‘ λ‚˜νƒ€λ‚΄ ν˜„μž¬ νˆ¬ν‘œ 상황을 λ³΄μ—¬μ€λ‹ˆλ‹€.


πŸ‘©β€πŸ’» Pic.Server


dragontaek-lee

wlwpfh

GaHee99
μ΄μš©νƒ
BE
μ–‘μ§€μ˜
BE
μ΅œκ°€ν¬
BE


βš’οΈ ERD

erd


βœ… Server Architecture





πŸ‘¨β€πŸ‘©β€πŸ‘§ μ—­ν•  λΆ„λ‹΄ 및 API 둜직 κ΅¬ν˜„ 진척도

https://charm-wolfsbane-f42.notion.site/API-ff429d56790c4ecb8c0d877852bf95a2




🌱 컀밋 μ»¨λ²€μ…˜

1 Issue = 1 Branch = 1 PR


Commit

[λΆ„λ₯˜] : μž‘μ—… λ‚΄μ—­ - #이슈 번호

chore: μ„ΈνŒ…, λ³€μˆ˜ μ„€μ • λ“± #2
feat: μƒˆλ‘œμš΄ μ£Όμš” κΈ°λŠ₯ μΆ”κ°€ #2
add: 파일 μΆ”κ°€ #2
fix: 버그 μˆ˜μ • #2
del: μ“Έλͺ¨μ—†λŠ” μ½”λ“œ μ‚­μ œ #2
refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§ #2
move: ν”„λ‘œμ νŠΈ ꡬ쑰 λ³€κ²½(폴더링 λ“±) #2
rename: 파일, 클래슀, λ³€μˆ˜λͺ… λ“± 이름 λ³€κ²½ #2
docs: Wiki, README 파일 μˆ˜μ • #2

πŸͺ΅ Branch Naming

λΆ„λ₯˜ /#이슈 번호 - 상세 μž‘μ—… λ‚΄μ—­

chore/#3-project-setting
feat/#4-kakao-auth
fix/#2-login-type-error
refactor/#1-code-indent

πŸ‘£ μž‘μ—… μˆœμ„œ

1. 이슈 생성
2. 브랜치 생성
3. μž‘μ—…, 컀밋
4. push
5. pr μž‘μ„±
6. μ½”λ“œλ¦¬λ·°
7. Approve λ°›μ•˜μ„ 경우 self merge
8. Delete Branch

βœ… μ½”λ”© μ»¨λ²€μ…˜

https://darkened-purpose-5e9.notion.site/Coding-Convention-4934afbbf5ad4a7a9ad3570cca736a9f


βœ… branch μ „λž΅

https://darkened-purpose-5e9.notion.site/Branch-326ab8efcd3242f2838dd93a079958c5


πŸ“ 폴더 ꡬ쑰

.
└── Pic.me-server/
    β”œβ”€β”€ .github
    β”œβ”€β”€ .husky
    β”œβ”€β”€ prisma/
    β”‚   └── schema.prisma
    β”œβ”€β”€ src/
    β”‚   β”œβ”€β”€ config
    β”‚   β”œβ”€β”€ constants
    β”‚   β”œβ”€β”€ controller
    β”‚   β”œβ”€β”€ interfaces
    β”‚   β”œβ”€β”€ middlewares
    β”‚   β”œβ”€β”€ modules
    β”‚   β”œβ”€β”€ router
    β”‚   β”œβ”€β”€ service
    β”‚   └── index.ts
    β”œβ”€β”€ test/
    β”‚   β”œβ”€β”€ auth
    β”‚   β”œβ”€β”€ vote
    β”œβ”€β”€ .eslintrc
    β”œβ”€β”€ .gitignore
    β”œβ”€β”€ .prettierrc.json
    β”œβ”€β”€ nodemon.json
    β”œβ”€β”€ package.json
    β”œβ”€β”€ README.md
    └── tsconfig.json

πŸ—ƒοΈ package.json

{
    "name": "Pic.me-server",
    "version": "1.0.0",
    "description": "pic.me API",
    "main": "index.js",
    "repository": "https://github.com/Pic-me-Pic-me/Pic.me-server",
    "author": "<dragontaek98@naver.com>",
    "license": "MIT",
    "scripts": {
        "dev": "nodemon",
        "build": "tsc && node dist",
        "db:pull": "npx prisma db pull",
        "db:push": "npx prisma db push",
        "generate": "npx prisma generate",
        "prepare": "husky install",
        "greeting": "hello husky!",
        "test": "yarn mocha test/**/*.ts -r ts-node/register --exit"
    },
    "dependencies": {
        "@prisma/client": "^4.8.0",
        "@types/cors": "^2.8.13",
        "aws-sdk": "^2.1286.0",
        "axios": "^1.2.2",
        "bcryptjs": "^2.4.3",
        "cors": "^2.8.5",
        "dayjs": "^1.11.7",
        "dotenv": "^16.0.3",
        "express": "^4.18.2",
        "express-validator": "^6.14.2",
        "jsonwebtoken": "^9.0.0",
        "multer": "^1.4.5-lts.1",
        "multer-s3": "^3.0.1",
        "prisma": "^4.8.0",
        "typescript": "^4.9.4"
    },
    "devDependencies": {
        "@types/bcryptjs": "^2.4.2",
        "@types/chai": "^4.3.4",
        "@types/express": "^4.17.15",
        "@types/express-validator": "^3.0.0",
        "@types/jsonwebtoken": "^9.0.0",
        "@types/mocha": "^10.0.1",
        "@types/multer": "^1.4.7",
        "@types/multer-s3": "^3.0.0",
        "@types/node": "^18.11.18",
        "@types/supertest": "^2.0.12",
        "chai": "^4.3.7",
        "eslint": "^8.31.0",
        "eslint-config-airbnb-base": "^15.0.0",
        "eslint-config-airbnb-typescript": "^17.0.0",
        "eslint-config-prettier": "^8.6.0",
        "eslint-plugin-import": "^2.26.0",
        "eslint-plugin-prettier": "^4.2.1",
        "husky": "^8.0.0",
        "mocha": "^10.2.0",
        "nodemon": "^2.0.20",
        "prettier": "^2.8.1",
        "supertest": "^6.3.3",
        "ts-node": "^10.9.1"
    }
}