From 04004ee24d049b5326672fc6a88ede804d8ef687 Mon Sep 17 00:00:00 2001
From: Wo-ogie <siwall0105@gmail.com>
Date: Tue, 5 Dec 2023 13:02:20 +0900
Subject: [PATCH] =?UTF-8?q?feat:=20=EC=95=BD=EC=86=8D=20=EB=AA=A9=EC=A0=81?=
 =?UTF-8?q?=EB=B3=84=20=EB=A7=8E=EC=9D=B4=20=EC=84=A0=ED=83=9D=ED=95=9C=20?=
 =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20top=203?=
 =?UTF-8?q?=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EB=A5=BC=20=EC=A1=B0=ED=9A=8C?=
 =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 controllers/meeting.js |  8 +++++---
 repository/meeting.js  | 11 +++++------
 routes/meeting.js      |  4 ++--
 3 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/controllers/meeting.js b/controllers/meeting.js
index 1b3a1f0..6bd22ca 100644
--- a/controllers/meeting.js
+++ b/controllers/meeting.js
@@ -196,14 +196,16 @@ exports.getMeetingDetailById = async (req, res, next) => {
   }
 };
 
-exports.getMostConfirmedTime = async (req, res, next) => {
+exports.getTopThreeConfirmedTimes = async (req, res, next) => {
   const { purpose } = req.query;
   if (!purpose) {
     return res.status(400).json({ message: 'Purpose is required' });
   }
   try {
-    const result = await meetingRepositotry.getMostConfirmedTime(purpose);
-    return res.json(result);
+    const results = await meetingRepositotry.getTopThreeConfirmedTimes(purpose);
+    return res.json({
+      topThreeConfirmedTimes: results,
+    });
   } catch (error) {
     return next(error);
   }
diff --git a/repository/meeting.js b/repository/meeting.js
index d634c3f..dd49fcd 100644
--- a/repository/meeting.js
+++ b/repository/meeting.js
@@ -4,7 +4,7 @@ const {
   createMostConfirmedTimeNotFoundError,
 } = require('../errors/meetingErrors');
 
-exports.getMostConfirmedTime = async (purpose) => {
+exports.getTopThreeConfirmedTimes = async (purpose) => {
   const query = `
       SELECT EXTRACT(HOUR FROM m.confirmed_time) AS confirmed_time_hour,
              COUNT(1)                            AS confirmed_time_count
@@ -18,14 +18,13 @@ exports.getMostConfirmedTime = async (purpose) => {
   const params = {
     replacements: { purpose },
     type: Sequelize.QueryTypes.SELECT,
-    plain: true,
   };
-  const result = await sequelize.query(query, params);
-  if (!result) {
+  const results = await sequelize.query(query, params);
+  if (!results || results.length === 0) {
     throw createMostConfirmedTimeNotFoundError();
   }
-  return {
+  return results.slice(0, 3).map((result) => ({
     hour: result.confirmed_time_hour,
     count: result.confirmed_time_count,
-  };
+  }));
 };
diff --git a/routes/meeting.js b/routes/meeting.js
index 4ad462d..85952a9 100644
--- a/routes/meeting.js
+++ b/routes/meeting.js
@@ -5,7 +5,7 @@ const {
   entry,
   getMeetingById,
   getMeetingDetailById,
-  getMostConfirmedTime,
+  getTopThreeConfirmedTimes,
   closeMeeting,
   confirmTime,
 } = require('../controllers/meeting');
@@ -14,7 +14,7 @@ const router = express.Router();
 
 router.post('/', createMeeting);
 
-router.get('/most-confirmed-time', getMostConfirmedTime);
+router.get('/top-three-confirmed-times', getTopThreeConfirmedTimes);
 
 router.post('/:meetingId/entry', entry);
 
-- 
GitLab