Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
132 commits
Select commit Hold shift + click to select a range
e4d0d17
[init] initial commit
intwocave Jul 22, 2025
bdb55dd
Merge branch 'codeit-bootcamp-nodejs:main' into sprint2
intwocave Jul 22, 2025
181c2c3
[chore] move all files into mission_2 dir
intwocave Aug 1, 2025
5f834ca
[init] sprint_3
intwocave Aug 1, 2025
bd4fb7b
[feat] new schema model 'Product' added
intwocave Aug 1, 2025
05888a3
[chore] initial migration and generating prisma stuff
intwocave Aug 1, 2025
7789c21
[feat] switch CJS to MJS in package.json
intwocave Aug 1, 2025
559fed4
[feat] basic boilerplate for express.js
intwocave Aug 1, 2025
2456f8b
[feat] implemented product uploading feature
intwocave Aug 1, 2025
7609547
[feat] added request logging middleware
intwocave Aug 1, 2025
72d629b
[chore] spell error
intwocave Aug 1, 2025
ad0a92d
[chore] improved status code
intwocave Aug 1, 2025
ed8e034
[feat] implemented product inquiry
intwocave Aug 1, 2025
54def3a
[feat] use logRequest middleware as global
intwocave Aug 1, 2025
8ed26cf
[feat] implemented product patch
intwocave Aug 1, 2025
02c048b
[feat] implemeneted delete product
intwocave Aug 1, 2025
18ceee1
[fixed] bug fixed Product DELETE
intwocave Aug 1, 2025
f309871
[feat] implemented inquiry all products
intwocave Aug 1, 2025
8d82340
[chore] add info about endpoints
intwocave Aug 1, 2025
ea9775f
[feat] introduct Express router to products.js
intwocave Aug 1, 2025
35862e5
[chore] print originalUrl (full path)
intwocave Aug 1, 2025
a492b50
[feat] implement sorting
intwocave Aug 1, 2025
d4a321a
[feat] new schema model 'Article' added
intwocave Aug 1, 2025
ff194c4
[chore] migrate for model 'Article'
intwocave Aug 1, 2025
f8653a5
[feat] implement article upload
intwocave Aug 1, 2025
3c875d8
[feat] add function inquiring a certain article
intwocave Aug 1, 2025
511d279
[feat] add function patching a certain article
intwocave Aug 1, 2025
14cbe4a
[chore] misspelled
intwocave Aug 1, 2025
5d19442
[feat] add a function deleting a particular article
intwocave Aug 1, 2025
473c997
[feat] GET Product with search term
intwocave Aug 1, 2025
3ead61b
[feat] GET Article with search term
intwocave Aug 1, 2025
977dfce
[feat] add 'articleRouter'
intwocave Aug 1, 2025
7069cbd
[feat] add schema model "Comment"
intwocave Aug 4, 2025
ea703a6
[chore] schema model "Article" misspelled
intwocave Aug 4, 2025
c478438
[chore] migrate model Comment
intwocave Aug 4, 2025
89565e6
[feat] add products-comments methods
intwocave Aug 7, 2025
3aecb80
[feat] add basic errorHandler
intwocave Aug 7, 2025
cf8b4f4
[feat] add articles-comments methods
intwocave Aug 7, 2025
bd2749e
[feat] add onDelete Cascade to model "Comments"
intwocave Aug 7, 2025
c9055a2
[feat] add cors library (not configured yet)
intwocave Aug 7, 2025
8328aba
[chore] correct spelling
intwocave Aug 7, 2025
48fb9bb
[feat] add cors option
intwocave Aug 15, 2025
ba920bf
[feat] add seed file
intwocave Aug 15, 2025
5e9f1d6
[feat] implement cursor pagination
intwocave Aug 17, 2025
56e38a9
[feat] modulize validation middleware
intwocave Aug 17, 2025
68aafed
[feat] install 'multer' lib
intwocave Aug 17, 2025
a894f77
[chore] add DS_store to gitignore
intwocave Aug 17, 2025
e1cf08d
[feat] add image upload API endpoint
intwocave Aug 17, 2025
9b5c00e
feat: add gitignore for mission4
intwocave Sep 4, 2025
3e0c736
chore: init for mission4
intwocave Sep 4, 2025
e2f7f62
fix: fix misc errors
intwocave Sep 5, 2025
edafed7
refactor: refactor misson 3 (incomplete)
intwocave Sep 8, 2025
a1bf4d5
feat: add scheme model "User"
intwocave Sep 8, 2025
ff5fbc2
feat: add userId foreign key to model Article, Product, Comment
intwocave Sep 8, 2025
19d13d9
feat: add verifyAccessToken
intwocave Sep 8, 2025
ddda8a3
feat: article-user authentication
intwocave Sep 9, 2025
11618a0
refactor: product
intwocave Sep 9, 2025
d88ac92
feat: implement existence check for articles and products
intwocave Sep 9, 2025
bf6f317
feat: get user's products
intwocave Sep 9, 2025
616dd9a
feat: add refreshToken column to User model
intwocave Sep 9, 2025
06a1305
feat: install and use cookie-parser middleware
intwocave Sep 9, 2025
c4b480c
feat: implement refresh token functionality
intwocave Sep 9, 2025
02fccfd
feat: new directory mission_5 with initial files
intwocave Sep 11, 2025
bd74d86
refactor: rename extensions from .js to .ts
intwocave Sep 17, 2025
26ce198
feat: update .gitignore to exclude dist
intwocave Sep 17, 2025
e438e9e
feat: update packages and npm scripts
intwocave Sep 17, 2025
e4764f6
refactor: migrate from js to ts
intwocave Sep 17, 2025
57c505a
feat: add dev script for development
intwocave Sep 17, 2025
fcd1e69
init: copy mission 5 to mission 8
intwocave Nov 9, 2025
914afa1
chore: use "tsx watch <file>" instead of ts-node and nodemon
intwocave Nov 9, 2025
19789a8
feat: add sample env file and update main.ts for environment variable…
intwocave Nov 9, 2025
f477dc3
chore: update sample env
intwocave Nov 9, 2025
5593b58
chore: add seed.ts
intwocave Nov 9, 2025
da2ac64
feat: install socket.io package and create socket.ts file
intwocave Nov 9, 2025
8bb41dd
feat: add notification model and likedproduct model
intwocave Nov 9, 2025
c7f2bd1
feat: add notification service
intwocave Nov 9, 2025
3e3ba5b
feat: implement Socket.IO
intwocave Nov 9, 2025
63e9497
feat: implement like feature
intwocave Nov 9, 2025
8a42e58
refactor: container export
intwocave Nov 9, 2025
4fa1356
feat: new comment real-time notification
intwocave Nov 9, 2025
cc9b999
fix: syntax error
intwocave Nov 9, 2025
f8a376c
fix: import error
intwocave Nov 9, 2025
a751da3
test: test html
intwocave Nov 9, 2025
24aa80c
fix: misspell
intwocave Nov 9, 2025
22e7393
test: testpage
intwocave Nov 9, 2025
fa972ce
feat: copy mission_8 to mission_9
intwocave Nov 16, 2025
c84d3aa
feat: install jest, @types/jest, ts-jest for testing
intwocave Nov 16, 2025
3b762e2
feat: add jest.config.js
intwocave Nov 16, 2025
8dac114
feat: add packages supertest @types/supertest
intwocave Nov 16, 2025
01ae80b
feat: add test directory for testing purposes
intwocave Nov 16, 2025
aaec5de
feat: add test script to package.json
intwocave Nov 16, 2025
de5b191
feat: use babel-jest instead of ts-jest for testing
intwocave Nov 16, 2025
2af8c71
feat: empty test files
intwocave Nov 16, 2025
e64d9ad
feat: update babel config
intwocave Nov 16, 2025
4903d13
feat: update test configurations
intwocave Nov 16, 2025
e8c761d
refactor: export httpServer from app.ts for testing
intwocave Nov 16, 2025
6d90f00
feat: coverage files
intwocave Nov 16, 2025
1dab62e
feat: remove useless test files
intwocave Nov 16, 2025
ad23ada
feat: use ts-jest instaed of babel-jest
intwocave Nov 16, 2025
ea701f4
feat: exclude test files from build
intwocave Nov 16, 2025
74cf975
feat: fix jest error
intwocave Nov 16, 2025
fd01653
feat: update seed
intwocave Nov 16, 2025
6421883
chore: comment out deprecated configs
intwocave Nov 16, 2025
be605d1
feat: add test files
intwocave Nov 16, 2025
7a27232
feat: json
intwocave Nov 17, 2025
a7021e0
feat: add onDelete Cascade
intwocave Nov 17, 2025
c2be636
feat: hide console message
intwocave Nov 17, 2025
9aa3579
feat: add test files
intwocave Nov 17, 2025
d94fb3f
fix
intwocave Nov 17, 2025
2fd4077
feat: add "@jest/globals" package
intwocave Nov 17, 2025
6280388
feat: add additional test
intwocave Nov 17, 2025
0b2f789
feat: update .gitignore
intwocave Nov 24, 2025
dfb71da
feat: add .env.sample file for environment variable management
intwocave Nov 24, 2025
dfc507f
Merge branch 'mission_9'
intwocave Nov 24, 2025
25e255f
chore: copy mission_9 to mission_10
intwocave Nov 24, 2025
d9e86b2
chore: gitkeep
intwocave Nov 25, 2025
511dc94
feat: update .env.sample with new S3 configurations
intwocave Nov 25, 2025
7129744
feat: add screenshots of ec2 secure group
intwocave Nov 25, 2025
21da92b
feat: s3 업로드를 위한 패키지 추가
intwocave Nov 27, 2025
0ccfe21
feat: 이미지 업로드 위치를 로컬에서 s3 저장소로 변경
intwocave Nov 27, 2025
e848461
feat: NODE_ENV가 production일 때만 S3 업로드를 사용하도록 설정
intwocave Nov 27, 2025
167d902
chore
intwocave Nov 27, 2025
ceb5c70
feat: production 환경에서 rds 사용
intwocave Nov 27, 2025
383824a
chore: rds 설정 스크린샷
intwocave Nov 27, 2025
0e81a78
feat: fix import
intwocave Nov 27, 2025
33954e6
feat: update env.d.ts with new environment variables
intwocave Nov 28, 2025
1d33d64
feat: add nginx configuration files for mission 10
intwocave Nov 28, 2025
34a67f0
feat: copy mission 10 to mission 11
intwocave Nov 28, 2025
55c12a9
feat: add github actions
intwocave Dec 2, 2025
51cf853
feat: ci/cd
intwocave Jan 16, 2026
49bb5d0
feat: ok sort
intwocave Jan 21, 2026
31fb5a4
feat: ok sort
intwocave Jan 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
JWT_SECRET="your-super-secret-key"
DATABASE_URL="postgresql://userid:passwd@localhost:5432/pandamarket"
53 changes: 53 additions & 0 deletions .github/workflows/github-actions.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: CI/CD Pipeline for Mission 11

