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
Expand Up @@ -71,26 +71,26 @@ public ApiResponse<?> logout(
"현재는 jwt token을 구현하지 않아 pathvariable로 userId를 넣어주세요.추후 jwt token이 구현되면 수정하겠습니다."
)
@GetMapping("/{userId}/info")
public ApiResponse<UserResponseDTO.UserDTO> getUserInfo(
public ApiResponse<UserResponseDTO.User> getUserInfo(
@PathVariable Long userId
) {
UserResponseDTO.UserDTO userDTO = userQueryService.getUserInfo(userId);
UserResponseDTO.User user = userQueryService.getUserInfo(userId);

return ApiResponse.onSuccess(userDTO);
return ApiResponse.onSuccess(user);
}

@Operation(summary = "회원 정보 수정", description =
"# 회원 정보 수정 API 입니다. \n" +
"현재는 jwt token을 구현하지 않아 pathvariable로 userId를 넣어주세요.추후 jwt token이 구현되면 수정하겠습니다."
)
@PatchMapping("/{userId}/info")
public ApiResponse<UserResponseDTO.UserDTO> updateUserInfo(
public ApiResponse<UserResponseDTO.User> updateUserInfo(
@PathVariable Long userId,
@RequestBody @Valid UserRequestDTO.UserInfoUpdateRequest request
) {
UserResponseDTO.UserDTO userDTO = userCommandService.updateUserInfo(userId, request);
UserResponseDTO.User user = userCommandService.updateUserInfo(userId, request);

return ApiResponse.onSuccess(userDTO);
return ApiResponse.onSuccess(user);
}

@Operation(summary = "이메일로 회원 리스트 조회", description =
Expand All @@ -99,13 +99,13 @@ public ApiResponse<UserResponseDTO.UserDTO> updateUserInfo(
"현재는 jwt token을 구현하지 않아 pathvariable로 userId를 넣어주세요.추후 jwt token이 구현되면 수정하겠습니다."
)
@GetMapping("{userId}/search")
public ApiResponse<List<UserResponseDTO.UserDTO>> searchUsers(
public ApiResponse<List<UserResponseDTO.User>> searchUsers(
@PathVariable Long userId,
@RequestParam String email
) {
List<UserResponseDTO.UserDTO> userDTOs = userQueryService.getSimilarEmailUsers(userId, email);
List<UserResponseDTO.User> users = userQueryService.getSimilarEmailUsers(userId, email);

return ApiResponse.onSuccess(userDTOs);
return ApiResponse.onSuccess(users);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ public static Users toUsers(UserRequestDTO.SignUpRequest request) {
.build();
}

public static UserResponseDTO.UserDTO toUserDTO(Users users) {
return UserResponseDTO.UserDTO.builder()
public static UserResponseDTO.User toUserDTO(Users users) {
return UserResponseDTO.User.builder()
.id(users.getId())
.email(users.getEmail())
.name(users.getName())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public class UserResponseDTO {

@Getter
@Builder
public static class UserDTO {
public static class User {
private Long id;
private String email;
private String imageUrl;
Expand Down
12 changes: 2 additions & 10 deletions src/main/java/com/haru/api/domain/user/entity/Users.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,19 @@
import com.haru.api.global.common.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;

import java.time.LocalDateTime;

@Entity
@Table(name = "users")
@Getter
@DynamicUpdate
@DynamicInsert
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class Users extends BaseEntity {

@Id
Expand Down Expand Up @@ -45,13 +46,4 @@ public void encodePassword(String password) {
this.password = password;
}

@Builder
public Users(String name, String email, String password, Status status, String profileImage, LocalDateTime inactiveDate) {
this.name = name;
this.email = email;
this.password = password;
this.status = status;
this.profileImage = profileImage;
this.inactiveDate = inactiveDate;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public interface UserCommandService {
void signUp(UserRequestDTO.SignUpRequest request);
UserResponseDTO.LoginResponse login(UserRequestDTO.LoginRequest request);

UserResponseDTO.UserDTO updateUserInfo(Long userId, UserRequestDTO.UserInfoUpdateRequest request);
UserResponseDTO.User updateUserInfo(Long userId, UserRequestDTO.UserInfoUpdateRequest request);

UserResponseDTO.RefreshResponse refresh(String refreshToken);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public void logout(String accessToken) {

@Override
@Transactional
public UserResponseDTO.UserDTO updateUserInfo(Long userId, UserRequestDTO.UserInfoUpdateRequest request) {
public UserResponseDTO.User updateUserInfo(Long userId, UserRequestDTO.UserInfoUpdateRequest request) {
String name = request.getName();
Users user = userRepository.findById(userId)
.orElseThrow(() -> new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.util.List;

public interface UserQueryService {
UserResponseDTO.UserDTO getUserInfo(Long userId);
UserResponseDTO.User getUserInfo(Long userId);

List<UserResponseDTO.UserDTO> getSimilarEmailUsers(Long userId, String email);
List<UserResponseDTO.User> getSimilarEmailUsers(Long userId, String email);
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public class UserQueryServiceImpl implements UserQueryService {
private final UserRepository userRepository;

@Override
public UserResponseDTO.UserDTO getUserInfo(Long userId) {
public UserResponseDTO.User getUserInfo(Long userId) {

Users user = userRepository.findById(userId)
.orElseThrow(() -> new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND));
Expand All @@ -27,15 +27,15 @@ public UserResponseDTO.UserDTO getUserInfo(Long userId) {
}

@Override
public List<UserResponseDTO.UserDTO> getSimilarEmailUsers(Long userId, String email) {
public List<UserResponseDTO.User> getSimilarEmailUsers(Long userId, String email) {

userRepository.findById(userId)
.orElseThrow(() -> new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND));

List<Users> users = userRepository.findTop4UsersByEmailContainingIgnoreCase(email);

return users.parallelStream()
.map(user -> UserResponseDTO.UserDTO.builder()
.map(user -> UserResponseDTO.User.builder()
.id(user.getId())
.email(user.getEmail())
.imageUrl(user.getProfileImage())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.haru.api.domain.userWorkspace.entity;

public enum Auth {
ADMIN, MEMBER,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.haru.api.domain.userWorkspace.entity;

import com.haru.api.domain.user.entity.Users;
import com.haru.api.domain.workspace.entity.Workspace;
import com.haru.api.global.common.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;

@Entity
@Table(name = "users_workspaces")
@Getter
@DynamicUpdate
@DynamicInsert
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class UserWorkspace extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private Users user;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "workspace_id", nullable = false)
private Workspace workspace;

@Column(name = "auth", nullable = false)
@Enumerated(EnumType.STRING)
private Auth auth;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.haru.api.domain.userWorkspace.repository;

import com.haru.api.domain.userWorkspace.entity.UserWorkspace;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserWorkspaceRepository extends JpaRepository<UserWorkspace, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.haru.api.domain.workspace.controller;

import com.haru.api.domain.user.security.jwt.SecurityUtil;
import com.haru.api.domain.workspace.dto.WorkspaceRequestDTO;
import com.haru.api.domain.workspace.dto.WorkspaceResponseDTO;
import com.haru.api.domain.workspace.service.WorkspaceCommandService;
import com.haru.api.global.apiPayload.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/workspaces")
public class WorkspaceController {

private final WorkspaceCommandService workspaceCommandService;

@Operation(summary = "워크스페이스 생성", description =
"# 워크스페이스 생성 API 입니다. 워크스페이스 제목과 초대하고자 하는 사람의 이메일을 입력해주세요."
)
@PostMapping
public ApiResponse<WorkspaceResponseDTO.Workspace> createWorkspace(
@RequestBody WorkspaceRequestDTO.WorkspaceCreateRequest request
) {

Long userId = SecurityUtil.getCurrentUserId();

WorkspaceResponseDTO.Workspace workspace = workspaceCommandService.createWorkspace(userId, request);

return ApiResponse.onSuccess(workspace);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.haru.api.domain.workspace.converter;

import com.haru.api.domain.workspace.dto.WorkspaceResponseDTO;
import com.haru.api.domain.workspace.entity.Workspace;

public class WorkspaceConverter {
public static WorkspaceResponseDTO.Workspace toWorkspaceDTO(Workspace workspace) {
return WorkspaceResponseDTO.Workspace.builder()
.workspaceId(workspace.getId())
.name(workspace.getTitle())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.haru.api.domain.workspace.dto;

import jakarta.validation.constraints.NotBlank;
import lombok.Builder;
import lombok.Getter;

import java.util.List;

public class WorkspaceRequestDTO {

@Getter
@Builder
public static class WorkspaceCreateRequest {
@NotBlank(message = "워크스페이스 제목은 빈 값일 수 없습니다.")
private String name;
private List<String> memberEmails;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.haru.api.domain.workspace.dto;

import lombok.Builder;
import lombok.Getter;

public class WorkspaceResponseDTO {

@Getter
@Builder
public static class Workspace {
private Long workspaceId;
private String name;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@
import org.hibernate.annotations.DynamicUpdate;

@Entity
@Table(name = "workspaces")
@Getter
@DynamicUpdate
@DynamicInsert
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class Workspaces extends BaseEntity {
@Builder
public class Workspace extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -24,9 +26,4 @@ public class Workspaces extends BaseEntity {
@Column(columnDefinition = "TEXT")
private String imageUrl;

@Builder
public Workspaces(String title, String imageUrl) {
this.title = title;
this.imageUrl = imageUrl;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.haru.api.domain.workspace.repository;

import com.haru.api.domain.workspace.entity.Workspace;
import org.springframework.data.jpa.repository.JpaRepository;

public interface WorkspaceRepository extends JpaRepository<Workspace, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.haru.api.domain.workspace.service;

import com.haru.api.domain.workspace.dto.WorkspaceRequestDTO;
import com.haru.api.domain.workspace.dto.WorkspaceResponseDTO;

public interface WorkspaceCommandService {

WorkspaceResponseDTO.Workspace createWorkspace(Long userId, WorkspaceRequestDTO.WorkspaceCreateRequest request);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.haru.api.domain.workspace.service;

import com.haru.api.domain.user.entity.Users;
import com.haru.api.domain.user.repository.UserRepository;
import com.haru.api.domain.userWorkspace.entity.Auth;
import com.haru.api.domain.userWorkspace.entity.UserWorkspace;
import com.haru.api.domain.userWorkspace.repository.UserWorkspaceRepository;
import com.haru.api.domain.workspace.converter.WorkspaceConverter;
import com.haru.api.domain.workspace.dto.WorkspaceRequestDTO;
import com.haru.api.domain.workspace.dto.WorkspaceResponseDTO;
import com.haru.api.domain.workspace.entity.Workspace;
import com.haru.api.domain.workspace.repository.WorkspaceRepository;
import com.haru.api.global.apiPayload.code.status.ErrorStatus;
import com.haru.api.global.apiPayload.exception.handler.MemberHandler;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class WorkspaceCommandServiceImpl implements WorkspaceCommandService {

private final UserRepository userRepository;
private final WorkspaceRepository workspaceRepository;
private final UserWorkspaceRepository userWorkspaceRepository;

@Override
public WorkspaceResponseDTO.Workspace createWorkspace(Long userId, WorkspaceRequestDTO.WorkspaceCreateRequest request) {

Users foundUser = userRepository.findById(userId)
.orElseThrow(() -> new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND));

// workspace 생성 및 저장
Workspace workspace = workspaceRepository.save(com.haru.api.domain.workspace.entity.Workspace.builder()
.title(request.getName())
.build());


// s3에 사진 추가하는 메서드

// request로 받은 이메일로 초대 메일 전송하는 메서드

// user_workspace 테이블에 생성자 정보 저장
userWorkspaceRepository.save(UserWorkspace.builder()
.user(foundUser)
.workspace(workspace)
.auth(Auth.ADMIN)
.build());

return WorkspaceConverter.toWorkspaceDTO(workspaceRepository.save(workspace));
}
}