Skip to content
Snippets Groups Projects
Commit e6652c71 authored by 조대희's avatar 조대희
Browse files

refactor: meeting pagination 추가 (#19)

parent a7b49002
No related branches found
No related tags found
No related merge requests found
...@@ -43,8 +43,23 @@ class MeetingController { ...@@ -43,8 +43,23 @@ class MeetingController {
async getMeetings(req, res) { async getMeetings(req, res) {
try { try {
const userId = req.user.id; // 인증 미들웨어를 통해 설정된 사용자 ID const userId = req.user.id; // 인증 미들웨어를 통해 설정된 사용자 ID
const meetings = await MeetingService.getMeetings(userId); const page = parseInt(req.query.page) || 0;
res.status(200).json(meetings); const size = parseInt(req.query.size) || 20;
const meetings = await MeetingService.getMeetings(userId, {
limit: size,
offset: page * size
});
res.status(200).json({
success: true,
data: {
content: meetings.content,
page: page,
size: size,
hasNext: meetings.hasNext
}
});
} catch (err) { } catch (err) {
console.error('모임 목록 조회 오류:', err); console.error('모임 목록 조회 오류:', err);
res.status(500).json({ error: err.message || '모임 목록 조회 실패' }); res.status(500).json({ error: err.message || '모임 목록 조회 실패' });
......
...@@ -281,7 +281,9 @@ class MeetingService { ...@@ -281,7 +281,9 @@ class MeetingService {
} }
async getMeetings(userId) { async getMeetings(userId, pagination) {
const { limit = 20, offset = 0 } = pagination;
const meetings = await Meeting.findAll({ const meetings = await Meeting.findAll({
attributes: [ attributes: [
'id', 'id',
...@@ -307,10 +309,14 @@ class MeetingService { ...@@ -307,10 +309,14 @@ class MeetingService {
as: 'creator', as: 'creator',
attributes: ['name'], attributes: ['name'],
} }
] ],
order: [['createdAt', 'DESC']],
offset
}); });
return Promise.all(meetings.map(async (meeting) => { const hasNext = meetings.length > limit;
const content = await Promise.all(
meetings.slice(0, limit).map(async (meeting) => {
const isParticipant = await MeetingParticipant.findOne({ const isParticipant = await MeetingParticipant.findOne({
where: { where: {
meeting_id: meeting.id, meeting_id: meeting.id,
...@@ -326,7 +332,13 @@ class MeetingService { ...@@ -326,7 +332,13 @@ class MeetingService {
const creatorName = meeting.creator ? meeting.creator.name : 'Unknown'; const creatorName = meeting.creator ? meeting.creator.name : 'Unknown';
return new MeetingResponseDTO(meeting, !!isParticipant, hasConflict, creatorName); return new MeetingResponseDTO(meeting, !!isParticipant, hasConflict, creatorName);
})); })
);
return {
content,
hasNext
};
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment