Skip to content
Snippets Groups Projects
Commit 74562374 authored by tpgus2603's avatar tpgus2603
Browse files

refactor: 친구 추가 로직 변경 deploy에 반영

parents fe3b8ae8 73a5574a
No related branches found
No related tags found
1 merge request!42[#25] 배포코드 master브랜치로 이동
const FriendService = require('../services/friendService'); const FriendService = require('../services/friendService');
const { User } = require('../models'); const { User } = require('../models');
const performanceMonitor = require('../utils/performanceMonitor');
class friendController { class friendController {
/** /**
* 친구 요청 보내기 * 친구 요청 보내기
* 클라이언트는 userId와 요청을 보낼 사용자의 email을 body에전송 * 클라이언트는 userId와 요청을 보낼 사용자의 email을 전송
*/ * POST /api/friend/request
async sendFriendRequest(req, res, next) { *
const { userId, email } = req.body; */
async sendFriendRequest(req, res) {
try { try {
return await performanceMonitor.measureAsync('sendFriendRequest', async () => {
const email = req.body;
const userId = req.user.id;
if (!userId || !email) { if (!userId || !email) {
return res.status(400).json({ message: 'userId와 email은 필수 입력 항목입니다.' }); throw new Error('userId와 email은 필수 입력 항목입니다.');
} }
// 친구 요청을 받을 사용자의 정보 조회 (서비스로 분리할지 생각)
const receiver = await User.findOne({ where: { email: email } }); const receiver = await User.findOne({ where: { email } });
if (!receiver) { if (!receiver) {
return res.status(404).json({ message: '요청을 받을 사용자를 찾을 수 없습니다.' }); throw new Error('요청을 받을 사용자를 찾을 수 없습니다.');
} }
const friendId = receiver.id;
// 친구 요청 보내기 서비스 호출 const friendRequest = await FriendService.sendFriendRequest(userId, receiver.id);
const friendRequest = await FriendService.sendFriendRequest(userId, friendId);
return res.status(201).json({ return res.status(201).json({
success:true, success: true,
data:friendRequest data: friendRequest
}); });
} catch (error) { });
// 유니크 제약조건 오류 처리 } catch (error) {
if (error.message === 'Friend request already exists') { return res.status(error.status || 500).json({
return res.status(409).json({ message: error.message }); success: false,
error: {
message: error.message,
code: 'FRIEND_REQUEST_ERROR'
} }
});
// 일반 오류 처리
return res.status(500).json({ message: '서버 오류가 발생했습니다.', error: error.message });
}
} }
}
/** /**
* 받은 친구 요청 목록 조회 * 받은 친구 요청 목록 조회
* GET /api/friend/requests/received * GET /api/friend/requests/received
*/ */
async getReceivedRequests(req, res) { async getReceivedRequests(req, res) {
try { try {
const userId = req.user.id; return await performanceMonitor.measureAsync('getReceivedRequests', async () => {
const requests = await FriendService.getReceivedRequests(userId); const userId = req.user.id;
const requests = await FriendService.getReceivedRequests(userId);
return res.status(200).json({ return res.status(200).json({
success: true, success: true,
data: requests data: requests
});
}); });
} catch (error) { } catch (error) {
return res.status(500).json({ return res.status(500).json({
...@@ -66,12 +72,13 @@ class friendController { ...@@ -66,12 +72,13 @@ class friendController {
*/ */
async getSentRequests(req, res) { async getSentRequests(req, res) {
try { try {
const userId = req.user.id; return await performanceMonitor.measureAsync('getSentRequests', async () => {
const requests = await FriendService.getSentRequests(userId); const userId = req.user.id;
const requests = await FriendService.getSentRequests(userId);
return res.status(200).json({ return res.status(200).json({
success: true, success: true,
data: requests data: requests
});
}); });
} catch (error) { } catch (error) {
return res.status(500).json({ return res.status(500).json({
...@@ -83,21 +90,21 @@ class friendController { ...@@ -83,21 +90,21 @@ class friendController {
}); });
} }
} }
/** /**
* 친구 요청 수락 * 친구 요청 수락
* POST /api/friend/request/:friendId/accept * POST /api/friend/request/:friendId/accept
*/ */
async acceptRequest(req, res) { async acceptRequest(req, res) {
try { try {
const userId = req.user.id; return await performanceMonitor.measureAsync('acceptFriendRequest', async () => {
const { friendId } = req.params; const userId = req.user.id;
const { friendId } = req.params;
const result = await FriendService.acceptFriendRequest(userId, friendId);
const result = await FriendService.acceptFriendRequest(userId, friendId);
return res.status(200).json({ return res.status(200).json({
success: true, success: true,
data: result data: result
});
}); });
} catch (error) { } catch (error) {
return res.status(400).json({ return res.status(400).json({
...@@ -116,14 +123,15 @@ class friendController { ...@@ -116,14 +123,15 @@ class friendController {
*/ */
async rejectRequest(req, res) { async rejectRequest(req, res) {
try { try {
const userId = req.user.id; return await performanceMonitor.measureAsync('rejectFriendRequest', async () => {
const { friendId } = req.params; const userId = req.user.id;
const { friendId } = req.params;
const result = await FriendService.rejectFriendRequest(userId, friendId);
const result = await FriendService.rejectFriendRequest(userId, friendId);
return res.status(200).json({ return res.status(200).json({
success: true, success: true,
data: result data: result
});
}); });
} catch (error) { } catch (error) {
return res.status(400).json({ return res.status(400).json({
...@@ -142,23 +150,20 @@ class friendController { ...@@ -142,23 +150,20 @@ class friendController {
*/ */
async getFriendList(req, res) { async getFriendList(req, res) {
try { try {
const userId = req.user.id; return await performanceMonitor.measureAsync('getFriendList', async () => {
const page = parseInt(req.query.page) || 0; const userId = req.user.id;
const size = parseInt(req.query.size) || 20; const page = parseInt(req.query.page) || 0;
const size = parseInt(req.query.size) || 20;
const friends = await FriendService.getFriendList(userId, {
limit: size, const friends = await FriendService.getFriendList(userId, {
offset: page * size limit: size,
}); offset: page * size
});
return res.status(200).json({ return res.status(200).json({
success: true, success: true,
data: { data: friends
content: friends, });
page: page,
size: size,
hasNext: friends.length === size
}
}); });
} catch (error) { } catch (error) {
return res.status(500).json({ return res.status(500).json({
...@@ -177,17 +182,18 @@ class friendController { ...@@ -177,17 +182,18 @@ class friendController {
*/ */
async deleteFriend(req, res) { async deleteFriend(req, res) {
try { try {
const userId = req.user.id; return await performanceMonitor.measureAsync('deleteFriend', async () => {
const { friendId } = req.params; const userId = req.user.id;
const { friendId } = req.params;
const result = await FriendService.deleteFriend(userId, friendId);
const result = await FriendService.deleteFriend(userId, friendId);
return res.status(200).json({ return res.status(200).json({
success: true, success: true,
data: { data: {
message: 'Friend deleted successfully', message: 'Friend deleted successfully',
result: result result: result
} }
});
}); });
} catch (error) { } catch (error) {
return res.status(400).json({ return res.status(400).json({
......
...@@ -116,20 +116,52 @@ class MeetingController { ...@@ -116,20 +116,52 @@ class MeetingController {
res.status(500).json({ error: err.message || '모임 상세 조회 실패' }); res.status(500).json({ error: err.message || '모임 상세 조회 실패' });
} }
} }
/*
Delete /api/meetings/:meetingId /**
*/ * 내가 참여한 모임 목록 조회
async closeMeeting(req,res) * GET /api/meetings/my
{ */
async getMyMeetings(req, res) {
try {
const userId = req.user.id;
const page = parseInt(req.query.page) || 0;
const size = parseInt(req.query.size) || 20;
const meetings = await MeetingService.getMyMeetings(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) {
console.error('내 모임 목록 조회 오류:', err);
res.status(500).json({ error: err.message || '내 모임 목록 조회 실패' });
}
}
/**
* 번개 모임 탈퇴
* DELETE /api/meeting/:meetingId/leave
*/
async leaveMeeting(req, res) {
const { meetingId } = req.params; const { meetingId } = req.params;
const userid=req.user.id; const userId = req.user.id;
try { try {
const meetingDetail = await MeetingService.leaveMeeting(meetingId,userId); await MeetingService.leaveMeeting(meetingId, userId);
res.status(200).json('모임 삭제성공!'); res.status(200).json({ message: '모임 탈퇴 성공' });
} catch (err) { } catch (err) {
console.error('모임 삭제 오류', err); console.error('모임 탈퇴 오류:', err);
res.status(500).json({ error: err.message || '모임삭제 실패' }); res.status(500).json({ error: err.message || '모임 탈퇴 실패' });
} }
} }
......
...@@ -22,4 +22,10 @@ router.post('/:meetingId/join', MeetingController.joinMeeting); ...@@ -22,4 +22,10 @@ router.post('/:meetingId/join', MeetingController.joinMeeting);
// 번개 모임 상세 조회 // 번개 모임 상세 조회
router.get('/:meetingId', MeetingController.getMeetingDetail); router.get('/:meetingId', MeetingController.getMeetingDetail);
// 번개 모임 탈퇴
router.delete('/:meetingId/leave', MeetingController.leaveMeeting);
// 내가 참여한 모임 목록 조회
router.get('/my', MeetingController.getMyMeetings);
module.exports = router; module.exports = router;
\ No newline at end of file
...@@ -210,7 +210,7 @@ class FriendService { ...@@ -210,7 +210,7 @@ class FriendService {
} }
], ],
order: [['id', 'ASC']], order: [['id', 'ASC']],
limit: limit + 1, // 다음 페이지 존재 여부 확인을 위해 1개 더 조회 limit: limit + 1,
offset offset
}); });
......
...@@ -598,7 +598,10 @@ class MeetingService { ...@@ -598,7 +598,10 @@ class MeetingService {
}); });
if (chatRoom) { if (chatRoom) {
const user = await User.findByPk(userId); const user = await User.findByPk(userId);
chatRoom.participants = chatRoom.participants.filter(p => p !== user.name); chatRoom.participants = chatRoom.participants.filter(p => p.name !== user.name);
chatRoom.isOnline.delete(user.name);
chatRoom.lastReadAt.delete(user.name);
chatRoom.lastReadLogId.delete(user.name);
await chatRoom.save(); await chatRoom.save();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment