Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
fb81c77
seed 생성
aowjarkwk May 21, 2024
de043b5
상품 등록, 상품 목록 조회
aowjarkwk May 21, 2024
2f75548
스키마의 필드 순서 변경
aowjarkwk May 22, 2024
75f7202
상품 상세 조회, 상품 수정
aowjarkwk May 22, 2024
7f34ae2
상품 삭제, 좋아요, 좋아요 취소
aowjarkwk May 22, 2024
d5dbbdf
환경 변수 설정
aowjarkwk May 22, 2024
b26cab1
cors 설정
aowjarkwk May 22, 2024
3d86d69
Mongo DB를 PostgreSQL로 변경
aowjarkwk May 22, 2024
77a4ec5
상품 등록, 상품 수정, 상품 삭제
aowjarkwk May 22, 2024
175c432
seed 생성
aowjarkwk May 22, 2024
ca82e28
쿼리 파라미터 처리 기능 추가
aowjarkwk May 22, 2024
8000c77
오류 처리 - 중고마켓 API 구현
aowjarkwk May 22, 2024
16a5a58
게시글 목록 조회, 게시글 상세 조회
aowjarkwk May 22, 2024
30b2980
상품 등록 api 오류 수정
aowjarkwk May 22, 2024
ee6daef
게시글 등록, 수정, 삭제
aowjarkwk May 22, 2024
d632f32
게시글 좋아요, 좋아요 취소
aowjarkwk May 22, 2024
883250b
댓글 모델, seed, mock 데이터 생성
aowjarkwk May 23, 2024
fe528aa
중고마켓 댓글 목록 조회, 등록, 수정, 삭제
aowjarkwk May 23, 2024
2de35b2
자유게시판 댓글 목록 조회, 등록, 수정, 삭제
aowjarkwk May 23, 2024
4d09d8c
데이터 유효성 검사, 에러메시지
aowjarkwk May 23, 2024
5e3948a
writer 필드를 optional로 수정
aowjarkwk May 23, 2024
a758889
[#M10] feat : 이미지 업로드 기능 구현
aowjarkwk May 27, 2024
48704d7
[#M10] feat : 폴더 정리
aowjarkwk May 27, 2024
e1f7038
[#M10] feat : 회원가입, 로그인 기능 구현
aowjarkwk May 27, 2024
6fb96d5
[#M10] feat : 라우트 경로 통합, API에 인가 적용
aowjarkwk May 27, 2024
3a16ac9
[#M10] feat : jwt sliding session 적용
aowjarkwk May 27, 2024
98e2a96
[#M10] fix : 상품 좋아요, 좋아요 취소시 유저 확인하도록 수정
aowjarkwk May 27, 2024
94a9855
[#M10] fix : 상품 등록 시 인가 된 userId 연동
aowjarkwk May 27, 2024
00ab551
[#M10] feat : morgan을 사용하여 모든 요청의 상세 정보를 로그로 기록
aowjarkwk May 28, 2024
2f4ae01
[#M10] fix : 상품 관련 API들이 userId를 사용하도록 수정
aowjarkwk May 28, 2024
33d0c39
[#M10] fix : 자유게시판 관련 API들이 userId를 사용하도록 수정
aowjarkwk May 28, 2024
1e79c48
[#M10] feat : 좋아요, 좋아요 취소 기능에 transaction 적용
aowjarkwk May 28, 2024
3d46d25
[#M10] feat : 에러 핸들러 미들웨어 구현
aowjarkwk May 28, 2024
500f34e
[#M10] fix : MVC 패턴 적용 및 CORS 미들웨어 추가
aowjarkwk May 28, 2024
520f751
[#M10] feat: 구글 OAuth 회원가입 및 로그인 구현
aowjarkwk May 28, 2024
acec3d6
[#M10] feat: Swagger API 명세서 작성
aowjarkwk May 28, 2024
bfaa9d6
[#M11] refactor : 타입스크립트 프로젝트로 마이그레이션
aowjarkwk May 30, 2024
3191f88
[#M11] refactor : passport 관련 로직을 타입스크립트로 수정
aowjarkwk May 31, 2024
4aa7303
[#M11] refactor : 전체 코드를 타입스크립트로 수정
aowjarkwk May 31, 2024
117b703
[#M11] fix : swagger 문서 경로 수정
aowjarkwk Jun 2, 2024
a1c2df4
[#M11] writer 필드를 저장하고 불러오도록 수정
aowjarkwk Jun 2, 2024
49d46fc
[#M11] fix : 중고마켓과 자유게시판에서 이미지 등록, 수정이 제대로 되지 않는 문제 해결
aowjarkwk Jun 2, 2024
170bc41
[#M12] feat : jest 설치 및 중고마켓 상품 등록 테스트 추가
aowjarkwk Jun 3, 2024
6cb8b19
[#M12] feat : 중고마켓 product 관련 로직 테스트 추가
aowjarkwk Jun 3, 2024
90113af
[#M12] feat: auth 관련 로직 테스트 추가
aowjarkwk Jun 3, 2024
4c5daf9
[#M12] feat : structs 및 tokens 관련 테스트 추가
aowjarkwk Jun 5, 2024
e6eaf22
[#M12] feat : AWS S3을 이용한 파일 업로드 시스템 구축
aowjarkwk Jun 5, 2024
0d19009
[#M12] : feat : 개발 및 배포 환경설정 구분, 환경변수를 사용해 관리하도록 수정
aowjarkwk Jun 5, 2024
96a2d76
[#M12] feat : Presigned URL 기능으로 상품 이미지 업로드 기능 구현
aowjarkwk Jun 5, 2024
3ba7f0f
[#M12] feat : article 관련 로직 테스트 추가
aowjarkwk Jun 6, 2024
b52de6c
[#M12] feat : comment 관련 로직 테스트 추가
aowjarkwk Jun 6, 2024
f0f4dc7
[#M12] feat : image, asyncHandler 관련 테스트 추가
aowjarkwk Jun 6, 2024
e0e6562
[#M12] fix : article과 product 조회 시 images 필드가 문자열 배열로 반환되도록 수정
aowjarkwk Jun 6, 2024
f3de0e7
[#M12] fix : article, product, comment 목록 조회 시 totalCount를 함께 반환하도록 수정
aowjarkwk Jun 9, 2024
6151580
[#M12] feat: 댓글 목록을 올바르게 받아올 수 있도록 API 수정
aowjarkwk Jun 9, 2024
169c842
[#M12] fix : 좋아요 정렬을 like로 통일, 게시글 검색 시에도 좋아요 개수를 가져오도록 수정
aowjarkwk Jun 9, 2024
8b4f90e
[#M12] fix : 등록, 수정, 삭제 로직의 에러 수정
aowjarkwk Jun 9, 2024
f64babe
[#M12] fix: 댓글 등록 시 productId와 articleId가 제대로 설정되도록 수정
aowjarkwk Jun 9, 2024
6512847
[#M12] fix: 좋아요, 좋아요 취소의 http 메소드 수정
aowjarkwk Jun 14, 2024
ebde44a
[#M12] fix: 상품, 게시글 상세 조회 시 좋아요 여부를 반환하도록 수정
aowjarkwk Jun 14, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
139 changes: 139 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# Snowpack dependency directory (https://snowpack.dev/)
web_modules/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional stylelint cache
.stylelintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache

# Next.js build output
.next
out

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# vuepress v2.x temp and cache directory
.temp
.cache

# Docusaurus cache and generated files
.docusaurus

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

# Stores VSCode versions used for testing VSCode extensions
.vscode-test

# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*

# env
.env
.env.production
env.js

#misc
*.DS_Store
*.pem
3 changes: 3 additions & 0 deletions babel.config.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = {
presets: [["@babel/preset-env", { targets: { node: "current" } }], "@babel/preset-typescript"],
};
82 changes: 82 additions & 0 deletions http/articles.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# 게시글 목록 조회
GET http://localhost:3000/articles?&offset=1&limit=10&&orderBy=like

###
# 게시글 상세 조회

GET http://localhost:3000/articles/2c027764-d7ef-4a94-8399-f15ffbf8f4da

###
# 게시글 등록
POST http://localhost:3000/articles
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzkxMjA4MCwiZXhwIjoxNzE3OTEyOTgwfQ.zYdtc0Vud63UdEn1dQVkiZwc-cDbvRzPogs0CfV29nY
Content-Type: application/json

{
"title": "제가 아끼는 티모 인형입니다",
"content": "버섯 농사 짓는 모습이 너무 깜찍하지않나요?",
"imageUrl": "https://cdn.011st.com/11dims/resize/600x600/quality/75/11src/product/5575072075/B.jpg?51000000"
}

###
# 게시글 수정
PATCH http://localhost:3000/articles/802a7c2b-d3c5-48d7-8caf-13c6cc803d78
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzMwNDc2OCwiZXhwIjoxNzE3MzA1NjY4fQ.0Neh8i3gQWCU0o0y01-Co8jsW8kiXKl3dW7H6wK94pY
Content-Type: application/json

{
"title":"판다 대박이네요",
"content":"대나무를 잘 먹네요 ㄷㄷ",
"imageUrl":"https://cdn.011st.com/11dims/resize/600x600/quality/75/11src/product/5575072075/B.jpg?51000000"
}

###
# 게시글 삭제
DELETE http://localhost:3000/articles/dc196ae3-0d72-4f4d-9057-a83e6bece8bc
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzEyODU1MiwiZXhwIjoxNzE3MTI5NDUyfQ.OAcMKEyrlzrtCOlz4HXu3mmDdEQ0s-oYBlbvlHWAJUY

###
# 게시글 좋아요
PATCH http://localhost:3000/articles/2c027764-d7ef-4a94-8399-f15ffbf8f4da/like
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzEyODU1MiwiZXhwIjoxNzE3MTI5NDUyfQ.OAcMKEyrlzrtCOlz4HXu3mmDdEQ0s-oYBlbvlHWAJUY

###
# 게시글 좋아요 취소
PATCH http://localhost:3000/articles/2c027764-d7ef-4a94-8399-f15ffbf8f4da/unlike
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzEyODU1MiwiZXhwIjoxNzE3MTI5NDUyfQ.OAcMKEyrlzrtCOlz4HXu3mmDdEQ0s-oYBlbvlHWAJUY




###
# 자유게시판 댓글 조회
GET http://localhost:3000/articles/287cb4c8-48c5-49e1-82fa-a1b9e2d7b4e3/comments

###
# 자유게시판 댓글 커서 조회
GET http://localhost:3000/articles/287cb4c8-48c5-49e1-82fa-a1b9e2d7b4e3/comments?cursor=2b3c4d5e-6f7g-8h9i-0j1k-2l3m4n5o6p7q

###
# 자유게시판 댓글 등록
POST http://localhost:3000/articles/287cb4c8-48c5-49e1-82fa-a1b9e2d7b4e3/comments
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzkxMjA4MCwiZXhwIjoxNzE3OTEyOTgwfQ.zYdtc0Vud63UdEn1dQVkiZwc-cDbvRzPogs0CfV29nY

{
"content":"판다가 너무 귀여워요2"
}

###
# 자유게시판 댓글 수정
PATCH http://localhost:3000/articles/287cb4c8-48c5-49e1-82fa-a1b9e2d7b4e3/comments/1d896d0e-55e9-4075-ac77-4adde865f743
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzEyODU1MiwiZXhwIjoxNzE3MTI5NDUyfQ.OAcMKEyrlzrtCOlz4HXu3mmDdEQ0s-oYBlbvlHWAJUY

{
"content":"판다가 너무 귀여워요 수정"
}

###
# 자유게시판 댓글 삭제
DELETE http://localhost:3000/articles/287cb4c8-48c5-49e1-82fa-a1b9e2d7b4e3/comments/1d896d0e-55e9-4075-ac77-4adde865f743
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzEyODU1MiwiZXhwIjoxNzE3MTI5NDUyfQ.OAcMKEyrlzrtCOlz4HXu3mmDdEQ0s-oYBlbvlHWAJUY
29 changes: 29 additions & 0 deletions http/auth.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
POST http://localhost:3000/auth/signUp
Content-Type: application/json

{
"email":"test52@gmail.com",
"password":"pandapower",
"name":"김판다",
"nickname":"판다의 왕"
}

###
# 로그인

POST http://localhost:3000/auth/signIn
Content-Type: application/json

{
"email":"test2@gmail.com",
"password":"pandapower"
}

###
# 토큰 재발급
POST http://localhost:3000/auth/refresh-token
Content-Type: application/json

{
"refreshToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzQ1NjM1MywiZXhwIjoxNzE4MDYxMTUzfQ.DiX7xqEs5maByaq_RhGt382Xde4ILk9rXk95mtOraIE"
}
93 changes: 93 additions & 0 deletions http/products.http
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@

# 상품 조회 쿼리 x
GET http://localhost:3000/products

###
# 상품 조회 쿼리 o

GET http://localhost:3000/products?offset=1&limit=2&keyword=판다&orderBy=favorite

###
# 상품 조회 검색어 테스트
GET http://localhost:3000/products?keyword=판다

###
# 상품 상세 조회
GET http://localhost:3000/products/377ce06c-23c8-46de-b86f-2cfd43d41cbc

###
# 상품 등록
POST http://localhost:3000/products
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzkxMjA4MCwiZXhwIjoxNzE3OTEyOTgwfQ.zYdtc0Vud63UdEn1dQVkiZwc-cDbvRzPogs0CfV29nY
Content-Type: application/json

{
"name": "판다랑 불곰 교환원해요",
"description": "세종시청에서 교환원합니다.",
"price": 20000,
"tags": ["판다", "불곰"],
"imageUrl": "://www.wishbucket.io/_next/image?url=https%3A%2F%2Fd2gfz7wkiigkmv.cloudfront.net%2Fpickin%2F2%2F1%2F2%2FHereyhSJRMOmUw7I5uWAxg&w=640&q=75"
}

###
# 상품 수정
PATCH http://localhost:3000/products/d4e8c9a0-5d45-4c9f-9b4b-7626f3c9c9a9
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzkxMjA4MCwiZXhwIjoxNzE3OTEyOTgwfQ.zYdtc0Vud63UdEn1dQVkiZwc-cDbvRzPogs0CfV29nY
Content-Type: application/json

{
"name":"판다 안팔려서 안판다",
"description":"안판다고 했지만 사실은 판다",
"price":7000,
"tags":["판다","안판다"],
"imageUrl": "https://www.wishbucket.io/_next/image?url=https%3A%2F%2Fd2gfz7wkiigkmv.cloudfront.net%2Fpickin%2F2%2F1%2F2%2FHereyhSJRMOmUw7I5uWAxg&w=640&q=75"
}

###
# 상품 삭제
DELETE http://localhost:3000/products/d4e8c9a0-5d45-4c9f-9b4b-7626f3c9c9a9
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzEyODc3NiwiZXhwIjoxNzE3MTI5Njc2fQ.1P-sxAljy-HP-1LQ3F53tJJLCry3--KdL6mJSZSy4bc

###
# 상품 좋아요
PATCH http://localhost:3000/products/377ce06c-23c8-46de-b86f-2cfd43d41cbc/like
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzkxMjA4MCwiZXhwIjoxNzE3OTEyOTgwfQ.zYdtc0Vud63UdEn1dQVkiZwc-cDbvRzPogs0CfV29nY

###
# 상품 좋아요 취소
PATCH http://localhost:3000/products/377ce06c-23c8-46de-b86f-2cfd43d41cbc/unlike
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzEyODc3NiwiZXhwIjoxNzE3MTI5Njc2fQ.1P-sxAljy-HP-1LQ3F53tJJLCry3--KdL6mJSZSy4bc

###
# 상품 댓글 조회
GET http://localhost:3000/products/377ce06c-23c8-46de-b86f-2cfd43d41cbc/comments

###
# 상품 댓글 커서 조회
GET http://localhost:3000/products/377ce06c-23c8-46de-b86f-2cfd43d41cbc/comments?cursor=2b3c4d5e-6f7g-8h9i-0j1k-2l3m4n5o6p7q

###
# 상품 댓글 등록
POST http://localhost:3000/products/377ce06c-23c8-46de-b86f-2cfd43d41cbc/comments
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzEyODc3NiwiZXhwIjoxNzE3MTI5Njc2fQ.1P-sxAljy-HP-1LQ3F53tJJLCry3--KdL6mJSZSy4bc
Content-Type: application/json

{
"content":"판다가 너무 귀여워요",
"writer":"판다사랑나라사랑"
}

###
# 상품 댓글 수정
PATCH http://localhost:3000/products/377ce06c-23c8-46de-b86f-2cfd43d41cbc/comments/3b2c5412-f7cd-454a-87d5-fee77aaab8d0
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzEyODc3NiwiZXhwIjoxNzE3MTI5Njc2fQ.1P-sxAljy-HP-1LQ3F53tJJLCry3--KdL6mJSZSy4bc
Content-Type: application/json

{
"content":"판다가 너무 귀여워요 수정"
}

###
# 상품 댓글 삭제
DELETE http://localhost:3000/products/377ce06c-23c8-46de-b86f-2cfd43d41cbc/comments/3b2c5412-f7cd-454a-87d5-fee77aaab8d0
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTcxNzEyODc3NiwiZXhwIjoxNzE3MTI5Njc2fQ.1P-sxAljy-HP-1LQ3F53tJJLCry3--KdL6mJSZSy4bc
9 changes: 9 additions & 0 deletions jest.config.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module.exports = {
transform: {
"^.+\\.[tj]sx?$": "babel-jest",
},
clearMocks: true,
preset: "ts-jest",
testEnvironment: "node",
setupFilesAfterEnv: ["./src/singleton.ts"],
};
6 changes: 6 additions & 0 deletions nodemon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"watch": ["src"],
"ext": "ts",
"ignore": ["node_modules"],
"exec": "tsx src/app.ts"
}
Loading