diff --git a/controllers/challengeController.js b/controllers/challengeController.js index 88913c4..b05310b 100644 --- a/controllers/challengeController.js +++ b/controllers/challengeController.js @@ -87,12 +87,17 @@ const challengeController = { challengeId, }); + const myResult = result.data.filter((obj) => obj.id === myId)[0]; + const otherResult = result.data.filter((obj) => obj.id !== myId)[0]; + if (result.success) { return res.status(200).json({ success: true, message: '챌린지 조회 요청에 성공했습니다.', - data: result.data, - myId, + data: { + myResult, + otherResult, + }, }); } else { return res.status(400).json({ diff --git a/models/memberModel.js b/models/memberModel.js index 44257c6..9d3b36b 100644 --- a/models/memberModel.js +++ b/models/memberModel.js @@ -5,13 +5,33 @@ const memberModel = { const connection = await pool.getConnection(); try { - const [rows, fields] = await connection.query( - 'SELECT m.id, m.nickname, m.champion, cc.is_authenticate, cc.participation_count, ch.name AS challenge_name, ch.category, ch.reward FROM member m JOIN (SELECT cp.member_id, MAX(cc.created_at) AS max_created_at FROM challenge_participant cp JOIN challenge_certification cc ON cp.member_id = cc.member_id AND cp.challenge_id = cc.challenge_id WHERE cp.challenge_id IN (SELECT cp_inner.challenge_id FROM challenge_participant cp_inner WHERE cp_inner.member_id IN (SELECT cp_sub.member_id FROM challenge_participant cp_sub WHERE cp_sub.challenge_id = ?)) GROUP BY cp.member_id) AS latest_certification ON m.id = latest_certification.member_id JOIN challenge_certification cc ON latest_certification.member_id = cc.member_id AND latest_certification.max_created_at = cc.created_at JOIN challenge ch ON cc.challenge_id = ch.id;', + const [rows] = await connection.query( + ` + SELECT + ch.name AS challengeName, + ch.category, + ch.reward, + m.id, + m.nickname, + m.champion, + COUNT(cc.member_id) AS certificationCount + FROM + challenge ch + JOIN + challenge_participant cp ON ch.id = cp.challenge_id + JOIN + member m ON cp.member_id = m.id + LEFT JOIN + challenge_certification cc ON cp.member_id = cc.member_id AND ch.id = cc.challenge_id AND cc.is_authenticate = true + WHERE + ch.id = ? + GROUP BY + m.id; + `, [challengeId] ); + return rows; - } catch (err) { - return err; } finally { connection.release(); }