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
Original file line number Diff line number Diff line change
@@ -1,44 +1,22 @@
package com.haru.api.domain.lastOpened.converter;

import com.haru.api.domain.lastOpened.entity.Documentable;
import com.haru.api.domain.lastOpened.entity.UserDocumentId;
import com.haru.api.domain.lastOpened.entity.UserDocumentLastOpened;
import com.haru.api.domain.lastOpened.entity.enums.DocumentType;
import com.haru.api.domain.meeting.entity.Meeting;
import com.haru.api.domain.moodTracker.entity.MoodTracker;
import com.haru.api.domain.snsEvent.entity.SnsEvent;
import com.haru.api.domain.user.entity.User;

public class UserDocumentLastOpenedConverter {
public static UserDocumentLastOpened toUserDocumentLastOpened(Meeting meeting, User user) {
public static UserDocumentLastOpened toUserDocumentLastOpened(Documentable document, User user) {

UserDocumentId userDocumentId = new UserDocumentId(user.getId(), meeting.getId(), DocumentType.AI_MEETING_MANAGER);

return UserDocumentLastOpened.builder()
.id(userDocumentId)
.user(user)
.lastOpened(null)
.build();
}

public static UserDocumentLastOpened toUserDocumentLastOpened(SnsEvent snsEvent, User user) {

UserDocumentId userDocumentId = new UserDocumentId(user.getId(), snsEvent.getId(), DocumentType.SNS_EVENT_ASSISTANT);

return UserDocumentLastOpened.builder()
.id(userDocumentId)
.user(user)
.lastOpened(null)
.build();
}

public static UserDocumentLastOpened toUserDocumentLastOpened(MoodTracker moodTracker, User user) {

UserDocumentId userDocumentId = new UserDocumentId(user.getId(), moodTracker.getId(), DocumentType.TEAM_MOOD_TRACKER);
UserDocumentId userDocumentId = new UserDocumentId(user.getId(), document.getId(), document.getDocumentType());

return UserDocumentLastOpened.builder()
.id(userDocumentId)
.user(user)
.workspaceId(document.getWorkspaceId())
.lastOpened(null)
.thumbnailKeyName(document.getThumbnailKeyName())
.title(document.getTitle())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -154,14 +154,15 @@ public ApiResponse<UserResponseDTO.CheckOriginalPasswordResponse> checkOriginalP
}

@Operation(summary = "회원가입 후 로그인", description =
"# [v1.0 (2025-08-15)](https://www.notion.so/2505da7802c5808583b9d0b08087b8e5)" +
" 회원가입 후 로그인까지 진행하는 API입니다."
"# [v1.1 (2025-08-18)](https://www.notion.so/2505da7802c5808583b9d0b08087b8e5)" +
" 회원가입 후 로그인까지 진행하는 API입니다. query string으로 token을 넘기면 워크스페이스에 초대됩니다."
)
@PostMapping("/signup-and-login")
public ApiResponse<UserResponseDTO.LoginResponse> signUpAndLogin(
@RequestBody @Valid UserRequestDTO.SignUpRequest request
@RequestBody @Valid UserRequestDTO.SignUpRequest request,
@RequestParam(required = false) String token
) {
UserResponseDTO.LoginResponse response = userCommandService.signupAndLogin(request);
UserResponseDTO.LoginResponse response = userCommandService.signupAndLoginAndInviteAccept(request, token);

return ApiResponse.onSuccess(response);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@ public interface UserCommandService {

UserResponseDTO.CheckOriginalPasswordResponse checkOriginalPassword(UserRequestDTO.CheckOriginalPasswordRequest request, User user);

UserResponseDTO.LoginResponse signupAndLogin(UserRequestDTO.SignUpRequest request);
UserResponseDTO.LoginResponse signupAndLoginAndInviteAccept(UserRequestDTO.SignUpRequest request, String token);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.haru.api.domain.user.repository.UserRepository;
import com.haru.api.domain.user.security.jwt.JwtUtils;
import com.haru.api.domain.user.security.jwt.SecurityUtil;
import com.haru.api.domain.workspace.service.WorkspaceCommandService;
import com.haru.api.global.apiPayload.code.status.ErrorStatus;
import com.haru.api.global.apiPayload.exception.handler.MemberHandler;
import jakarta.transaction.Transactional;
Expand All @@ -34,7 +35,9 @@ public class UserCommandServiceImpl implements UserCommandService{
private int accessExpTime;
@Value("${jwt.refresh-expiration}")
private int refreshExpTime;

private final UserRepository userRepository;
private final WorkspaceCommandService workspaceCommandService;
private final PasswordEncoder passwordEncoder;
private final AuthenticationManagerBuilder authenticationManagerBuilder;
private final JwtUtils jwtUtils;
Expand Down Expand Up @@ -163,7 +166,8 @@ public UserResponseDTO.CheckOriginalPasswordResponse checkOriginalPassword(UserR
}

@Override
public UserResponseDTO.LoginResponse signupAndLogin(UserRequestDTO.SignUpRequest request) {
@Transactional
public UserResponseDTO.LoginResponse signupAndLoginAndInviteAccept(UserRequestDTO.SignUpRequest request, String token) {

String password = passwordEncoder.encode(request.getPassword());

Expand All @@ -175,6 +179,8 @@ public UserResponseDTO.LoginResponse signupAndLogin(UserRequestDTO.SignUpRequest
User user = UserConverter.toUsers(request, password);
userRepository.save(user);

workspaceCommandService.acceptInvite(token);

return login(UserRequestDTO.LoginRequest.builder()
.email(request.getEmail())
.password(request.getPassword())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package com.haru.api.domain.workspace.service;

import com.haru.api.domain.lastOpened.converter.UserDocumentLastOpenedConverter;
import com.haru.api.domain.lastOpened.entity.Documentable;
import com.haru.api.domain.lastOpened.entity.UserDocumentLastOpened;
import com.haru.api.domain.lastOpened.repository.UserDocumentLastOpenedRepository;
import com.haru.api.domain.meeting.entity.Meeting;
import com.haru.api.domain.meeting.repository.MeetingRepository;
import com.haru.api.domain.moodTracker.entity.MoodTracker;
import com.haru.api.domain.moodTracker.repository.MoodTrackerRepository;
import com.haru.api.domain.snsEvent.entity.SnsEvent;
import com.haru.api.domain.snsEvent.repository.SnsEventRepository;
import com.haru.api.domain.user.entity.User;
import com.haru.api.domain.user.repository.UserRepository;
Expand Down Expand Up @@ -107,7 +105,6 @@ public WorkspaceResponseDTO.Workspace updateWorkspace(User user, Workspace works
return WorkspaceConverter.toWorkspaceDTO(workspace);
}

@Transactional
@Override
public WorkspaceResponseDTO.InvitationAcceptResult acceptInvite(String token) {

Expand Down Expand Up @@ -175,8 +172,7 @@ public WorkspaceResponseDTO.InvitationAcceptResult acceptInvite(String token, U
.auth(Auth.MEMBER)
.build());

// 각 문서 조회
// 각 문서 UserDocumentLastOpened로 변환
// 각 문서 조회 후, UserDocumentLastOpened로 변환
List<UserDocumentLastOpened> userDocumentLastOpenedList = addDocumentsToUserLastOpened(foundWorkspace, signedUser);

// 워크스페이스에 속해있는 모든 문서를 user_document_last_opened에 추가
Expand Down Expand Up @@ -223,17 +219,16 @@ public void sendInviteEmail(User user, WorkspaceRequestDTO.WorkspaceInviteEmailR
}

private List<UserDocumentLastOpened> addDocumentsToUserLastOpened(Workspace workspace, User user) {
List<Meeting> meetingList = meetingRepository.findAllByWorkspaceId(workspace.getId());
List<SnsEvent> snsEventList = snsEventRepository.findAllByWorkspaceId(workspace.getId());
List<MoodTracker> moodTrackerList = moodTrackerRepository.findAllByWorkspaceId(workspace.getId());

List<Documentable> documentList = new ArrayList<>();

documentList.addAll(meetingRepository.findAllByWorkspaceId(workspace.getId()));
documentList.addAll(snsEventRepository.findAllByWorkspaceId(workspace.getId()));
documentList.addAll(moodTrackerRepository.findAllByWorkspaceId(workspace.getId()));

List<UserDocumentLastOpened> userDocumentLastOpenedList = new ArrayList<>();
for(Meeting meeting : meetingList)
userDocumentLastOpenedList.add(UserDocumentLastOpenedConverter.toUserDocumentLastOpened(meeting, user));
for(SnsEvent snsEvent : snsEventList)
userDocumentLastOpenedList.add(UserDocumentLastOpenedConverter.toUserDocumentLastOpened(snsEvent, user));
for(MoodTracker moodTracker : moodTrackerList)
userDocumentLastOpenedList.add(UserDocumentLastOpenedConverter.toUserDocumentLastOpened(moodTracker, user));
for(Documentable documentable : documentList)
userDocumentLastOpenedList.add(UserDocumentLastOpenedConverter.toUserDocumentLastOpened(documentable, user));

userDocumentLastOpenedRepository.saveAll(userDocumentLastOpenedList);

Expand Down