Skip to content

Commit

Permalink
알람 전체 조회, 새로운 알람 조회 API
Browse files Browse the repository at this point in the history
  • Loading branch information
wook-hyung committed Dec 14, 2023
1 parent 93405c2 commit d2b8e8e
Show file tree
Hide file tree
Showing 5 changed files with 207 additions and 0 deletions.
59 changes: 59 additions & 0 deletions controllers/alarmController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
const { alarmService } = require('../services/alarmService');
const { getUserIdFromJwt } = require('../utils/jwt');

const alarmController = {
getAlarms: async (req, res) => {
// 유저의 알람 전체 조회 및 읽음 상태 모두 업데이트
try {
const result = await alarmService.getAlarms({
memberId: getUserIdFromJwt(req.headers.authorization),
});

return res.status(200).json({
success: true,
message: '알람 조회에 성공했습니다.',
data: {
alarms: result,
},
});
} catch (err) {
return res.status(400).json({
success: false,
message: '알람 조회에 실패했습니다.',
err: err.message,
});
}
},

getNewAlarmExist: async (req, res) => {
try {
const result = await alarmService.getNewAlarmExist({
memberId: getUserIdFromJwt(req.headers.authorization),
});

return res.status(200).json({
success: true,
message: '새로운 알람 존재 여부 조회에 성공했습니다.',
data: {
isNewAlarmExist: result,
},
});
} catch (err) {
return res.status(400).json({
success: false,
message: '새로운 알람 존재 여부 조회에 실패했습니다.',
err: err.message,
});
}
},
approveAlarm: async (req, res) => {
// 상대방의 인증 요청 알람을 승인
},
rejectAlarm: async (req, res) => {
// 상대방의 인증 요청 알람을 거절
},
};

module.exports = {
alarmController,
};
35 changes: 35 additions & 0 deletions models/alarmModel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
const { pool } = require('./pool');

const alarmModel = {
getAlarms: async ({ memberId }) => {
const connection = await pool.getConnection();

const [rows, fields] = await connection.query('SELECT * FROM alarm WHERE member_id = ? ORDER BY id DESC', [
memberId,
]);
return rows;
},

updateAlarmStatus: async ({ memberId }) => {
const connection = await pool.getConnection();

const [rows, fields] = await connection.query('UPDATE alarm SET is_read = 1 WHERE member_id = ? AND is_read = 0', [
memberId,
]);
return rows;
},

findNewAlarmExist: async ({ memberId }) => {
const connection = await pool.getConnection();

const [rows, fields] = await connection.query('SELECT * FROM alarm WHERE member_id = ? AND is_read = 0', [
memberId,
]);

return rows.length > 0;
},
};

module.exports = {
alarmModel,
};
10 changes: 10 additions & 0 deletions models/challengeCertificationModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,16 @@ const challengeCertificationModel = {

return rows;
},

findAuthenticateImageUrlByChallengeCertificationId: async ({ challengeCertificationId }) => {
const connection = await pool.getConnection();

const [rows, fields] = await connection.query(
`SELECT authenticate_image_url FROM challenge_certification WHERE id = ${challengeCertificationId}`
);

return rows;
},
};

module.exports = {
Expand Down
67 changes: 67 additions & 0 deletions routes/alarmRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
const express = require('express');

const router = express.Router();

const { alarmController } = require('../controllers/alarmController');

/**
* @swagger
* paths:
* /alarms:
* get:
* tags: [Alarms]
* 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('/', alarmController.getAlarms);

/**
* @swagger
* paths:
* /alarms/new:
* get:
* tags: [Alarms]
* 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('/new', alarmController.getNewAlarmExist);

module.exports = router;
36 changes: 36 additions & 0 deletions services/alarmService.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const { alarmModel } = require('../models/alarmModel');
const { challengeCertificationModel } = require('../models/challengeCertificationModel');

const alarmService = {
getAlarms: async ({ memberId }) => {
// 유저의 알람 전체 조회 및 읽음 상태 모두 업데이트
const alarms = await alarmModel.getAlarms({ memberId });
await alarmModel.updateAlarmStatus({ memberId });

const result = Promise.all(
alarms.map(async (alarm) => {
const [{ authenticate_image_url }] =
await challengeCertificationModel.findAuthenticateImageUrlByChallengeCertificationId({
challengeCertificationId: alarm.challenge_certification_id,
});

return {
...alarm,
authenticateImageUrl: authenticate_image_url,
};
})
);

return result;
},

getNewAlarmExist: async ({ memberId }) => {
const result = await alarmModel.findNewAlarmExist({ memberId });

return result;
},
};

module.exports = {
alarmService,
};

0 comments on commit d2b8e8e

Please sign in to comment.