on:
pull_request:
branches:
- '**'
push:
branches:
- main

jobs:
test:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest

defaults:
run:
working-directory: ./mission_11

steps:
- name: Check out repository code
uses: actions/checkout@v5

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install dependencies
run: npm install

- name: Run tests
run: npm test

deploy:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs: test
runs-on: ubuntu-latest

steps:
- name: Check out repository code
uses: actions/checkout@v5

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2

- name: Deploy to AWS
run: |
echo "Deploying to AWS..."
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules/
.DS_Store
.env
migrations/
15 changes: 15 additions & 0 deletions mission_10/.env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Node Env
NODE_ENV="development"

# JWT
JWT_SECRET="your-super-secret-key"

# POSTGRESQL
DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase"
PRODUCTION_DATABASE_URL="YOUR_PRODUCTION_DATABASE_URL"

# AWS S3
AWS_ACCESS_KEY_ID="your-aws-access-key-id"
AWS_SECRET_ACCESS_KEY="your-aws-secret-access-key"
AWS_S3_BUCKET_NAME="your-s3-bucket-name"
AWS_REGION="your-aws-region"
11 changes: 11 additions & 0 deletions mission_10/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
node_modules
/dist

# Keep environment variables out of version control
.env

/generated/prisma
/prisma/migrations

