diff --git a/gradlew b/gradlew index f5feea6..ebdf798 100755 --- a/gradlew +++ b/gradlew @@ -26,7 +26,7 @@ # # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is # noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole +# bash, then to run this script, type that shell devName before the whole # command line, like: # # ksh Gradle @@ -164,7 +164,7 @@ fi # Collect all arguments for the java command, stacking in reverse order: # * args from the command line -# * the main class name +# * the main class devName # * -classpath # * -D...appname settings # * --module-path (only if needed) diff --git a/src/main/java/com/mtvs/devlinkbackend/character/entity/UserCharacter.java b/src/main/java/com/mtvs/devlinkbackend/character/entity/UserCharacter.java index fb3a4d9..2b0919b 100644 --- a/src/main/java/com/mtvs/devlinkbackend/character/entity/UserCharacter.java +++ b/src/main/java/com/mtvs/devlinkbackend/character/entity/UserCharacter.java @@ -1,5 +1,7 @@ package com.mtvs.devlinkbackend.character.entity; +import com.mtvs.devlinkbackend.util.IntegerListConverter; +import com.mtvs.devlinkbackend.util.LongListConverter; import jakarta.persistence.*; import lombok.Getter; @@ -17,11 +19,24 @@ public class UserCharacter { @Column(name = "ACCOUNT_ID", unique = true) private String accountId; + @Column(name = "GUILD_ID") + private Long guildId; + + @Convert(converter = LongListConverter.class) + @Column(name = "TEAM_ID_LIST") + private List teamIdList; + + @Column(name = "CHARACTER_PICTURE", columnDefinition = "TEXT") + private String characterPicture; + @ElementCollection @CollectionTable(name = "STATUS_LIST", joinColumns = @JoinColumn(name = "CHARACTER_ID")) @Column(name = "STATUS") private List status; + @Column(name = "USER_ID") + private Long userId; + public UserCharacter() { } diff --git a/src/main/java/com/mtvs/devlinkbackend/evaluation/command/model/entity/Evaluation.java b/src/main/java/com/mtvs/devlinkbackend/evaluation/command/model/entity/Evaluation.java new file mode 100644 index 0000000..80a981e --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/evaluation/command/model/entity/Evaluation.java @@ -0,0 +1,50 @@ +package com.mtvs.devlinkbackend.evaluation.command.model.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.mtvs.devlinkbackend.user.command.model.entity.SkillCategoryInfo; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.hibernate.annotations.CreationTimestamp; + +import java.time.LocalDateTime; + +@Table(name = "EVALUATION") +@Entity(name = "Evaluation") +@Getter +@Setter +@ToString(exclude = "categoryInfo") +@NoArgsConstructor +public class Evaluation { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "EVALUATION_ID") + private Long evaluationId; + + @Column(name = "USER_ID") + private Long userId; + + @Column(name = "CAUSE") + private String cause; + + @Column(name = "POINT") + private Integer point; + + @CreationTimestamp + @Column(name = "CREATED_AT", updatable = false) + private LocalDateTime createdAt; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "SKILL_CATEGORY_INFO_ID", nullable = false) + @JsonIgnore + private SkillCategoryInfo skillCategoryInfo; + + public Evaluation(Long userId, String cause, Integer point, LocalDateTime createdAt) { + this.userId = userId; + this.cause = cause; + this.point = point; + this.createdAt = createdAt; + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/guild/repository/GuildRepository.java b/src/main/java/com/mtvs/devlinkbackend/guild/repository/GuildRepository.java index 3b92bcc..9176702 100644 --- a/src/main/java/com/mtvs/devlinkbackend/guild/repository/GuildRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/guild/repository/GuildRepository.java @@ -1,6 +1,7 @@ package com.mtvs.devlinkbackend.guild.repository; import com.mtvs.devlinkbackend.guild.entity.Guild; +import com.mtvs.devlinkbackend.guild.repository.projection.Guild_GuildName; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -14,4 +15,5 @@ public interface GuildRepository extends JpaRepository { List findGuildsByOwnerId(String ownerId); @Query("SELECT g FROM Guild g JOIN g.memberList m WHERE m LIKE :memberId") List findGuildsByMemberIdContaining(@Param("memberId") String accountId); + Guild_GuildName findByGuildId(Long guildId); } diff --git a/src/main/java/com/mtvs/devlinkbackend/guild/repository/projection/Guild_GuildName.java b/src/main/java/com/mtvs/devlinkbackend/guild/repository/projection/Guild_GuildName.java new file mode 100644 index 0000000..b3e822a --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/guild/repository/projection/Guild_GuildName.java @@ -0,0 +1,5 @@ +package com.mtvs.devlinkbackend.guild.repository.projection; + +public interface Guild_GuildName { + String getGuildName(); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java deleted file mode 100644 index 0bc1cfd..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.controller; - -import com.mtvs.devlinkbackend.oauth2.dto.request.UserClientGroupRequestDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupListResponseDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupSingleResponseDTO; -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; -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; - private final JwtUtil jwtUtil; - - public UserClientGroupController(UserClientGroupService userClientGroupService, JwtUtil jwtUtil) { - this.userClientGroupService = userClientGroupService; - this.jwtUtil = jwtUtil; - } - - @Operation(summary = "UserClientGroup 등록") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroup이 등록됨"), - @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") - }) - @PostMapping - public ResponseEntity convertUserToUserClientGroup( - @RequestBody UserClientGroupRequestDTO userClientGroupRequestDTO, - @RequestHeader("Authorization") String authorizationHeader) throws Exception { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserClientGroupSingleResponseDTO userClientGroup = - userClientGroupService.registUserClientGroup(userClientGroupRequestDTO, accountId); - return ResponseEntity.ok(userClientGroup); - } - - @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 { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserClientGroupSingleResponseDTO userClientGroup = userClientGroupService.findUserClientGroupByAccountId(accountId); - return ResponseEntity.ok(userClientGroup); - } - - @Operation(summary = "담당자 이름에 특정 키워드가 포함된 UserClientGroups 조회") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroups를 조회함") - }) - @GetMapping("/manager-name/{managerName}") - public ResponseEntity findByManagerNameContainingIgnoreCase(@PathVariable String managerName) { - UserClientGroupListResponseDTO 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) { - UserClientGroupListResponseDTO 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) { - UserClientGroupListResponseDTO 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) { - UserClientGroupListResponseDTO userClientGroups = userClientGroupService.findByManagerPhone(managerPhone); - return ResponseEntity.ok(userClientGroups); - } - - @Operation(summary = "UserClientGroup 정보 수정") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 UserClientGroup을 수정함"), - @ApiResponse(responseCode = "404", description = "UserClientGroup을 찾을 수 없음") - }) - @PatchMapping - public ResponseEntity updateUserClientGroup( - @RequestBody UserClientGroupRequestDTO userClientGroupRequestDTO, - @RequestHeader("Authorization") String authorizationHeader) throws Exception { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserClientGroupSingleResponseDTO userClientGroup = - userClientGroupService.updateUserClientGroup(userClientGroupRequestDTO, accountId); - 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 { - - 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 deleted file mode 100644 index c20d4c5..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.controller; - -import com.mtvs.devlinkbackend.oauth2.dto.request.UserClientIndividualRequestDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientIndividualListResponseDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientIndividualSingleResponseDTO; -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; -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; - private final JwtUtil jwtUtil; - - public UserClientIndividualController(UserClientIndividualService userClientIndividualService, JwtUtil jwtUtil) { - this.userClientIndividualService = userClientIndividualService; - this.jwtUtil = jwtUtil; - } - - @Operation(summary = "UserClientIndividual로 등록") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 UserClientIndividual이 등록됨"), - @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") - }) - @PostMapping - public ResponseEntity convertUserToUserClientIndividual( - @RequestBody UserClientIndividualRequestDTO userClientIndividualRequestDTO, - @RequestHeader("Authorization") String authorizationHeader) throws Exception { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserClientIndividualSingleResponseDTO userClientIndividual = - userClientIndividualService.registUserClientIndividual( - userClientIndividualRequestDTO, accountId); - return ResponseEntity.ok(userClientIndividual); - } - - @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 { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserClientIndividualSingleResponseDTO userClientIndividual = - userClientIndividualService.findUserClientIndividualByAccountId(accountId); - return ResponseEntity.ok(userClientIndividual); - } - - @Operation(summary = "이름에 특정 키워드가 포함된 UserClientIndividuals 조회") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 UserClientIndividuals를 조회함") - }) - @GetMapping("/name/{name}") - public ResponseEntity findUserClientIndividualsByNameContainingIgnoreCase(@PathVariable String name) { - UserClientIndividualListResponseDTO 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) { - UserClientIndividualListResponseDTO userClientIndividuals = - userClientIndividualService.findUserClientIndividualsByPhone(phone); - return ResponseEntity.ok(userClientIndividuals); - } - - @Operation(summary = "UserClientIndividual 정보 수정") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 UserClientIndividual을 수정함"), - @ApiResponse(responseCode = "404", description = "UserClientIndividual을 찾을 수 없음") - }) - @PatchMapping - public ResponseEntity updateUserClientIndividual( - @RequestBody UserClientIndividualRequestDTO userClientIndividualRequestDTO, - @RequestHeader("Authorization") String authorizationHeader) throws Exception { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserClientIndividualSingleResponseDTO userClientIndividual = - userClientIndividualService.updateUserClientIndividual( - userClientIndividualRequestDTO, accountId); - 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 { - - 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 deleted file mode 100644 index e5252d0..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.controller; - -import com.mtvs.devlinkbackend.oauth2.dto.request.UserPartnerRequestDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserPartnerListResponseDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserPartnerSingleResponseDTO; -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; -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; - private final JwtUtil jwtUtil; - - public UserPartnerController(UserPartnerService userPartnerService, JwtUtil jwtUtil) { - this.userPartnerService = userPartnerService; - this.jwtUtil = jwtUtil; - } - - @Operation(summary = "UserPartner 등록") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 UserPartner로 등록됨"), - @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") - }) - @PostMapping - public ResponseEntity convertUserToUserPartner( - @RequestBody UserPartnerRequestDTO userPartnerRequestDTO, - @RequestHeader("Authorization") String authorizationHeader) throws Exception { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserPartnerSingleResponseDTO userPartner = userPartnerService.registUserPartner(userPartnerRequestDTO, accountId); - return ResponseEntity.ok(userPartner); - } - - @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 { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserPartnerSingleResponseDTO userPartner = userPartnerService.findUserPartnerByAccountId(accountId); - return ResponseEntity.ok(userPartner); - } - - @Operation(summary = "이름에 특정 키워드가 포함된 UserPartners 조회") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 UserPartners를 조회함") - }) - @GetMapping("/name/{name}") - public ResponseEntity findUserPartnersByNameContainingIgnoreCase(@PathVariable String name) { - UserPartnerListResponseDTO 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) { - UserPartnerListResponseDTO 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) { - UserPartnerListResponseDTO 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) { - UserPartnerSingleResponseDTO userPartner = userPartnerService.findUserPartnerByPhone(phone); - return ResponseEntity.ok(userPartner); - } - - @Operation(summary = "UserPartner 정보 수정") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "성공적으로 UserPartner를 수정함"), - @ApiResponse(responseCode = "404", description = "UserPartner를 찾을 수 없음") - }) - @PatchMapping - public ResponseEntity updateUserPartner( - @RequestBody UserPartnerRequestDTO userPartnerRequestDTO, - @RequestHeader("Authorization") String authorizationHeader) throws Exception { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserPartnerSingleResponseDTO userPartner = userPartnerService.updateUserPartner(userPartnerRequestDTO, accountId); - 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 { - - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - userPartnerService.deleteByAccountId(accountId); - return ResponseEntity.noContent().build(); - } -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserClientGroupRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserClientGroupRequestDTO.java deleted file mode 100644 index 822689e..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserClientGroupRequestDTO.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto.request; - -import lombok.*; - -@Getter @Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserClientGroupRequestDTO { - 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/request/UserClientIndividualRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserClientIndividualRequestDTO.java deleted file mode 100644 index ba3bf26..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserClientIndividualRequestDTO.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto.request; - -import lombok.*; - -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserClientIndividualRequestDTO { - private String purpose = "UserClientIndividual"; - private String name; - private String phone; -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserPartnerRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserPartnerRequestDTO.java deleted file mode 100644 index bf57314..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserPartnerRequestDTO.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto.request; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; - -import java.util.List; -import java.util.Map; - -@Getter @Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserPartnerRequestDTO { - private String purpose = "UserClientPartner"; - private String nickname; - private String name; - private String email; - private String phone; - private String githubLink; - private List portfolioList; - private String experience; - @Schema( - description = "기술 숙련도에 대한 정보. Key는 기술 이름이고, Value는 해당 기술의 숙련도입니다.", - example = "{ \"Java\": 5, \"Spring\": 4, \"Docker\": 3 }" - ) - private Map skillSet; - private String message; -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupListResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupListResponseDTO.java deleted file mode 100644 index e76ad6e..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupListResponseDTO.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; - -import com.mtvs.devlinkbackend.oauth2.entity.UserClientGroup; -import lombok.*; - -import java.util.List; - -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserClientGroupListResponseDTO { - private List data; -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupSingleResponseDTO.java deleted file mode 100644 index 98d3fd9..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupSingleResponseDTO.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; - -import com.mtvs.devlinkbackend.oauth2.entity.UserClientGroup; -import lombok.*; - -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserClientGroupSingleResponseDTO { - private UserClientGroup data; -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualListResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualListResponseDTO.java deleted file mode 100644 index 6c87b05..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualListResponseDTO.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; - -import com.mtvs.devlinkbackend.oauth2.entity.UserClientIndividual; -import lombok.*; - -import java.util.List; - -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserClientIndividualListResponseDTO { - private List data; -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualSingleResponseDTO.java deleted file mode 100644 index 5eaab1e..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualSingleResponseDTO.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; - -import com.mtvs.devlinkbackend.oauth2.entity.UserClientIndividual; -import lombok.*; - -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserClientIndividualSingleResponseDTO { - private UserClientIndividual data; -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerListResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerListResponseDTO.java deleted file mode 100644 index 774f4a6..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerListResponseDTO.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; - -import com.mtvs.devlinkbackend.oauth2.entity.UserPartner; -import lombok.*; - -import java.util.List; - -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserPartnerListResponseDTO { - private List data; -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerSingleResponseDTO.java deleted file mode 100644 index 4053b66..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerSingleResponseDTO.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; - -import com.mtvs.devlinkbackend.oauth2.entity.UserPartner; -import lombok.*; - -@Getter @Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserPartnerSingleResponseDTO { - private UserPartner data; -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java deleted file mode 100644 index b435df8..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.entity; - -import jakarta.persistence.*; -import lombok.Getter; -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.annotations.UpdateTimestamp; - -import java.time.LocalDateTime; - -@Table(name = "USER") -@Entity(name = "User") -@Getter -@Inheritance(strategy = InheritanceType.JOINED) -@DiscriminatorColumn(name = "purpose") -public class User { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "USER_ID") - private Long userId; - - @Column(name = "ACCOUNT_ID", unique = true) - private String accountId; - - @Column(name = "PURPOSE", insertable = false, updatable = false) // "UserClient", "UserPartner" 둘 중 한개 - private String purpose; - - @Column(name = "CHARACTER_ID", unique = true) - private Long characterId; - - @CreationTimestamp - @Column(name = "CREATED_AT", updatable = false) - private LocalDateTime createdAt; - - @UpdateTimestamp - @Column(name = "MODIFIED_AT") - private LocalDateTime modifiedAt; - - public User() {} - - public User(String accountId) { - this.accountId = accountId; - } - - 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 deleted file mode 100644 index 17dede9..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java +++ /dev/null @@ -1,37 +0,0 @@ -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; -import lombok.Setter; - -@Table(name = "USER_CLIENT_GROUP") -@Entity(name = "UserClientGroup") -@DiscriminatorValue("UserClientGroup") // purpose 값으로 지정 -@Getter @Setter -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; - - public UserClientGroup() { - } - - 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; - 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 deleted file mode 100644 index 5e63cba..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java +++ /dev/null @@ -1,29 +0,0 @@ -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; -import lombok.Setter; - -@Table(name = "USER_CLIENT_INDIVIDUAL") -@Entity(name = "UserClientIndividual") -@DiscriminatorValue("UserClientIndividual") // purpose 값으로 지정 -@Getter @Setter -public class UserClientIndividual extends User { - @Column(name = "NAME") - private String name; - - @Column(name = "PHONE") - private String phone; - - public UserClientIndividual() { - } - - 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 deleted file mode 100644 index d158b01..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.entity; - -import com.mtvs.devlinkbackend.util.StringListConverter; -import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import java.util.List; -import java.util.Map; - -@Table(name = "USER_PARTNER") -@Entity(name = "UserPartner") -@DiscriminatorValue("UserPartner") // purpose 값으로 지정 -@Getter @Setter -@NoArgsConstructor -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; - - @Column(name = "GITHUB_LINK") - private String githubLink; - - @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 = "USER_ID")) - @MapKeyColumn(name = "SKILL_NAME") - @Column(name = "SKILL_PROFICIENCY") - private Map skillSet; - - @Column(name = "MESSAGE", columnDefinition = "TEXT") // 하고 싶은 말 - private String message; - - public UserPartner(String accountId, String purpose, String nickname, String name, String email, String phone,String githubLink, List portfolioList, String experience, Map skillSet, String message) { - super(accountId, purpose); - this.nickname = nickname; - this.name = name; - this.email = email; - this.phone = phone; - this.githubLink = githubLink; - this.portfolioList = portfolioList; - this.experience = experience; - this.skillSet = skillSet; - this.message = message; - } -} - diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientGroupRepository.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientGroupRepository.java deleted file mode 100644 index 80ca3c1..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientGroupRepository.java +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index b02a230..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientIndividualRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -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 deleted file mode 100644 index a82e005..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserPartnersRepository.java +++ /dev/null @@ -1,29 +0,0 @@ -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 UserPartner 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 deleted file mode 100644 index b038141..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.repository; - -import com.mtvs.devlinkbackend.oauth2.entity.User; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface UserRepository extends JpaRepository { - User findUserByAccountId(String accountId); - void deleteByAccountId(String accountId); -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java deleted file mode 100644 index e1b238c..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.service; - -import com.mtvs.devlinkbackend.oauth2.dto.request.UserClientGroupRequestDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupListResponseDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupSingleResponseDTO; -import com.mtvs.devlinkbackend.oauth2.entity.UserClientGroup; -import com.mtvs.devlinkbackend.oauth2.repository.UserClientGroupRepository; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -public class UserClientGroupService { - private final UserClientGroupRepository userClientGroupRepository; - - public UserClientGroupService(UserClientGroupRepository userClientGroupRepository) { - this.userClientGroupRepository = userClientGroupRepository; - } - - @Transactional - public UserClientGroupSingleResponseDTO registUserClientGroup(UserClientGroupRequestDTO userClientGroupRequestDTO, - String accountId) { - return new UserClientGroupSingleResponseDTO(userClientGroupRepository.save(new UserClientGroup( - accountId, - userClientGroupRequestDTO.getPurpose(), - userClientGroupRequestDTO.getClientType(), - userClientGroupRequestDTO.getGroupName(), - userClientGroupRequestDTO.getManagerName(), - userClientGroupRequestDTO.getManagerPhone() - ))); - } - public UserClientGroupSingleResponseDTO findUserClientGroupByAccountId(String accountId) { - return new UserClientGroupSingleResponseDTO(userClientGroupRepository.findUserClientGroupByAccountId(accountId)); - - }; - public UserClientGroupListResponseDTO findByManagerNameContainingIgnoreCase(String managerName) { - return new UserClientGroupListResponseDTO( - userClientGroupRepository.findByManagerNameContainingIgnoreCase(managerName)); - - }; - public UserClientGroupListResponseDTO findByGroupNameContainingIgnoreCase(String groupName) { - return new UserClientGroupListResponseDTO(userClientGroupRepository.findByGroupNameContainingIgnoreCase(groupName)); - - }; - public UserClientGroupListResponseDTO findByClientType(String clientType) { - return new UserClientGroupListResponseDTO(userClientGroupRepository.findByClientType(clientType)); - - }; - public UserClientGroupListResponseDTO findByManagerPhone(String managerPhone) { - return new UserClientGroupListResponseDTO(userClientGroupRepository.findByManagerPhone(managerPhone)); - - }; - - @Transactional - public UserClientGroupSingleResponseDTO updateUserClientGroup(UserClientGroupRequestDTO userClientGroupRequestDTO, - String accountId) { - - UserClientGroup userClientGroup = userClientGroupRepository.findUserClientGroupByAccountId(accountId); - if (userClientGroup == null) - throw new IllegalArgumentException("잘못된 계정으로 그룹 정보 수정 시도"); - - userClientGroup.setClientType(userClientGroupRequestDTO.getClientType()); - userClientGroup.setGroupName(userClientGroup.getGroupName()); - userClientGroup.setManagerName(userClientGroup.getManagerName()); - userClientGroup.setManagerPhone(userClientGroup.getManagerPhone()); - - return new UserClientGroupSingleResponseDTO(userClientGroup); - } - - 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 deleted file mode 100644 index df64e68..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.service; - -import com.mtvs.devlinkbackend.oauth2.dto.request.UserClientIndividualRequestDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientIndividualListResponseDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientIndividualSingleResponseDTO; -import com.mtvs.devlinkbackend.oauth2.entity.UserClientIndividual; -import com.mtvs.devlinkbackend.oauth2.repository.UserClientIndividualRepository; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -public class UserClientIndividualService { - - private final UserClientIndividualRepository userClientIndividualRepository; - - public UserClientIndividualService(UserClientIndividualRepository userClientIndividualRepository) { - this.userClientIndividualRepository = userClientIndividualRepository; - } - - @Transactional - public UserClientIndividualSingleResponseDTO registUserClientIndividual(UserClientIndividualRequestDTO userClientIndividualRequestDTO, - String accountId) { - - return new UserClientIndividualSingleResponseDTO(userClientIndividualRepository.save(new UserClientIndividual( - accountId, - userClientIndividualRequestDTO.getPurpose(), - userClientIndividualRequestDTO.getName(), - userClientIndividualRequestDTO.getPhone() - ))); - } - public UserClientIndividualSingleResponseDTO findUserClientIndividualByAccountId(String accountId) { - return new UserClientIndividualSingleResponseDTO( - userClientIndividualRepository.findUserClientIndividualByAccountId(accountId)); - - }; - public UserClientIndividualListResponseDTO findUserClientIndividualsByNameContainingIgnoreCase(String name) { - return new UserClientIndividualListResponseDTO( - userClientIndividualRepository.findUserClientIndividualsByNameContainingIgnoreCase(name)); - - }; - public UserClientIndividualListResponseDTO findUserClientIndividualsByPhone(String phone) { - return new UserClientIndividualListResponseDTO(userClientIndividualRepository.findUserClientIndividualsByPhone(phone)); - - }; - - @Transactional - public UserClientIndividualSingleResponseDTO updateUserClientIndividual(UserClientIndividualRequestDTO userClientIndividualRequestDTO, - String accountId) { - - UserClientIndividual userClientIndividual = userClientIndividualRepository.findUserClientIndividualByAccountId(accountId); - if(userClientIndividual == null) - throw new IllegalArgumentException("잘못된 계정으로 개인 정보 수정 시도"); - - userClientIndividual.setName(userClientIndividualRequestDTO.getName()); - userClientIndividual.setPhone(userClientIndividualRequestDTO.getPhone()); - - return new UserClientIndividualSingleResponseDTO(userClientIndividual); - } - - 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 deleted file mode 100644 index c8f9984..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.service; - -import com.mtvs.devlinkbackend.oauth2.dto.request.UserPartnerRequestDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserPartnerListResponseDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserPartnerSingleResponseDTO; -import com.mtvs.devlinkbackend.oauth2.entity.UserPartner; -import com.mtvs.devlinkbackend.oauth2.repository.UserPartnersRepository; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -public class UserPartnerService { - private final UserPartnersRepository userPartnersRepository; - - public UserPartnerService(UserPartnersRepository userPartnersRepository) { - this.userPartnersRepository = userPartnersRepository; - } - - @Transactional - public UserPartnerSingleResponseDTO registUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, - String accountId) { - - return new UserPartnerSingleResponseDTO(userPartnersRepository.save(new UserPartner( - accountId, - userPartnerRequestDTO.getPurpose(), - userPartnerRequestDTO.getNickname(), - userPartnerRequestDTO.getName(), - userPartnerRequestDTO.getEmail(), - userPartnerRequestDTO.getPhone(), - userPartnerRequestDTO.getGithubLink(), - userPartnerRequestDTO.getPortfolioList(), - userPartnerRequestDTO.getExperience(), - userPartnerRequestDTO.getSkillSet(), - userPartnerRequestDTO.getMessage() - ))); - } - - public UserPartnerSingleResponseDTO findUserPartnerByAccountId(String accountId) { - return new UserPartnerSingleResponseDTO(userPartnersRepository.findUserPartnerByAccountId(accountId)); - }; - - public UserPartnerListResponseDTO findUserPartnersByNameContainingIgnoreCase(String name) { - return new UserPartnerListResponseDTO(userPartnersRepository.findUserPartnersByNameContainingIgnoreCase(name)); - }; - - public UserPartnerListResponseDTO findUserPartnersByNicknameContainingIgnoreCase(String nickname) { - return new UserPartnerListResponseDTO( - userPartnersRepository.findUserPartnersByNicknameContainingIgnoreCase(nickname)); - }; - - public UserPartnerListResponseDTO findUserPartnersByEmail(String email) { - return new UserPartnerListResponseDTO(userPartnersRepository.findUserPartnersByEmail(email)); - }; - - public UserPartnerSingleResponseDTO findUserPartnerByPhone(String phone) { - return new UserPartnerSingleResponseDTO(userPartnersRepository.findUserPartnerByPhone(phone)); - }; - - @Transactional - public UserPartnerSingleResponseDTO updateUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, - String accountId) { - - UserPartner userPartner = userPartnersRepository.findUserPartnerByAccountId(accountId); - if(userPartner == null) - throw new IllegalArgumentException("잘못된 계정으로 파트너스 정보 수정 시도"); - - userPartner.setNickname(userPartnerRequestDTO.getNickname()); - userPartner.setName(userPartnerRequestDTO.getName()); - userPartner.setEmail(userPartnerRequestDTO.getEmail()); - userPartner.setPhone(userPartnerRequestDTO.getPhone()); - userPartner.setGithubLink(userPartnerRequestDTO.getGithubLink()); - userPartner.setPortfolioList(userPartnerRequestDTO.getPortfolioList()); - userPartner.setExperience(userPartnerRequestDTO.getExperience()); - userPartner.setSkillSet(userPartnerRequestDTO.getSkillSet()); - userPartner.setMessage(userPartnerRequestDTO.getMessage()); - - return new UserPartnerSingleResponseDTO(userPartner); - } - - public void deleteByAccountId(String accountId) { - 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 deleted file mode 100644 index 1f99717..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserService.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.service; - -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 JwtUtil jwtUtil; - private final UserRepository userRepository; - - public UserService(JwtUtil jwtUtil, UserRepository userRepository) { - this.jwtUtil = jwtUtil; - this.userRepository = userRepository; - } - - @Transactional - public User registUserByAuthorizationHeader(String authorizationHeader) throws Exception { - String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - return userRepository.save(new User(accountId)); - } - - 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/user/command/controller/EpicBusinessCommandController.java b/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicBusinessCommandController.java new file mode 100644 index 0000000..0a29df7 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicBusinessCommandController.java @@ -0,0 +1,68 @@ +package com.mtvs.devlinkbackend.user.command.controller; + +import com.mtvs.devlinkbackend.user.command.model.dto.request.BusinessRequestDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.BusinessSingleResponseDTO; +import com.mtvs.devlinkbackend.user.command.service.EpicBusinessService; +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; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/epic/businesses") +public class EpicBusinessCommandController { + private final EpicBusinessService epicBusinessService; + private final JwtUtil jwtUtil; + + public EpicBusinessCommandController(EpicBusinessService epicBusinessService, JwtUtil jwtUtil) { + this.epicBusinessService = epicBusinessService; + this.jwtUtil = jwtUtil; + } + + @Operation(summary = "Epic 계정으로 Business 계정 등록") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 등록됨"), + @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") + }) + @PostMapping + public ResponseEntity registerBusiness( + @RequestBody BusinessRequestDTO businessRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + BusinessSingleResponseDTO userClientGroup = + epicBusinessService.registUserClientGroup(businessRequestDTO, accountId); + return ResponseEntity.ok(userClientGroup); + } + + @Operation(summary = "Epic 계정으로 Business 정보 수정") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 수정함"), + @ApiResponse(responseCode = "404", description = "찾을 수 없음") + }) + @PatchMapping + public ResponseEntity update( + @RequestBody BusinessRequestDTO businessRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + BusinessSingleResponseDTO userClientGroup = + epicBusinessService.updateUserClientGroup(businessRequestDTO, accountId); + return ResponseEntity.ok(userClientGroup); + } + + @Operation(summary = "Authorization Header의 Epic Account ID를 기반으로 Business 계정 삭제") + @ApiResponses(value = { + @ApiResponse(responseCode = "204", description = "성공적으로 삭제함"), + @ApiResponse(responseCode = "404", description = "찾을 수 없음") + }) + @DeleteMapping + public ResponseEntity deleteByAuthorizationHeader(@RequestHeader("Authorization") String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + epicBusinessService.deleteByAccountId(accountId); + return ResponseEntity.noContent().build(); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicDevCommandController.java b/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicDevCommandController.java new file mode 100644 index 0000000..780ada0 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicDevCommandController.java @@ -0,0 +1,68 @@ +package com.mtvs.devlinkbackend.user.command.controller; + +import com.mtvs.devlinkbackend.user.command.model.dto.request.DevRegistRequestDTO; +import com.mtvs.devlinkbackend.user.command.model.dto.request.DevUpdateRequestDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.DevSingleResponseDTO; +import com.mtvs.devlinkbackend.user.command.service.EpicDevService; +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; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/epic/developer") +public class EpicDevCommandController { + private final EpicDevService epicDevService; + private final JwtUtil jwtUtil; + + public EpicDevCommandController(EpicDevService epicDevService, JwtUtil jwtUtil) { + this.epicDevService = epicDevService; + this.jwtUtil = jwtUtil; + } + + @Operation(summary = "Epic 계정으로 Dev 등록") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 등록됨"), + @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") + }) + @PostMapping + public ResponseEntity registerDev( + @RequestBody DevRegistRequestDTO devRegistRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + DevSingleResponseDTO userPartner = epicDevService.registDev(devRegistRequestDTO, accountId); + return ResponseEntity.ok(userPartner); + } + + @Operation(summary = "Epic 계정으로 Dev 정보 수정") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 수정함"), + @ApiResponse(responseCode = "404", description = "찾을 수 없음") + }) + @PatchMapping + public ResponseEntity update( + @RequestBody DevUpdateRequestDTO devUpdateRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + DevSingleResponseDTO userPartner = epicDevService.updateUserPartner(devUpdateRequestDTO, accountId); + return ResponseEntity.ok(userPartner); + } + + @Operation(summary = "Authorization Header의 Account ID를 기반으로 UserPartner 삭제") + @ApiResponses(value = { + @ApiResponse(responseCode = "204", description = "성공적으로 삭제함"), + @ApiResponse(responseCode = "404", description = "찾을 수 없음") + }) + @DeleteMapping("/delete") + public ResponseEntity deleteByAuthorizationHeader( + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + epicDevService.deleteByAccountId(accountId); + return ResponseEntity.noContent().build(); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/BusinessRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/BusinessRequestDTO.java new file mode 100644 index 0000000..898129f --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/BusinessRequestDTO.java @@ -0,0 +1,17 @@ +package com.mtvs.devlinkbackend.user.command.model.dto.request; + +import lombok.*; +import org.springframework.web.multipart.MultipartFile; + +@Getter @Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class BusinessRequestDTO { + private String nickname; + private String businessName; + private MultipartFile businessLogoImg; + private String managerName; + private String managerPhone; +} + diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevInfoRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevInfoRequestDTO.java new file mode 100644 index 0000000..acea2f0 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevInfoRequestDTO.java @@ -0,0 +1,22 @@ +package com.mtvs.devlinkbackend.user.command.model.dto.request; + +import lombok.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +@Getter @Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class DevInfoRequestDTO { + private String devName; + private String devEmail; + private String devPhone; + private String githubLink; + private MultipartFile[] portfolioList; + private String career; + private List categoryNameList; + private List tag; + private String hope; +} \ No newline at end of file diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevRegistRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevRegistRequestDTO.java new file mode 100644 index 0000000..148db99 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevRegistRequestDTO.java @@ -0,0 +1,13 @@ +package com.mtvs.devlinkbackend.user.command.model.dto.request; + +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class DevRegistRequestDTO { + private String nickname; + private DevInfoRequestDTO devInfo; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevUpdateRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevUpdateRequestDTO.java new file mode 100644 index 0000000..d56c923 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevUpdateRequestDTO.java @@ -0,0 +1,13 @@ +package com.mtvs.devlinkbackend.user.command.model.dto.request; + +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class DevUpdateRequestDTO { + private String nickname; + private DevInfoRequestDTO devInfo; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/EpicGamesCallbackRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/EpicGamesCallbackRequestDTO.java similarity index 83% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/EpicGamesCallbackRequestDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/EpicGamesCallbackRequestDTO.java index 9f808d6..af542f8 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/EpicGamesCallbackRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/EpicGamesCallbackRequestDTO.java @@ -1,4 +1,4 @@ -package com.mtvs.devlinkbackend.oauth2.dto.request; +package com.mtvs.devlinkbackend.user.command.model.dto.request; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Business.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Business.java new file mode 100644 index 0000000..bdbb07a --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Business.java @@ -0,0 +1,55 @@ +package com.mtvs.devlinkbackend.user.command.model.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; + +import java.time.LocalDateTime; + +@Table(name = "BUSINESS") +@Entity(name = "Business") +@ToString(exclude = "user") +@Getter @Setter +@NoArgsConstructor +public class Business { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "BUSINESS_ID") + private Long businessId; + + @Column(name = "BUSINESS_NAME") + private String businessName; + + @Column(name = "BUSINESS_LOGO_URL") + private String businessLogoUrl; + + @Column(name = "MANAGER_NAME") + private String managerName; + + @Column(name = "MANAGER_PHONE") + private String managerPhone; + + @CreationTimestamp + @Column(name = "CREATED_AT", updatable = false) + private LocalDateTime createdAt; + + @UpdateTimestamp + @Column(name = "MODIFIED_AT") + private LocalDateTime modifiedAt; + + @Column(name = "USER_ID") + private Long userId; + + public Business(String businessName, String businessLogoUrl, String managerName, String managerPhone, Long userId) { + this.businessName = businessName; + this.businessLogoUrl = businessLogoUrl; + this.managerName = managerName; + this.managerPhone = managerPhone; + this.userId = userId; + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Dev.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Dev.java new file mode 100644 index 0000000..626efd7 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Dev.java @@ -0,0 +1,80 @@ +package com.mtvs.devlinkbackend.user.command.model.entity; + +import com.fasterxml.jackson.annotation.JsonManagedReference; +import com.mtvs.devlinkbackend.util.StringListConverter; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; + +import java.time.LocalDateTime; +import java.util.List; + +@Table(name = "DEV") +@Entity(name = "Dev") +@Getter @Setter +@ToString(exclude = "user") +@NoArgsConstructor +public class Dev { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "DEV_ID") + private Long devId; + + @Column(name = "DEV_NAME") + private String devName; + + @Column(name = "DEV_EMAIL") + private String devEmail; + + @Column(name = "DEV_PHONE") + private String devPhone; + + @Column(name = "GITHUB_LINK") + private String githubLink; + + @Convert(converter = StringListConverter.class) + @Column(name = "PORTFOLIO_LIST", columnDefinition = "TEXT") + private List portfolioUrlList; + + @Column(name = "CAREER", columnDefinition = "TEXT") // 경력 기술 + private String career; + + @OneToMany(mappedBy = "dev", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonManagedReference + private List skillCategoryList; + + @Convert(converter = StringListConverter.class) + @Column(name = "TAG", columnDefinition = "TEXT") + private List tag; + + @Column(name = "HOPE") + private String hope; + + @CreationTimestamp + @Column(name = "CREATED_AT", updatable = false) + private LocalDateTime createdAt; + + @UpdateTimestamp + @Column(name = "MODIFIED_AT") + private LocalDateTime modifiedAt; + + @Column(name = "USER_ID") + private Long userId; + + public Dev(String devName, String devEmail, String devPhone, String githubLink, List portfolioUrlList, String career, List tag, String hope, Long userId) { + this.devName = devName; + this.devEmail = devEmail; + this.devPhone = devPhone; + this.githubLink = githubLink; + this.portfolioUrlList = portfolioUrlList; + this.career = career; + this.tag = tag; + this.hope = hope; + this.userId = userId; + } +} + diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/SkillCategoryInfo.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/SkillCategoryInfo.java new file mode 100644 index 0000000..1b91739 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/SkillCategoryInfo.java @@ -0,0 +1,50 @@ +package com.mtvs.devlinkbackend.user.command.model.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import com.mtvs.devlinkbackend.evaluation.command.model.entity.Evaluation; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.util.List; + +@Table(name = "SKILL_CATEGORY_INFO") +@Entity(name = "SkillCategoryInfo") +@Getter +@Setter +@ToString(exclude = "dev") +@NoArgsConstructor +public class SkillCategoryInfo { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "CATEGORY_INFO_ID") + private Long categoryInfoId; + + @Column(name = "CATEGORY_NAME") + private String categoryName; + + @Column(name = "IS_EVALUATED") + private Boolean isEvaluated; + + @Column(name = "POINT_AVG") + private Integer pointAvg; + + @OneToMany(mappedBy = "skillCategoryInfo", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonManagedReference + private List evaluationIdList; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "DEV_ID", nullable = false) + @JsonIgnore + private Dev dev; + + public SkillCategoryInfo(String categoryName, List evaluationIdList) { + this.categoryName = categoryName; + this.isEvaluated = false; + this.evaluationIdList = evaluationIdList; + } +} + diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/User.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/User.java new file mode 100644 index 0000000..dde3da4 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/User.java @@ -0,0 +1,68 @@ +package com.mtvs.devlinkbackend.user.command.model.entity; + +import com.mtvs.devlinkbackend.util.LongListConverter; +import com.mtvs.devlinkbackend.util.StringListConverter; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; + +import java.time.LocalDateTime; +import java.util.List; + +@Table(name = "USER") +@Entity(name = "User") +@Getter @Setter +@NoArgsConstructor +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "USER_ID") + private Long userId; + + @Column(name = "EPIC_ACCOUNT_ID", unique = true) + private String epicAccountId; + + @Column(name = "STEAM_ACCOUNT_ID", unique = true) + private String steamAccountId; + + @Column(name = "CHARACTER_ID", unique = true) + private Long characterId; + + @Column(name = "DEV_ID") + private Long devId; + + @Column(name = "BUSINESS_ID") + private Long businessId; + + @Column(name = "NICKNAME") + private String nickname; + + @Convert(converter = StringListConverter.class) + @Column(name = "CHANNEL_LIST", columnDefinition = "TEXT") + private List channelList; + + @Column(name = "EXPERIENCE_VALUE") + private Integer experienceValue; + + @CreationTimestamp + @Column(name = "CREATED_AT", updatable = false) + private LocalDateTime createdAt; + + @UpdateTimestamp + @Column(name = "MODIFIED_AT") + private LocalDateTime modifiedAt; + + public User(String epicAccountId) { + this.epicAccountId = epicAccountId; + } + + public User(String epicAccountId, String steamAccountId, Long characterId, String nickname) { + this.epicAccountId = epicAccountId; + this.steamAccountId = steamAccountId; + this.characterId = characterId; + this.nickname = nickname; + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/repository/BusinessRepository.java b/src/main/java/com/mtvs/devlinkbackend/user/command/repository/BusinessRepository.java new file mode 100644 index 0000000..8b5e19b --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/repository/BusinessRepository.java @@ -0,0 +1,10 @@ +package com.mtvs.devlinkbackend.user.command.repository; + +import com.mtvs.devlinkbackend.user.command.model.entity.Business; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface BusinessRepository extends JpaRepository { + void deleteByUserId(Long userId); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/repository/DevRepository.java b/src/main/java/com/mtvs/devlinkbackend/user/command/repository/DevRepository.java new file mode 100644 index 0000000..0428311 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/repository/DevRepository.java @@ -0,0 +1,10 @@ +package com.mtvs.devlinkbackend.user.command.repository; + +import com.mtvs.devlinkbackend.user.command.model.entity.Dev; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface DevRepository extends JpaRepository { + void deleteByUserId(Long userId); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/repository/UserRepository.java b/src/main/java/com/mtvs/devlinkbackend/user/command/repository/UserRepository.java new file mode 100644 index 0000000..cd8b6c2 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/repository/UserRepository.java @@ -0,0 +1,8 @@ +package com.mtvs.devlinkbackend.user.command.repository; + +import com.mtvs.devlinkbackend.user.command.model.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { + void deleteByUserId(Long userId); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicBusinessService.java b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicBusinessService.java new file mode 100644 index 0000000..94128e1 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicBusinessService.java @@ -0,0 +1,87 @@ +package com.mtvs.devlinkbackend.user.command.service; + +import com.mtvs.devlinkbackend.user.command.model.dto.request.BusinessRequestDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.BusinessSingleResponseDTO; +import com.mtvs.devlinkbackend.user.command.model.entity.Business; +import com.mtvs.devlinkbackend.user.command.model.entity.User; +import com.mtvs.devlinkbackend.user.command.repository.BusinessRepository; +import com.mtvs.devlinkbackend.user.command.repository.UserRepository; +import com.mtvs.devlinkbackend.user.query.repository.BusinessViewRepository; +import com.mtvs.devlinkbackend.user.query.repository.UserViewRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class EpicBusinessService { + private final BusinessRepository businessRepository; + private final UserRepository userRepository; + private final UserViewRepository userViewRepository; + private final BusinessViewRepository businessViewRepository; + + + public EpicBusinessService(BusinessRepository businessRepository, UserRepository userRepository, UserViewRepository userViewRepository, BusinessViewRepository businessViewRepository) { + this.businessRepository = businessRepository; + this.userRepository = userRepository; + this.userViewRepository = userViewRepository; + this.businessViewRepository = businessViewRepository; + } + + @Transactional + public BusinessSingleResponseDTO registUserClientGroup(BusinessRequestDTO businessRequestDTO, + String accountId) { + + User user = userViewRepository.findUserByEpicAccountId(accountId); + if (user == null) { + user = new User( + accountId, + null, + null, + businessRequestDTO.getNickname() + ); + } + User savedUser = userRepository.save(user); + + + Business business = new Business( + businessRequestDTO.getBusinessName(), + businessRequestDTO.getBusinessLogoImg().getOriginalFilename(), + businessRequestDTO.getManagerName(), + businessRequestDTO.getManagerPhone(), + savedUser.getUserId() + ); + Business savedBusiness = businessRepository.save(business); + + savedUser.setBusinessId(savedBusiness.getBusinessId()); + + + // Response 나오면 바로 refactoring + return new BusinessSingleResponseDTO(businessRepository.save(business)); + } + + @Transactional + public BusinessSingleResponseDTO updateUserClientGroup(BusinessRequestDTO businessRequestDTO, + String accountId) { + + User user = userViewRepository.findUserByEpicAccountId(accountId); + if (user == null) + throw new IllegalArgumentException("잘못된 계정으로 Business 수정 시도"); + Business business = businessViewRepository.findBusinessByUserId(user.getUserId()); + if (business == null) + throw new IllegalArgumentException("잘못된 계정으로 Business 수정 시도"); + + user.setNickname(businessRequestDTO.getNickname()); + business.setBusinessName(businessRequestDTO.getBusinessName()); + business.setBusinessLogoUrl(businessRequestDTO.getBusinessLogoImg().getOriginalFilename()); + business.setManagerName(businessRequestDTO.getManagerName()); + business.setManagerPhone(businessRequestDTO.getManagerPhone()); + + return new BusinessSingleResponseDTO(business); + } + + public void deleteByAccountId(String accountId) { + User user = userViewRepository.findUserByEpicAccountId(accountId); + if (user == null) + throw new IllegalArgumentException("잘못된 계정으로 Business 삭제 시도"); + businessRepository.deleteByUserId(user.getUserId()); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicDevService.java b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicDevService.java new file mode 100644 index 0000000..da65d1b --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicDevService.java @@ -0,0 +1,111 @@ +package com.mtvs.devlinkbackend.user.command.service; + +import com.mtvs.devlinkbackend.user.command.model.dto.request.DevRegistRequestDTO; +import com.mtvs.devlinkbackend.user.command.model.dto.request.DevInfoRequestDTO; +import com.mtvs.devlinkbackend.user.command.model.dto.request.DevUpdateRequestDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.DevSingleResponseDTO; +import com.mtvs.devlinkbackend.user.command.model.entity.SkillCategoryInfo; +import com.mtvs.devlinkbackend.user.command.model.entity.Dev; +import com.mtvs.devlinkbackend.user.command.model.entity.User; +import com.mtvs.devlinkbackend.user.command.repository.DevRepository; +import com.mtvs.devlinkbackend.user.command.repository.UserRepository; +import com.mtvs.devlinkbackend.user.query.repository.DevViewRepository; +import com.mtvs.devlinkbackend.user.query.repository.UserViewRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class EpicDevService { + private final DevRepository devRepository; + private final UserRepository userRepository; + private final UserViewRepository userViewRepository; + private final DevViewRepository devViewRepository; + + public EpicDevService(DevRepository devRepository, UserRepository userRepository, UserViewRepository userViewRepository, DevViewRepository devViewRepository) { + this.devRepository = devRepository; + this.userRepository = userRepository; + this.userViewRepository = userViewRepository; + this.devViewRepository = devViewRepository; + } + + @Transactional + public DevSingleResponseDTO registDev(DevRegistRequestDTO devRegistRequestDTO, + String accountId) { + User user = userViewRepository.findUserByEpicAccountId(accountId); + if (user == null) { + user = new User( + accountId, + null, + null, + devRegistRequestDTO.getNickname() + ); + } + User savedUser = userRepository.save(user); + + DevInfoRequestDTO devInfoRequestDTO = devRegistRequestDTO.getDevInfo(); + Dev dev = new Dev( + devInfoRequestDTO.getDevName(), + devInfoRequestDTO.getDevEmail(), + devInfoRequestDTO.getDevPhone(), + devInfoRequestDTO.getGithubLink(), + //TODO:: AWS S3 로직 개발 이후 저장 예정 + List.of(""), + devInfoRequestDTO.getCareer(), + devInfoRequestDTO.getTag(), + devInfoRequestDTO.getHope(), + savedUser.getUserId() + ); + + List skillCategoryInfoList = devInfoRequestDTO.getCategoryNameList() + .stream().map(categoryName -> new SkillCategoryInfo(categoryName, new ArrayList<>())) + .peek(skillCategoryInfo -> skillCategoryInfo.setDev(dev)).toList(); + + dev.setSkillCategoryList(skillCategoryInfoList); + Dev savedDev = devRepository.save(dev); + + user.setDevId(savedDev.getDevId()); + + userRepository.save(user); + + // Response 정리되면 Refactoring + return new DevSingleResponseDTO(devRepository.save(dev)); + } + + @Transactional + public DevSingleResponseDTO updateUserPartner(DevUpdateRequestDTO devUpdateRequestDTO, + String accountId) { + + User user = userViewRepository.findUserByEpicAccountId(accountId); + if (user == null) + throw new IllegalArgumentException("잘못된 계정으로 파트너스 정보 수정 시도"); + Dev dev = devViewRepository.findDevByUserId(user.getUserId()); + if(dev == null) + throw new IllegalArgumentException("잘못된 계정으로 파트너스 정보 수정 시도"); + + DevInfoRequestDTO devInfoRequestDTO = devUpdateRequestDTO.getDevInfo(); + user.setNickname(devUpdateRequestDTO.getNickname()); + dev.setDevName(devInfoRequestDTO.getDevName()); + dev.setDevEmail(devInfoRequestDTO.getDevEmail()); + dev.setDevPhone(devInfoRequestDTO.getDevPhone()); + dev.setGithubLink(devInfoRequestDTO.getGithubLink()); + //TODO:: 해당 부분 또한 이전 portfolioFile 삭제 이후 새로 업로드한 URL로 업데이트 예정 + dev.setPortfolioUrlList(List.of("")); + dev.setCareer(devInfoRequestDTO.getCareer()); + dev.setHope(devInfoRequestDTO.getHope()); + + userRepository.save(user); + + // Response 정리되면 Refactoring + return new DevSingleResponseDTO(devRepository.save(dev)); + } + + public void deleteByAccountId(String accountId) { + User user = userViewRepository.findUserByEpicAccountId(accountId); + if (user == null) + throw new IllegalArgumentException("잘못된 계정으로 그룹 정보 수정 시도"); + devRepository.deleteByUserId(user.getUserId()); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/controller/EpicBusinessQueryController.java b/src/main/java/com/mtvs/devlinkbackend/user/query/controller/EpicBusinessQueryController.java new file mode 100644 index 0000000..09c94d1 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/controller/EpicBusinessQueryController.java @@ -0,0 +1,33 @@ +package com.mtvs.devlinkbackend.user.query.controller; + +import com.mtvs.devlinkbackend.user.query.model.dto.response.BusinessSingleResponseDTO; +import com.mtvs.devlinkbackend.user.query.service.EpicBusinessViewService; +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.*; + +@RestController +@RequestMapping("/api/epic/businesses") +public class EpicBusinessQueryController { + + private final EpicBusinessViewService epicBusinessViewService; + + public EpicBusinessQueryController(EpicBusinessViewService epicBusinessViewService) { + this.epicBusinessViewService = epicBusinessViewService; + } + + @Operation(summary = "Epic 계정으로 자기 Dev 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 조회됨"), + @ApiResponse(responseCode = "401", description = "잘못된 토큰") + }) + @GetMapping("/{businessId}") + public ResponseEntity findDevByEpicAccount( + @PathVariable(name = "businessId") Long businessId) throws Exception { + + BusinessSingleResponseDTO businessSingleResponseDTO = epicBusinessViewService.findBusinessByBusinessId(businessId); + return ResponseEntity.ok(businessSingleResponseDTO); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/controller/EpicDevQueryController.java b/src/main/java/com/mtvs/devlinkbackend/user/query/controller/EpicDevQueryController.java new file mode 100644 index 0000000..16a5d88 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/controller/EpicDevQueryController.java @@ -0,0 +1,63 @@ +package com.mtvs.devlinkbackend.user.query.controller; + +import com.mtvs.devlinkbackend.user.query.model.dto.response.DevPagingResponseDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.DevSingleResponseDTO; +import com.mtvs.devlinkbackend.user.query.service.EpicDevViewService; +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; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/api/epic/developer") +public class EpicDevQueryController { + private final JwtUtil jwtUtil; + private final EpicDevViewService epicDevViewService; + + public EpicDevQueryController(JwtUtil jwtUtil, EpicDevViewService epicDevViewService) { + this.jwtUtil = jwtUtil; + this.epicDevViewService = epicDevViewService; + } + + @Operation(summary = "Epic 계정으로 자기 Dev 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 조회됨"), + @ApiResponse(responseCode = "401", description = "잘못된 토큰") + }) + @GetMapping + public ResponseEntity findDevByEpicAccount( + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + DevSingleResponseDTO devSingleResponseDTO = epicDevViewService.findDevByEpicAccountId(accountId); + return ResponseEntity.ok(devSingleResponseDTO); + } + + @Operation(summary = "Epic 계정으로 상대 Dev 정보 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 조회됨"), + @ApiResponse(responseCode = "401", description = "잘못된 토큰") + }) + @GetMapping("/users/{userId}") + public ResponseEntity findDevByUserId( + @PathVariable(name = "userId") Long userId) throws Exception { + + DevSingleResponseDTO devSingleResponseDTO = epicDevViewService.findDevByUserId(userId); + return ResponseEntity.ok(devSingleResponseDTO); + } + + @Operation(summary = "Epic 계정으로 Dev 전체 Pagination 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 조회됨"), + @ApiResponse(responseCode = "401", description = "잘못된 토큰") + }) + @GetMapping("/all") + public ResponseEntity findDevByEpicAccount( + @RequestParam(name = "page") int page) throws Exception { + + DevPagingResponseDTO devPagingResponseDTO = epicDevViewService.findAllDevsWithPagination(page); + return ResponseEntity.ok(devPagingResponseDTO); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java b/src/main/java/com/mtvs/devlinkbackend/user/query/controller/Oauth2UserController.java similarity index 80% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/controller/Oauth2UserController.java index 806774e..ca6289e 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/controller/Oauth2UserController.java @@ -1,10 +1,10 @@ -package com.mtvs.devlinkbackend.oauth2.controller; +package com.mtvs.devlinkbackend.user.query.controller; -import com.mtvs.devlinkbackend.oauth2.service.UserService; +import com.mtvs.devlinkbackend.user.query.service.UserViewService; import com.mtvs.devlinkbackend.util.JwtUtil; -import com.mtvs.devlinkbackend.oauth2.dto.request.EpicGamesCallbackRequestDTO; -import com.mtvs.devlinkbackend.oauth2.entity.User; -import com.mtvs.devlinkbackend.oauth2.service.EpicGamesTokenService; +import com.mtvs.devlinkbackend.user.command.model.dto.request.EpicGamesCallbackRequestDTO; +import com.mtvs.devlinkbackend.user.command.model.entity.User; +import com.mtvs.devlinkbackend.user.query.service.EpicGamesTokenService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; @@ -20,12 +20,12 @@ public class Oauth2UserController { private final EpicGamesTokenService epicGamesTokenService; private final JwtUtil jwtUtil; - private final UserService userService; + private final UserViewService userViewService; - public Oauth2UserController(EpicGamesTokenService epicGamesTokenService, JwtUtil jwtUtil, UserService userService) { + public Oauth2UserController(EpicGamesTokenService epicGamesTokenService, JwtUtil jwtUtil, UserViewService userViewService) { this.epicGamesTokenService = epicGamesTokenService; this.jwtUtil = jwtUtil; - this.userService = userService; + this.userViewService = userViewService; } // epicgames 계정 정보 가져오는 API @@ -91,10 +91,12 @@ public ResponseEntity handleEpicGamesCallback( @GetMapping("/login") public ResponseEntity authLogin( @RequestHeader(name = "Authorization") String authorizationHeader) throws Exception { - User user = userService.findUserByAuthorizationHeader(authorizationHeader); + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + Boolean isExisted = userViewService.isExistedUserByEpicAccountId(accountId); // 222 : 해당 User는 이미 서비스를 사용한 경험이 있음 // 260 : 해당 User가 처음 서비스를 사용 - return user != null ? ResponseEntity.status(222).body("Existing User") : ResponseEntity.status(260).body("New User"); + return isExisted ? ResponseEntity.status(222).body("Existing User") : ResponseEntity.status(260).body("New User"); } } diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/controller/UserQueryController.java b/src/main/java/com/mtvs/devlinkbackend/user/query/controller/UserQueryController.java new file mode 100644 index 0000000..9d93c5e --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/controller/UserQueryController.java @@ -0,0 +1,46 @@ +package com.mtvs.devlinkbackend.user.query.controller; + +import com.mtvs.devlinkbackend.user.query.model.dto.response.UserDetailSingleResponseDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.UserSingleResponseDTO; +import com.mtvs.devlinkbackend.user.query.service.UserViewService; +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.*; + +@RestController +@RequestMapping("/api/user") +public class UserQueryController { + private final UserViewService userViewService; + + public UserQueryController(UserViewService userViewService) { + this.userViewService = userViewService; + } + + @Operation(summary = "UserId로 특정 사용자 정보 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 조회됨"), + @ApiResponse(responseCode = "401", description = "잘못된 토큰") + }) + @GetMapping("/{userId}") + public ResponseEntity findDevByEpicAccount( + @PathVariable(name = "userId") Long userId) throws Exception { + + UserSingleResponseDTO userSingleResponseDTO = userViewService.findUserByUserId(userId); + return ResponseEntity.ok(userSingleResponseDTO); + } + + @Operation(summary = "UserId로 특정 사용자 상세 정보 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 조회됨"), + @ApiResponse(responseCode = "401", description = "잘못된 토큰") + }) + @GetMapping("/{userId}/member") + public ResponseEntity findDevByUserId( + @PathVariable(name = "userId") Long userId) throws Exception { + + UserDetailSingleResponseDTO userDetailSingleResponseDTO = userViewService.findUserDetailByUserId(userId); + return ResponseEntity.ok(userDetailSingleResponseDTO); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessListResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessListResponseDTO.java new file mode 100644 index 0000000..a575570 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessListResponseDTO.java @@ -0,0 +1,15 @@ +package com.mtvs.devlinkbackend.user.query.model.dto.response; + +import com.mtvs.devlinkbackend.user.command.model.entity.Business; +import lombok.*; + +import java.util.List; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class BusinessListResponseDTO { + private List data; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessSingleResponseDTO.java new file mode 100644 index 0000000..690faf6 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessSingleResponseDTO.java @@ -0,0 +1,13 @@ +package com.mtvs.devlinkbackend.user.query.model.dto.response; + +import com.mtvs.devlinkbackend.user.command.model.entity.Business; +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class BusinessSingleResponseDTO { + private Business data; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevPagingResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevPagingResponseDTO.java new file mode 100644 index 0000000..81931d2 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevPagingResponseDTO.java @@ -0,0 +1,16 @@ +package com.mtvs.devlinkbackend.user.query.model.dto.response; + +import com.mtvs.devlinkbackend.user.command.model.entity.Dev; +import lombok.*; + +import java.util.List; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class DevPagingResponseDTO { + private List data; + private Integer totalPages; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevSingleResponseDTO.java new file mode 100644 index 0000000..0f7e3ac --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevSingleResponseDTO.java @@ -0,0 +1,12 @@ +package com.mtvs.devlinkbackend.user.query.model.dto.response; + +import com.mtvs.devlinkbackend.user.command.model.entity.Dev; +import lombok.*; + +@Getter @Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class DevSingleResponseDTO { + private Dev data; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserDetailSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserDetailSingleResponseDTO.java new file mode 100644 index 0000000..a1ab8bc --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserDetailSingleResponseDTO.java @@ -0,0 +1,13 @@ +package com.mtvs.devlinkbackend.user.query.model.dto.response; + +import com.mtvs.devlinkbackend.user.query.model.dto.response.sub.UserDetailResponseDTO; +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class UserDetailSingleResponseDTO { + private UserDetailResponseDTO data; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserSingleResponseDTO.java new file mode 100644 index 0000000..1127293 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserSingleResponseDTO.java @@ -0,0 +1,13 @@ +package com.mtvs.devlinkbackend.user.query.model.dto.response; + +import com.mtvs.devlinkbackend.user.command.model.entity.User; +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class UserSingleResponseDTO { + private User data; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/CharacterInfoDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/CharacterInfoDTO.java new file mode 100644 index 0000000..749c324 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/CharacterInfoDTO.java @@ -0,0 +1,14 @@ +package com.mtvs.devlinkbackend.user.query.model.dto.response.sub; + +import com.mtvs.devlinkbackend.guild.repository.projection.Guild_GuildName; +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class CharacterInfoDTO { + private Guild_GuildName guildInfo; + private String characterPicture; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/DevInfoDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/DevInfoDTO.java new file mode 100644 index 0000000..7a41c23 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/DevInfoDTO.java @@ -0,0 +1,15 @@ +package com.mtvs.devlinkbackend.user.query.model.dto.response.sub; + +import com.mtvs.devlinkbackend.user.query.repository.projection.SkillCategory_CategoryNameAndPointAvg; +import lombok.*; + +import java.util.List; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class DevInfoDTO { + private List skillCategoryList; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/UserDetailResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/UserDetailResponseDTO.java new file mode 100644 index 0000000..c4a5f6f --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/UserDetailResponseDTO.java @@ -0,0 +1,17 @@ +package com.mtvs.devlinkbackend.user.query.model.dto.response.sub; + +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class UserDetailResponseDTO { + private Long userId; + private CharacterInfoDTO characterInfo; + private DevInfoDTO devInfoDTO; + private Integer experienceValue; + private Long businessId; + private String nickname; +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/repository/BusinessViewRepository.java b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/BusinessViewRepository.java new file mode 100644 index 0000000..516397c --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/BusinessViewRepository.java @@ -0,0 +1,18 @@ +package com.mtvs.devlinkbackend.user.query.repository; + +import com.mtvs.devlinkbackend.user.command.model.entity.Business; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface BusinessViewRepository extends JpaRepository { + Business findBusinessByUserId(Long usreId); + + List findBusinessByManagerNameContainingIgnoreCase(String managerName); + + List findByBusinessNameContainingIgnoreCase(String businessName); + + List findByManagerPhone(String managerPhone); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/repository/DevViewRepository.java b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/DevViewRepository.java new file mode 100644 index 0000000..6f817bd --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/DevViewRepository.java @@ -0,0 +1,22 @@ +package com.mtvs.devlinkbackend.user.query.repository; + +import com.mtvs.devlinkbackend.user.command.model.entity.Dev; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface DevViewRepository extends JpaRepository { + Dev findDevByUserId(Long userId); + + Dev findDevByDevPhone(String devPhone); + + List findDevsByDevNameContainingIgnoreCase(String devName); + + List findDevsByDevEmail(String devEmail); + + Page findAllBy(Pageable pageable); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/repository/SkillCategoryInfoViewRepository.java b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/SkillCategoryInfoViewRepository.java new file mode 100644 index 0000000..a2e7f2f --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/SkillCategoryInfoViewRepository.java @@ -0,0 +1,11 @@ +package com.mtvs.devlinkbackend.user.query.repository; + +import com.mtvs.devlinkbackend.user.command.model.entity.SkillCategoryInfo; +import com.mtvs.devlinkbackend.user.query.repository.projection.SkillCategory_CategoryNameAndPointAvg; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface SkillCategoryInfoViewRepository extends JpaRepository { + List findByDev_DevId(Long devId); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/repository/UserViewRepository.java b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/UserViewRepository.java new file mode 100644 index 0000000..2d730b6 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/UserViewRepository.java @@ -0,0 +1,10 @@ +package com.mtvs.devlinkbackend.user.query.repository; + +import com.mtvs.devlinkbackend.user.command.model.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserViewRepository extends JpaRepository { + User findUserByEpicAccountId(String epicAccountId); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/repository/projection/SkillCategory_CategoryNameAndPointAvg.java b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/projection/SkillCategory_CategoryNameAndPointAvg.java new file mode 100644 index 0000000..d174a0e --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/projection/SkillCategory_CategoryNameAndPointAvg.java @@ -0,0 +1,6 @@ +package com.mtvs.devlinkbackend.user.query.repository.projection; + +public interface SkillCategory_CategoryNameAndPointAvg { + String getCategoryName(); + Integer getPointAvg(); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicBusinessViewService.java b/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicBusinessViewService.java new file mode 100644 index 0000000..34de90d --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicBusinessViewService.java @@ -0,0 +1,18 @@ +package com.mtvs.devlinkbackend.user.query.service; + +import com.mtvs.devlinkbackend.user.query.model.dto.response.BusinessSingleResponseDTO; +import com.mtvs.devlinkbackend.user.query.repository.BusinessViewRepository; +import org.springframework.stereotype.Service; + +@Service +public class EpicBusinessViewService { + private final BusinessViewRepository businessViewRepository; + + public EpicBusinessViewService(BusinessViewRepository businessViewRepository) { + this.businessViewRepository = businessViewRepository; + } + + public BusinessSingleResponseDTO findBusinessByBusinessId(Long businessId) { + return new BusinessSingleResponseDTO(businessViewRepository.findById(businessId).orElse(null)); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicDevViewService.java b/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicDevViewService.java new file mode 100644 index 0000000..653b64f --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicDevViewService.java @@ -0,0 +1,43 @@ +package com.mtvs.devlinkbackend.user.query.service; + +import com.mtvs.devlinkbackend.user.command.model.entity.Dev; +import com.mtvs.devlinkbackend.user.command.model.entity.User; +import com.mtvs.devlinkbackend.user.query.model.dto.response.DevPagingResponseDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.DevSingleResponseDTO; +import com.mtvs.devlinkbackend.user.query.repository.DevViewRepository; +import com.mtvs.devlinkbackend.user.query.repository.UserViewRepository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; + +@Service +public class EpicDevViewService { + private final DevViewRepository devViewRepository; + private final UserViewRepository userViewRepository; + + private static final Integer PAGE_SIZE = 15; + + public EpicDevViewService(DevViewRepository devViewRepository, UserViewRepository userViewRepository) { + this.devViewRepository = devViewRepository; + this.userViewRepository = userViewRepository; + } + + public DevSingleResponseDTO findDevByEpicAccountId(String accountId) throws Exception { + User foundUser = userViewRepository.findUserByEpicAccountId(accountId); + if(foundUser == null) + throw new IllegalArgumentException("저장된 유저 정보가 없음"); + return new DevSingleResponseDTO(devViewRepository.findDevByUserId(foundUser.getUserId())); + } + + public DevSingleResponseDTO findDevByUserId(Long userId) { + return new DevSingleResponseDTO(devViewRepository.findDevByUserId(userId)); + } + + public DevPagingResponseDTO findAllDevsWithPagination(int page) { + Pageable pageable = PageRequest.of(page, PAGE_SIZE, Sort.by("createdAt").descending()); + Page devPage = devViewRepository.findAllBy(pageable); + return new DevPagingResponseDTO(devPage.getContent(), devPage.getTotalPages()); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicGamesTokenService.java b/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicGamesTokenService.java similarity index 97% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicGamesTokenService.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicGamesTokenService.java index 2fd1285..87e55e3 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicGamesTokenService.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicGamesTokenService.java @@ -1,7 +1,7 @@ -package com.mtvs.devlinkbackend.oauth2.service; +package com.mtvs.devlinkbackend.user.query.service; import com.mtvs.devlinkbackend.util.JwtUtil; -import com.mtvs.devlinkbackend.oauth2.component.EpicGamesJWKCache; +import com.mtvs.devlinkbackend.util.EpicGamesJWKCache; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.*; diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/service/UserViewService.java b/src/main/java/com/mtvs/devlinkbackend/user/query/service/UserViewService.java new file mode 100644 index 0000000..a8febb9 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/service/UserViewService.java @@ -0,0 +1,70 @@ +package com.mtvs.devlinkbackend.user.query.service; + +import com.mtvs.devlinkbackend.character.entity.UserCharacter; +import com.mtvs.devlinkbackend.character.repository.UserCharacterRepository; +import com.mtvs.devlinkbackend.guild.repository.GuildRepository; +import com.mtvs.devlinkbackend.user.command.model.entity.User; +import com.mtvs.devlinkbackend.user.query.model.dto.response.UserDetailSingleResponseDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.UserSingleResponseDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.sub.CharacterInfoDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.sub.DevInfoDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.sub.UserDetailResponseDTO; +import com.mtvs.devlinkbackend.user.query.repository.SkillCategoryInfoViewRepository; +import com.mtvs.devlinkbackend.user.query.repository.UserViewRepository; +import com.mtvs.devlinkbackend.util.JwtUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class UserViewService { + private final JwtUtil jwtUtil; + private final UserViewRepository userViewRepository; + private final GuildRepository guildRepository; + private final UserCharacterRepository userCharacterRepository; + private final SkillCategoryInfoViewRepository skillCategoryInfoViewRepository; + + public UserViewService(JwtUtil jwtUtil, UserViewRepository userViewRepository, GuildRepository guildRepository, UserCharacterRepository userCharacterRepository, SkillCategoryInfoViewRepository skillCategoryInfoViewRepository) { + this.jwtUtil = jwtUtil; + this.userViewRepository = userViewRepository; + this.guildRepository = guildRepository; + this.userCharacterRepository = userCharacterRepository; + this.skillCategoryInfoViewRepository = skillCategoryInfoViewRepository; + } + + public Boolean isExistedUserByEpicAccountId(String accountId) throws Exception { + return userViewRepository.findUserByEpicAccountId(accountId) != null; + } + + public UserSingleResponseDTO findUserByUserId(Long userId) { + return new UserSingleResponseDTO(userViewRepository.findById(userId).orElse(null)); + } + + @Transactional + public UserDetailSingleResponseDTO findUserDetailByUserId(Long userId) { + User foundUser = userViewRepository.findById(userId).orElse(null); + UserCharacter foundUserCharacter = + foundUser != null ? + userCharacterRepository.findById(foundUser.getCharacterId()).orElse(null) : null; + + CharacterInfoDTO characterInfoDTO = + foundUserCharacter != null ? + new CharacterInfoDTO( + foundUserCharacter.getGuildId() != null ? + guildRepository.findByGuildId(foundUserCharacter.getGuildId()) : null, + foundUserCharacter.getCharacterPicture()) : + null; + DevInfoDTO devInfoDTO = + new DevInfoDTO( + foundUser != null ? + skillCategoryInfoViewRepository.findByDev_DevId(foundUser.getDevId()) : null + ); + return new UserDetailSingleResponseDTO( + new UserDetailResponseDTO( + userId, + characterInfoDTO, + devInfoDTO, + foundUser.getExperienceValue(), + foundUser.getBusinessId(), + foundUser.getNickname())); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/component/EpicGamesJWKCache.java b/src/main/java/com/mtvs/devlinkbackend/util/EpicGamesJWKCache.java similarity index 96% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/component/EpicGamesJWKCache.java rename to src/main/java/com/mtvs/devlinkbackend/util/EpicGamesJWKCache.java index e4cdb80..e7762d0 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/component/EpicGamesJWKCache.java +++ b/src/main/java/com/mtvs/devlinkbackend/util/EpicGamesJWKCache.java @@ -1,4 +1,4 @@ -package com.mtvs.devlinkbackend.oauth2.component; +package com.mtvs.devlinkbackend.util; import com.nimbusds.jose.jwk.JWKSet; import org.springframework.scheduling.annotation.Scheduled; diff --git a/src/main/java/com/mtvs/devlinkbackend/util/IntegerListConverter.java b/src/main/java/com/mtvs/devlinkbackend/util/IntegerListConverter.java new file mode 100644 index 0000000..f47d0c6 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/util/IntegerListConverter.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 IntegerListConverter 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, Integer[].class)); + } catch (IOException e) { + throw new RuntimeException("Could not convert JSON to list", e); + } + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/util/JwtUtil.java b/src/main/java/com/mtvs/devlinkbackend/util/JwtUtil.java index 0e882aa..ce768f0 100644 --- a/src/main/java/com/mtvs/devlinkbackend/util/JwtUtil.java +++ b/src/main/java/com/mtvs/devlinkbackend/util/JwtUtil.java @@ -1,6 +1,5 @@ package com.mtvs.devlinkbackend.util; -import com.mtvs.devlinkbackend.oauth2.component.EpicGamesJWKCache; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.JWSVerifier; import com.nimbusds.jose.crypto.RSASSAVerifier; diff --git a/src/main/java/com/mtvs/devlinkbackend/util/LongListConverter.java b/src/main/java/com/mtvs/devlinkbackend/util/LongListConverter.java new file mode 100644 index 0000000..539c6c8 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/util/LongListConverter.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 LongListConverter 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, Long[].class)); + } catch (IOException e) { + throw new RuntimeException("Could not convert JSON to list", e); + } + } +} \ No newline at end of file diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupCRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/BusinessCRUDTest.java similarity index 68% rename from src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupCRUDTest.java rename to src/test/java/com/mtvs/devlinkbackend/crud/BusinessCRUDTest.java index 53a8b03..acc3f26 100644 --- a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientGroupCRUDTest.java +++ b/src/test/java/com/mtvs/devlinkbackend/crud/BusinessCRUDTest.java @@ -1,7 +1,7 @@ package com.mtvs.devlinkbackend.crud; -import com.mtvs.devlinkbackend.oauth2.dto.request.UserClientGroupRequestDTO; -import com.mtvs.devlinkbackend.oauth2.service.UserClientGroupService; +import com.mtvs.devlinkbackend.user.command.model.dto.request.BusinessRequestDTO; +import com.mtvs.devlinkbackend.user.command.service.EpicBusinessService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -17,20 +17,20 @@ @SpringBootTest @Transactional -public class UserClientGroupCRUDTest { +public class BusinessCRUDTest { @Autowired - private UserClientGroupService userClientGroupService; + private EpicBusinessService epicBusinessService; private static Stream registUserClientGroup() { return Stream.of( - Arguments.of(new UserClientGroupRequestDTO( + Arguments.of(new BusinessRequestDTO( "UserClientGroup", "팀", "그룹이름3", "담당자이름3", "담당자핸드폰번호3" ), "계정3"), - Arguments.of(new UserClientGroupRequestDTO( + Arguments.of(new BusinessRequestDTO( "UserClientGroup", "팀2", "그룹이름4", @@ -42,14 +42,14 @@ private static Stream registUserClientGroup() { private static Stream modifyUserClientGroup() { return Stream.of( - Arguments.of(new UserClientGroupRequestDTO( + Arguments.of(new BusinessRequestDTO( "UserClientGroup", "팀", "그룹이름2", "담당자이름2", "담당자핸드폰번호2" ), "계정1"), - Arguments.of(new UserClientGroupRequestDTO( + Arguments.of(new BusinessRequestDTO( "UserClientGroup", "팀", "그룹이름1", @@ -61,14 +61,14 @@ private static Stream modifyUserClientGroup() { @BeforeEach public void setUp() { - userClientGroupService.registUserClientGroup(new UserClientGroupRequestDTO( + epicBusinessService.registUserClientGroup(new BusinessRequestDTO( "UserClientGroup", "팀", "그룹이름1", "담당자이름1", "담당자핸드폰번호1" ), "계정1"); - userClientGroupService.registUserClientGroup(new UserClientGroupRequestDTO( + epicBusinessService.registUserClientGroup(new BusinessRequestDTO( "UserClientGroup", "팀", "그룹이름2", @@ -81,8 +81,8 @@ public void setUp() { @DisplayName("UserClientGroup 등록") @MethodSource("registUserClientGroup") @ParameterizedTest - public void testRegistUserClientGroup(UserClientGroupRequestDTO UserClientGroupRequestDTO, String accountId) { - Assertions.assertDoesNotThrow(() -> userClientGroupService.registUserClientGroup(UserClientGroupRequestDTO, accountId)); + public void testRegistUserClientGroup(BusinessRequestDTO BusinessRequestDTO, String accountId) { + Assertions.assertDoesNotThrow(() -> epicBusinessService.registUserClientGroup(BusinessRequestDTO, accountId)); } @Order(2) @@ -90,7 +90,7 @@ public void testRegistUserClientGroup(UserClientGroupRequestDTO UserClientGroupR @ValueSource(strings = {"계정1", "계정2"}) @ParameterizedTest public void testFindUserClientGroupByAccountId(String accountId) { - Assertions.assertDoesNotThrow(() -> userClientGroupService.findUserClientGroupByAccountId(accountId)); + Assertions.assertDoesNotThrow(() -> epicBusinessService.findUserClientGroupByAccountId(accountId)); } @Order(3) @@ -98,7 +98,7 @@ public void testFindUserClientGroupByAccountId(String accountId) { @ValueSource(strings = {"담당자이름1", "담당자이름2"}) @ParameterizedTest public void findByManagerNameContainingIgnoreCase(String managerName) { - Assertions.assertDoesNotThrow(() -> userClientGroupService.findByManagerNameContainingIgnoreCase(managerName)); + Assertions.assertDoesNotThrow(() -> epicBusinessService.findByManagerNameContainingIgnoreCase(managerName)); } @Order(4) @@ -106,7 +106,7 @@ public void findByManagerNameContainingIgnoreCase(String managerName) { @ValueSource(strings = {"그룹이름1", "그룹이름2"}) @ParameterizedTest public void testFindByGroupNameContainingIgnoreCase(String groupName) { - Assertions.assertDoesNotThrow(() -> userClientGroupService.findByGroupNameContainingIgnoreCase(groupName)); + Assertions.assertDoesNotThrow(() -> epicBusinessService.findByGroupNameContainingIgnoreCase(groupName)); } @Order(5) @@ -114,7 +114,7 @@ public void testFindByGroupNameContainingIgnoreCase(String groupName) { @ValueSource(strings = {"팀", "법인"}) @ParameterizedTest public void testFindUserClientGroupsByEmail(String clientType) { - Assertions.assertDoesNotThrow(() -> userClientGroupService.findByClientType(clientType)); + Assertions.assertDoesNotThrow(() -> epicBusinessService.findByClientType(clientType)); } @Order(6) @@ -122,15 +122,15 @@ public void testFindUserClientGroupsByEmail(String clientType) { @ValueSource(strings = {"담당자핸드폰1", "담당자핸드폰2"}) @ParameterizedTest public void testFindUserClientGroupByPhone(String managerPhone) { - Assertions.assertDoesNotThrow(() -> userClientGroupService.findByManagerPhone(managerPhone)); + Assertions.assertDoesNotThrow(() -> epicBusinessService.findByManagerPhone(managerPhone)); } @Order(7) @DisplayName("UserClientGroup 수정") @MethodSource("modifyUserClientGroup") @ParameterizedTest - public void testUpdateUserClientGroup(UserClientGroupRequestDTO UserClientGroupRequestDTO, String accountId) { - Assertions.assertDoesNotThrow(() -> userClientGroupService.updateUserClientGroup(UserClientGroupRequestDTO, accountId)); + public void testUpdateUserClientGroup(BusinessRequestDTO BusinessRequestDTO, String accountId) { + Assertions.assertDoesNotThrow(() -> epicBusinessService.updateUserClientGroup(BusinessRequestDTO, accountId)); } @Order(8) @@ -138,6 +138,6 @@ public void testUpdateUserClientGroup(UserClientGroupRequestDTO UserClientGroupR @ValueSource(strings = {"계정1", "계정2"}) @ParameterizedTest public void testDeleteByAccountId(String accountId) { - Assertions.assertDoesNotThrow(() -> userClientGroupService.deleteByAccountId(accountId)); + Assertions.assertDoesNotThrow(() -> epicBusinessService.deleteByAccountId(accountId)); } } diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerCRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/DevCRUDTest.java similarity index 75% rename from src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerCRUDTest.java rename to src/test/java/com/mtvs/devlinkbackend/crud/DevCRUDTest.java index 89f76e1..658c29b 100644 --- a/src/test/java/com/mtvs/devlinkbackend/crud/UserPartnerCRUDTest.java +++ b/src/test/java/com/mtvs/devlinkbackend/crud/DevCRUDTest.java @@ -1,7 +1,7 @@ package com.mtvs.devlinkbackend.crud; -import com.mtvs.devlinkbackend.oauth2.dto.request.UserPartnerRequestDTO; -import com.mtvs.devlinkbackend.oauth2.service.UserPartnerService; +import com.mtvs.devlinkbackend.user.command.model.dto.request.DevRequestDTO; +import com.mtvs.devlinkbackend.user.command.service.EpicDevService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -20,14 +20,14 @@ @SpringBootTest @Transactional -public class UserPartnerCRUDTest { +public class DevCRUDTest { @Autowired - private UserPartnerService userPartnerService; + private EpicDevService epicDevService; private static Stream registUserPartner() { return Stream.of( - Arguments.of(new UserPartnerRequestDTO( + Arguments.of(new DevRequestDTO( "UserClientPartner", "닉네임3", "이름3", @@ -39,7 +39,7 @@ private static Stream registUserPartner() { Map.of("Java",3), "하고싶은말3" ), "계정3"), - Arguments.of(new UserPartnerRequestDTO( + Arguments.of(new DevRequestDTO( "UserClientPartner", "닉네임4", "이름4", @@ -56,7 +56,7 @@ private static Stream registUserPartner() { private static Stream modifyUserPartner() { return Stream.of( - Arguments.of(new UserPartnerRequestDTO( + Arguments.of(new DevRequestDTO( "UserClientPartner", "닉네임1", "이름1", @@ -68,7 +68,7 @@ private static Stream modifyUserPartner() { Map.of("Java",3), "하고싶은말1" ), "계정1"), - Arguments.of(new UserPartnerRequestDTO( + Arguments.of(new DevRequestDTO( "UserClientPartner", "닉네임2", "이름2", @@ -85,7 +85,7 @@ private static Stream modifyUserPartner() { @BeforeEach public void setUp() { - userPartnerService.registUserPartner(new UserPartnerRequestDTO( + epicDevService.registUserPartner(new DevRequestDTO( "UserClientPartner", "닉네임1", "이름1", @@ -97,7 +97,7 @@ public void setUp() { Map.of("Java",3), "하고싶은말1" ), "계정1"); - userPartnerService.registUserPartner(new UserPartnerRequestDTO( + epicDevService.registUserPartner(new DevRequestDTO( "UserClientPartner", "닉네임2", "이름2", @@ -115,8 +115,8 @@ public void setUp() { @DisplayName("UserPartner 등록") @MethodSource("registUserPartner") @ParameterizedTest - public void testRegistUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, String accountId) { - Assertions.assertDoesNotThrow(() -> userPartnerService.registUserPartner(userPartnerRequestDTO, accountId)); + public void testRegistUserPartner(DevRequestDTO devRequestDTO, String accountId) { + Assertions.assertDoesNotThrow(() -> epicDevService.registUserPartner(devRequestDTO, accountId)); } @Order(2) @@ -124,7 +124,7 @@ public void testRegistUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, S @ValueSource(strings = {"계정1", "계정2"}) @ParameterizedTest public void testFindUserPartnerByAccountId(String accountId) { - Assertions.assertDoesNotThrow(() -> userPartnerService.findUserPartnerByAccountId(accountId)); + Assertions.assertDoesNotThrow(() -> epicDevService.findUserPartnerByAccountId(accountId)); } @Order(3) @@ -132,7 +132,7 @@ public void testFindUserPartnerByAccountId(String accountId) { @ValueSource(strings = {"이름1", "이름2"}) @ParameterizedTest public void testFindUserPartnersByNameContainingIgnoreCase(String name) { - Assertions.assertDoesNotThrow(() -> userPartnerService.findUserPartnersByNameContainingIgnoreCase(name)); + Assertions.assertDoesNotThrow(() -> epicDevService.findUserPartnersByNameContainingIgnoreCase(name)); } @Order(4) @@ -140,7 +140,7 @@ public void testFindUserPartnersByNameContainingIgnoreCase(String name) { @ValueSource(strings = {"닉네임1", "닉네임2"}) @ParameterizedTest public void testFindUserPartnersByNicknameContainingIgnoreCase(String nickname) { - Assertions.assertDoesNotThrow(() -> userPartnerService.findUserPartnersByNicknameContainingIgnoreCase(nickname)); + Assertions.assertDoesNotThrow(() -> epicDevService.findUserPartnersByNicknameContainingIgnoreCase(nickname)); } @Order(5) @@ -148,7 +148,7 @@ public void testFindUserPartnersByNicknameContainingIgnoreCase(String nickname) @ValueSource(strings = {"계정1", "계정2"}) @ParameterizedTest public void testFindUserPartnersByEmail(String email) { - Assertions.assertDoesNotThrow(() -> userPartnerService.findUserPartnersByEmail(email)); + Assertions.assertDoesNotThrow(() -> epicDevService.findUserPartnersByEmail(email)); } @Order(6) @@ -156,15 +156,15 @@ public void testFindUserPartnersByEmail(String email) { @ValueSource(strings = {"핸드폰1", "핸드폰2"}) @ParameterizedTest public void testFindUserPartnerByPhone(String phone) { - Assertions.assertDoesNotThrow(() -> userPartnerService.findUserPartnerByPhone(phone)); + Assertions.assertDoesNotThrow(() -> epicDevService.findUserPartnerByPhone(phone)); } @Order(7) @DisplayName("UserPartner 수정") @MethodSource("modifyUserPartner") @ParameterizedTest - public void testUpdateUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, String accountId) { - Assertions.assertDoesNotThrow(() -> userPartnerService.updateUserPartner(userPartnerRequestDTO, accountId)); + public void testUpdateUserPartner(DevRequestDTO devRequestDTO, String accountId) { + Assertions.assertDoesNotThrow(() -> epicDevService.updateUserPartner(devRequestDTO, accountId)); } @Order(8) @@ -172,6 +172,6 @@ public void testUpdateUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, S @ValueSource(strings = {"계정1", "계정2"}) @ParameterizedTest public void testDeleteByAccountId(String accountId) { - Assertions.assertDoesNotThrow(() -> userPartnerService.deleteByAccountId(accountId)); + Assertions.assertDoesNotThrow(() -> epicDevService.deleteByAccountId(accountId)); } } diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualCRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualCRUDTest.java index 16849f4..37b46ff 100644 --- a/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualCRUDTest.java +++ b/src/test/java/com/mtvs/devlinkbackend/crud/UserClientIndividualCRUDTest.java @@ -1,7 +1,5 @@ package com.mtvs.devlinkbackend.crud; -import com.mtvs.devlinkbackend.oauth2.dto.request.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;