diff --git a/src/controllers/task.controller.js b/src/controllers/task.controller.js index e1d2ffc..dfea01c 100644 --- a/src/controllers/task.controller.js +++ b/src/controllers/task.controller.js @@ -186,12 +186,10 @@ class TaskController { } } - // 팀원 정보 수정 (역할 변경) async updateTeamMember(req, res, next) { try { - const taskId = req.body.taskId || req.params.taskId; - const userId = req.body.userId || req.params.userId; - const { role } = req.body; + const { taskId, userId } = req.params; + const { role } = req.body; // 프론트에서 0(Owner) 또는 1(Member)이 옴 const result = await taskService.modifyMemberRole( parseInt(taskId), @@ -201,12 +199,13 @@ class TaskController { res.status(200).json({ resultType: "SUCCESS", - message: "요청이 성공적으로 처리되었습니다.", + message: "멤버 권한이 변경되었습니다.", data: { memberId: result.id, userId: result.userId, taskId: result.taskId, - role: result.role ? 1 : 0, + // 📍 DB가 false(0)면 0(Owner), true(1)면 1(Member) 반환 + role: result.role ? 1 : 0 } }); } catch (error) { diff --git a/src/repositories/task.repository.js b/src/repositories/task.repository.js index ed1b82e..28b4eab 100644 --- a/src/repositories/task.repository.js +++ b/src/repositories/task.repository.js @@ -177,17 +177,7 @@ class TaskRepository { }); } - // 멤버 존재 여부 확인 - async findMemberInTask(taskId, userId) { - return await prisma.member.findFirst({ - where: { - taskId: parseInt(taskId), - userId: parseInt(userId) - } - }); - } - - // 나머지 멤버 역할 리셋 + // 나머지 멤버 역할 리셋 (방장 한 명을 제외하고 모두 멤버로) async resetOtherMembersRole(taskId, userId, tx) { return await tx.member.updateMany({ where: { @@ -195,16 +185,26 @@ class TaskRepository { userId: { not: parseInt(userId) }, }, data: { - role: false, + role: true, }, }); } // 대상 멤버 역할 업데이트 - async updateMemberRole(memberId, isAdmin, tx) { + async updateMemberRole(memberId, dbRoleValue, tx) { return await tx.member.update({ - where: { id: memberId }, // userId는 중복될 수 있으므로(다른 과제 등) id(PK) 사용 - data: { role: isAdmin }, + where: { id: memberId }, + data: { role: dbRoleValue }, + }); + } + + // 멤버 존재 여부 확인 + async findMemberInTask(taskId, userId) { + return await prisma.member.findFirst({ + where: { + taskId: parseInt(taskId), + userId: parseInt(userId) + } }); } diff --git a/src/services/task.service.js b/src/services/task.service.js index 1bde5d0..471f98f 100644 --- a/src/services/task.service.js +++ b/src/services/task.service.js @@ -760,25 +760,26 @@ class TaskService { }); } - // 팀원 정보 수정 - async modifyMemberRole(taskId, memberId, role) { - const member = await taskRepository.findMemberInTask(taskId, memberId); - if (!member) throw new NotFoundError("멤버를 찾을 수 없음"); + // 멤버 역할 수정 + async modifyMemberRole(taskId, userId, role) { + const member = await taskRepository.findMemberInTask(taskId, userId); + if (!member) throw new NotFoundError("해당 과제에서 해당 유저를 찾을 수 없음"); - const isAdmin = role === 1; + const isTargetBecomingOwner = (role === 0); return await prisma.$transaction(async (tx) => { - if (isAdmin) { - await taskRepository.resetOtherMembersRole(taskId, memberId, tx); + if (isTargetBecomingOwner) { + await taskRepository.resetOtherMembersRole(taskId, userId, tx); } - return await taskRepository.updateMemberRole(memberId, isAdmin, tx); + const dbRoleValue = isTargetBecomingOwner ? false : true; + + return await taskRepository.updateMemberRole(member.id, dbRoleValue, tx); }); } // 단일 세부 과제 생성 서비스 async createSingleSubTask(userId, taskId, data) { - console.log("📍 서비스로 넘어온 taskId:", taskId); const { title, deadline, isAlarm } = data; // 부모 과제 존재 여부 확인