Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
bhh9860 committed Dec 14, 2023
2 parents 6f703c5 + c8b64e5 commit 4e4a5c4
Show file tree
Hide file tree
Showing 7 changed files with 132 additions and 22 deletions.
4 changes: 3 additions & 1 deletion app.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ const cors = require('cors');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const { swaggerUi, specs } = require('./swagger/swagger');

const indexRouter = require('./routes/indexRouter');
const userRouter = require('./routes/userRouter');
const challengeRouter = require('./routes/challengeRouter');
const badgeRouter = require('./routes/badgeRouter');
const s3Router = require('./routes/s3Router');

require('dotenv').config();

Expand All @@ -32,7 +34,7 @@ app.use('/users', userRouter);
app.use('/challenges', challengeRouter);
app.use('/badges', badgeRouter);

const { swaggerUi, specs } = require('./swagger/swagger');
app.use('/s3', s3Router);

app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs));

Expand Down
41 changes: 24 additions & 17 deletions routes/badgeRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,30 @@ const { badgeController } = require('../controllers/badgeController');
/**
* @swagger
* paths:
* /badges:
* get:
* tags: [Badges]
* summary: "뱃지 조회"
* description: "뱃지 조회"
* responses:
* "200":
* description: "뱃지 조회 요청에 성공했습니다."
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* message:
* type: string
* /badges:
* get:
* tags: [Badges]
* summary: "뱃지 조회"
* description: "뱃지 조회"
* parameters:
* - name: "Authorization"
* in: "header"
* description: "Access Token"
* required: true
* schema:
* type: "string"
* responses:
* "200":
* description: "뱃지 조회 요청에 성공했습니다."
* content:
* application/json:
* schema:
* type: object
* properties:
* success:
* type: boolean
* message:
* type: string
*/
router.get('/', badgeController.getBadges);

Expand Down
21 changes: 21 additions & 0 deletions routes/challengeRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@ const { challengeController } = require('../controllers/challengeController');
* tags: [Challenges]
* summary: "챌린지 생성"
* description: "챌린지 생성"
* parameters:
* - name: "Authorization"
* in: "header"
* description: "Access Token"
* required: true
* schema:
* type: "string"
* requestBody:
* content:
* application/json:
Expand Down Expand Up @@ -47,6 +54,13 @@ router.post('/', challengeController.createChallenge);
* tags: [Challenges]
* summary: "챌린지 수락"
* description: "챌린지 수락"
* parameters:
* - name: "Authorization"
* in: "header"
* description: "Access Token"
* required: true
* schema:
* type: "string"
* requestBody:
* content:
* application/json:
Expand Down Expand Up @@ -116,7 +130,14 @@ router.get('/upcoming/:id', challengeController.getUpcomingChallenge);
* tags: [Challenges]
* summary: "진행 중인 챌린지의 진행 상태 조회"
* description: "진행 중인 챌린지의 진행 상태 조회"
*
* parameters:
* - name: "Authorization"
* in: "header"
* description: "Access Token"
* required: true
* schema:
* type: "string"
* - in: path
* name: id
* type: integer
Expand Down
2 changes: 1 addition & 1 deletion routes/indexRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const express = require('express');
const router = express.Router();

router.get('/', (req, res, next) => {
res.send('Hello, Dodal!');
res.redirect('/api-docs');
});

module.exports = router;
76 changes: 76 additions & 0 deletions routes/s3Router.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
const express = require('express');

const multer = require('multer');
const multerS3 = require('multer-s3');
const { S3Client } = require('@aws-sdk/client-s3');

const router = express.Router();

const s3 = new S3Client({
region: 'ap-northeast-2',
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
},
});

const upload = multer({
storage: multerS3({
s3: s3,
bucket: 'dodals3',
key: function (req, file, cb) {
cb(null, Date.now().toString());
},
}),
limits: { fileSize: 5 * 1024 * 1024 }, // 5MB
});

/**
* @swagger
* /s3/upload:
* post:
* summary: S3에 파일 업로드
* requestBody:
* content:
* multipart/form-data:
* schema:
* type: object
* properties:
* file:
* type: string
* format: binary
* responses:
* '200':
* description: File uploaded successfully
* content:
* application/json:
* example:
* success: true
* message: '이미지 업로드에 성공했습니다.'
* data: 'https://your-s3-bucket-url/file-key'
* '400':
* description: Bad request or file upload failed
* content:
* application/json:
* example:
* success: false
* message: '이미지 업로드에 실패했습니다.'
*/
router.post('/upload', upload.single('file'), (req, res) => {
try {
const fileUrl = req.file.location;
res.status(200).json({
success: true,
message: '이미지 업로드에 성공했습니다.',
data: fileUrl,
});
} catch (error) {
console.error(error);
res.status(400).json({
success: false,
message: '이미지 업로드에 실패했습니다.',
});
}
});

module.exports = router;
8 changes: 7 additions & 1 deletion routes/userRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ const { userController } = require('../controllers/userController');
* @swagger
* tags:
* name: Users
* description: 유저 추가 수정 삭제 조회
*/

/**
Expand Down Expand Up @@ -129,6 +128,13 @@ router.post('/signUp', userController.signUp);
* tags: [Users]
* summary: "유저 프로필 조회"
* description: "유저 프로필 조회"
* parameters:
* - name: "Authorization"
* in: "header"
* description: "Access Token"
* required: true
* schema:
* type: "string"
* responses:
* "200":
* description: "유저 프로필 조회에 성공했습니다."
Expand Down
2 changes: 0 additions & 2 deletions services/challengeService.js
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,6 @@ const challengeService = {

submitImage: async (req, res) => {
try {
// 이미지 업로드 미들웨어를 사용
//s3, upload 정보는 최상단에 선언
upload.single('image')(req, res, (err) => {
if (err) {
return res.status(500).json({ success: false, err: err });
Expand Down

0 comments on commit 4e4a5c4

Please sign in to comment.