Skip to content

Commit

Permalink
[#106] Fix: invite 로직 버그 수정 (#107)
Browse files Browse the repository at this point in the history
* fix: Fix error about get all rooms

* fix: Fix error about get all rooms

* feat: Make userstory logic with openai

* fire: Fix out port

* fix: Add environment for openai

* fix: Add check left chance

* fix: Fix error

* fix: Fix error

* feat: Make color

* feat: Make login redirect uri

* fix: Fix error

* refactor: Seperate login port

* fix: Redirect

* fix: Fix error

* feat: Fix redirect uri

* merge

* feat: Write readme

* docs: Write readme

* test: Make project service test

* test: Modify test code

* feat: 초대 로직 수정

* fix test
  • Loading branch information
donggni0712 authored Jun 3, 2024
1 parent edf6940 commit 4fff4fb
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ GetUserInfoResponseDto getUserInfo(
record GetUserInfoResponseDto(

String userId,

String userIdForSendbird,
String name,
String img,
String email,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public interface InviteUserInProjectUsecase {
// ======================================
// METHOD
// ======================================
InviteUserInProjectResponseDto inviteUserInProject(String userId, String projectId, List<String> users);
InviteUserInProjectResponseDto inviteUserInProject(String userId,String hostName, String projectId, List<String> users);
// ======================================
// DTO
// ======================================
Expand Down
19 changes: 12 additions & 7 deletions src/main/java/com/syncd/application/service/ProjectService.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,15 @@ 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<UserInProject> members = new ArrayList<>();
// if (userEmails != null && !userEmails.isEmpty()) {
// members = userEmails.stream()
// .map(email -> createUserInProjectWithRoleMember(email, host.getName(), projectName, createProjectResponseDto.projectId()))
// .collect(Collectors.toList());
// }


return createProjectResponseDto;
}

Expand Down Expand Up @@ -135,15 +136,19 @@ public DeleteProjectResponseDto deleteProject(String userId, String projectId) {


@Override
public InviteUserInProjectResponseDto inviteUserInProject(String userId, String projectId, List<String> userEmails) {
public InviteUserInProjectResponseDto inviteUserInProject(String userId,String hostName, String projectId, List<String> 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<UserInProject> users = projectMappers.mapEmailsToUsersInProject(userEmails, host.getName(), project.getName(), projectId, readUserPort, sendMailPort);
List<UserInProject> users = userEmails.stream()
.map(email -> createUserInProjectWithRoleMember(email, host.getName(), project.getName(), projectId))
.collect(Collectors.toList());
// User host = readUserPort.findByUserId(userId);
// // List<UserInProject> users = projectMappers.mapEmailsToUsersInProject(userEmails, host.getName(), project.getName(), projectId, readUserPort, sendMailPort);
// List<UserInProject> users = userEmails.stream()
// .map(email -> createUserInProjectWithRoleMember(email, host.getName(), project.getName(), projectId))
// .collect(Collectors.toList());

return new InviteUserInProjectResponseDto(projectId);
}
Expand Down
24 changes: 23 additions & 1 deletion src/main/java/com/syncd/application/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions src/test/java/adaptor/in/web/ProjectControllerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -305,8 +305,9 @@ private void verifyInviteUserUsecase(String expectedUserId, String expectedProje
ArgumentCaptor<String> userIdCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<String> projectIdCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<List<String>> usersCaptor = ArgumentCaptor.forClass(List.class);
ArgumentCaptor<String> 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);
Expand Down
1 change: 1 addition & 0 deletions src/test/java/adaptor/in/web/UserControllerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
3 changes: 2 additions & 1 deletion src/test/java/application/service/ProjectServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> userEmails = Arrays.asList("[email protected]", "[email protected]");


// When
InviteUserInProjectUsecase.InviteUserInProjectResponseDto response = projectService.inviteUserInProject(userId, projectId, userEmails);
InviteUserInProjectUsecase.InviteUserInProjectResponseDto response = projectService.inviteUserInProject(userId,uesrName, projectId, userEmails);

// Then
assertNotNull(response);
Expand Down

0 comments on commit 4fff4fb

Please sign in to comment.