From dc3a13be41371ec48974ddaf369acb5e8b3d6c54 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Thu, 17 Oct 2024 14:44:17 +0900 Subject: [PATCH 1/8] =?UTF-8?q?Feat:=20User=20Entity=20=EC=84=B8=EB=B6=80?= =?UTF-8?q?=ED=99=94=20=EB=B0=8F=20UserToUserExtraConvert=20RequestDTO=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20=EB=B0=8F=20UserPartners=20Service=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../channel/controller/ChannelController.java | 2 +- .../comment/controller/CommentController.java | 2 +- .../config/JwtAuthenticationFilter.java | 6 +- .../devlinkbackend/config/SecurityConfig.java | 18 +--- .../ether/controller/EtherController.java | 2 +- .../guild/controller/GuildController.java | 2 +- .../controller/Oauth2UserController.java | 67 ++++++------- .../controller/UserPartnerController.java | 10 ++ .../dto/UserClientGroupConvertRequestDTO.java | 16 +++ ...UserClientIndividualConvertRequestDTO.java | 14 +++ .../dto/UserPartnerConvertRequestDTO.java | 22 +++++ .../oauth2/dto/UserRegistRequestDTO.java | 12 --- .../oauth2/dto/UserUpdateRequestDTO.java | 12 --- .../devlinkbackend/oauth2/entity/User.java | 27 ++---- .../oauth2/entity/UserClientGroup.java | 25 +++++ .../oauth2/entity/UserClientIndividual.java | 19 ++++ .../oauth2/entity/UserPartner.java | 58 +++++++++++ .../repository/UserClientGroupRepository.java | 22 +++++ .../UserClientIndividualRepository.java | 18 ++++ .../repository/UserPartnersRepository.java | 29 ++++++ .../oauth2/repository/UserRepository.java | 4 +- .../oauth2/service/EpicGamesTokenService.java | 2 +- .../oauth2/service/UserPartnerService.java | 97 +++++++++++++++++++ .../oauth2/service/UserService.java | 65 +++---------- .../controller/QuestionController.java | 2 +- .../reply/controller/ReplyController.java | 2 +- .../request/controller/RequestController.java | 2 +- .../team/controller/TeamController.java | 2 +- .../{config => util}/JwtUtil.java | 2 +- .../util/StringListConverter.java | 34 +++++++ 30 files changed, 429 insertions(+), 166 deletions(-) create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientGroupConvertRequestDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientIndividualConvertRequestDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserPartnerConvertRequestDTO.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserRegistRequestDTO.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserUpdateRequestDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientGroupRepository.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientIndividualRepository.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserPartnersRepository.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java rename src/main/java/com/mtvs/devlinkbackend/{config => util}/JwtUtil.java (99%) create mode 100644 src/main/java/com/mtvs/devlinkbackend/util/StringListConverter.java diff --git a/src/main/java/com/mtvs/devlinkbackend/channel/controller/ChannelController.java b/src/main/java/com/mtvs/devlinkbackend/channel/controller/ChannelController.java index 0ee66b2..5ef7ac6 100644 --- a/src/main/java/com/mtvs/devlinkbackend/channel/controller/ChannelController.java +++ b/src/main/java/com/mtvs/devlinkbackend/channel/controller/ChannelController.java @@ -4,7 +4,7 @@ import com.mtvs.devlinkbackend.channel.dto.ChannelUpdateRequestDTO; import com.mtvs.devlinkbackend.channel.entity.Channel; import com.mtvs.devlinkbackend.channel.service.ChannelService; -import com.mtvs.devlinkbackend.config.JwtUtil; +import com.mtvs.devlinkbackend.util.JwtUtil; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/com/mtvs/devlinkbackend/comment/controller/CommentController.java b/src/main/java/com/mtvs/devlinkbackend/comment/controller/CommentController.java index 5204461..1a9391a 100644 --- a/src/main/java/com/mtvs/devlinkbackend/comment/controller/CommentController.java +++ b/src/main/java/com/mtvs/devlinkbackend/comment/controller/CommentController.java @@ -4,7 +4,7 @@ import com.mtvs.devlinkbackend.comment.dto.CommentUpdateRequestDTO; import com.mtvs.devlinkbackend.comment.entity.Comment; import com.mtvs.devlinkbackend.comment.service.CommentService; -import com.mtvs.devlinkbackend.config.JwtUtil; +import com.mtvs.devlinkbackend.util.JwtUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; diff --git a/src/main/java/com/mtvs/devlinkbackend/config/JwtAuthenticationFilter.java b/src/main/java/com/mtvs/devlinkbackend/config/JwtAuthenticationFilter.java index b465602..a8decfb 100644 --- a/src/main/java/com/mtvs/devlinkbackend/config/JwtAuthenticationFilter.java +++ b/src/main/java/com/mtvs/devlinkbackend/config/JwtAuthenticationFilter.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.config; -import com.mtvs.devlinkbackend.oauth2.service.UserService; +import com.mtvs.devlinkbackend.util.JwtUtil; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.Cookie; @@ -17,11 +17,9 @@ @Component public class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtUtil jwtUtil; - private final UserService userService; - public JwtAuthenticationFilter(JwtUtil jwtUtil, UserService userService) { + public JwtAuthenticationFilter(JwtUtil jwtUtil) { this.jwtUtil = jwtUtil; - this.userService = userService; } @Override diff --git a/src/main/java/com/mtvs/devlinkbackend/config/SecurityConfig.java b/src/main/java/com/mtvs/devlinkbackend/config/SecurityConfig.java index d677600..3cd821d 100644 --- a/src/main/java/com/mtvs/devlinkbackend/config/SecurityConfig.java +++ b/src/main/java/com/mtvs/devlinkbackend/config/SecurityConfig.java @@ -1,41 +1,25 @@ package com.mtvs.devlinkbackend.config; -import com.mtvs.devlinkbackend.oauth2.entity.User; -import com.mtvs.devlinkbackend.oauth2.service.UserService; -import jakarta.servlet.http.Cookie; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.core.Authentication; -import org.springframework.security.oauth2.client.OAuth2AuthorizedClient; import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService; -import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; -import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; -import org.springframework.security.oauth2.client.userinfo.OAuth2UserService; -import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import org.springframework.security.web.authentication.logout.LogoutHandler; -import org.springframework.security.web.session.InvalidSessionStrategy; import org.springframework.web.cors.CorsConfigurationSource; @Configuration @EnableWebSecurity public class SecurityConfig { - private final UserService userService; private final OAuth2AuthorizedClientService authorizedClientService; private final CorsConfigurationSource corsConfigurationSource; private final JwtAuthenticationFilter jwtAuthenticationFilter; - public SecurityConfig(UserService userService, CorsConfigurationSource corsConfigurationSource, OAuth2AuthorizedClientService authorizedClientService, JwtAuthenticationFilter jwtAuthenticationFilter) { - this.userService = userService; + public SecurityConfig(CorsConfigurationSource corsConfigurationSource, OAuth2AuthorizedClientService authorizedClientService, JwtAuthenticationFilter jwtAuthenticationFilter) { this.corsConfigurationSource = corsConfigurationSource; this.authorizedClientService = authorizedClientService; this.jwtAuthenticationFilter = jwtAuthenticationFilter; diff --git a/src/main/java/com/mtvs/devlinkbackend/ether/controller/EtherController.java b/src/main/java/com/mtvs/devlinkbackend/ether/controller/EtherController.java index 864aa99..98397bf 100644 --- a/src/main/java/com/mtvs/devlinkbackend/ether/controller/EtherController.java +++ b/src/main/java/com/mtvs/devlinkbackend/ether/controller/EtherController.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.ether.controller; -import com.mtvs.devlinkbackend.config.JwtUtil; +import com.mtvs.devlinkbackend.util.JwtUtil; import com.mtvs.devlinkbackend.ether.dto.EtherRegistRequestDTO; import com.mtvs.devlinkbackend.ether.dto.EtherUpdateRequestDTO; import com.mtvs.devlinkbackend.ether.entity.Ether; diff --git a/src/main/java/com/mtvs/devlinkbackend/guild/controller/GuildController.java b/src/main/java/com/mtvs/devlinkbackend/guild/controller/GuildController.java index f20ba5e..62d8117 100644 --- a/src/main/java/com/mtvs/devlinkbackend/guild/controller/GuildController.java +++ b/src/main/java/com/mtvs/devlinkbackend/guild/controller/GuildController.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.guild.controller; -import com.mtvs.devlinkbackend.config.JwtUtil; +import com.mtvs.devlinkbackend.util.JwtUtil; import com.mtvs.devlinkbackend.guild.dto.GuildMemberModifyRequestDTO; import com.mtvs.devlinkbackend.guild.dto.GuildRegistRequestDTO; import com.mtvs.devlinkbackend.guild.dto.GuildUpdateRequestDTO; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java index 69be88c..4497a2e 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java @@ -1,10 +1,11 @@ package com.mtvs.devlinkbackend.oauth2.controller; -import com.mtvs.devlinkbackend.config.JwtUtil; +import com.mtvs.devlinkbackend.oauth2.service.UserService; +import com.mtvs.devlinkbackend.util.JwtUtil; import com.mtvs.devlinkbackend.oauth2.dto.EpicGamesCallbackRequestDTO; import com.mtvs.devlinkbackend.oauth2.entity.User; import com.mtvs.devlinkbackend.oauth2.service.EpicGamesTokenService; -import com.mtvs.devlinkbackend.oauth2.service.UserService; +import com.mtvs.devlinkbackend.oauth2.service.UserPartnerService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; @@ -15,41 +16,41 @@ import java.util.Map; @RestController -@RequestMapping("/api/auth") +@RequestMapping("/api/auth/epicgames") public class Oauth2UserController { private final EpicGamesTokenService epicGamesTokenService; - private final UserService userService; private final JwtUtil jwtUtil; + private final UserService userService; - public Oauth2UserController(EpicGamesTokenService epicGamesTokenService, UserService userService, JwtUtil jwtUtil) { + public Oauth2UserController(EpicGamesTokenService epicGamesTokenService, JwtUtil jwtUtil, UserService userService) { this.epicGamesTokenService = epicGamesTokenService; - this.userService = userService; this.jwtUtil = jwtUtil; + this.userService = userService; } - // 로컬 user 정보 가져오는 API - @GetMapping("/local/user-info") - @Operation( - summary = "로컬 유저 정보 조회", - description = "DevLink만의 DB에 저장된 유저 정보를 조회한다." - ) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "조회 성공"), - @ApiResponse(responseCode = "400", description = "잘못된 헤더 또는 파라미터 전달"), - @ApiResponse(responseCode = "401", description = "인증되지 않음") - }) - public ResponseEntity getLocalUserInfo(@RequestHeader("Authorization") String authorizationHeader) { - - try { - return ResponseEntity.ok(userService.findUserByAuthorizationHeader(authorizationHeader)); - } catch (Exception e) { - return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid token"); - } - } +// // 로컬 user 정보 가져오는 API +// @GetMapping("/local/user-info") +// @Operation( +// summary = "로컬 유저 정보 조회", +// description = "DevLink만의 DB에 저장된 유저 정보를 조회한다." +// ) +// @ApiResponses(value = { +// @ApiResponse(responseCode = "200", description = "조회 성공"), +// @ApiResponse(responseCode = "400", description = "잘못된 헤더 또는 파라미터 전달"), +// @ApiResponse(responseCode = "401", description = "인증되지 않음") +// }) +// public ResponseEntity getLocalUserInfo(@RequestHeader("Authorization") String authorizationHeader) { +// +// try { +// return ResponseEntity.ok(userPartnerService.findUserByAuthorizationHeader(authorizationHeader)); +// } catch (Exception e) { +// return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid token"); +// } +// } // epicgames 계정 정보 가져오는 API - @GetMapping("/epicgames/user-info") + @GetMapping("/user-info") @Operation( summary = "EpicGames 유저 정보 조회", description = "EpicGames의 유저 정보를 조회한다." @@ -74,7 +75,7 @@ public ResponseEntity getEpicGamesUserInfo( } } - @GetMapping("/epicgames/accountId") + @GetMapping("/accountId") public ResponseEntity getAccountId( @RequestHeader("Authorization") String authorizationHeader) { @@ -85,7 +86,7 @@ public ResponseEntity getAccountId( } } - @PostMapping("/epicgames/callback") + @PostMapping("/callback") @Operation( summary = "EpicGames AccessToken 요청", description = "EpicGames로부터 사용자에게 AccessToken을 전달한다." @@ -107,19 +108,13 @@ public ResponseEntity handleEpicGamesCallback( return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } - @PostMapping("/login") + @GetMapping("/login") public ResponseEntity authLogin( - @RequestHeader(name = "Authorization") String authorizationHeader) { + @RequestHeader(name = "Authorization") String authorizationHeader) throws Exception { User user = userService.findUserByAuthorizationHeader(authorizationHeader); // 222 : 해당 User는 이미 서비스를 사용한 경험이 있음 // 260 : 해당 User가 처음 서비스를 사용 return user != null ? ResponseEntity.status(222).body("Existing User") : ResponseEntity.status(260).body("New User"); } - - @PatchMapping("/local/user-info") - public ResponseEntity updateLocalUserInfo() { - // User 추가 정보 확정되면 개발 예정 - return ResponseEntity.ok().build(); - } } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java new file mode 100644 index 0000000..88fd2a3 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java @@ -0,0 +1,10 @@ +package com.mtvs.devlinkbackend.oauth2.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/user/partner") +public class UserPartnerController { + +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientGroupConvertRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientGroupConvertRequestDTO.java new file mode 100644 index 0000000..ebda026 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientGroupConvertRequestDTO.java @@ -0,0 +1,16 @@ +package com.mtvs.devlinkbackend.oauth2.dto; + +import lombok.*; + +@Getter @Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class UserClientGroupConvertRequestDTO { + private String purpose = "UserClientGroup"; + private String clientType; + private String groupName; + private String managerName; + private String managerPhone; +} + diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientIndividualConvertRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientIndividualConvertRequestDTO.java new file mode 100644 index 0000000..7a367dc --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientIndividualConvertRequestDTO.java @@ -0,0 +1,14 @@ +package com.mtvs.devlinkbackend.oauth2.dto; + +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class UserClientIndividualConvertRequestDTO { + private String purpose = "UserClientIndividual"; + private String name; + private String phone; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserPartnerConvertRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserPartnerConvertRequestDTO.java new file mode 100644 index 0000000..666d091 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserPartnerConvertRequestDTO.java @@ -0,0 +1,22 @@ +package com.mtvs.devlinkbackend.oauth2.dto; + +import lombok.*; + +import java.util.List; +import java.util.Map; + +@Getter @Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class UserPartnerConvertRequestDTO { + private String purpose = "UserClientPartner"; + private String nickname; + private String name; + private String email; + private String phone; + private List portfolioList; + private String experience; + private Map skillSet; + private String message; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserRegistRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserRegistRequestDTO.java deleted file mode 100644 index a819075..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserRegistRequestDTO.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto; - -import lombok.*; - -@Getter @Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserRegistRequestDTO { - private String userName; - private String email; -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserUpdateRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserUpdateRequestDTO.java deleted file mode 100644 index b819504..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserUpdateRequestDTO.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto; - -import lombok.*; - -@Getter @Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserUpdateRequestDTO { - private String userName; - private String email; -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java index e6b2eb6..c491486 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java @@ -10,6 +10,8 @@ @Table(name = "USER") @Entity(name = "User") @Getter +@Inheritance(strategy = InheritanceType.JOINED) +@DiscriminatorColumn(name = "purpose") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -19,11 +21,8 @@ public class User { @Column(name = "ACCOUNT_ID", unique = true) private String accountId; - @Column(name = "EMAIL") - private String email; - - @Column(name = "USER_NAME") - private String userName; + @Column(name = "PURPOSE", nullable = false, insertable = false, updatable = false) // "UserClient", "UserPartners" 둘 중 한개 + private String purpose; @CreationTimestamp @Column(name = "CREATED_AT", updatable = false) @@ -33,25 +32,15 @@ public class User { @Column(name = "MODIFIED_AT") private LocalDateTime modifiedAt; - @Column(name = "REFRESH_TOKEN") - private String refreshToken; - // 추후 추가 정보 필요시 Entity에 Column 추가 예정 - public User() {} public User(String accountId) { this.accountId = accountId; } - public void setEmail(String email) { - this.email = email; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - public void setRefreshToken(String refreshToken) { - this.refreshToken = refreshToken; + public User(Long userId, String accountId, String purpose) { + this.userId = userId; + this.accountId = accountId; + this.purpose = purpose; } } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java new file mode 100644 index 0000000..fc1c017 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java @@ -0,0 +1,25 @@ +package com.mtvs.devlinkbackend.oauth2.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.Getter; + +@Table(name = "USER_CLIENT_GROUP") +@Entity(name = "UserClientGroup") +@DiscriminatorValue("UserClientGroup") // purpose 값으로 지정 +@Getter +public class UserClientGroup extends User { + @Column(name = "CLIENT_TYPE") + private String clientType; + + @Column(name = "GROUP_NAME") // 회사명/팀명 + private String groupName; + + @Column(name = "MANAGER_NAME") + private String managerName; + + @Column(name = "MANAGER_PHONE") + private String managerPhone; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java new file mode 100644 index 0000000..df9207b --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java @@ -0,0 +1,19 @@ +package com.mtvs.devlinkbackend.oauth2.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.Getter; + +@Table(name = "USER_CLIENT_INDIVIDUAL") +@Entity(name = "UserClientIndividual") +@DiscriminatorValue("UserClientIndividual") // purpose 값으로 지정 +@Getter +public class UserClientIndividual extends User { + @Column(name = "NAME") + private String name; + + @Column(name = "PHONE") + private String phone; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java new file mode 100644 index 0000000..41e47c1 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java @@ -0,0 +1,58 @@ +package com.mtvs.devlinkbackend.oauth2.entity; + +import com.mtvs.devlinkbackend.util.StringListConverter; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; +import java.util.Map; + +@Table(name = "USER_PARTNER") +@Entity(name = "UserPartner") +@DiscriminatorValue("UserPartner") // purpose 값으로 지정 +@Getter @Setter +public class UserPartner extends User { + @Column(name = "NICKNAME") + private String nickname; + + @Column(name = "NAME") + private String name; + + @Column(name = "EMAIL") + private String email; + + @Column(name = "PHONE") + private String phone; + + @Convert(converter = StringListConverter.class) + @Column(name = "PORTFOLIO_LIST", columnDefinition = "TEXT") + private List portfolioList; + + @Column(name = "EXPERIENCE", columnDefinition = "TEXT") // 경력 기술 + private String experience; + + @ElementCollection + @CollectionTable(name = "SKILL", joinColumns = @JoinColumn(name = "SKILL_ID")) + @MapKeyColumn(name = "SKILL_NAME") + @Column(name = "SKILL_PROFICIENCY") + private Map skillSet; + + @Column(name = "MESSAGE", columnDefinition = "TEXT") // 하고 싶은 말 + private String messsage; + + public UserPartner(Long userId, String accountId, String purpose, String nickname, String name, String email, String phone, List portfolioList, String experience, Map skillSet, String messsage) { + super(userId, accountId, purpose); + this.nickname = nickname; + this.name = name; + this.email = email; + this.phone = phone; + this.portfolioList = portfolioList; + this.experience = experience; + this.skillSet = skillSet; + this.messsage = messsage; + } + + +} + diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientGroupRepository.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientGroupRepository.java new file mode 100644 index 0000000..80ca3c1 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientGroupRepository.java @@ -0,0 +1,22 @@ +package com.mtvs.devlinkbackend.oauth2.repository; + +import com.mtvs.devlinkbackend.oauth2.entity.UserClientGroup; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface UserClientGroupRepository extends JpaRepository { + UserClientGroup findUserClientGroupByAccountId(String accountId); + + List findByManagerNameContainingIgnoreCase(String managerName); + + List findByGroupNameContainingIgnoreCase(String groupName); + + List findByClientType(String clientType); + + List findByManagerPhone(String managerPhone); + + void deleteByAccountId(String accountId); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientIndividualRepository.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientIndividualRepository.java new file mode 100644 index 0000000..b02a230 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientIndividualRepository.java @@ -0,0 +1,18 @@ +package com.mtvs.devlinkbackend.oauth2.repository; + +import com.mtvs.devlinkbackend.oauth2.entity.UserClientIndividual; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface UserClientIndividualRepository extends JpaRepository { + UserClientIndividual findUserClientIndividualByAccountId(String accountId); + + List findUserClientIndividualsByNameContainingIgnoreCase(String name); + + List findUserClientIndividualsByPhone(String phone); + + void deleteByAccountId(String accountId); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserPartnersRepository.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserPartnersRepository.java new file mode 100644 index 0000000..fa72802 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserPartnersRepository.java @@ -0,0 +1,29 @@ +package com.mtvs.devlinkbackend.oauth2.repository; + +import com.mtvs.devlinkbackend.oauth2.entity.UserPartner; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface UserPartnersRepository extends JpaRepository { + UserPartner findUserPartnerByAccountId(String accountId); + + UserPartner findUserPartnerByPhone(String phone); + + List findUserPartnersByNameContainingIgnoreCase(String name); + + List findUserPartnersByNicknameContainingIgnoreCase(String nickname); + + List findUserPartnersByEmail(String email); + + @Query("SELECT u FROM UserPartners u JOIN u.skillSet s WHERE KEY(s) = :skillName AND VALUE(s) >= :proficiency") + List findBySkillSetWithMinProficiency( + @Param("skillName") String skillName, @Param("proficiency") Integer proficiency + ); + + void deleteUserByAccountId(String accountId); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserRepository.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserRepository.java index 1c5dc0a..b038141 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserRepository.java @@ -2,10 +2,8 @@ import com.mtvs.devlinkbackend.oauth2.entity.User; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -@Repository public interface UserRepository extends JpaRepository { User findUserByAccountId(String accountId); - void deleteUserByAccountId(String accountId); + void deleteByAccountId(String accountId); } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicGamesTokenService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicGamesTokenService.java index 64c6cd8..e46efe7 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicGamesTokenService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicGamesTokenService.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.oauth2.service; -import com.mtvs.devlinkbackend.config.JwtUtil; +import com.mtvs.devlinkbackend.util.JwtUtil; import com.mtvs.devlinkbackend.oauth2.component.EpicGamesJWKCache; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java new file mode 100644 index 0000000..795a199 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java @@ -0,0 +1,97 @@ +package com.mtvs.devlinkbackend.oauth2.service; + +import com.mtvs.devlinkbackend.oauth2.dto.UserPartnerConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.entity.User; +import com.mtvs.devlinkbackend.oauth2.entity.UserPartner; +import com.mtvs.devlinkbackend.oauth2.repository.UserPartnersRepository; +import com.mtvs.devlinkbackend.oauth2.repository.UserRepository; +import com.mtvs.devlinkbackend.util.JwtUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class UserPartnerService { + private final UserPartnersRepository userPartnersRepository; + private final UserRepository userRepository; + private final JwtUtil jwtUtil; + + public UserPartnerService(UserPartnersRepository userPartnersRepository, UserRepository userRepository, JwtUtil jwtUtil) { + this.userPartnersRepository = userPartnersRepository; + this.userRepository = userRepository; + this.jwtUtil = jwtUtil; + } + + public UserPartner findUserPartnerByAccountId(String accountId) { + return userPartnersRepository.findUserPartnerByAccountId(accountId); + }; + + public List findUserPartnersByNameContainingIgnoreCase(String name) { + return userPartnersRepository.findUserPartnersByNameContainingIgnoreCase(name); + }; + + public List findUserPartnersByNicknameContainingIgnoreCase(String nickname) { + return userPartnersRepository.findUserPartnersByNicknameContainingIgnoreCase(nickname); + }; + + public List findUserPartnersByEmail(String email) { + return userPartnersRepository.findUserPartnersByEmail(email); + }; + + public UserPartner findUserPartnerByPhone(String phone) { + return userPartnersRepository.findUserPartnerByPhone(phone); + }; + + @Transactional + public UserPartner converUserToUserPartner(UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, + String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + User user = userRepository.findUserByAccountId(accountId); + if(user == null) + throw new IllegalArgumentException("해당 계정으로 등록된 사용자 정보 없음 / 없는 정보로 추가 정보 등록 시도"); + + userRepository.delete(user); + + return userPartnersRepository.save(new UserPartner( + user.getUserId(), + user.getAccountId(), + userPartnerConvertRequestDTO.getPurpose(), + userPartnerConvertRequestDTO.getNickname(), + userPartnerConvertRequestDTO.getName(), + userPartnerConvertRequestDTO.getEmail(), + userPartnerConvertRequestDTO.getPhone(), + userPartnerConvertRequestDTO.getPortfolioList(), + userPartnerConvertRequestDTO.getExperience(), + userPartnerConvertRequestDTO.getSkillSet(), + userPartnerConvertRequestDTO.getMessage() + )); + } + + @Transactional + public UserPartner updateUserPartner(UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, + String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + UserPartner userPartner = userPartnersRepository.findUserPartnerByAccountId(accountId); + if(userPartner == null) + throw new IllegalArgumentException("잘못된 계정으로 파트너스 정보 수정 시도"); + + userPartner.setNickname(userPartnerConvertRequestDTO.getNickname()); + userPartner.setName(userPartnerConvertRequestDTO.getName()); + userPartner.setEmail(userPartnerConvertRequestDTO.getEmail()); + userPartner.setPhone(userPartnerConvertRequestDTO.getPhone()); + userPartner.setPortfolioList(userPartnerConvertRequestDTO.getPortfolioList()); + userPartner.setExperience(userPartnerConvertRequestDTO.getExperience()); + userPartner.setSkillSet(userPartnerConvertRequestDTO.getSkillSet()); + userPartner.setMesssage(userPartnerConvertRequestDTO.getMessage()); + + return userPartner; + } + + public void deleteUserPartner(String authorizationHeader) throws Exception { + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + userPartnersRepository.deleteUserByAccountId(accountId); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserService.java index fdb5882..1f99717 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserService.java @@ -1,70 +1,29 @@ package com.mtvs.devlinkbackend.oauth2.service; -import com.mtvs.devlinkbackend.config.JwtUtil; -import com.mtvs.devlinkbackend.oauth2.dto.UserUpdateRequestDTO; import com.mtvs.devlinkbackend.oauth2.entity.User; import com.mtvs.devlinkbackend.oauth2.repository.UserRepository; +import com.mtvs.devlinkbackend.util.JwtUtil; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service public class UserService { - - private final UserRepository userRepository; private final JwtUtil jwtUtil; + private final UserRepository userRepository; - public UserService(UserRepository userRepository, JwtUtil jwtUtil) { - this.userRepository = userRepository; + public UserService(JwtUtil jwtUtil, UserRepository userRepository) { this.jwtUtil = jwtUtil; + this.userRepository = userRepository; } - public User registUserByAccessToken(String accessToken) { - try { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(accessToken); - return userRepository.save(new User( - accountId - )); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public User findUserByAuthorizationHeader(String authorizationHeader) { - try { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(extractToken(authorizationHeader)); - return userRepository.findUserByAccountId(accountId); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public void updateUserByAccessToken(String accessToken, UserUpdateRequestDTO userUpdateRequestDTO) { - try { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(accessToken); - User user = userRepository.findUserByAccountId(accountId); - if(user != null) { - user.setEmail(userUpdateRequestDTO.getEmail()); - user.setUserName(userUpdateRequestDTO.getUserName()); - } - else throw new RuntimeException("user not found"); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public void deleteUserByAccessToken(String accessToken) { - try { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithAuth(accessToken); - userRepository.deleteUserByAccountId(accountId); - } catch (Exception e) { - throw new RuntimeException(e); - } + @Transactional + public User registUserByAuthorizationHeader(String authorizationHeader) throws Exception { + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + return userRepository.save(new User(accountId)); } - private String extractToken(String authorizationHeader) { - if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) { - return authorizationHeader.substring(7); - } else { - throw new IllegalArgumentException("Authorization header must start with 'Bearer '"); - } + public User findUserByAuthorizationHeader(String authorizationHeader) throws Exception { + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + return userRepository.findUserByAccountId(accountId); } } diff --git a/src/main/java/com/mtvs/devlinkbackend/question/controller/QuestionController.java b/src/main/java/com/mtvs/devlinkbackend/question/controller/QuestionController.java index c51567d..c331915 100644 --- a/src/main/java/com/mtvs/devlinkbackend/question/controller/QuestionController.java +++ b/src/main/java/com/mtvs/devlinkbackend/question/controller/QuestionController.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.question.controller; -import com.mtvs.devlinkbackend.config.JwtUtil; +import com.mtvs.devlinkbackend.util.JwtUtil; import com.mtvs.devlinkbackend.question.dto.QuestionRegistRequestDTO; import com.mtvs.devlinkbackend.question.dto.QuestionUpdateRequestDTO; import com.mtvs.devlinkbackend.question.entity.Question; diff --git a/src/main/java/com/mtvs/devlinkbackend/reply/controller/ReplyController.java b/src/main/java/com/mtvs/devlinkbackend/reply/controller/ReplyController.java index e010ac2..e5f67b1 100644 --- a/src/main/java/com/mtvs/devlinkbackend/reply/controller/ReplyController.java +++ b/src/main/java/com/mtvs/devlinkbackend/reply/controller/ReplyController.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.reply.controller; -import com.mtvs.devlinkbackend.config.JwtUtil; +import com.mtvs.devlinkbackend.util.JwtUtil; import com.mtvs.devlinkbackend.reply.dto.ReplyRegistRequestDTO; import com.mtvs.devlinkbackend.reply.dto.ReplyUpdateRequestDTO; import com.mtvs.devlinkbackend.reply.entity.Reply; diff --git a/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java b/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java index 76f7f67..b968fa3 100644 --- a/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java +++ b/src/main/java/com/mtvs/devlinkbackend/request/controller/RequestController.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.request.controller; -import com.mtvs.devlinkbackend.config.JwtUtil; +import com.mtvs.devlinkbackend.util.JwtUtil; import com.mtvs.devlinkbackend.request.dto.RequestRegistRequestDTO; import com.mtvs.devlinkbackend.request.dto.RequestUpdateRequestDTO; import com.mtvs.devlinkbackend.request.entity.Request; diff --git a/src/main/java/com/mtvs/devlinkbackend/team/controller/TeamController.java b/src/main/java/com/mtvs/devlinkbackend/team/controller/TeamController.java index 4ed5681..2a92939 100644 --- a/src/main/java/com/mtvs/devlinkbackend/team/controller/TeamController.java +++ b/src/main/java/com/mtvs/devlinkbackend/team/controller/TeamController.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.team.controller; -import com.mtvs.devlinkbackend.config.JwtUtil; +import com.mtvs.devlinkbackend.util.JwtUtil; import com.mtvs.devlinkbackend.team.dto.TeamMemberModifyRequestDTO; import com.mtvs.devlinkbackend.team.dto.TeamRegistRequestDTO; import com.mtvs.devlinkbackend.team.dto.TeamUpdateRequestDTO; diff --git a/src/main/java/com/mtvs/devlinkbackend/config/JwtUtil.java b/src/main/java/com/mtvs/devlinkbackend/util/JwtUtil.java similarity index 99% rename from src/main/java/com/mtvs/devlinkbackend/config/JwtUtil.java rename to src/main/java/com/mtvs/devlinkbackend/util/JwtUtil.java index 0947631..5f25fc6 100644 --- a/src/main/java/com/mtvs/devlinkbackend/config/JwtUtil.java +++ b/src/main/java/com/mtvs/devlinkbackend/util/JwtUtil.java @@ -1,4 +1,4 @@ -package com.mtvs.devlinkbackend.config; +package com.mtvs.devlinkbackend.util; import com.mtvs.devlinkbackend.oauth2.component.EpicGamesJWKCache; import com.nimbusds.jose.JWSAlgorithm; diff --git a/src/main/java/com/mtvs/devlinkbackend/util/StringListConverter.java b/src/main/java/com/mtvs/devlinkbackend/util/StringListConverter.java new file mode 100644 index 0000000..8f9b2c4 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/util/StringListConverter.java @@ -0,0 +1,34 @@ +package com.mtvs.devlinkbackend.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.persistence.AttributeConverter; +import jakarta.persistence.Converter; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +@Converter +public class StringListConverter implements AttributeConverter, String> { + + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Override + public String convertToDatabaseColumn(List attribute) { + try { + return objectMapper.writeValueAsString(attribute); + } catch (JsonProcessingException e) { + throw new RuntimeException("Could not convert list to JSON", e); + } + } + + @Override + public List convertToEntityAttribute(String dbData) { + try { + return Arrays.asList(objectMapper.readValue(dbData, String[].class)); + } catch (IOException e) { + throw new RuntimeException("Could not convert JSON to list", e); + } + } +} \ No newline at end of file From 05b7fb8fc77f78c64f379b7d6f43c2634aa11456 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Thu, 17 Oct 2024 15:35:39 +0900 Subject: [PATCH 2/8] =?UTF-8?q?Feat:=20UserClientGroup=20&=20UserClientInd?= =?UTF-8?q?ividual=20Service=20RUD=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devlinkbackend/oauth2/service/UserClientGroupService.java | 2 ++ .../oauth2/service/UserClientIndividualService.java | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java new file mode 100644 index 0000000..5719323 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java @@ -0,0 +1,2 @@ +package com.mtvs.devlinkbackend.oauth2.service;public class UserClientGroupService { +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java new file mode 100644 index 0000000..1a605d2 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java @@ -0,0 +1,2 @@ +package com.mtvs.devlinkbackend.oauth2.service;public class UserClientIndividualService { +} From 64c0869831eeb275e494d904daa2c63d1d1c7c16 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Thu, 17 Oct 2024 15:36:26 +0900 Subject: [PATCH 3/8] =?UTF-8?q?Feat:=20UserClientGroup=20&=20UserClientInd?= =?UTF-8?q?ividual=20Service=20RUD=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/JwtAuthenticationFilter.java | 5 +- .../oauth2/entity/UserClientGroup.java | 14 ++- .../oauth2/entity/UserClientIndividual.java | 12 ++- .../repository/UserPartnersRepository.java | 2 +- .../service/UserClientGroupService.java | 90 ++++++++++++++++++- .../service/UserClientIndividualService.java | 78 +++++++++++++++- .../oauth2/service/UserPartnerService.java | 4 +- 7 files changed, 196 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/mtvs/devlinkbackend/config/JwtAuthenticationFilter.java b/src/main/java/com/mtvs/devlinkbackend/config/JwtAuthenticationFilter.java index a8decfb..cd49b00 100644 --- a/src/main/java/com/mtvs/devlinkbackend/config/JwtAuthenticationFilter.java +++ b/src/main/java/com/mtvs/devlinkbackend/config/JwtAuthenticationFilter.java @@ -51,9 +51,10 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse } catch (Exception e) { // 검증 실패 시 401 에러 설정 if(e.getMessage().equals("JWT is expired")) - response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + response.setStatus(449); else - response.setStatus(449); // 헤더에 들어 있는 토큰이 잘못됨 + System.out.println(e.getMessage()); + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 헤더에 들어 있는 토큰이 잘못됨 return; } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java index fc1c017..09d17ac 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java @@ -5,11 +5,12 @@ import jakarta.persistence.Entity; import jakarta.persistence.Table; import lombok.Getter; +import lombok.Setter; @Table(name = "USER_CLIENT_GROUP") @Entity(name = "UserClientGroup") @DiscriminatorValue("UserClientGroup") // purpose 값으로 지정 -@Getter +@Getter @Setter public class UserClientGroup extends User { @Column(name = "CLIENT_TYPE") private String clientType; @@ -22,4 +23,15 @@ public class UserClientGroup extends User { @Column(name = "MANAGER_PHONE") private String managerPhone; + + public UserClientGroup() { + } + + public UserClientGroup(Long userId, String accountId, String purpose, String clientType, String groupName, String managerName, String managerPhone) { + super(userId, accountId, purpose); + this.clientType = clientType; + this.groupName = groupName; + this.managerName = managerName; + this.managerPhone = managerPhone; + } } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java index df9207b..6547ced 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java @@ -5,15 +5,25 @@ import jakarta.persistence.Entity; import jakarta.persistence.Table; import lombok.Getter; +import lombok.Setter; @Table(name = "USER_CLIENT_INDIVIDUAL") @Entity(name = "UserClientIndividual") @DiscriminatorValue("UserClientIndividual") // purpose 값으로 지정 -@Getter +@Getter @Setter public class UserClientIndividual extends User { @Column(name = "NAME") private String name; @Column(name = "PHONE") private String phone; + + public UserClientIndividual() { + } + + public UserClientIndividual(Long userId, String accountId, String purpose, String name, String phone) { + super(userId, accountId, purpose); + this.name = name; + this.phone = phone; + } } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserPartnersRepository.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserPartnersRepository.java index fa72802..a82e005 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserPartnersRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserPartnersRepository.java @@ -20,7 +20,7 @@ public interface UserPartnersRepository extends JpaRepository List findUserPartnersByEmail(String email); - @Query("SELECT u FROM UserPartners u JOIN u.skillSet s WHERE KEY(s) = :skillName AND VALUE(s) >= :proficiency") + @Query("SELECT u FROM UserPartner u JOIN u.skillSet s WHERE KEY(s) = :skillName AND VALUE(s) >= :proficiency") List findBySkillSetWithMinProficiency( @Param("skillName") String skillName, @Param("proficiency") Integer proficiency ); diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java index 5719323..64b6dc5 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java @@ -1,2 +1,90 @@ -package com.mtvs.devlinkbackend.oauth2.service;public class UserClientGroupService { +package com.mtvs.devlinkbackend.oauth2.service; + +import com.mtvs.devlinkbackend.oauth2.dto.UserClientGroupConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.entity.User; +import com.mtvs.devlinkbackend.oauth2.entity.UserClientGroup; +import com.mtvs.devlinkbackend.oauth2.repository.UserClientGroupRepository; +import com.mtvs.devlinkbackend.oauth2.repository.UserRepository; +import com.mtvs.devlinkbackend.util.JwtUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class UserClientGroupService { + private final UserClientGroupRepository userClientGroupRepository; + private final JwtUtil jwtUtil; + private final UserRepository userRepository; + + public UserClientGroupService(UserClientGroupRepository userClientGroupRepository, JwtUtil jwtUtil, UserRepository userRepository) { + this.userClientGroupRepository = userClientGroupRepository; + this.jwtUtil = jwtUtil; + this.userRepository = userRepository; + } + + public UserClientGroup findUserClientGroupByAuthorizationHeader(String authorizationHeader) throws Exception { + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + return userClientGroupRepository.findUserClientGroupByAccountId(accountId); + }; + + public List findByManagerNameContainingIgnoreCase(String managerName) { + return userClientGroupRepository.findByManagerNameContainingIgnoreCase(managerName); + }; + + public List findByGroupNameContainingIgnoreCase(String groupName) { + return userClientGroupRepository.findByGroupNameContainingIgnoreCase(groupName); + }; + + public List findByClientType(String clientType) { + return userClientGroupRepository.findByClientType(clientType); + }; + + public List findByManagerPhone(String managerPhone) { + return userClientGroupRepository.findByManagerPhone(managerPhone); + }; + + @Transactional + public UserClientGroup converUserToUserClientGroup(UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, + String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + User user = userRepository.findUserByAccountId(accountId); + if(user == null) + throw new IllegalArgumentException("잘못된 계정으로 추가 정보 입력 중"); + + userRepository.delete(user); + + return userClientGroupRepository.save(new UserClientGroup( + user.getUserId(), + user.getAccountId(), + userClientGroupConvertRequestDTO.getPurpose(), + userClientGroupConvertRequestDTO.getClientType(), + userClientGroupConvertRequestDTO.getGroupName(), + userClientGroupConvertRequestDTO.getManagerName(), + userClientGroupConvertRequestDTO.getManagerPhone() + )); + } + + @Transactional + public UserClientGroup updateUserClientGroup(UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, + String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + UserClientGroup userClientGroup = userClientGroupRepository.findUserClientGroupByAccountId(accountId); + if (userClientGroup == null) + throw new IllegalArgumentException("잘못된 계정으로 그룹 정보 수정 시도"); + + userClientGroup.setClientType(userClientGroupConvertRequestDTO.getClientType()); + userClientGroup.setGroupName(userClientGroup.getGroupName()); + userClientGroup.setManagerName(userClientGroup.getManagerName()); + userClientGroup.setManagerPhone(userClientGroup.getManagerPhone()); + + return userClientGroup; + } + + public void deleteByAuthorizationHeader(String authorizationHeader) throws Exception { + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + userClientGroupRepository.deleteByAccountId(accountId); + } } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java index 1a605d2..182fc7a 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java @@ -1,2 +1,78 @@ -package com.mtvs.devlinkbackend.oauth2.service;public class UserClientIndividualService { +package com.mtvs.devlinkbackend.oauth2.service; + +import com.mtvs.devlinkbackend.oauth2.dto.UserClientIndividualConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.entity.User; +import com.mtvs.devlinkbackend.oauth2.entity.UserClientIndividual; +import com.mtvs.devlinkbackend.oauth2.repository.UserClientIndividualRepository; +import com.mtvs.devlinkbackend.oauth2.repository.UserRepository; +import com.mtvs.devlinkbackend.util.JwtUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class UserClientIndividualService { + + private final UserClientIndividualRepository userClientIndividualRepository; + private final JwtUtil jwtUtil; + private final UserRepository userRepository; + + public UserClientIndividualService(UserClientIndividualRepository userClientIndividualRepository, JwtUtil jwtUtil, UserRepository userRepository) { + this.userClientIndividualRepository = userClientIndividualRepository; + this.jwtUtil = jwtUtil; + this.userRepository = userRepository; + } + + public UserClientIndividual findUserClientIndividualByAuthorizationHeader(String authorizationHeader) throws Exception { + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + return userClientIndividualRepository.findUserClientIndividualByAccountId(accountId); + }; + + public List findUserClientIndividualsByNameContainingIgnoreCase(String name) { + return userClientIndividualRepository.findUserClientIndividualsByNameContainingIgnoreCase(name); + }; + + public List findUserClientIndividualsByPhone(String phone) { + return userClientIndividualRepository.findUserClientIndividualsByPhone(phone); + }; + + @Transactional + public UserClientIndividual convertUserToUserClientIndividual(UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, + String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + User user = userRepository.findUserByAccountId(accountId); + if(user == null) + throw new IllegalArgumentException("잘못된 계정으로 추가 정보 입력 중"); + + userRepository.delete(user); + return userClientIndividualRepository.save(new UserClientIndividual( + user.getUserId(), + user.getAccountId(), + userClientIndividualConvertRequestDTO.getPurpose(), + userClientIndividualConvertRequestDTO.getName(), + userClientIndividualConvertRequestDTO.getPhone() + )); + } + + @Transactional + public UserClientIndividual updateUserClientIndividual(UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, + String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + UserClientIndividual userClientIndividual = userClientIndividualRepository.findUserClientIndividualByAccountId(accountId); + if(userClientIndividual == null) + throw new IllegalArgumentException("잘못된 계정으로 개인 정보 수정 시도"); + + userClientIndividual.setName(userClientIndividualConvertRequestDTO.getName()); + userClientIndividual.setPhone(userClientIndividualConvertRequestDTO.getPhone()); + + return userClientIndividual; + } + + public void deleteByAuthorizationHeader(String authorizationHeader) throws Exception { + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + userClientIndividualRepository.deleteByAccountId(accountId); + }; } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java index 795a199..ddc6253 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java @@ -50,7 +50,7 @@ public UserPartner converUserToUserPartner(UserPartnerConvertRequestDTO userPart String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); User user = userRepository.findUserByAccountId(accountId); if(user == null) - throw new IllegalArgumentException("해당 계정으로 등록된 사용자 정보 없음 / 없는 정보로 추가 정보 등록 시도"); + throw new IllegalArgumentException("잘못된 계정으로 추가 정보 입력 중"); userRepository.delete(user); @@ -90,7 +90,7 @@ public UserPartner updateUserPartner(UserPartnerConvertRequestDTO userPartnerCon return userPartner; } - public void deleteUserPartner(String authorizationHeader) throws Exception { + public void deleteByAuthorizationHeader(String authorizationHeader) throws Exception { String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); userPartnersRepository.deleteUserByAccountId(accountId); } From 096b104c00cecd82d0a3f5cc598bf0cb25d70a7b Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Thu, 17 Oct 2024 15:50:19 +0900 Subject: [PATCH 4/8] =?UTF-8?q?Feat:=20UserPartner,=20UserClientGroup,=20U?= =?UTF-8?q?serClientIndividual=20RUD=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserClientGroupController.java | 112 ++++++++++++++++++ .../UserClientIndividualController.java | 103 ++++++++++++++++ .../controller/UserPartnerController.java | 107 ++++++++++++++++- .../oauth2/service/UserPartnerService.java | 3 +- 4 files changed, 322 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java new file mode 100644 index 0000000..11ca241 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java @@ -0,0 +1,112 @@ +package com.mtvs.devlinkbackend.oauth2.controller; + +import com.mtvs.devlinkbackend.oauth2.dto.UserClientGroupConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.entity.UserClientGroup; +import com.mtvs.devlinkbackend.oauth2.service.UserClientGroupService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/user/group") +public class UserClientGroupController { + private final UserClientGroupService userClientGroupService; + + public UserClientGroupController(UserClientGroupService userClientGroupService) { + this.userClientGroupService = userClientGroupService; + } + + @Operation(summary = "Authorization Header로 UserClientGroup 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroup을 조회함"), + @ApiResponse(responseCode = "404", description = "UserClientGroup을 찾을 수 없음") + }) + @GetMapping + public ResponseEntity findUserClientGroupByAuthorizationHeader( + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + UserClientGroup userClientGroup = userClientGroupService.findUserClientGroupByAuthorizationHeader(authorizationHeader); + return ResponseEntity.ok(userClientGroup); + } + + @Operation(summary = "관리자 이름에 특정 키워드가 포함된 UserClientGroups 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroups를 조회함") + }) + @GetMapping("/manager-name/{managerName}") + public ResponseEntity> findByManagerNameContainingIgnoreCase(@PathVariable String managerName) { + List userClientGroups = userClientGroupService.findByManagerNameContainingIgnoreCase(managerName); + return ResponseEntity.ok(userClientGroups); + } + + @Operation(summary = "그룹 이름에 특정 키워드가 포함된 UserClientGroups 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroups를 조회함") + }) + @GetMapping("/group-name/{groupName}") + public ResponseEntity> findByGroupNameContainingIgnoreCase(@PathVariable String groupName) { + List userClientGroups = userClientGroupService.findByGroupNameContainingIgnoreCase(groupName); + return ResponseEntity.ok(userClientGroups); + } + + @Operation(summary = "Client Type으로 UserClientGroups 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroups를 조회함") + }) + @GetMapping("/client-type/{clientType}") + public ResponseEntity> findByClientType(@PathVariable String clientType) { + List userClientGroups = userClientGroupService.findByClientType(clientType); + return ResponseEntity.ok(userClientGroups); + } + + @Operation(summary = "관리자 전화번호로 UserClientGroups 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroups를 조회함") + }) + @GetMapping("/manager-phone/{managerPhone}") + public ResponseEntity> findByManagerPhone(@PathVariable String managerPhone) { + List userClientGroups = userClientGroupService.findByManagerPhone(managerPhone); + return ResponseEntity.ok(userClientGroups); + } + + @Operation(summary = "User를 UserClientGroup으로 변환") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 User를 UserClientGroup으로 변환함"), + @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") + }) + @PostMapping + public ResponseEntity convertUserToUserClientGroup( + @RequestBody UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + UserClientGroup userClientGroup = userClientGroupService.converUserToUserClientGroup(userClientGroupConvertRequestDTO, authorizationHeader); + return ResponseEntity.ok(userClientGroup); + } + + @Operation(summary = "UserClientGroup 정보 수정") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroup을 수정함"), + @ApiResponse(responseCode = "404", description = "UserClientGroup을 찾을 수 없음") + }) + @PatchMapping + public ResponseEntity updateUserClientGroup( + @RequestBody UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + UserClientGroup userClientGroup = userClientGroupService.updateUserClientGroup(userClientGroupConvertRequestDTO, authorizationHeader); + return ResponseEntity.ok(userClientGroup); + } + + @Operation(summary = "Authorization Header의 Account ID를 기반으로 UserClientGroup 삭제") + @ApiResponses(value = { + @ApiResponse(responseCode = "204", description = "성공적으로 UserClientGroup을 삭제함"), + @ApiResponse(responseCode = "404", description = "UserClientGroup을 찾을 수 없음") + }) + @DeleteMapping + public ResponseEntity deleteUserClientGroupByAuthorizationHeader(@RequestHeader("Authorization") String authorizationHeader) throws Exception { + userClientGroupService.deleteByAuthorizationHeader(authorizationHeader); + return ResponseEntity.noContent().build(); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java new file mode 100644 index 0000000..46478f4 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java @@ -0,0 +1,103 @@ +package com.mtvs.devlinkbackend.oauth2.controller; + +import com.mtvs.devlinkbackend.oauth2.dto.UserClientIndividualConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.entity.UserClientIndividual; +import com.mtvs.devlinkbackend.oauth2.service.UserClientIndividualService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/user/individual") +public class UserClientIndividualController { + private final UserClientIndividualService userClientIndividualService; + + public UserClientIndividualController(UserClientIndividualService userClientIndividualService) { + this.userClientIndividualService = userClientIndividualService; + } + + @Operation(summary = "Authorization Header로 UserClientIndividual 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientIndividual을 조회함"), + @ApiResponse(responseCode = "404", description = "UserClientIndividual을 찾을 수 없음") + }) + @GetMapping + public ResponseEntity findUserClientIndividualByAuthorizationHeader( + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + UserClientIndividual userClientIndividual = + userClientIndividualService.findUserClientIndividualByAuthorizationHeader(authorizationHeader); + return ResponseEntity.ok(userClientIndividual); + } + + @Operation(summary = "이름에 특정 키워드가 포함된 UserClientIndividuals 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientIndividuals를 조회함") + }) + @GetMapping("/name/{name}") + public ResponseEntity> findUserClientIndividualsByNameContainingIgnoreCase(@PathVariable String name) { + List userClientIndividuals = + userClientIndividualService.findUserClientIndividualsByNameContainingIgnoreCase(name); + return ResponseEntity.ok(userClientIndividuals); + } + + @Operation(summary = "전화번호로 UserClientIndividuals 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientIndividuals를 조회함") + }) + @GetMapping("/phone/{phone}") + public ResponseEntity> findUserClientIndividualsByPhone(@PathVariable String phone) { + List userClientIndividuals = + userClientIndividualService.findUserClientIndividualsByPhone(phone); + return ResponseEntity.ok(userClientIndividuals); + } + + @Operation(summary = "User를 UserClientIndividual로 변환") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 User를 UserClientIndividual로 변환함"), + @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") + }) + @PostMapping + public ResponseEntity convertUserToUserClientIndividual( + @RequestBody UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + UserClientIndividual userClientIndividual = + userClientIndividualService.convertUserToUserClientIndividual( + userClientIndividualConvertRequestDTO, authorizationHeader); + return ResponseEntity.ok(userClientIndividual); + } + + @Operation(summary = "UserClientIndividual 정보 수정") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientIndividual을 수정함"), + @ApiResponse(responseCode = "404", description = "UserClientIndividual을 찾을 수 없음") + }) + @PatchMapping + public ResponseEntity updateUserClientIndividual( + @RequestBody UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + UserClientIndividual userClientIndividual = + userClientIndividualService.updateUserClientIndividual( + userClientIndividualConvertRequestDTO, authorizationHeader); + return ResponseEntity.ok(userClientIndividual); + } + + @Operation(summary = "Authorization Header의 Account ID를 기반으로 UserClientIndividual 삭제") + @ApiResponses(value = { + @ApiResponse(responseCode = "204", description = "성공적으로 UserClientIndividual을 삭제함"), + @ApiResponse(responseCode = "404", description = "UserClientIndividual을 찾을 수 없음") + }) + @DeleteMapping + public ResponseEntity deleteUserClientIndividualByAuthorizationHeader( + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + userClientIndividualService.deleteByAuthorizationHeader(authorizationHeader); + return ResponseEntity.noContent().build(); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java index 88fd2a3..e4e8d10 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java @@ -1,10 +1,113 @@ package com.mtvs.devlinkbackend.oauth2.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.mtvs.devlinkbackend.oauth2.dto.UserPartnerConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.entity.UserPartner; +import com.mtvs.devlinkbackend.oauth2.service.UserPartnerService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @RestController @RequestMapping("/api/user/partner") public class UserPartnerController { + private final UserPartnerService userPartnerService; + + public UserPartnerController(UserPartnerService userPartnerService) { + this.userPartnerService = userPartnerService; + } + + @Operation(summary = "Account ID로 UserPartner 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserPartner를 조회함"), + @ApiResponse(responseCode = "404", description = "UserPartner를 찾을 수 없음") + }) + @GetMapping + public ResponseEntity findUserPartnerByAccountId( + @RequestHeader(name = "Authorization") String authorizationHeader) throws Exception { + + UserPartner userPartner = userPartnerService.findUserPartnerByAuthorizationHeader(authorizationHeader); + return ResponseEntity.ok(userPartner); + } + + @Operation(summary = "이름에 특정 키워드가 포함된 UserPartners 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserPartners를 조회함") + }) + @GetMapping("/name/{name}") + public ResponseEntity> findUserPartnersByNameContainingIgnoreCase(@PathVariable String name) { + List userPartners = userPartnerService.findUserPartnersByNameContainingIgnoreCase(name); + return ResponseEntity.ok(userPartners); + } + + @Operation(summary = "닉네임에 특정 키워드가 포함된 UserPartners 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserPartners를 조회함") + }) + @GetMapping("/nickname/{nickname}") + public ResponseEntity> findUserPartnersByNicknameContainingIgnoreCase(@PathVariable String nickname) { + List userPartners = userPartnerService.findUserPartnersByNicknameContainingIgnoreCase(nickname); + return ResponseEntity.ok(userPartners); + } + + @Operation(summary = "이메일로 UserPartners 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserPartners를 조회함") + }) + @GetMapping("/email/{email}") + public ResponseEntity> findUserPartnersByEmail(@PathVariable String email) { + List userPartners = userPartnerService.findUserPartnersByEmail(email); + return ResponseEntity.ok(userPartners); + } + + @Operation(summary = "전화번호로 UserPartner 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserPartner를 조회함") + }) + @GetMapping("/phone/{phone}") + public ResponseEntity findUserPartnerByPhone(@PathVariable String phone) { + UserPartner userPartner = userPartnerService.findUserPartnerByPhone(phone); + return ResponseEntity.ok(userPartner); + } + + @Operation(summary = "User를 UserPartner로 변환") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 User를 UserPartner로 변환함"), + @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") + }) + @PostMapping + public ResponseEntity convertUserToUserPartner( + @RequestBody UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + UserPartner userPartner = userPartnerService.converUserToUserPartner(userPartnerConvertRequestDTO, authorizationHeader); + return ResponseEntity.ok(userPartner); + } + + @Operation(summary = "UserPartner 정보 수정") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserPartner를 수정함"), + @ApiResponse(responseCode = "404", description = "UserPartner를 찾을 수 없음") + }) + @PatchMapping + public ResponseEntity updateUserPartner( + @RequestBody UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + UserPartner userPartner = userPartnerService.updateUserPartner(userPartnerConvertRequestDTO, authorizationHeader); + return ResponseEntity.ok(userPartner); + } + @Operation(summary = "Authorization Header의 Account ID를 기반으로 UserPartner 삭제") + @ApiResponses(value = { + @ApiResponse(responseCode = "204", description = "성공적으로 UserPartner를 삭제함"), + @ApiResponse(responseCode = "404", description = "UserPartner를 찾을 수 없음") + }) + @DeleteMapping("/delete") + public ResponseEntity deleteUserPartnerByAuthorizationHeader( + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + userPartnerService.deleteByAuthorizationHeader(authorizationHeader); + return ResponseEntity.noContent().build(); + } } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java index ddc6253..d438319 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java @@ -23,7 +23,8 @@ public UserPartnerService(UserPartnersRepository userPartnersRepository, UserRep this.jwtUtil = jwtUtil; } - public UserPartner findUserPartnerByAccountId(String accountId) { + public UserPartner findUserPartnerByAuthorizationHeader(String authorizationHeader) throws Exception { + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); return userPartnersRepository.findUserPartnerByAccountId(accountId); }; From 4464828501900c629410a3b133987896487473ba Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Thu, 17 Oct 2024 16:13:07 +0900 Subject: [PATCH 5/8] =?UTF-8?q?Refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=9E=91=EC=97=85=20=EB=A1=9C=EC=A7=81=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/Oauth2UserController.java | 23 ++----------------- .../devlinkbackend/oauth2/entity/User.java | 3 +++ .../crud/UserClientGroupRUDTest.java | 4 ++++ .../crud/UserClientIndividualRUDTest.java | 4 ++++ .../crud/UserPartnerRUDTest.java | 4 ++++ 5 files changed, 17 insertions(+), 21 deletions(-) create mode 100644 src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupRUDTest.java create mode 100644 src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualRUDTest.java create mode 100644 src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java index 4497a2e..c83178c 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java @@ -29,26 +29,6 @@ public Oauth2UserController(EpicGamesTokenService epicGamesTokenService, JwtUtil this.userService = userService; } -// // 로컬 user 정보 가져오는 API -// @GetMapping("/local/user-info") -// @Operation( -// summary = "로컬 유저 정보 조회", -// description = "DevLink만의 DB에 저장된 유저 정보를 조회한다." -// ) -// @ApiResponses(value = { -// @ApiResponse(responseCode = "200", description = "조회 성공"), -// @ApiResponse(responseCode = "400", description = "잘못된 헤더 또는 파라미터 전달"), -// @ApiResponse(responseCode = "401", description = "인증되지 않음") -// }) -// public ResponseEntity getLocalUserInfo(@RequestHeader("Authorization") String authorizationHeader) { -// -// try { -// return ResponseEntity.ok(userPartnerService.findUserByAuthorizationHeader(authorizationHeader)); -// } catch (Exception e) { -// return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid token"); -// } -// } - // epicgames 계정 정보 가져오는 API @GetMapping("/user-info") @Operation( @@ -80,8 +60,9 @@ public ResponseEntity getAccountId( @RequestHeader("Authorization") String authorizationHeader) { try { - return ResponseEntity.ok(jwtUtil.getSubjectFromAuthHeaderWithAuth(authorizationHeader)); + return ResponseEntity.ok(jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader)); } catch (Exception e) { + System.out.println(e.getMessage()); return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid token"); } } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java index c491486..6c1369c 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java @@ -24,6 +24,9 @@ public class User { @Column(name = "PURPOSE", nullable = false, insertable = false, updatable = false) // "UserClient", "UserPartners" 둘 중 한개 private String purpose; + @Column(name = "CHARACTER_ID", unique = true) + private Long characterId; + @CreationTimestamp @Column(name = "CREATED_AT", updatable = false) private LocalDateTime createdAt; diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupRUDTest.java new file mode 100644 index 0000000..aa51b14 --- /dev/null +++ b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupRUDTest.java @@ -0,0 +1,4 @@ +package com.mtvs.devlinkbackend.crud; + +public class UserClientGroupRUDTest { +} diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualRUDTest.java new file mode 100644 index 0000000..b86f44d --- /dev/null +++ b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualRUDTest.java @@ -0,0 +1,4 @@ +package com.mtvs.devlinkbackend.crud; + +public class UserClientIndividualRUDTest { +} diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java new file mode 100644 index 0000000..793b09f --- /dev/null +++ b/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java @@ -0,0 +1,4 @@ +package com.mtvs.devlinkbackend.crud; + +public class UserPartnerRUDTest { +} From 7bc0ac93d2c24fb3d32bcbfff0640667f5779988 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Thu, 17 Oct 2024 16:37:34 +0900 Subject: [PATCH 6/8] =?UTF-8?q?Refactor:=20User=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=20=EB=A1=9C=EC=A7=81=20=EC=9E=AC=EA=B5=AC?= =?UTF-8?q?=EC=84=B1=20=EB=B0=8F=20Create=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserClientGroupController.java | 26 +++++----- .../UserClientIndividualController.java | 32 ++++++------ .../controller/UserPartnerController.java | 26 +++++----- .../devlinkbackend/oauth2/entity/User.java | 4 +- .../oauth2/entity/UserClientGroup.java | 4 +- .../oauth2/entity/UserClientIndividual.java | 4 +- .../oauth2/entity/UserPartner.java | 4 +- .../service/UserClientGroupService.java | 51 +++++++----------- .../service/UserClientIndividualService.java | 42 ++++++--------- .../oauth2/service/UserPartnerService.java | 52 ++++++++----------- .../crud/UserPartnerRUDTest.java | 17 ++++++ 11 files changed, 124 insertions(+), 138 deletions(-) diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java index 11ca241..a247d17 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java @@ -20,6 +20,19 @@ public UserClientGroupController(UserClientGroupService userClientGroupService) this.userClientGroupService = userClientGroupService; } + @Operation(summary = "UserClientGroup 등록") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroup이 등록됨"), + @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") + }) + @PostMapping + public ResponseEntity convertUserToUserClientGroup( + @RequestBody UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + UserClientGroup userClientGroup = userClientGroupService.registUserClientGroup(userClientGroupConvertRequestDTO, authorizationHeader); + return ResponseEntity.ok(userClientGroup); + } + @Operation(summary = "Authorization Header로 UserClientGroup 조회") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroup을 조회함"), @@ -73,19 +86,6 @@ public ResponseEntity> findByManagerPhone(@PathVariable St return ResponseEntity.ok(userClientGroups); } - @Operation(summary = "User를 UserClientGroup으로 변환") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 User를 UserClientGroup으로 변환함"), - @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") - }) - @PostMapping - public ResponseEntity convertUserToUserClientGroup( - @RequestBody UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, - @RequestHeader("Authorization") String authorizationHeader) throws Exception { - UserClientGroup userClientGroup = userClientGroupService.converUserToUserClientGroup(userClientGroupConvertRequestDTO, authorizationHeader); - return ResponseEntity.ok(userClientGroup); - } - @Operation(summary = "UserClientGroup 정보 수정") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroup을 수정함"), diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java index 46478f4..1996e73 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java @@ -20,6 +20,22 @@ public UserClientIndividualController(UserClientIndividualService userClientIndi this.userClientIndividualService = userClientIndividualService; } + @Operation(summary = "UserClientIndividual로 등록") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserClientIndividual이 등록됨"), + @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") + }) + @PostMapping + public ResponseEntity convertUserToUserClientIndividual( + @RequestBody UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + UserClientIndividual userClientIndividual = + userClientIndividualService.registUserClientIndividual( + userClientIndividualConvertRequestDTO, authorizationHeader); + return ResponseEntity.ok(userClientIndividual); + } + @Operation(summary = "Authorization Header로 UserClientIndividual 조회") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "성공적으로 UserClientIndividual을 조회함"), @@ -56,22 +72,6 @@ public ResponseEntity> findUserClientIndividualsByPho return ResponseEntity.ok(userClientIndividuals); } - @Operation(summary = "User를 UserClientIndividual로 변환") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 User를 UserClientIndividual로 변환함"), - @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") - }) - @PostMapping - public ResponseEntity convertUserToUserClientIndividual( - @RequestBody UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, - @RequestHeader("Authorization") String authorizationHeader) throws Exception { - - UserClientIndividual userClientIndividual = - userClientIndividualService.convertUserToUserClientIndividual( - userClientIndividualConvertRequestDTO, authorizationHeader); - return ResponseEntity.ok(userClientIndividual); - } - @Operation(summary = "UserClientIndividual 정보 수정") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "성공적으로 UserClientIndividual을 수정함"), diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java index e4e8d10..dd5a161 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java @@ -20,6 +20,19 @@ public UserPartnerController(UserPartnerService userPartnerService) { this.userPartnerService = userPartnerService; } + @Operation(summary = "UserPartner 등록") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 UserPartner로 등록됨"), + @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") + }) + @PostMapping + public ResponseEntity convertUserToUserPartner( + @RequestBody UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + UserPartner userPartner = userPartnerService.registUserPartner(userPartnerConvertRequestDTO, authorizationHeader); + return ResponseEntity.ok(userPartner); + } + @Operation(summary = "Account ID로 UserPartner 조회") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "성공적으로 UserPartner를 조회함"), @@ -73,19 +86,6 @@ public ResponseEntity findUserPartnerByPhone(@PathVariable String p return ResponseEntity.ok(userPartner); } - @Operation(summary = "User를 UserPartner로 변환") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 User를 UserPartner로 변환함"), - @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") - }) - @PostMapping - public ResponseEntity convertUserToUserPartner( - @RequestBody UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, - @RequestHeader("Authorization") String authorizationHeader) throws Exception { - UserPartner userPartner = userPartnerService.converUserToUserPartner(userPartnerConvertRequestDTO, authorizationHeader); - return ResponseEntity.ok(userPartner); - } - @Operation(summary = "UserPartner 정보 수정") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "성공적으로 UserPartner를 수정함"), diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java index 6c1369c..5494b1e 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java @@ -21,7 +21,7 @@ public class User { @Column(name = "ACCOUNT_ID", unique = true) private String accountId; - @Column(name = "PURPOSE", nullable = false, insertable = false, updatable = false) // "UserClient", "UserPartners" 둘 중 한개 + @Column(name = "PURPOSE", insertable = false, updatable = false) // "UserClient", "UserPartners" 둘 중 한개 private String purpose; @Column(name = "CHARACTER_ID", unique = true) @@ -41,7 +41,7 @@ public User(String accountId) { this.accountId = accountId; } - public User(Long userId, String accountId, String purpose) { + public User(String accountId, String purpose) { this.userId = userId; this.accountId = accountId; this.purpose = purpose; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java index 09d17ac..17dede9 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java @@ -27,8 +27,8 @@ public class UserClientGroup extends User { public UserClientGroup() { } - public UserClientGroup(Long userId, String accountId, String purpose, String clientType, String groupName, String managerName, String managerPhone) { - super(userId, accountId, purpose); + public UserClientGroup(String accountId, String purpose, String clientType, String groupName, String managerName, String managerPhone) { + super(accountId, purpose); this.clientType = clientType; this.groupName = groupName; this.managerName = managerName; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java index 6547ced..5e63cba 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java @@ -21,8 +21,8 @@ public class UserClientIndividual extends User { public UserClientIndividual() { } - public UserClientIndividual(Long userId, String accountId, String purpose, String name, String phone) { - super(userId, accountId, purpose); + public UserClientIndividual(String accountId, String purpose, String name, String phone) { + super(accountId, purpose); this.name = name; this.phone = phone; } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java index 41e47c1..4e9c4a4 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java @@ -41,8 +41,8 @@ public class UserPartner extends User { @Column(name = "MESSAGE", columnDefinition = "TEXT") // 하고 싶은 말 private String messsage; - public UserPartner(Long userId, String accountId, String purpose, String nickname, String name, String email, String phone, List portfolioList, String experience, Map skillSet, String messsage) { - super(userId, accountId, purpose); + public UserPartner(String accountId, String purpose, String nickname, String name, String email, String phone, List portfolioList, String experience, Map skillSet, String messsage) { + super(accountId, purpose); this.nickname = nickname; this.name = name; this.email = email; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java index 64b6dc5..1618ae6 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java @@ -1,10 +1,8 @@ package com.mtvs.devlinkbackend.oauth2.service; import com.mtvs.devlinkbackend.oauth2.dto.UserClientGroupConvertRequestDTO; -import com.mtvs.devlinkbackend.oauth2.entity.User; import com.mtvs.devlinkbackend.oauth2.entity.UserClientGroup; import com.mtvs.devlinkbackend.oauth2.repository.UserClientGroupRepository; -import com.mtvs.devlinkbackend.oauth2.repository.UserRepository; import com.mtvs.devlinkbackend.util.JwtUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -15,56 +13,47 @@ public class UserClientGroupService { private final UserClientGroupRepository userClientGroupRepository; private final JwtUtil jwtUtil; - private final UserRepository userRepository; - public UserClientGroupService(UserClientGroupRepository userClientGroupRepository, JwtUtil jwtUtil, UserRepository userRepository) { + public UserClientGroupService(UserClientGroupRepository userClientGroupRepository, JwtUtil jwtUtil) { this.userClientGroupRepository = userClientGroupRepository; this.jwtUtil = jwtUtil; - this.userRepository = userRepository; } + @Transactional + public UserClientGroup registUserClientGroup(UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, + String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + return userClientGroupRepository.save(new UserClientGroup( + accountId, + userClientGroupConvertRequestDTO.getPurpose(), + userClientGroupConvertRequestDTO.getClientType(), + userClientGroupConvertRequestDTO.getGroupName(), + userClientGroupConvertRequestDTO.getManagerName(), + userClientGroupConvertRequestDTO.getManagerPhone() + )); + } public UserClientGroup findUserClientGroupByAuthorizationHeader(String authorizationHeader) throws Exception { String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); return userClientGroupRepository.findUserClientGroupByAccountId(accountId); - }; + }; public List findByManagerNameContainingIgnoreCase(String managerName) { return userClientGroupRepository.findByManagerNameContainingIgnoreCase(managerName); - }; + }; public List findByGroupNameContainingIgnoreCase(String groupName) { return userClientGroupRepository.findByGroupNameContainingIgnoreCase(groupName); - }; + }; public List findByClientType(String clientType) { return userClientGroupRepository.findByClientType(clientType); - }; + }; public List findByManagerPhone(String managerPhone) { return userClientGroupRepository.findByManagerPhone(managerPhone); - }; - - @Transactional - public UserClientGroup converUserToUserClientGroup(UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, - String authorizationHeader) throws Exception { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - User user = userRepository.findUserByAccountId(accountId); - if(user == null) - throw new IllegalArgumentException("잘못된 계정으로 추가 정보 입력 중"); - - userRepository.delete(user); - - return userClientGroupRepository.save(new UserClientGroup( - user.getUserId(), - user.getAccountId(), - userClientGroupConvertRequestDTO.getPurpose(), - userClientGroupConvertRequestDTO.getClientType(), - userClientGroupConvertRequestDTO.getGroupName(), - userClientGroupConvertRequestDTO.getManagerName(), - userClientGroupConvertRequestDTO.getManagerPhone() - )); - } + }; @Transactional public UserClientGroup updateUserClientGroup(UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java index 182fc7a..95b8902 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java @@ -1,10 +1,8 @@ package com.mtvs.devlinkbackend.oauth2.service; import com.mtvs.devlinkbackend.oauth2.dto.UserClientIndividualConvertRequestDTO; -import com.mtvs.devlinkbackend.oauth2.entity.User; import com.mtvs.devlinkbackend.oauth2.entity.UserClientIndividual; import com.mtvs.devlinkbackend.oauth2.repository.UserClientIndividualRepository; -import com.mtvs.devlinkbackend.oauth2.repository.UserRepository; import com.mtvs.devlinkbackend.util.JwtUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -16,45 +14,37 @@ public class UserClientIndividualService { private final UserClientIndividualRepository userClientIndividualRepository; private final JwtUtil jwtUtil; - private final UserRepository userRepository; - public UserClientIndividualService(UserClientIndividualRepository userClientIndividualRepository, JwtUtil jwtUtil, UserRepository userRepository) { + public UserClientIndividualService(UserClientIndividualRepository userClientIndividualRepository, JwtUtil jwtUtil) { this.userClientIndividualRepository = userClientIndividualRepository; this.jwtUtil = jwtUtil; - this.userRepository = userRepository; } + @Transactional + public UserClientIndividual registUserClientIndividual(UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, + String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + return userClientIndividualRepository.save(new UserClientIndividual( + accountId, + userClientIndividualConvertRequestDTO.getPurpose(), + userClientIndividualConvertRequestDTO.getName(), + userClientIndividualConvertRequestDTO.getPhone() + )); + } public UserClientIndividual findUserClientIndividualByAuthorizationHeader(String authorizationHeader) throws Exception { String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); return userClientIndividualRepository.findUserClientIndividualByAccountId(accountId); - }; + }; public List findUserClientIndividualsByNameContainingIgnoreCase(String name) { return userClientIndividualRepository.findUserClientIndividualsByNameContainingIgnoreCase(name); - }; + }; public List findUserClientIndividualsByPhone(String phone) { return userClientIndividualRepository.findUserClientIndividualsByPhone(phone); - }; - - @Transactional - public UserClientIndividual convertUserToUserClientIndividual(UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, - String authorizationHeader) throws Exception { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - User user = userRepository.findUserByAccountId(accountId); - if(user == null) - throw new IllegalArgumentException("잘못된 계정으로 추가 정보 입력 중"); - - userRepository.delete(user); - return userClientIndividualRepository.save(new UserClientIndividual( - user.getUserId(), - user.getAccountId(), - userClientIndividualConvertRequestDTO.getPurpose(), - userClientIndividualConvertRequestDTO.getName(), - userClientIndividualConvertRequestDTO.getPhone() - )); - } + }; @Transactional public UserClientIndividual updateUserClientIndividual(UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java index d438319..5ceb3c2 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java @@ -1,10 +1,8 @@ package com.mtvs.devlinkbackend.oauth2.service; import com.mtvs.devlinkbackend.oauth2.dto.UserPartnerConvertRequestDTO; -import com.mtvs.devlinkbackend.oauth2.entity.User; import com.mtvs.devlinkbackend.oauth2.entity.UserPartner; import com.mtvs.devlinkbackend.oauth2.repository.UserPartnersRepository; -import com.mtvs.devlinkbackend.oauth2.repository.UserRepository; import com.mtvs.devlinkbackend.util.JwtUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -14,15 +12,33 @@ @Service public class UserPartnerService { private final UserPartnersRepository userPartnersRepository; - private final UserRepository userRepository; private final JwtUtil jwtUtil; - public UserPartnerService(UserPartnersRepository userPartnersRepository, UserRepository userRepository, JwtUtil jwtUtil) { + public UserPartnerService(UserPartnersRepository userPartnersRepository, JwtUtil jwtUtil) { this.userPartnersRepository = userPartnersRepository; - this.userRepository = userRepository; this.jwtUtil = jwtUtil; } + @Transactional + public UserPartner registUserPartner(UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, + String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + + return userPartnersRepository.save(new UserPartner( + accountId, + userPartnerConvertRequestDTO.getPurpose(), + userPartnerConvertRequestDTO.getNickname(), + userPartnerConvertRequestDTO.getName(), + userPartnerConvertRequestDTO.getEmail(), + userPartnerConvertRequestDTO.getPhone(), + userPartnerConvertRequestDTO.getPortfolioList(), + userPartnerConvertRequestDTO.getExperience(), + userPartnerConvertRequestDTO.getSkillSet(), + userPartnerConvertRequestDTO.getMessage() + )); + } + public UserPartner findUserPartnerByAuthorizationHeader(String authorizationHeader) throws Exception { String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); return userPartnersRepository.findUserPartnerByAccountId(accountId); @@ -44,32 +60,6 @@ public UserPartner findUserPartnerByPhone(String phone) { return userPartnersRepository.findUserPartnerByPhone(phone); }; - @Transactional - public UserPartner converUserToUserPartner(UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, - String authorizationHeader) throws Exception { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - User user = userRepository.findUserByAccountId(accountId); - if(user == null) - throw new IllegalArgumentException("잘못된 계정으로 추가 정보 입력 중"); - - userRepository.delete(user); - - return userPartnersRepository.save(new UserPartner( - user.getUserId(), - user.getAccountId(), - userPartnerConvertRequestDTO.getPurpose(), - userPartnerConvertRequestDTO.getNickname(), - userPartnerConvertRequestDTO.getName(), - userPartnerConvertRequestDTO.getEmail(), - userPartnerConvertRequestDTO.getPhone(), - userPartnerConvertRequestDTO.getPortfolioList(), - userPartnerConvertRequestDTO.getExperience(), - userPartnerConvertRequestDTO.getSkillSet(), - userPartnerConvertRequestDTO.getMessage() - )); - } - @Transactional public UserPartner updateUserPartner(UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, String authorizationHeader) throws Exception { diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java index 793b09f..79fbfc6 100644 --- a/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java +++ b/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java @@ -1,4 +1,21 @@ package com.mtvs.devlinkbackend.crud; +import com.mtvs.devlinkbackend.oauth2.dto.UserPartnerConvertRequestDTO; +import com.mtvs.devlinkbackend.team.dto.TeamRegistRequestDTO; +import org.junit.jupiter.params.provider.Arguments; + +import java.util.List; +import java.util.stream.Stream; + public class UserPartnerRUDTest { + private static Stream convertUserToUserPartner() { + return Stream.of( + Arguments.of(new UserPartnerConvertRequestDTO( + + ), "계정1"), + Arguments.of(new UserPartnerConvertRequestDTO( + + ), "계정1") + ); + } } From b99ed455babf856c293a2840aed6c90dc00e9218 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Thu, 17 Oct 2024 17:47:00 +0900 Subject: [PATCH 7/8] =?UTF-8?q?Test:=20UserPartner,=20UserClientGroup,=20U?= =?UTF-8?q?serClientIndividual=20CRUD=20TestCode=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserClientGroupController.java | 32 +++- .../UserClientIndividualController.java | 23 ++- .../controller/UserPartnerController.java | 26 ++- ...TO.java => UserClientGroupRequestDTO.java} | 2 +- ...va => UserClientIndividualRequestDTO.java} | 2 +- ...estDTO.java => UserPartnerRequestDTO.java} | 2 +- .../oauth2/service/EpicGamesTokenService.java | 2 +- .../service/UserClientGroupService.java | 36 ++-- .../service/UserClientIndividualService.java | 33 ++-- .../oauth2/service/UserPartnerService.java | 58 +++--- .../com/mtvs/devlinkbackend/util/JwtUtil.java | 1 + .../crud/UserClientGroupCRUDTest.java | 143 +++++++++++++++ .../crud/UserClientGroupRUDTest.java | 4 - .../crud/UserClientIndividualCRUDTest.java | 117 ++++++++++++ .../crud/UserClientIndividualRUDTest.java | 4 - .../crud/UserPartnerCRUDTest.java | 171 ++++++++++++++++++ .../crud/UserPartnerRUDTest.java | 21 --- 17 files changed, 543 insertions(+), 134 deletions(-) rename src/main/java/com/mtvs/devlinkbackend/oauth2/dto/{UserClientGroupConvertRequestDTO.java => UserClientGroupRequestDTO.java} (86%) rename src/main/java/com/mtvs/devlinkbackend/oauth2/dto/{UserClientIndividualConvertRequestDTO.java => UserClientIndividualRequestDTO.java} (81%) rename src/main/java/com/mtvs/devlinkbackend/oauth2/dto/{UserPartnerConvertRequestDTO.java => UserPartnerRequestDTO.java} (91%) create mode 100644 src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupCRUDTest.java delete mode 100644 src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupRUDTest.java create mode 100644 src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualCRUDTest.java delete mode 100644 src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualRUDTest.java create mode 100644 src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerCRUDTest.java delete mode 100644 src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java index a247d17..56acfc7 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java @@ -1,8 +1,9 @@ package com.mtvs.devlinkbackend.oauth2.controller; -import com.mtvs.devlinkbackend.oauth2.dto.UserClientGroupConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.dto.UserClientGroupRequestDTO; import com.mtvs.devlinkbackend.oauth2.entity.UserClientGroup; import com.mtvs.devlinkbackend.oauth2.service.UserClientGroupService; +import com.mtvs.devlinkbackend.util.JwtUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; @@ -15,9 +16,11 @@ @RequestMapping("/api/user/group") public class UserClientGroupController { private final UserClientGroupService userClientGroupService; + private final JwtUtil jwtUtil; - public UserClientGroupController(UserClientGroupService userClientGroupService) { + public UserClientGroupController(UserClientGroupService userClientGroupService, JwtUtil jwtUtil) { this.userClientGroupService = userClientGroupService; + this.jwtUtil = jwtUtil; } @Operation(summary = "UserClientGroup 등록") @@ -27,9 +30,12 @@ public UserClientGroupController(UserClientGroupService userClientGroupService) }) @PostMapping public ResponseEntity convertUserToUserClientGroup( - @RequestBody UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, + @RequestBody UserClientGroupRequestDTO userClientGroupRequestDTO, @RequestHeader("Authorization") String authorizationHeader) throws Exception { - UserClientGroup userClientGroup = userClientGroupService.registUserClientGroup(userClientGroupConvertRequestDTO, authorizationHeader); + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + UserClientGroup userClientGroup = + userClientGroupService.registUserClientGroup(userClientGroupRequestDTO, accountId); return ResponseEntity.ok(userClientGroup); } @@ -42,11 +48,12 @@ public ResponseEntity convertUserToUserClientGroup( public ResponseEntity findUserClientGroupByAuthorizationHeader( @RequestHeader("Authorization") String authorizationHeader) throws Exception { - UserClientGroup userClientGroup = userClientGroupService.findUserClientGroupByAuthorizationHeader(authorizationHeader); + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + UserClientGroup userClientGroup = userClientGroupService.findUserClientGroupByAccountId(accountId); return ResponseEntity.ok(userClientGroup); } - @Operation(summary = "관리자 이름에 특정 키워드가 포함된 UserClientGroups 조회") + @Operation(summary = "담당자 이름에 특정 키워드가 포함된 UserClientGroups 조회") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroups를 조회함") }) @@ -76,7 +83,7 @@ public ResponseEntity> findByClientType(@PathVariable Stri return ResponseEntity.ok(userClientGroups); } - @Operation(summary = "관리자 전화번호로 UserClientGroups 조회") + @Operation(summary = "담당자 전화번호로 UserClientGroups 조회") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroups를 조회함") }) @@ -93,9 +100,12 @@ public ResponseEntity> findByManagerPhone(@PathVariable St }) @PatchMapping public ResponseEntity updateUserClientGroup( - @RequestBody UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, + @RequestBody UserClientGroupRequestDTO userClientGroupRequestDTO, @RequestHeader("Authorization") String authorizationHeader) throws Exception { - UserClientGroup userClientGroup = userClientGroupService.updateUserClientGroup(userClientGroupConvertRequestDTO, authorizationHeader); + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + UserClientGroup userClientGroup = + userClientGroupService.updateUserClientGroup(userClientGroupRequestDTO, accountId); return ResponseEntity.ok(userClientGroup); } @@ -106,7 +116,9 @@ public ResponseEntity updateUserClientGroup( }) @DeleteMapping public ResponseEntity deleteUserClientGroupByAuthorizationHeader(@RequestHeader("Authorization") String authorizationHeader) throws Exception { - userClientGroupService.deleteByAuthorizationHeader(authorizationHeader); + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + userClientGroupService.deleteByAccountId(accountId); return ResponseEntity.noContent().build(); } } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java index 1996e73..3ab0ef7 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java @@ -1,8 +1,9 @@ package com.mtvs.devlinkbackend.oauth2.controller; -import com.mtvs.devlinkbackend.oauth2.dto.UserClientIndividualConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.dto.UserClientIndividualRequestDTO; import com.mtvs.devlinkbackend.oauth2.entity.UserClientIndividual; import com.mtvs.devlinkbackend.oauth2.service.UserClientIndividualService; +import com.mtvs.devlinkbackend.util.JwtUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; @@ -15,9 +16,11 @@ @RequestMapping("/api/user/individual") public class UserClientIndividualController { private final UserClientIndividualService userClientIndividualService; + private final JwtUtil jwtUtil; - public UserClientIndividualController(UserClientIndividualService userClientIndividualService) { + public UserClientIndividualController(UserClientIndividualService userClientIndividualService, JwtUtil jwtUtil) { this.userClientIndividualService = userClientIndividualService; + this.jwtUtil = jwtUtil; } @Operation(summary = "UserClientIndividual로 등록") @@ -27,12 +30,13 @@ public UserClientIndividualController(UserClientIndividualService userClientIndi }) @PostMapping public ResponseEntity convertUserToUserClientIndividual( - @RequestBody UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, + @RequestBody UserClientIndividualRequestDTO userClientIndividualRequestDTO, @RequestHeader("Authorization") String authorizationHeader) throws Exception { + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); UserClientIndividual userClientIndividual = userClientIndividualService.registUserClientIndividual( - userClientIndividualConvertRequestDTO, authorizationHeader); + userClientIndividualRequestDTO, accountId); return ResponseEntity.ok(userClientIndividual); } @@ -45,8 +49,9 @@ public ResponseEntity convertUserToUserClientIndividual( public ResponseEntity findUserClientIndividualByAuthorizationHeader( @RequestHeader("Authorization") String authorizationHeader) throws Exception { + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); UserClientIndividual userClientIndividual = - userClientIndividualService.findUserClientIndividualByAuthorizationHeader(authorizationHeader); + userClientIndividualService.findUserClientIndividualByAccountId(accountId); return ResponseEntity.ok(userClientIndividual); } @@ -79,12 +84,13 @@ public ResponseEntity> findUserClientIndividualsByPho }) @PatchMapping public ResponseEntity updateUserClientIndividual( - @RequestBody UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, + @RequestBody UserClientIndividualRequestDTO userClientIndividualRequestDTO, @RequestHeader("Authorization") String authorizationHeader) throws Exception { + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); UserClientIndividual userClientIndividual = userClientIndividualService.updateUserClientIndividual( - userClientIndividualConvertRequestDTO, authorizationHeader); + userClientIndividualRequestDTO, accountId); return ResponseEntity.ok(userClientIndividual); } @@ -97,7 +103,8 @@ public ResponseEntity updateUserClientIndividual( public ResponseEntity deleteUserClientIndividualByAuthorizationHeader( @RequestHeader("Authorization") String authorizationHeader) throws Exception { - userClientIndividualService.deleteByAuthorizationHeader(authorizationHeader); + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + userClientIndividualService.deleteByAccountId(accountId); return ResponseEntity.noContent().build(); } } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java index dd5a161..c625c19 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java @@ -1,8 +1,9 @@ package com.mtvs.devlinkbackend.oauth2.controller; -import com.mtvs.devlinkbackend.oauth2.dto.UserPartnerConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.dto.UserPartnerRequestDTO; import com.mtvs.devlinkbackend.oauth2.entity.UserPartner; import com.mtvs.devlinkbackend.oauth2.service.UserPartnerService; +import com.mtvs.devlinkbackend.util.JwtUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; @@ -15,9 +16,11 @@ @RequestMapping("/api/user/partner") public class UserPartnerController { private final UserPartnerService userPartnerService; + private final JwtUtil jwtUtil; - public UserPartnerController(UserPartnerService userPartnerService) { + public UserPartnerController(UserPartnerService userPartnerService, JwtUtil jwtUtil) { this.userPartnerService = userPartnerService; + this.jwtUtil = jwtUtil; } @Operation(summary = "UserPartner 등록") @@ -27,9 +30,11 @@ public UserPartnerController(UserPartnerService userPartnerService) { }) @PostMapping public ResponseEntity convertUserToUserPartner( - @RequestBody UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, + @RequestBody UserPartnerRequestDTO userPartnerRequestDTO, @RequestHeader("Authorization") String authorizationHeader) throws Exception { - UserPartner userPartner = userPartnerService.registUserPartner(userPartnerConvertRequestDTO, authorizationHeader); + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + UserPartner userPartner = userPartnerService.registUserPartner(userPartnerRequestDTO, accountId); return ResponseEntity.ok(userPartner); } @@ -42,7 +47,8 @@ public ResponseEntity convertUserToUserPartner( public ResponseEntity findUserPartnerByAccountId( @RequestHeader(name = "Authorization") String authorizationHeader) throws Exception { - UserPartner userPartner = userPartnerService.findUserPartnerByAuthorizationHeader(authorizationHeader); + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + UserPartner userPartner = userPartnerService.findUserPartnerByAccountId(accountId); return ResponseEntity.ok(userPartner); } @@ -93,9 +99,11 @@ public ResponseEntity findUserPartnerByPhone(@PathVariable String p }) @PatchMapping public ResponseEntity updateUserPartner( - @RequestBody UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, + @RequestBody UserPartnerRequestDTO userPartnerRequestDTO, @RequestHeader("Authorization") String authorizationHeader) throws Exception { - UserPartner userPartner = userPartnerService.updateUserPartner(userPartnerConvertRequestDTO, authorizationHeader); + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + UserPartner userPartner = userPartnerService.updateUserPartner(userPartnerRequestDTO, accountId); return ResponseEntity.ok(userPartner); } @@ -107,7 +115,9 @@ public ResponseEntity updateUserPartner( @DeleteMapping("/delete") public ResponseEntity deleteUserPartnerByAuthorizationHeader( @RequestHeader("Authorization") String authorizationHeader) throws Exception { - userPartnerService.deleteByAuthorizationHeader(authorizationHeader); + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + userPartnerService.deleteByAccountId(accountId); return ResponseEntity.noContent().build(); } } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientGroupConvertRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientGroupRequestDTO.java similarity index 86% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientGroupConvertRequestDTO.java rename to src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientGroupRequestDTO.java index ebda026..13f668c 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientGroupConvertRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientGroupRequestDTO.java @@ -6,7 +6,7 @@ @NoArgsConstructor @AllArgsConstructor @ToString -public class UserClientGroupConvertRequestDTO { +public class UserClientGroupRequestDTO { private String purpose = "UserClientGroup"; private String clientType; private String groupName; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientIndividualConvertRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientIndividualRequestDTO.java similarity index 81% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientIndividualConvertRequestDTO.java rename to src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientIndividualRequestDTO.java index 7a367dc..dd88896 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientIndividualConvertRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserClientIndividualRequestDTO.java @@ -7,7 +7,7 @@ @NoArgsConstructor @AllArgsConstructor @ToString -public class UserClientIndividualConvertRequestDTO { +public class UserClientIndividualRequestDTO { private String purpose = "UserClientIndividual"; private String name; private String phone; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserPartnerConvertRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserPartnerRequestDTO.java similarity index 91% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserPartnerConvertRequestDTO.java rename to src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserPartnerRequestDTO.java index 666d091..19583d8 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserPartnerConvertRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/UserPartnerRequestDTO.java @@ -9,7 +9,7 @@ @NoArgsConstructor @AllArgsConstructor @ToString -public class UserPartnerConvertRequestDTO { +public class UserPartnerRequestDTO { private String purpose = "UserClientPartner"; private String nickname; private String name; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicGamesTokenService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicGamesTokenService.java index e46efe7..2fd1285 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicGamesTokenService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicGamesTokenService.java @@ -83,7 +83,7 @@ public List> getEpicGamesUserAccount(String authorizationHea HttpHeaders headers = new HttpHeaders(); // Bearer Authentication 헤더 추가 - headers.set("Authorization", authorizationHeader); + headers.set("Authorization", authorizationHeader.replaceAll("\\r?\\n","")); headers.set("Content-Type", "application/x-www-form-urlencoded"); HttpEntity> request = new HttpEntity<>(new LinkedMultiValueMap<>(), headers); diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java index 1618ae6..cf92533 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java @@ -1,9 +1,8 @@ package com.mtvs.devlinkbackend.oauth2.service; -import com.mtvs.devlinkbackend.oauth2.dto.UserClientGroupConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.dto.UserClientGroupRequestDTO; import com.mtvs.devlinkbackend.oauth2.entity.UserClientGroup; import com.mtvs.devlinkbackend.oauth2.repository.UserClientGroupRepository; -import com.mtvs.devlinkbackend.util.JwtUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -12,29 +11,24 @@ @Service public class UserClientGroupService { private final UserClientGroupRepository userClientGroupRepository; - private final JwtUtil jwtUtil; - public UserClientGroupService(UserClientGroupRepository userClientGroupRepository, JwtUtil jwtUtil) { + public UserClientGroupService(UserClientGroupRepository userClientGroupRepository) { this.userClientGroupRepository = userClientGroupRepository; - this.jwtUtil = jwtUtil; } @Transactional - public UserClientGroup registUserClientGroup(UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, - String authorizationHeader) throws Exception { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + public UserClientGroup registUserClientGroup(UserClientGroupRequestDTO userClientGroupRequestDTO, + String accountId) { return userClientGroupRepository.save(new UserClientGroup( accountId, - userClientGroupConvertRequestDTO.getPurpose(), - userClientGroupConvertRequestDTO.getClientType(), - userClientGroupConvertRequestDTO.getGroupName(), - userClientGroupConvertRequestDTO.getManagerName(), - userClientGroupConvertRequestDTO.getManagerPhone() + userClientGroupRequestDTO.getPurpose(), + userClientGroupRequestDTO.getClientType(), + userClientGroupRequestDTO.getGroupName(), + userClientGroupRequestDTO.getManagerName(), + userClientGroupRequestDTO.getManagerPhone() )); } - public UserClientGroup findUserClientGroupByAuthorizationHeader(String authorizationHeader) throws Exception { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + public UserClientGroup findUserClientGroupByAccountId(String accountId) { return userClientGroupRepository.findUserClientGroupByAccountId(accountId); }; @@ -56,15 +50,14 @@ public List findByManagerPhone(String managerPhone) { }; @Transactional - public UserClientGroup updateUserClientGroup(UserClientGroupConvertRequestDTO userClientGroupConvertRequestDTO, - String authorizationHeader) throws Exception { + public UserClientGroup updateUserClientGroup(UserClientGroupRequestDTO userClientGroupRequestDTO, + String accountId) { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); UserClientGroup userClientGroup = userClientGroupRepository.findUserClientGroupByAccountId(accountId); if (userClientGroup == null) throw new IllegalArgumentException("잘못된 계정으로 그룹 정보 수정 시도"); - userClientGroup.setClientType(userClientGroupConvertRequestDTO.getClientType()); + userClientGroup.setClientType(userClientGroupRequestDTO.getClientType()); userClientGroup.setGroupName(userClientGroup.getGroupName()); userClientGroup.setManagerName(userClientGroup.getManagerName()); userClientGroup.setManagerPhone(userClientGroup.getManagerPhone()); @@ -72,8 +65,7 @@ public UserClientGroup updateUserClientGroup(UserClientGroupConvertRequestDTO us return userClientGroup; } - public void deleteByAuthorizationHeader(String authorizationHeader) throws Exception { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + public void deleteByAccountId(String accountId) { userClientGroupRepository.deleteByAccountId(accountId); } } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java index 95b8902..6d3331d 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java @@ -1,9 +1,8 @@ package com.mtvs.devlinkbackend.oauth2.service; -import com.mtvs.devlinkbackend.oauth2.dto.UserClientIndividualConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.dto.UserClientIndividualRequestDTO; import com.mtvs.devlinkbackend.oauth2.entity.UserClientIndividual; import com.mtvs.devlinkbackend.oauth2.repository.UserClientIndividualRepository; -import com.mtvs.devlinkbackend.util.JwtUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -13,27 +12,23 @@ public class UserClientIndividualService { private final UserClientIndividualRepository userClientIndividualRepository; - private final JwtUtil jwtUtil; - public UserClientIndividualService(UserClientIndividualRepository userClientIndividualRepository, JwtUtil jwtUtil) { + public UserClientIndividualService(UserClientIndividualRepository userClientIndividualRepository) { this.userClientIndividualRepository = userClientIndividualRepository; - this.jwtUtil = jwtUtil; } @Transactional - public UserClientIndividual registUserClientIndividual(UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, - String authorizationHeader) throws Exception { + public UserClientIndividual registUserClientIndividual(UserClientIndividualRequestDTO userClientIndividualRequestDTO, + String accountId) { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); return userClientIndividualRepository.save(new UserClientIndividual( accountId, - userClientIndividualConvertRequestDTO.getPurpose(), - userClientIndividualConvertRequestDTO.getName(), - userClientIndividualConvertRequestDTO.getPhone() + userClientIndividualRequestDTO.getPurpose(), + userClientIndividualRequestDTO.getName(), + userClientIndividualRequestDTO.getPhone() )); } - public UserClientIndividual findUserClientIndividualByAuthorizationHeader(String authorizationHeader) throws Exception { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + public UserClientIndividual findUserClientIndividualByAccountId(String accountId) { return userClientIndividualRepository.findUserClientIndividualByAccountId(accountId); }; @@ -47,22 +42,20 @@ public List findUserClientIndividualsByPhone(String phone) }; @Transactional - public UserClientIndividual updateUserClientIndividual(UserClientIndividualConvertRequestDTO userClientIndividualConvertRequestDTO, - String authorizationHeader) throws Exception { + public UserClientIndividual updateUserClientIndividual(UserClientIndividualRequestDTO userClientIndividualRequestDTO, + String accountId) { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); UserClientIndividual userClientIndividual = userClientIndividualRepository.findUserClientIndividualByAccountId(accountId); if(userClientIndividual == null) throw new IllegalArgumentException("잘못된 계정으로 개인 정보 수정 시도"); - userClientIndividual.setName(userClientIndividualConvertRequestDTO.getName()); - userClientIndividual.setPhone(userClientIndividualConvertRequestDTO.getPhone()); + userClientIndividual.setName(userClientIndividualRequestDTO.getName()); + userClientIndividual.setPhone(userClientIndividualRequestDTO.getPhone()); return userClientIndividual; } - public void deleteByAuthorizationHeader(String authorizationHeader) throws Exception { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + public void deleteByAccountId(String accountId) { userClientIndividualRepository.deleteByAccountId(accountId); }; } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java index 5ceb3c2..547cbef 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java @@ -1,9 +1,8 @@ package com.mtvs.devlinkbackend.oauth2.service; -import com.mtvs.devlinkbackend.oauth2.dto.UserPartnerConvertRequestDTO; +import com.mtvs.devlinkbackend.oauth2.dto.UserPartnerRequestDTO; import com.mtvs.devlinkbackend.oauth2.entity.UserPartner; import com.mtvs.devlinkbackend.oauth2.repository.UserPartnersRepository; -import com.mtvs.devlinkbackend.util.JwtUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -12,35 +11,30 @@ @Service public class UserPartnerService { private final UserPartnersRepository userPartnersRepository; - private final JwtUtil jwtUtil; - public UserPartnerService(UserPartnersRepository userPartnersRepository, JwtUtil jwtUtil) { + public UserPartnerService(UserPartnersRepository userPartnersRepository) { this.userPartnersRepository = userPartnersRepository; - this.jwtUtil = jwtUtil; } @Transactional - public UserPartner registUserPartner(UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, - String authorizationHeader) throws Exception { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + public UserPartner registUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, + String accountId) { return userPartnersRepository.save(new UserPartner( accountId, - userPartnerConvertRequestDTO.getPurpose(), - userPartnerConvertRequestDTO.getNickname(), - userPartnerConvertRequestDTO.getName(), - userPartnerConvertRequestDTO.getEmail(), - userPartnerConvertRequestDTO.getPhone(), - userPartnerConvertRequestDTO.getPortfolioList(), - userPartnerConvertRequestDTO.getExperience(), - userPartnerConvertRequestDTO.getSkillSet(), - userPartnerConvertRequestDTO.getMessage() + userPartnerRequestDTO.getPurpose(), + userPartnerRequestDTO.getNickname(), + userPartnerRequestDTO.getName(), + userPartnerRequestDTO.getEmail(), + userPartnerRequestDTO.getPhone(), + userPartnerRequestDTO.getPortfolioList(), + userPartnerRequestDTO.getExperience(), + userPartnerRequestDTO.getSkillSet(), + userPartnerRequestDTO.getMessage() )); } - public UserPartner findUserPartnerByAuthorizationHeader(String authorizationHeader) throws Exception { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + public UserPartner findUserPartnerByAccountId(String accountId) { return userPartnersRepository.findUserPartnerByAccountId(accountId); }; @@ -61,28 +55,26 @@ public UserPartner findUserPartnerByPhone(String phone) { }; @Transactional - public UserPartner updateUserPartner(UserPartnerConvertRequestDTO userPartnerConvertRequestDTO, - String authorizationHeader) throws Exception { + public UserPartner updateUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, + String accountId) { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); UserPartner userPartner = userPartnersRepository.findUserPartnerByAccountId(accountId); if(userPartner == null) throw new IllegalArgumentException("잘못된 계정으로 파트너스 정보 수정 시도"); - userPartner.setNickname(userPartnerConvertRequestDTO.getNickname()); - userPartner.setName(userPartnerConvertRequestDTO.getName()); - userPartner.setEmail(userPartnerConvertRequestDTO.getEmail()); - userPartner.setPhone(userPartnerConvertRequestDTO.getPhone()); - userPartner.setPortfolioList(userPartnerConvertRequestDTO.getPortfolioList()); - userPartner.setExperience(userPartnerConvertRequestDTO.getExperience()); - userPartner.setSkillSet(userPartnerConvertRequestDTO.getSkillSet()); - userPartner.setMesssage(userPartnerConvertRequestDTO.getMessage()); + userPartner.setNickname(userPartnerRequestDTO.getNickname()); + userPartner.setName(userPartnerRequestDTO.getName()); + userPartner.setEmail(userPartnerRequestDTO.getEmail()); + userPartner.setPhone(userPartnerRequestDTO.getPhone()); + userPartner.setPortfolioList(userPartnerRequestDTO.getPortfolioList()); + userPartner.setExperience(userPartnerRequestDTO.getExperience()); + userPartner.setSkillSet(userPartnerRequestDTO.getSkillSet()); + userPartner.setMesssage(userPartnerRequestDTO.getMessage()); return userPartner; } - public void deleteByAuthorizationHeader(String authorizationHeader) throws Exception { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + public void deleteByAccountId(String accountId) { userPartnersRepository.deleteUserByAccountId(accountId); } } diff --git a/src/main/java/com/mtvs/devlinkbackend/util/JwtUtil.java b/src/main/java/com/mtvs/devlinkbackend/util/JwtUtil.java index 5f25fc6..afa36bb 100644 --- a/src/main/java/com/mtvs/devlinkbackend/util/JwtUtil.java +++ b/src/main/java/com/mtvs/devlinkbackend/util/JwtUtil.java @@ -31,6 +31,7 @@ public JwtUtil(EpicGamesJWKCache jwkCache) { public Map getClaimsFromAuthHeaderWithAuth(String authorizationHeader) throws Exception { // Claims 검증 JWTClaimsSet claims = getClaimsFromToken(extractToken(authorizationHeader)); + System.out.println(claims); validateClaims(claims); // 검증이 완료되었을 경우 모든 Claims을 Map으로 변환하여 반환 diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupCRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupCRUDTest.java new file mode 100644 index 0000000..14ffcc2 --- /dev/null +++ b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupCRUDTest.java @@ -0,0 +1,143 @@ +package com.mtvs.devlinkbackend.crud; + +import com.mtvs.devlinkbackend.oauth2.dto.UserClientGroupRequestDTO; +import com.mtvs.devlinkbackend.oauth2.service.UserClientGroupService; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; +import java.util.stream.Stream; + +@SpringBootTest +@Transactional +public class UserClientGroupCRUDTest { + @Autowired + private UserClientGroupService userClientGroupService; + + private static Stream registUserClientGroup() { + return Stream.of( + Arguments.of(new UserClientGroupRequestDTO( + "UserClientGroup", + "팀", + "그룹이름3", + "담당자이름3", + "담당자핸드폰번호3" + ), "계정3"), + Arguments.of(new UserClientGroupRequestDTO( + "UserClientGroup", + "팀2", + "그룹이름4", + "담당자이름4", + "담당자핸드폰번호4" + ), "계정4") + ); + } + + private static Stream modifyUserClientGroup() { + return Stream.of( + Arguments.of(new UserClientGroupRequestDTO( + "UserClientGroup", + "팀", + "그룹이름2", + "담당자이름2", + "담당자핸드폰번호2" + ), "계정1"), + Arguments.of(new UserClientGroupRequestDTO( + "UserClientGroup", + "팀", + "그룹이름1", + "담당자이름1", + "담당자핸드폰번호1" + ), "계정2") + ); + } + + @BeforeEach + public void setUp() { + userClientGroupService.registUserClientGroup(new UserClientGroupRequestDTO( + "UserClientGroup", + "팀", + "그룹이름1", + "담당자이름1", + "담당자핸드폰번호1" + ), "계정1"); + userClientGroupService.registUserClientGroup(new UserClientGroupRequestDTO( + "UserClientGroup", + "팀", + "그룹이름2", + "담당자이름2", + "담당자핸드폰번호2" + ), "계정2"); + } + + @Order(1) + @DisplayName("UserClientGroup 등록") + @MethodSource("registUserClientGroup") + @ParameterizedTest + public void testRegistUserClientGroup(UserClientGroupRequestDTO UserClientGroupRequestDTO, String accountId) { + Assertions.assertDoesNotThrow(() -> userClientGroupService.registUserClientGroup(UserClientGroupRequestDTO, accountId)); + } + + @Order(2) + @DisplayName("계정 ID로 UserClientGroup 조회") + @ValueSource(strings = {"계정1", "계정2"}) + @ParameterizedTest + public void testFindUserClientGroupByAccountId(String accountId) { + Assertions.assertDoesNotThrow(() -> userClientGroupService.findUserClientGroupByAccountId(accountId)); + } + + @Order(3) + @DisplayName("담당자이름으로 UserClientGroup 조회") + @ValueSource(strings = {"담당자이름1", "담당자이름2"}) + @ParameterizedTest + public void findByManagerNameContainingIgnoreCase(String managerName) { + Assertions.assertDoesNotThrow(() -> userClientGroupService.findByManagerNameContainingIgnoreCase(managerName)); + } + + @Order(4) + @DisplayName("그룹이름으로 UserClientGroup 조회") + @ValueSource(strings = {"그룹이름1", "그룹이름2"}) + @ParameterizedTest + public void testFindByGroupNameContainingIgnoreCase(String groupName) { + Assertions.assertDoesNotThrow(() -> userClientGroupService.findByGroupNameContainingIgnoreCase(groupName)); + } + + @Order(5) + @DisplayName("이메일로 UserClientGroup 조회") + @ValueSource(strings = {"팀", "법인"}) + @ParameterizedTest + public void testFindUserClientGroupsByEmail(String clientType) { + Assertions.assertDoesNotThrow(() -> userClientGroupService.findByClientType(clientType)); + } + + @Order(6) + @DisplayName("담당자 핸드폰 번호로 UserClientGroup 조회") + @ValueSource(strings = {"담당자핸드폰1", "담당자핸드폰2"}) + @ParameterizedTest + public void testFindUserClientGroupByPhone(String managerPhone) { + Assertions.assertDoesNotThrow(() -> userClientGroupService.findByManagerPhone(managerPhone)); + } + + @Order(7) + @DisplayName("UserClientGroup 수정") + @MethodSource("modifyUserClientGroup") + @ParameterizedTest + public void testUpdateUserClientGroup(UserClientGroupRequestDTO UserClientGroupRequestDTO, String accountId) { + Assertions.assertDoesNotThrow(() -> userClientGroupService.updateUserClientGroup(UserClientGroupRequestDTO, accountId)); + } + + @Order(8) + @DisplayName("UserClientGroup 삭제") + @ValueSource(strings = {"계정1", "계정2"}) + @ParameterizedTest + public void testDeleteByAccountId(String accountId) { + Assertions.assertDoesNotThrow(() -> userClientGroupService.deleteByAccountId(accountId)); + } +} diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupRUDTest.java deleted file mode 100644 index aa51b14..0000000 --- a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupRUDTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.mtvs.devlinkbackend.crud; - -public class UserClientGroupRUDTest { -} diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualCRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualCRUDTest.java new file mode 100644 index 0000000..e0f8c35 --- /dev/null +++ b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualCRUDTest.java @@ -0,0 +1,117 @@ +package com.mtvs.devlinkbackend.crud; + +import com.mtvs.devlinkbackend.oauth2.dto.UserClientIndividualRequestDTO; +import com.mtvs.devlinkbackend.oauth2.service.UserClientIndividualService; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; + +import java.util.stream.Stream; + +@SpringBootTest +@Transactional +public class UserClientIndividualCRUDTest { + + @Autowired + private UserClientIndividualService userClientIndividualService; + + private static Stream registUserClientIndividual() { + return Stream.of( + Arguments.of(new UserClientIndividualRequestDTO( + "UserClientIndividual", + "이름3", + "핸드폰번호3" + ), "계정3"), + Arguments.of(new UserClientIndividualRequestDTO( + "UserClientIndividual", + "이름4", + "핸드폰번호4" + ), "계정4") + ); + } + + private static Stream modifyUserClientIndividual() { + return Stream.of( + Arguments.of(new UserClientIndividualRequestDTO( + "UserClientIndividual", + "이름2", + "핸드폰번호2" + ), "계정1"), + Arguments.of(new UserClientIndividualRequestDTO( + "UserClientIndividual", + "이름1", + "핸드폰번호1" + ), "계정2") + ); + } + + @BeforeEach + public void setUp() { + userClientIndividualService.registUserClientIndividual(new UserClientIndividualRequestDTO( + "UserClientIndividual", + "이름1", + "핸드폰번호1" + ), "계정1"); + userClientIndividualService.registUserClientIndividual(new UserClientIndividualRequestDTO( + "UserClientIndividual", + "이름2", + "핸드폰번호2" + ), "계정2"); + } + + @Order(1) + @DisplayName("UserClientIndividual 등록") + @MethodSource("registUserClientIndividual") + @ParameterizedTest + public void testRegistUserClientIndividual(UserClientIndividualRequestDTO UserClientIndividualRequestDTO, String accountId) { + Assertions.assertDoesNotThrow(() -> userClientIndividualService.registUserClientIndividual(UserClientIndividualRequestDTO, accountId)); + } + + @Order(2) + @DisplayName("계정 ID로 UserClientIndividual 조회") + @ValueSource(strings = {"계정1", "계정2"}) + @ParameterizedTest + public void testFindUserClientIndividualByAccountId(String accountId) { + Assertions.assertDoesNotThrow(() -> userClientIndividualService.findUserClientIndividualByAccountId(accountId)); + } + + @Order(3) + @DisplayName("이름으로 UserClientIndividual 조회") + @ValueSource(strings = {"이름1", "이름2"}) + @ParameterizedTest + public void findByManagerNameContainingIgnoreCase(String name) { + Assertions.assertDoesNotThrow(() -> userClientIndividualService.findUserClientIndividualsByNameContainingIgnoreCase(name)); + } + + @Order(4) + @DisplayName("핸드폰 번호로 UserClientIndividual 조회") + @ValueSource(strings = {"핸드폰1", "핸드폰2"}) + @ParameterizedTest + public void testFindUserClientIndividualByPhone(String phone) { + Assertions.assertDoesNotThrow(() -> userClientIndividualService.findUserClientIndividualsByPhone(phone)); + } + + @Order(5) + @DisplayName("UserClientIndividual 수정") + @MethodSource("modifyUserClientIndividual") + @ParameterizedTest + public void testUpdateUserClientIndividual(UserClientIndividualRequestDTO UserClientIndividualRequestDTO, String accountId) { + Assertions.assertDoesNotThrow(() -> userClientIndividualService.updateUserClientIndividual(UserClientIndividualRequestDTO, accountId)); + } + + @Order(6) + @DisplayName("UserClientIndividual 삭제") + @ValueSource(strings = {"계정1", "계정2"}) + @ParameterizedTest + public void testDeleteByAccountId(String accountId) { + Assertions.assertDoesNotThrow(() -> userClientIndividualService.deleteByAccountId(accountId)); + } +} diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualRUDTest.java deleted file mode 100644 index b86f44d..0000000 --- a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualRUDTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.mtvs.devlinkbackend.crud; - -public class UserClientIndividualRUDTest { -} diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerCRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerCRUDTest.java new file mode 100644 index 0000000..2410f89 --- /dev/null +++ b/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerCRUDTest.java @@ -0,0 +1,171 @@ +package com.mtvs.devlinkbackend.crud; + +import com.mtvs.devlinkbackend.oauth2.dto.UserPartnerRequestDTO; +import com.mtvs.devlinkbackend.oauth2.service.UserPartnerService; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +@SpringBootTest +@Transactional +public class UserPartnerCRUDTest { + + @Autowired + private UserPartnerService userPartnerService; + + private static Stream registUserPartner() { + return Stream.of( + Arguments.of(new UserPartnerRequestDTO( + "UserClientPartner", + "닉네임3", + "이름3", + "이메일3", + "핸드폰3", + List.of("http://s","http://w"), + "경험3", + Map.of("Java",3), + "하고싶은말3" + ), "계정3"), + Arguments.of(new UserPartnerRequestDTO( + "UserClientPartner", + "닉네임4", + "이름4", + "이메일4", + "핸드폰4", + List.of("http://s","http://w"), + "경험4", + Map.of("Java",1), + "하고싶은말4" + ), "계정4") + ); + } + + private static Stream modifyUserPartner() { + return Stream.of( + Arguments.of(new UserPartnerRequestDTO( + "UserClientPartner", + "닉네임1", + "이름1", + "이메일1", + "핸드폰1", + List.of("http://s","http://w"), + "경험1", + Map.of("Java",3), + "하고싶은말1" + ), "계정1"), + Arguments.of(new UserPartnerRequestDTO( + "UserClientPartner", + "닉네임2", + "이름2", + "이메일2", + "핸드폰2", + List.of("http://s","http://w"), + "경험2", + Map.of("Java",1), + "하고싶은말2" + ), "계정2") + ); + } + + @BeforeEach + public void setUp() { + userPartnerService.registUserPartner(new UserPartnerRequestDTO( + "UserClientPartner", + "닉네임1", + "이름1", + "이메일1", + "핸드폰1", + List.of("http://s","http://w"), + "경험1", + Map.of("Java",3), + "하고싶은말1" + ), "계정1"); + userPartnerService.registUserPartner(new UserPartnerRequestDTO( + "UserClientPartner", + "닉네임2", + "이름2", + "이메일2", + "핸드폰2", + List.of("http://s","http://w"), + "경험2", + Map.of("Java",1), + "하고싶은말2" + ), "계정2"); + } + + @Order(1) + @DisplayName("UserPartner 등록") + @MethodSource("registUserPartner") + @ParameterizedTest + public void testRegistUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, String accountId) { + Assertions.assertDoesNotThrow(() -> userPartnerService.registUserPartner(userPartnerRequestDTO, accountId)); + } + + @Order(2) + @DisplayName("계정 ID로 UserPartner 조회") + @ValueSource(strings = {"계정1", "계정2"}) + @ParameterizedTest + public void testFindUserPartnerByAccountId(String accountId) { + Assertions.assertDoesNotThrow(() -> userPartnerService.findUserPartnerByAccountId(accountId)); + } + + @Order(3) + @DisplayName("이름으로 UserPartner 조회") + @ValueSource(strings = {"이름1", "이름2"}) + @ParameterizedTest + public void testFindUserPartnersByNameContainingIgnoreCase(String name) { + Assertions.assertDoesNotThrow(() -> userPartnerService.findUserPartnersByNameContainingIgnoreCase(name)); + } + + @Order(4) + @DisplayName("닉네임으로 UserPartner 조회") + @ValueSource(strings = {"닉네임1", "닉네임2"}) + @ParameterizedTest + public void testFindUserPartnersByNicknameContainingIgnoreCase(String nickname) { + Assertions.assertDoesNotThrow(() -> userPartnerService.findUserPartnersByNicknameContainingIgnoreCase(nickname)); + } + + @Order(5) + @DisplayName("이메일로 UserPartner 조회") + @ValueSource(strings = {"계정1", "계정2"}) + @ParameterizedTest + public void testFindUserPartnersByEmail(String email) { + Assertions.assertDoesNotThrow(() -> userPartnerService.findUserPartnersByEmail(email)); + } + + @Order(6) + @DisplayName("핸드폰 번호로 UserPartner 조회") + @ValueSource(strings = {"핸드폰1", "핸드폰2"}) + @ParameterizedTest + public void testFindUserPartnerByPhone(String phone) { + Assertions.assertDoesNotThrow(() -> userPartnerService.findUserPartnerByPhone(phone)); + } + + @Order(7) + @DisplayName("UserPartner 수정") + @MethodSource("modifyUserPartner") + @ParameterizedTest + public void testUpdateUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, String accountId) { + Assertions.assertDoesNotThrow(() -> userPartnerService.updateUserPartner(userPartnerRequestDTO, accountId)); + } + + @Order(8) + @DisplayName("UserPartner 삭제") + @ValueSource(strings = {"계정1", "계정2"}) + @ParameterizedTest + public void testDeleteByAccountId(String accountId) { + Assertions.assertDoesNotThrow(() -> userPartnerService.deleteByAccountId(accountId)); + } +} diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java deleted file mode 100644 index 79fbfc6..0000000 --- a/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerRUDTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mtvs.devlinkbackend.crud; - -import com.mtvs.devlinkbackend.oauth2.dto.UserPartnerConvertRequestDTO; -import com.mtvs.devlinkbackend.team.dto.TeamRegistRequestDTO; -import org.junit.jupiter.params.provider.Arguments; - -import java.util.List; -import java.util.stream.Stream; - -public class UserPartnerRUDTest { - private static Stream convertUserToUserPartner() { - return Stream.of( - Arguments.of(new UserPartnerConvertRequestDTO( - - ), "계정1"), - Arguments.of(new UserPartnerConvertRequestDTO( - - ), "계정1") - ); - } -} From ea978e74da7ef5c36652ace22a3760541004cec4 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Thu, 17 Oct 2024 17:54:12 +0900 Subject: [PATCH 8/8] =?UTF-8?q?Test:=20=EC=9D=BC=EB=B6=80=20TestCode=20Dat?= =?UTF-8?q?a=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mtvs/devlinkbackend/crud/CommentCRUDTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/CommentCRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/CommentCRUDTest.java index 451166f..c734d91 100644 --- a/src/test/java/com/mtvs/devlinkbackend/crud/CommentCRUDTest.java +++ b/src/test/java/com/mtvs/devlinkbackend/crud/CommentCRUDTest.java @@ -31,8 +31,8 @@ private static Stream newComment() { private static Stream modifiedComment() { return Stream.of( - Arguments.of(new CommentUpdateRequestDTO(1L, "내용0"), "계정1"), - Arguments.of(new CommentUpdateRequestDTO(2L, "내용00"), "계정2") + Arguments.of(new CommentUpdateRequestDTO(3L, "내용0"), "계정1"), + Arguments.of(new CommentUpdateRequestDTO(4L, "내용00"), "계정2") ); }