todo.list
uploads/
6 changes: 6 additions & 0 deletions mission_10/coverage/clover.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1763298955510" clover="3.2.0">
<project timestamp="1763298955510" name="All files">
<metrics statements="0" coveredstatements="0" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0" elements="0" coveredelements="0" complexity="0" loc="0" ncloc="0" packages="0" files="0" classes="0"/>
</project>
</coverage>
1 change: 1 addition & 0 deletions mission_10/coverage/coverage-final.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
224 changes: 224 additions & 0 deletions mission_10/coverage/lcov-report/base.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,224 @@
body, html {
margin:0; padding: 0;
height: 100%;
}
body {
font-family: Helvetica Neue, Helvetica, Arial;
font-size: 14px;
color:#333;
}
.small { font-size: 12px; }
*, *:after, *:before {
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
}
h1 { font-size: 20px; margin: 0;}
h2 { font-size: 14px; }
pre {
font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
margin: 0;
padding: 0;
-moz-tab-size: 2;
-o-tab-size: 2;
tab-size: 2;
}
a { color:#0074D9; text-decoration:none; }
a:hover { text-decoration:underline; }
.strong { font-weight: bold; }
.space-top1 { padding: 10px 0 0 0; }
.pad2y { padding: 20px 0; }
.pad1y { padding: 10px 0; }
.pad2x { padding: 0 20px; }
.pad2 { padding: 20px; }
.pad1 { padding: 10px; }
.space-left2 { padding-left:55px; }
.space-right2 { padding-right:20px; }
.center { text-align:center; }
.clearfix { display:block; }
.clearfix:after {
content:'';
display:block;
height:0;
clear:both;
visibility:hidden;
}
.fl { float: left; }
@media only screen and (max-width:640px) {
.col3 { width:100%; max-width:100%; }
.hide-mobile { display:none!important; }
}

.quiet {
color: #7f7f7f;
color: rgba(0,0,0,0.5);
}
.quiet a { opacity: 0.7; }

.fraction {
font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
font-size: 10px;
color: #555;
background: #E8E8E8;
padding: 4px 5px;
border-radius: 3px;
vertical-align: middle;
}

div.path a:link, div.path a:visited { color: #333; }
table.coverage {
border-collapse: collapse;
margin: 10px 0 0 0;
padding: 0;
}

table.coverage td {
margin: 0;
padding: 0;
vertical-align: top;
}
table.coverage td.line-count {
text-align: right;
padding: 0 5px 0 20px;
}
table.coverage td.line-coverage {
text-align: right;
padding-right: 10px;
min-width:20px;
}

table.coverage td span.cline-any {
display: inline-block;
padding: 0 5px;
width: 100%;
}
.missing-if-branch {
display: inline-block;
margin-right: 5px;
border-radius: 3px;
position: relative;
padding: 0 4px;
background: #333;
color: yellow;
}

.skip-if-branch {
display: none;
margin-right: 10px;
position: relative;
padding: 0 4px;
background: #ccc;
color: white;
}
.missing-if-branch .typ, .skip-if-branch .typ {
color: inherit !important;
}
.coverage-summary {
border-collapse: collapse;
width: 100%;
}
.coverage-summary tr { border-bottom: 1px solid #bbb; }
.keyline-all { border: 1px solid #ddd; }
.coverage-summary td, .coverage-summary th { padding: 10px; }
.coverage-summary tbody { border: 1px solid #bbb; }
.coverage-summary td { border-right: 1px solid #bbb; }
.coverage-summary td:last-child { border-right: none; }
.coverage-summary th {
text-align: left;
font-weight: normal;
white-space: nowrap;
}
.coverage-summary th.file { border-right: none !important; }
.coverage-summary th.pct { }
.coverage-summary th.pic,
.coverage-summary th.abs,
.coverage-summary td.pct,
.coverage-summary td.abs { text-align: right; }
.coverage-summary td.file { white-space: nowrap; }
.coverage-summary td.pic { min-width: 120px !important; }
.coverage-summary tfoot td { }

.coverage-summary .sorter {
height: 10px;
width: 7px;
display: inline-block;
margin-left: 0.5em;
background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
}
.coverage-summary .sorted .sorter {
background-position: 0 -20px;
}
.coverage-summary .sorted-desc .sorter {
background-position: 0 -10px;
}
.status-line { height: 10px; }
/* yellow */
.cbranch-no { background: yellow !important; color: #111; }
/* dark red */
.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
.low .chart { border:1px solid #C21F39 }
.highlighted,
.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{
background: #C21F39 !important;
}
/* medium red */
.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
/* light red */
.low, .cline-no { background:#FCE1E5 }
/* light green */
.high, .cline-yes { background:rgb(230,245,208) }
/* medium green */
.cstat-yes { background:rgb(161,215,106) }
/* dark green */
.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
.high .chart { border:1px solid rgb(77,146,33) }
/* dark yellow (gold) */
.status-line.medium, .medium .cover-fill { background: #f9cd0b; }
.medium .chart { border:1px solid #f9cd0b; }
/* light yellow */
.medium { background: #fff4c2; }

.cstat-skip { background: #ddd; color: #111; }
.fstat-skip { background: #ddd; color: #111 !important; }
.cbranch-skip { background: #ddd !important; color: #111; }

span.cline-neutral { background: #eaeaea; }

.coverage-summary td.empty {
opacity: .5;
padding-top: 4px;
padding-bottom: 4px;
line-height: 1;
color: #888;
}

.cover-fill, .cover-empty {
display:inline-block;
height: 12px;
}
.chart {
line-height: 0;
}
.cover-empty {
background: white;
}
.cover-full {
border-right: none !important;
}
pre.prettyprint {
border: none !important;
padding: 0 !important;
margin: 0 !important;
}
.com { color: #999 !important; }
.ignore-none { color: #999; font-weight: normal; }

.wrapper {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -48px;
}
.footer, .push {
height: 48px;
}
Loading
Loading