diff --git a/src/main/java/com/syncd/adapter/in/web/ProjectController.java b/src/main/java/com/syncd/adapter/in/web/ProjectController.java index 15acc25..53eba29 100644 --- a/src/main/java/com/syncd/adapter/in/web/ProjectController.java +++ b/src/main/java/com/syncd/adapter/in/web/ProjectController.java @@ -57,7 +57,7 @@ public JoinProjectResponseDto joinProject(HttpServletRequest request, @Valid @Re @PostMapping("/invite") public InviteUserInProjectResponseDto inviteUser(HttpServletRequest request, @Valid @RequestBody InviteUserInProjectRequestDto requestDto){ String token = jwtService.resolveToken(request); - return inviteUserInProjectUsecase.inviteUserInProject(jwtService.getUserIdFromToken(token), requestDto.projectId(), requestDto.users()); + return inviteUserInProjectUsecase.inviteUserInProject(jwtService.getUserIdFromToken(token),jwtService.getUsernameFromToken(token), requestDto.projectId(), requestDto.users()); } @PostMapping("/withdraw") diff --git a/src/main/java/com/syncd/application/port/in/GetUserInfoUsecase.java b/src/main/java/com/syncd/application/port/in/GetUserInfoUsecase.java index b69b627..814469e 100644 --- a/src/main/java/com/syncd/application/port/in/GetUserInfoUsecase.java +++ b/src/main/java/com/syncd/application/port/in/GetUserInfoUsecase.java @@ -21,6 +21,8 @@ GetUserInfoResponseDto getUserInfo( record GetUserInfoResponseDto( String userId, + + String userIdForSendbird, String name, String img, String email, diff --git a/src/main/java/com/syncd/application/port/in/InviteUserInProjectUsecase.java b/src/main/java/com/syncd/application/port/in/InviteUserInProjectUsecase.java index 5b075c4..a6e0265 100644 --- a/src/main/java/com/syncd/application/port/in/InviteUserInProjectUsecase.java +++ b/src/main/java/com/syncd/application/port/in/InviteUserInProjectUsecase.java @@ -11,7 +11,7 @@ public interface InviteUserInProjectUsecase { // ====================================== // METHOD // ====================================== - InviteUserInProjectResponseDto inviteUserInProject(String userId, String projectId, List users); + InviteUserInProjectResponseDto inviteUserInProject(String userId,String hostName, String projectId, List users); // ====================================== // DTO // ====================================== diff --git a/src/main/java/com/syncd/application/service/ProjectService.java b/src/main/java/com/syncd/application/service/ProjectService.java index 5f43bdc..f0d7a5a 100644 --- a/src/main/java/com/syncd/application/service/ProjectService.java +++ b/src/main/java/com/syncd/application/service/ProjectService.java @@ -62,7 +62,7 @@ public CreateProjectResponseDto createProject(String hostId, String hostName, St } CreateProjectResponseDto createProjectResponseDto = new CreateProjectResponseDto(writeProjectPort.CreateProject(project)); - User host = readUserPort.findByUserId(hostId); +// User host = readUserPort.findByUserId(hostId); // List members = new ArrayList<>(); // if (userEmails != null && !userEmails.isEmpty()) { // members = userEmails.stream() @@ -70,6 +70,7 @@ public CreateProjectResponseDto createProject(String hostId, String hostName, St // .collect(Collectors.toList()); // } + return createProjectResponseDto; } @@ -135,15 +136,19 @@ public DeleteProjectResponseDto deleteProject(String userId, String projectId) { @Override - public InviteUserInProjectResponseDto inviteUserInProject(String userId, String projectId, List userEmails) { + public InviteUserInProjectResponseDto inviteUserInProject(String userId,String hostName, String projectId, List userEmails) { Project project = readProjectPort.findProjectByProjectId(projectId); checkHost(project, userId); + if (userEmails != null && !userEmails.isEmpty()){ + project.addUsers(userInProjectFromEmail(userEmails)); + sendMailPort.sendIviteMailBatch(hostName, project.getName(), userEmails, project.getId()); + } - User host = readUserPort.findByUserId(userId); - // List users = projectMappers.mapEmailsToUsersInProject(userEmails, host.getName(), project.getName(), projectId, readUserPort, sendMailPort); - List users = userEmails.stream() - .map(email -> createUserInProjectWithRoleMember(email, host.getName(), project.getName(), projectId)) - .collect(Collectors.toList()); +// User host = readUserPort.findByUserId(userId); +// // List users = projectMappers.mapEmailsToUsersInProject(userEmails, host.getName(), project.getName(), projectId, readUserPort, sendMailPort); +// List users = userEmails.stream() +// .map(email -> createUserInProjectWithRoleMember(email, host.getName(), project.getName(), projectId)) +// .collect(Collectors.toList()); return new InviteUserInProjectResponseDto(projectId); } diff --git a/src/main/java/com/syncd/application/service/UserService.java b/src/main/java/com/syncd/application/service/UserService.java index ea62a6f..640c4f5 100644 --- a/src/main/java/com/syncd/application/service/UserService.java +++ b/src/main/java/com/syncd/application/service/UserService.java @@ -15,11 +15,15 @@ import org.springframework.context.annotation.Primary; //import org.springframework.security.core.userdetails.UserDetails; //import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.codec.Hex; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.util.Optional; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + @Service @Primary @@ -48,8 +52,26 @@ public GetUserInfoResponseDto getUserInfo(String userId) { GetAllRoomsByUserIdUsecase.GetAllRoomsByUserIdResponseDto projects = getAllRoomsByUserIdUsecase.getAllRoomsByUserId(userId); - return new GetUserInfoResponseDto(userId, user.getName(), user.getProfileImg(), user.getEmail(), projects.projects()); + return new GetUserInfoResponseDto(userId,hash(userId) ,user.getName(), user.getProfileImg(), user.getEmail(), projects.projects()); + + } + private static String hash(String input) { + try { + // SHA-256 해시 인스턴스 생성 + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hashBytes = digest.digest(input.getBytes()); + + // 해시 결과를 16바이트로 자르기 + byte[] truncatedHash = new byte[8]; + System.arraycopy(hashBytes, 0, truncatedHash, 0, 8); + + // 바이트 배열을 헥사 문자열로 변환 + char[] hexChars = Hex.encode(truncatedHash); + return new String(hexChars); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("SHA-256 algorithm not found", e); + } } @Override diff --git a/src/test/java/adaptor/in/web/ProjectControllerTest.java b/src/test/java/adaptor/in/web/ProjectControllerTest.java index 71484fc..5f86184 100644 --- a/src/test/java/adaptor/in/web/ProjectControllerTest.java +++ b/src/test/java/adaptor/in/web/ProjectControllerTest.java @@ -129,7 +129,7 @@ void testInviteUser_ValidRequest() { setupMockJwtService(request, "token", "userId", null); InviteUserInProjectResponseDto responseDto = new InviteUserInProjectResponseDto("validProjectId"); - when(inviteUserInProjectUsecase.inviteUserInProject(anyString(), anyString(), any())).thenReturn(responseDto); + when(inviteUserInProjectUsecase.inviteUserInProject(anyString(),any(), anyString(), any())).thenReturn(responseDto); InviteUserInProjectResponseDto response = projectController.inviteUser(request, requestDto); @@ -305,8 +305,9 @@ private void verifyInviteUserUsecase(String expectedUserId, String expectedProje ArgumentCaptor userIdCaptor = ArgumentCaptor.forClass(String.class); ArgumentCaptor projectIdCaptor = ArgumentCaptor.forClass(String.class); ArgumentCaptor> usersCaptor = ArgumentCaptor.forClass(List.class); + ArgumentCaptor userNameCaptor = ArgumentCaptor.forClass(String.class); - verify(inviteUserInProjectUsecase).inviteUserInProject(userIdCaptor.capture(), projectIdCaptor.capture(), usersCaptor.capture()); + verify(inviteUserInProjectUsecase).inviteUserInProject(userIdCaptor.capture(),userNameCaptor.capture(), projectIdCaptor.capture(), usersCaptor.capture()); assertThat(userIdCaptor.getValue()).isEqualTo(expectedUserId); assertThat(projectIdCaptor.getValue()).isEqualTo(expectedProjectId); diff --git a/src/test/java/adaptor/in/web/UserControllerTest.java b/src/test/java/adaptor/in/web/UserControllerTest.java index 73ccd4c..147fa51 100644 --- a/src/test/java/adaptor/in/web/UserControllerTest.java +++ b/src/test/java/adaptor/in/web/UserControllerTest.java @@ -48,6 +48,7 @@ void testGetUserInfo_ValidRequest() { when(jwtService.getUserIdFromToken(token)).thenReturn(userId); GetUserInfoResponseDto userInfoResponseDto = new GetUserInfoResponseDto( + "user-id", "user-id", "Test User", "profileImg.jpg", diff --git a/src/test/java/application/service/ProjectServiceTest.java b/src/test/java/application/service/ProjectServiceTest.java index d136179..e0eeb4e 100644 --- a/src/test/java/application/service/ProjectServiceTest.java +++ b/src/test/java/application/service/ProjectServiceTest.java @@ -155,12 +155,13 @@ void deleteProject() { void inviteUserInProject() { // Given String userId = Consistent.UserId.getValue(); + String uesrName = Consistent.UserName.getValue(); String projectId = Consistent.ProjectId.getValue(); List userEmails = Arrays.asList("user1@example.com", "user2@example.com"); // When - InviteUserInProjectUsecase.InviteUserInProjectResponseDto response = projectService.inviteUserInProject(userId, projectId, userEmails); + InviteUserInProjectUsecase.InviteUserInProjectResponseDto response = projectService.inviteUserInProject(userId,uesrName, projectId, userEmails); // Then assertNotNull(response);