Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions src/controllers/task.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -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) {
Expand Down
30 changes: 15 additions & 15 deletions src/repositories/task.repository.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,34 +177,34 @@ 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: {
taskId: parseInt(taskId),
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)
}
});
}

Expand Down
19 changes: 10 additions & 9 deletions src/services/task.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;

// 부모 과제 존재 여부 확인
Expand Down