From 0e86dbabedb5cca0c57c603685b68a372f8aa1c8 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Mon, 28 Oct 2024 10:22:55 +0900 Subject: [PATCH 1/5] =?UTF-8?q?refactor:=20UserPartner=20Entity=20?= =?UTF-8?q?=EC=BB=AC=EB=9F=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 구현된 기능: - 기존 skillSet에 대한 내용을 Map가 아닌 새로운 Class를 생성해서 저장하는 방식으로 변경 - expPoints라는 컬럼 추가 - Stat이라는 새로운 Class 또한 생성 --- .../oauth2/dto/request/SkillRequestDTO.java | 14 +++++++ .../dto/request/UserPartnerRequestDTO.java | 6 +-- .../devlinkbackend/oauth2/entity/Skill.java | 39 +++++++++++++++++++ .../devlinkbackend/oauth2/entity/Stat.java | 39 +++++++++++++++++++ .../oauth2/entity/UserPartner.java | 19 +++++---- .../oauth2/service/UserPartnerService.java | 32 ++++++++++++--- 6 files changed, 134 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/SkillRequestDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Skill.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Stat.java diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/SkillRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/SkillRequestDTO.java new file mode 100644 index 0000000..ad410a6 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/SkillRequestDTO.java @@ -0,0 +1,14 @@ +package com.mtvs.devlinkbackend.oauth2.dto.request; + +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class SkillRequestDTO { + private String skillCategory; + private String skillName; + private String skillLevel; +} 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 index bf57314..406d834 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserPartnerRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserPartnerRequestDTO.java @@ -20,9 +20,9 @@ public class UserPartnerRequestDTO { private List portfolioList; private String experience; @Schema( - description = "기술 숙련도에 대한 정보. Key는 기술 이름이고, Value는 해당 기술의 숙련도입니다.", - example = "{ \"Java\": 5, \"Spring\": 4, \"Docker\": 3 }" + description = "기술 숙련도에 대한 정보. skillCategory는 AI, Server와 같은 대분류이고, " + + "skillName은 기술 이름이고, skillLevel는 해당 기술의 숙련도입니다." ) - private Map skillSet; + private List skill; private String message; } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Skill.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Skill.java new file mode 100644 index 0000000..ee2c2d3 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Skill.java @@ -0,0 +1,39 @@ +package com.mtvs.devlinkbackend.oauth2.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Table(name = "SKILL") +@Entity(name = "Skill") +@Getter +@Setter +@NoArgsConstructor +public class Skill { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "SKILL_ID") + private Long skillId; + + @Column(name = "SKILL_CATEGORY") + private String skillCategory; + + @Column(name = "SKILL_NAME") + private String skillName; + + @Column(name = "SKILL_LEVEL") + private Integer skillLevel; + + @ManyToOne + @JoinColumn(name = "USER_PARTNER_ID", nullable = false) + @JsonIgnore + private UserPartner userPartner; + + public Skill(String skillCategory, String skillName, Integer skillLevel) { + this.skillCategory = skillCategory; + this.skillName = skillName; + this.skillLevel = skillLevel; + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Stat.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Stat.java new file mode 100644 index 0000000..a87ca49 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Stat.java @@ -0,0 +1,39 @@ +package com.mtvs.devlinkbackend.oauth2.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Table(name = "STAT") +@Entity(name = "Stat") +@Getter +@Setter +@NoArgsConstructor +public class Stat { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "STAT_ID") + private Long statId; + + @Column(name = "STAT_NAME") + private String statName; + + @Column(name = "TOTAL_SCORE") + private Long totalScore; + + @Column(name = "IS_EVALUATING") + private Boolean isEvaluating; + + @ManyToOne + @JoinColumn(name = "USER_PARTNER_ID", nullable = false) + @JsonIgnore + private UserPartner userPartner; + + public Stat(String statName, Long totalScore, Boolean isEvaluating) { + this.statName = statName; + this.totalScore = totalScore; + this.isEvaluating = isEvaluating; + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java index d158b01..d7ea6ca 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java @@ -1,5 +1,6 @@ package com.mtvs.devlinkbackend.oauth2.entity; +import com.fasterxml.jackson.annotation.JsonManagedReference; import com.mtvs.devlinkbackend.util.StringListConverter; import jakarta.persistence.*; import lombok.Getter; @@ -37,16 +38,21 @@ public class UserPartner extends User { @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 = "EXP_POINTS") + private Long expPoints; + + @OneToMany(mappedBy = "userPartner", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonManagedReference + private List skillSet; + + @OneToMany(mappedBy = "userPartner", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonManagedReference + private List statSet; @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) { + public UserPartner(String accountId, String purpose, String nickname, String name, String email, String phone,String githubLink, List portfolioList, String experience, String message) { super(accountId, purpose); this.nickname = nickname; this.name = name; @@ -55,7 +61,6 @@ public UserPartner(String accountId, String purpose, String nickname, String nam 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/service/UserPartnerService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java index c8f9984..57e7c63 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java @@ -3,12 +3,14 @@ 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.Skill; 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; +import java.util.stream.Collectors; @Service public class UserPartnerService { @@ -22,7 +24,7 @@ public UserPartnerService(UserPartnersRepository userPartnersRepository) { public UserPartnerSingleResponseDTO registUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, String accountId) { - return new UserPartnerSingleResponseDTO(userPartnersRepository.save(new UserPartner( + UserPartner userPartner = new UserPartner( accountId, userPartnerRequestDTO.getPurpose(), userPartnerRequestDTO.getNickname(), @@ -32,9 +34,18 @@ public UserPartnerSingleResponseDTO registUserPartner(UserPartnerRequestDTO user userPartnerRequestDTO.getGithubLink(), userPartnerRequestDTO.getPortfolioList(), userPartnerRequestDTO.getExperience(), - userPartnerRequestDTO.getSkillSet(), userPartnerRequestDTO.getMessage() - ))); + ); + + List skills = userPartnerRequestDTO.getSkill().stream() + .map(skillDTO -> new Skill(skillDTO.getSkillCategory(), skillDTO.getSkillName(), Integer.parseInt(skillDTO.getSkillLevel()))) + .peek(skill -> skill.setUserPartner(userPartner)) // 각 Skill 엔티티에 UserPartner 설정 + .toList(); + + userPartner.setSkillSet(skills); + + + return new UserPartnerSingleResponseDTO(userPartnersRepository.save(userPartner)); } public UserPartnerSingleResponseDTO findUserPartnerByAccountId(String accountId) { @@ -73,10 +84,21 @@ public UserPartnerSingleResponseDTO updateUserPartner(UserPartnerRequestDTO user userPartner.setGithubLink(userPartnerRequestDTO.getGithubLink()); userPartner.setPortfolioList(userPartnerRequestDTO.getPortfolioList()); userPartner.setExperience(userPartnerRequestDTO.getExperience()); - userPartner.setSkillSet(userPartnerRequestDTO.getSkillSet()); userPartner.setMessage(userPartnerRequestDTO.getMessage()); - return new UserPartnerSingleResponseDTO(userPartner); + // 기존 Skill 삭제 (orphanRemoval=true 옵션이 설정되어 있다면 자동 삭제됨) + userPartner.getSkillSet().clear(); + + // 새로운 Skill 리스트 설정 + List newSkills = userPartnerRequestDTO.getSkill().stream() + .map(skillDTO -> new Skill(skillDTO.getSkillCategory(), skillDTO.getSkillName(), Integer.parseInt(skillDTO.getSkillLevel()))) + .peek(skill -> skill.setUserPartner(userPartner)) // 각 Skill 엔티티에 UserPartner 설정 + .toList(); + + userPartner.setSkillSet(newSkills); + + + return new UserPartnerSingleResponseDTO(userPartnersRepository.save(userPartner)); } public void deleteByAccountId(String accountId) { From 5f4f6b068307fe69de5556513e8dec71371db571 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Fri, 1 Nov 2024 21:10:28 +0900 Subject: [PATCH 2/5] =?UTF-8?q?refactor:=20DB=20=EC=9E=AC=EC=84=A4?= =?UTF-8?q?=EA=B3=84=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=BB=AC=EB=9F=BC=20?= =?UTF-8?q?refactoring=20=EB=B0=8F=20CUD=20=EB=A1=9C=EC=A7=81=20refactorin?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradlew | 4 +- .../controller/EpicBusinessController.java | 69 ++++++++++ .../oauth2/controller/EpicDevController.java | 67 ++++++++++ .../controller/Oauth2UserController.java | 4 +- .../controller/UserClientGroupController.java | 126 ------------------ .../UserClientIndividualController.java | 112 ---------------- .../controller/UserPartnerController.java | 125 ----------------- .../dto/request/BusinessRequestDTO.java | 18 +++ .../oauth2/dto/request/DevRequestDTO.java | 31 +++++ .../oauth2/dto/request/SkillRequestDTO.java | 14 -- .../request/UserClientGroupRequestDTO.java | 16 --- .../UserClientIndividualRequestDTO.java | 14 -- .../dto/request/UserPartnerRequestDTO.java | 28 ---- .../UserClientGroupListResponseDTO.java | 4 +- .../UserClientGroupSingleResponseDTO.java | 4 +- .../UserClientIndividualListResponseDTO.java | 1 - ...UserClientIndividualSingleResponseDTO.java | 1 - .../response/UserPartnerListResponseDTO.java | 4 +- .../UserPartnerSingleResponseDTO.java | 4 +- .../oauth2/entity/Business.java | 56 ++++++++ .../oauth2/entity/CategoryInfo.java | 46 +++++++ .../devlinkbackend/oauth2/entity/Dev.java | 81 +++++++++++ .../oauth2/entity/Evaluation.java | 49 +++++++ .../devlinkbackend/oauth2/entity/Skill.java | 39 ------ .../devlinkbackend/oauth2/entity/Stat.java | 39 ------ .../devlinkbackend/oauth2/entity/User.java | 52 +++++--- .../oauth2/entity/UserClientGroup.java | 37 ----- .../oauth2/entity/UserClientIndividual.java | 29 ---- .../oauth2/entity/UserPartner.java | 67 ---------- .../oauth2/repository/BusinessRepository.java | 20 +++ .../oauth2/repository/DevRepository.java | 24 ++++ .../repository/UserClientGroupRepository.java | 22 --- .../UserClientIndividualRepository.java | 18 --- .../repository/UserPartnersRepository.java | 29 ---- .../oauth2/repository/UserRepository.java | 4 +- .../oauth2/service/EpicBusinessService.java | 74 ++++++++++ .../oauth2/service/EpicDevService.java | 92 +++++++++++++ .../service/UserClientGroupService.java | 74 ---------- .../service/UserClientIndividualService.java | 65 --------- .../oauth2/service/UserPartnerService.java | 107 --------------- .../oauth2/service/UserService.java | 13 +- .../util/LongListConverter.java | 34 +++++ ...oupCRUDTest.java => BusinessCRUDTest.java} | 40 +++--- ...rPartnerCRUDTest.java => DevCRUDTest.java} | 40 +++--- .../crud/UserClientIndividualCRUDTest.java | 2 - 45 files changed, 756 insertions(+), 1043 deletions(-) create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicBusinessController.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicDevController.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientGroupController.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserClientIndividualController.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/controller/UserPartnerController.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/BusinessRequestDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/DevRequestDTO.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/SkillRequestDTO.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserClientGroupRequestDTO.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserClientIndividualRequestDTO.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/UserPartnerRequestDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Business.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/CategoryInfo.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Dev.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Evaluation.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Skill.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Stat.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientGroup.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserClientIndividual.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/repository/BusinessRepository.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/repository/DevRepository.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientGroupRepository.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserClientIndividualRepository.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserPartnersRepository.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicBusinessService.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicDevService.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientGroupService.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserClientIndividualService.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/util/LongListConverter.java rename src/test/java/com/mtvs/devlinkbackend/crud/{UserClientGroupCRUDTest.java => BusinessCRUDTest.java} (68%) rename src/test/java/com/mtvs/devlinkbackend/crud/{UserPartnerCRUDTest.java => DevCRUDTest.java} (75%) 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/oauth2/controller/EpicBusinessController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicBusinessController.java new file mode 100644 index 0000000..211fcc7 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicBusinessController.java @@ -0,0 +1,69 @@ +package com.mtvs.devlinkbackend.oauth2.controller; + +import com.mtvs.devlinkbackend.oauth2.dto.request.BusinessRequestDTO; +import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupListResponseDTO; +import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupSingleResponseDTO; +import com.mtvs.devlinkbackend.oauth2.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/user/epic/business") +public class EpicBusinessController { + private final EpicBusinessService epicBusinessService; + private final JwtUtil jwtUtil; + + public EpicBusinessController(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); + UserClientGroupSingleResponseDTO 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); + UserClientGroupSingleResponseDTO 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/oauth2/controller/EpicDevController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicDevController.java new file mode 100644 index 0000000..760d640 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicDevController.java @@ -0,0 +1,67 @@ +package com.mtvs.devlinkbackend.oauth2.controller; + +import com.mtvs.devlinkbackend.oauth2.dto.request.DevRequestDTO; +import com.mtvs.devlinkbackend.oauth2.dto.response.UserPartnerSingleResponseDTO; +import com.mtvs.devlinkbackend.oauth2.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/user/epic/dev") +public class EpicDevController { + private final EpicDevService epicDevService; + private final JwtUtil jwtUtil; + + public EpicDevController(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 DevRequestDTO devRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + UserPartnerSingleResponseDTO userPartner = epicDevService.registUserPartner(devRequestDTO, accountId); + return ResponseEntity.ok(userPartner); + } + + @Operation(summary = "Epic 계정으로 Dev 정보 수정") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "성공적으로 수정함"), + @ApiResponse(responseCode = "404", description = "찾을 수 없음") + }) + @PatchMapping + public ResponseEntity update( + @RequestBody DevRequestDTO devRequestDTO, + @RequestHeader("Authorization") String authorizationHeader) throws Exception { + + String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + UserPartnerSingleResponseDTO userPartner = epicDevService.updateUserPartner(devRequestDTO, 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/oauth2/controller/Oauth2UserController.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java index 806774e..b57f2a3 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/Oauth2UserController.java @@ -91,7 +91,9 @@ 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); + User user = userService.findUserByEpicAccountId(accountId); // 222 : 해당 User는 이미 서비스를 사용한 경험이 있음 // 260 : 해당 User가 처음 서비스를 사용 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/BusinessRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/BusinessRequestDTO.java new file mode 100644 index 0000000..9e0b90b --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/BusinessRequestDTO.java @@ -0,0 +1,18 @@ +package com.mtvs.devlinkbackend.oauth2.dto.request; + +import lombok.*; +import org.springframework.web.multipart.MultipartFile; + +@Getter @Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class BusinessRequestDTO { + private Long characterId; + private String nickname; + private String businessName; + private MultipartFile businessLogoImg; + private String managerName; + private String managerPhone; +} + diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/DevRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/DevRequestDTO.java new file mode 100644 index 0000000..15bc383 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/DevRequestDTO.java @@ -0,0 +1,31 @@ +package com.mtvs.devlinkbackend.oauth2.dto.request; + +import com.fasterxml.jackson.annotation.JsonManagedReference; +import com.mtvs.devlinkbackend.oauth2.entity.CategoryInfo; +import com.mtvs.devlinkbackend.util.StringListConverter; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Convert; +import jakarta.persistence.OneToMany; +import lombok.*; + +import java.util.List; + +@Getter @Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class DevRequestDTO { + private Long characterId; + private String nickname; + private String devName; + private String devEmail; + private String devPhone; + private String githubLink; + private List portfolioList; + private String career; + private List categoryNameList; + private String tag; + private String hope; +} \ No newline at end of file diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/SkillRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/SkillRequestDTO.java deleted file mode 100644 index ad410a6..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/SkillRequestDTO.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.dto.request; - -import lombok.*; - -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class SkillRequestDTO { - private String skillCategory; - private String skillName; - private String skillLevel; -} 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 406d834..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 = "기술 숙련도에 대한 정보. skillCategory는 AI, Server와 같은 대분류이고, " + - "skillName은 기술 이름이고, skillLevel는 해당 기술의 숙련도입니다." - ) - private List skill; - 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 index e76ad6e..47a5ef6 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupListResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupListResponseDTO.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.oauth2.dto.response; -import com.mtvs.devlinkbackend.oauth2.entity.UserClientGroup; +import com.mtvs.devlinkbackend.oauth2.entity.Business; import lombok.*; import java.util.List; @@ -11,5 +11,5 @@ @AllArgsConstructor @ToString public class UserClientGroupListResponseDTO { - private List data; + 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 index 98d3fd9..b7cf012 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupSingleResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupSingleResponseDTO.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.oauth2.dto.response; -import com.mtvs.devlinkbackend.oauth2.entity.UserClientGroup; +import com.mtvs.devlinkbackend.oauth2.entity.Business; import lombok.*; @Getter @@ -9,5 +9,5 @@ @AllArgsConstructor @ToString public class UserClientGroupSingleResponseDTO { - private UserClientGroup data; + private Business 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 index 6c87b05..c5d6a62 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualListResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualListResponseDTO.java @@ -1,6 +1,5 @@ package com.mtvs.devlinkbackend.oauth2.dto.response; -import com.mtvs.devlinkbackend.oauth2.entity.UserClientIndividual; import lombok.*; import java.util.List; 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 index 5eaab1e..4c4a17a 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualSingleResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualSingleResponseDTO.java @@ -1,6 +1,5 @@ package com.mtvs.devlinkbackend.oauth2.dto.response; -import com.mtvs.devlinkbackend.oauth2.entity.UserClientIndividual; import lombok.*; @Getter 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 index 774f4a6..7fc1d9c 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerListResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerListResponseDTO.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.oauth2.dto.response; -import com.mtvs.devlinkbackend.oauth2.entity.UserPartner; +import com.mtvs.devlinkbackend.oauth2.entity.Dev; import lombok.*; import java.util.List; @@ -11,5 +11,5 @@ @AllArgsConstructor @ToString public class UserPartnerListResponseDTO { - private List data; + 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 index 4053b66..89ab893 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerSingleResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerSingleResponseDTO.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.oauth2.dto.response; -import com.mtvs.devlinkbackend.oauth2.entity.UserPartner; +import com.mtvs.devlinkbackend.oauth2.entity.Dev; import lombok.*; @Getter @Setter @@ -8,5 +8,5 @@ @AllArgsConstructor @ToString public class UserPartnerSingleResponseDTO { - private UserPartner data; + private Dev data; } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Business.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Business.java new file mode 100644 index 0000000..07c549d --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Business.java @@ -0,0 +1,56 @@ +package com.mtvs.devlinkbackend.oauth2.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; + + @OneToOne(mappedBy = "business", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JsonIgnore + private User user; + + public Business(String businessName, String businessLogoUrl, String managerName, String managerPhone, User user) { + this.businessName = businessName; + this.businessLogoUrl = businessLogoUrl; + this.managerName = managerName; + this.managerPhone = managerPhone; + this.user = user; + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/CategoryInfo.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/CategoryInfo.java new file mode 100644 index 0000000..6006eab --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/CategoryInfo.java @@ -0,0 +1,46 @@ +package com.mtvs.devlinkbackend.oauth2.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.util.List; + +@Table(name = "CATEGORY_INFO") +@Entity(name = "CategoryInfo") +@Getter +@Setter +@ToString(exclude = "dev") +@NoArgsConstructor +public class CategoryInfo { + @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; + + @OneToMany(mappedBy = "categoryInfo", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonManagedReference + private List categoryPointList; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "DEV_ID", nullable = false) + @JsonIgnore + private Dev dev; + + public CategoryInfo(String categoryName, List categoryPointList) { + this.categoryName = categoryName; + this.isEvaluated = false; + this.categoryPointList = categoryPointList; + } +} + diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Dev.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Dev.java new file mode 100644 index 0000000..1f514a8 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Dev.java @@ -0,0 +1,81 @@ +package com.mtvs.devlinkbackend.oauth2.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +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 portfolioList; + + @Column(name = "CAREER", columnDefinition = "TEXT") // 경력 기술 + private String career; + + @OneToMany(mappedBy = "dev", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonManagedReference + private List categoryInfoList; + + @Column(name = "TAG") + private String 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; + + @OneToOne(mappedBy = "dev", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JsonIgnore + private User user; + + public Dev(String devName, String devEmail, String devPhone, String githubLink, List portfolioList, String career, String tag, String hope, User user) { + this.devName = devName; + this.devEmail = devEmail; + this.devPhone = devPhone; + this.githubLink = githubLink; + this.portfolioList = portfolioList; + this.career = career; + this.tag = tag; + this.hope = hope; + this.user = user; + } +} + diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Evaluation.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Evaluation.java new file mode 100644 index 0000000..5434c03 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Evaluation.java @@ -0,0 +1,49 @@ +package com.mtvs.devlinkbackend.oauth2.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 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 = "CATEGORY_INFO_ID", nullable = false) + @JsonIgnore + private CategoryInfo categoryInfo; + + 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/oauth2/entity/Skill.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Skill.java deleted file mode 100644 index ee2c2d3..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Skill.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.entity; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Table(name = "SKILL") -@Entity(name = "Skill") -@Getter -@Setter -@NoArgsConstructor -public class Skill { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "SKILL_ID") - private Long skillId; - - @Column(name = "SKILL_CATEGORY") - private String skillCategory; - - @Column(name = "SKILL_NAME") - private String skillName; - - @Column(name = "SKILL_LEVEL") - private Integer skillLevel; - - @ManyToOne - @JoinColumn(name = "USER_PARTNER_ID", nullable = false) - @JsonIgnore - private UserPartner userPartner; - - public Skill(String skillCategory, String skillName, Integer skillLevel) { - this.skillCategory = skillCategory; - this.skillName = skillName; - this.skillLevel = skillLevel; - } -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Stat.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Stat.java deleted file mode 100644 index a87ca49..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Stat.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.entity; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Table(name = "STAT") -@Entity(name = "Stat") -@Getter -@Setter -@NoArgsConstructor -public class Stat { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "STAT_ID") - private Long statId; - - @Column(name = "STAT_NAME") - private String statName; - - @Column(name = "TOTAL_SCORE") - private Long totalScore; - - @Column(name = "IS_EVALUATING") - private Boolean isEvaluating; - - @ManyToOne - @JoinColumn(name = "USER_PARTNER_ID", nullable = false) - @JsonIgnore - private UserPartner userPartner; - - public Stat(String statName, Long totalScore, Boolean isEvaluating) { - this.statName = statName; - this.totalScore = totalScore; - this.isEvaluating = isEvaluating; - } -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java index b435df8..c7f86ea 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java @@ -1,32 +1,55 @@ package com.mtvs.devlinkbackend.oauth2.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 -@Inheritance(strategy = InheritanceType.JOINED) -@DiscriminatorColumn(name = "purpose") +@Getter @Setter +@NoArgsConstructor 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 = "EPIC_ACCOUNT_ID", unique = true) + private String epicAccountId; - @Column(name = "PURPOSE", insertable = false, updatable = false) // "UserClient", "UserPartner" 둘 중 한개 - private String purpose; + @Column(name = "STEAM_ACCOUNT_ID", unique = true) + private String steamAccountId; @Column(name = "CHARACTER_ID", unique = true) private Long characterId; + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "DEV_ID") + private Dev dev; + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "BUSINESS_ID") + private Business business; + + @Column(name = "NICKNAME") + private String nickname; + + @Convert(converter = StringListConverter.class) + @Column(name = "CHANNEL_LIST", columnDefinition = "TEXT") + private List channelList; + + @Convert(converter = LongListConverter.class) + @Column(name = "EXPERIENCE_LIST", columnDefinition = "TEXT") + private List experienceList; + @CreationTimestamp @Column(name = "CREATED_AT", updatable = false) private LocalDateTime createdAt; @@ -35,15 +58,14 @@ public class User { @Column(name = "MODIFIED_AT") private LocalDateTime modifiedAt; - public User() {} - - public User(String accountId) { - this.accountId = accountId; + public User(String epicAccountId) { + this.epicAccountId = epicAccountId; } - public User(String accountId, String purpose) { - this.userId = userId; - this.accountId = accountId; - this.purpose = purpose; + 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/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 d7ea6ca..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/UserPartner.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.mtvs.devlinkbackend.oauth2.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 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; - - @Column(name = "EXP_POINTS") - private Long expPoints; - - @OneToMany(mappedBy = "userPartner", cascade = CascadeType.ALL, orphanRemoval = true) - @JsonManagedReference - private List skillSet; - - @OneToMany(mappedBy = "userPartner", cascade = CascadeType.ALL, orphanRemoval = true) - @JsonManagedReference - private List statSet; - - @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, 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.message = message; - } -} - diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/BusinessRepository.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/BusinessRepository.java new file mode 100644 index 0000000..8008ee9 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/BusinessRepository.java @@ -0,0 +1,20 @@ +package com.mtvs.devlinkbackend.oauth2.repository; + +import com.mtvs.devlinkbackend.oauth2.entity.Business; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface BusinessRepository extends JpaRepository { + Business findBusinessByUser_EpicAccountId(String epicAccountId); + + List findBusinessByManagerNameContainingIgnoreCase(String managerName); + + List findByBusinessNameContainingIgnoreCase(String businessName); + + List findByManagerPhone(String managerPhone); + + void deleteByUser_EpicAccountId(String epicAccountId); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/DevRepository.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/DevRepository.java new file mode 100644 index 0000000..6408c84 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/DevRepository.java @@ -0,0 +1,24 @@ +package com.mtvs.devlinkbackend.oauth2.repository; + +import com.mtvs.devlinkbackend.oauth2.entity.Dev; +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 DevRepository extends JpaRepository { + Dev findDevByUser_EpicAccountId(String epicAccountId); + + Dev findDevByDevPhone(String devPhone); + + List findDevsByDevNameContainingIgnoreCase(String devName); + + List findDevsByUser_Nickname(String nickname); + + List findDevsByDevEmail(String devEmail); + + void deleteDevByUser_EpicAccountId(String epicAccountId); +} 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 index b038141..aa38f81 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserRepository.java @@ -4,6 +4,6 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository { - User findUserByAccountId(String accountId); - void deleteByAccountId(String accountId); + User findUserByEpicAccountId(String epicAccountId); + void deleteByEpicAccountId(String epicAccountId); } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicBusinessService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicBusinessService.java new file mode 100644 index 0000000..88ab008 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicBusinessService.java @@ -0,0 +1,74 @@ +package com.mtvs.devlinkbackend.oauth2.service; + +import com.mtvs.devlinkbackend.oauth2.dto.request.BusinessRequestDTO; +import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupListResponseDTO; +import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupSingleResponseDTO; +import com.mtvs.devlinkbackend.oauth2.entity.Business; +import com.mtvs.devlinkbackend.oauth2.entity.User; +import com.mtvs.devlinkbackend.oauth2.repository.BusinessRepository; +import com.mtvs.devlinkbackend.oauth2.repository.UserRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class EpicBusinessService { + private final BusinessRepository businessRepository; + private final UserRepository userRepository; + + public EpicBusinessService(BusinessRepository businessRepository, UserRepository userRepository) { + this.businessRepository = businessRepository; + this.userRepository = userRepository; + } + + @Transactional + public UserClientGroupSingleResponseDTO registUserClientGroup(BusinessRequestDTO businessRequestDTO, + String accountId) { + + User user = userRepository.findUserByEpicAccountId(accountId); + if (user == null) { + user = new User( + accountId, + null, + null, + businessRequestDTO.getNickname() + ); + } + + Business business = new Business( + businessRequestDTO.getBusinessName(), + businessRequestDTO.getBusinessLogoImg().getOriginalFilename(), + businessRequestDTO.getManagerName(), + businessRequestDTO.getManagerPhone(), + user + ); + + user.setBusiness(business); + + userRepository.save(user); + + // Response 나오면 바로 refactoring + return new UserClientGroupSingleResponseDTO(businessRepository.save(business)); + } + + @Transactional + public UserClientGroupSingleResponseDTO updateUserClientGroup(BusinessRequestDTO businessRequestDTO, + String accountId) { + + User user = userRepository.findUserByEpicAccountId(accountId); + Business business = businessRepository.findBusinessByUser_EpicAccountId(accountId); + if (business == null || user == null) + throw new IllegalArgumentException("잘못된 계정으로 그룹 정보 수정 시도"); + + user.setNickname(businessRequestDTO.getNickname()); + business.setBusinessName(businessRequestDTO.getBusinessName()); + business.setBusinessLogoUrl(businessRequestDTO.getBusinessLogoImg().getOriginalFilename()); + business.setManagerName(businessRequestDTO.getManagerName()); + business.setManagerPhone(businessRequestDTO.getManagerPhone()); + + return new UserClientGroupSingleResponseDTO(business); + } + + public void deleteByAccountId(String accountId) { + businessRepository.deleteByUser_EpicAccountId(accountId); + } +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicDevService.java b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicDevService.java new file mode 100644 index 0000000..7ca3b76 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicDevService.java @@ -0,0 +1,92 @@ +package com.mtvs.devlinkbackend.oauth2.service; + +import com.mtvs.devlinkbackend.oauth2.dto.request.DevRequestDTO; +import com.mtvs.devlinkbackend.oauth2.dto.response.UserPartnerListResponseDTO; +import com.mtvs.devlinkbackend.oauth2.dto.response.UserPartnerSingleResponseDTO; +import com.mtvs.devlinkbackend.oauth2.entity.CategoryInfo; +import com.mtvs.devlinkbackend.oauth2.entity.Dev; +import com.mtvs.devlinkbackend.oauth2.entity.User; +import com.mtvs.devlinkbackend.oauth2.repository.DevRepository; +import com.mtvs.devlinkbackend.oauth2.repository.UserRepository; +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; + + public EpicDevService(DevRepository devRepository, UserRepository userRepository) { + this.devRepository = devRepository; + this.userRepository = userRepository; + } + + @Transactional + public UserPartnerSingleResponseDTO registUserPartner(DevRequestDTO devRequestDTO, + String accountId) { + User user = userRepository.findUserByEpicAccountId(accountId); + if (user == null) { + user = new User( + accountId, + null, + devRequestDTO.getCharacterId(), + devRequestDTO.getNickname() + ); + } + + Dev dev = new Dev( + devRequestDTO.getDevName(), + devRequestDTO.getDevEmail(), + devRequestDTO.getDevPhone(), + devRequestDTO.getGithubLink(), + devRequestDTO.getPortfolioList(), + devRequestDTO.getCareer(), + devRequestDTO.getTag(), + devRequestDTO.getHope(), + user + ); + + List categoryInfoList = devRequestDTO.getCategoryNameList() + .stream().map(categoryName -> new CategoryInfo(categoryName, new ArrayList<>())) + .peek(categoryInfo -> categoryInfo.setDev(dev)).toList(); + + dev.setCategoryInfoList(categoryInfoList); + user.setDev(dev); + + userRepository.save(user); + + // Response 정리되면 Refactoring + return new UserPartnerSingleResponseDTO(devRepository.save(dev)); + } + + @Transactional + public UserPartnerSingleResponseDTO updateUserPartner(DevRequestDTO devRequestDTO, + String accountId) { + + Dev dev = devRepository.findDevByUser_EpicAccountId(accountId); + User user = userRepository.findUserByEpicAccountId(accountId); + if(dev == null || user == null) + throw new IllegalArgumentException("잘못된 계정으로 파트너스 정보 수정 시도"); + + user.setNickname(devRequestDTO.getNickname()); + dev.setDevName(devRequestDTO.getDevName()); + dev.setDevEmail(devRequestDTO.getDevEmail()); + dev.setDevPhone(devRequestDTO.getDevPhone()); + dev.setGithubLink(devRequestDTO.getGithubLink()); + dev.setPortfolioList(devRequestDTO.getPortfolioList()); + dev.setCareer(devRequestDTO.getCareer()); + dev.setHope(devRequestDTO.getHope()); + + userRepository.save(user); + + // Response 정리되면 Refactoring + return new UserPartnerSingleResponseDTO(devRepository.save(dev)); + } + + public void deleteByAccountId(String accountId) { + devRepository.deleteDevByUser_EpicAccountId(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 57e7c63..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserPartnerService.java +++ /dev/null @@ -1,107 +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.Skill; -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; -import java.util.stream.Collectors; - -@Service -public class UserPartnerService { - private final UserPartnersRepository userPartnersRepository; - - public UserPartnerService(UserPartnersRepository userPartnersRepository) { - this.userPartnersRepository = userPartnersRepository; - } - - @Transactional - public UserPartnerSingleResponseDTO registUserPartner(UserPartnerRequestDTO userPartnerRequestDTO, - String accountId) { - - UserPartner userPartner = new UserPartner( - accountId, - userPartnerRequestDTO.getPurpose(), - userPartnerRequestDTO.getNickname(), - userPartnerRequestDTO.getName(), - userPartnerRequestDTO.getEmail(), - userPartnerRequestDTO.getPhone(), - userPartnerRequestDTO.getGithubLink(), - userPartnerRequestDTO.getPortfolioList(), - userPartnerRequestDTO.getExperience(), - userPartnerRequestDTO.getMessage() - ); - - List skills = userPartnerRequestDTO.getSkill().stream() - .map(skillDTO -> new Skill(skillDTO.getSkillCategory(), skillDTO.getSkillName(), Integer.parseInt(skillDTO.getSkillLevel()))) - .peek(skill -> skill.setUserPartner(userPartner)) // 각 Skill 엔티티에 UserPartner 설정 - .toList(); - - userPartner.setSkillSet(skills); - - - return new UserPartnerSingleResponseDTO(userPartnersRepository.save(userPartner)); - } - - 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.setMessage(userPartnerRequestDTO.getMessage()); - - // 기존 Skill 삭제 (orphanRemoval=true 옵션이 설정되어 있다면 자동 삭제됨) - userPartner.getSkillSet().clear(); - - // 새로운 Skill 리스트 설정 - List newSkills = userPartnerRequestDTO.getSkill().stream() - .map(skillDTO -> new Skill(skillDTO.getSkillCategory(), skillDTO.getSkillName(), Integer.parseInt(skillDTO.getSkillLevel()))) - .peek(skill -> skill.setUserPartner(userPartner)) // 각 Skill 엔티티에 UserPartner 설정 - .toList(); - - userPartner.setSkillSet(newSkills); - - - return new UserPartnerSingleResponseDTO(userPartnersRepository.save(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 index 1f99717..f78fcec 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserService.java +++ b/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserService.java @@ -4,7 +4,6 @@ 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 { @@ -16,14 +15,8 @@ public UserService(JwtUtil jwtUtil, UserRepository userRepository) { 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); + public User findUserByEpicAccountId(String authorizationHeader) throws Exception { + String epicAccountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + return userRepository.findUserByEpicAccountId(epicAccountId); } } 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..9fc5e49 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.oauth2.dto.request.BusinessRequestDTO; +import com.mtvs.devlinkbackend.oauth2.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..b525209 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.oauth2.dto.request.DevRequestDTO; +import com.mtvs.devlinkbackend.oauth2.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; From 29eb746f60fca842d87369cac42f832a7be97486 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Fri, 1 Nov 2024 21:31:16 +0900 Subject: [PATCH 3/5] =?UTF-8?q?refactor:=20CQRS=20=ED=8C=A8=ED=84=B4?= =?UTF-8?q?=EC=97=90=20=EB=A7=9E=EA=B2=8C=20user=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=ED=8F=B4=EB=8D=94=20=EA=B5=AC=EC=A1=B0=20=EB=B0=8F?= =?UTF-8?q?=20Command=EC=99=80=20Query=20=EC=98=81=EC=97=AD=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 변경된 점: - CQRS 패턴에 맞게 Command영역과 Query 영역으로 폴더 구조 변경 및 파일 분리 --- .../oauth2/service/UserService.java | 22 ------------------- .../EpicBusinessCommandController.java} | 13 +++++------ .../controller/EpicDevCommandController.java} | 12 +++++----- .../dto/request/BusinessRequestDTO.java | 2 +- .../model}/dto/request/DevRequestDTO.java | 10 +-------- .../request/EpicGamesCallbackRequestDTO.java | 2 +- .../command/model}/entity/Business.java | 2 +- .../command/model}/entity/CategoryInfo.java | 2 +- .../command/model}/entity/Dev.java | 2 +- .../command/model}/entity/Evaluation.java | 2 +- .../command/model}/entity/User.java | 2 +- .../repository/BusinessRepository.java | 10 +++++++++ .../command/repository/DevRepository.java | 10 +++++++++ .../command}/repository/UserRepository.java | 5 ++--- .../command}/service/EpicBusinessService.java | 15 ++++++------- .../command}/service/EpicDevService.java | 19 ++++++++-------- .../controller/Oauth2UserController.java | 10 ++++----- .../UserClientGroupListResponseDTO.java | 4 ++-- .../UserClientGroupSingleResponseDTO.java | 4 ++-- .../UserClientIndividualListResponseDTO.java | 2 +- ...UserClientIndividualSingleResponseDTO.java | 2 +- .../response/UserPartnerListResponseDTO.java | 4 ++-- .../UserPartnerSingleResponseDTO.java | 4 ++-- .../repository/BusinessViewRepository.java} | 8 +++---- .../query/repository/DevViewRepository.java} | 10 +++------ .../query/repository/UserViewRepository.java | 10 +++++++++ .../service/EpicBusinessViewService.java | 4 ++++ .../query/service/EpicDevViewService.java | 4 ++++ .../query}/service/EpicGamesTokenService.java | 4 ++-- .../user/query/service/UserService.java | 22 +++++++++++++++++++ .../component => util}/EpicGamesJWKCache.java | 2 +- .../com/mtvs/devlinkbackend/util/JwtUtil.java | 1 - .../devlinkbackend/crud/BusinessCRUDTest.java | 4 ++-- .../mtvs/devlinkbackend/crud/DevCRUDTest.java | 4 ++-- 34 files changed, 126 insertions(+), 107 deletions(-) delete mode 100644 src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserService.java rename src/main/java/com/mtvs/devlinkbackend/{oauth2/controller/EpicBusinessController.java => user/command/controller/EpicBusinessCommandController.java} (85%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2/controller/EpicDevController.java => user/command/controller/EpicDevCommandController.java} (86%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/command/model}/dto/request/BusinessRequestDTO.java (85%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/command/model}/dto/request/DevRequestDTO.java (52%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/command/model}/dto/request/EpicGamesCallbackRequestDTO.java (83%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/command/model}/entity/Business.java (96%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/command/model}/entity/CategoryInfo.java (95%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/command/model}/entity/Dev.java (97%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/command/model}/entity/Evaluation.java (95%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/command/model}/entity/User.java (97%) create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/command/repository/BusinessRepository.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/command/repository/DevRepository.java rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/command}/repository/UserRepository.java (54%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/command}/service/EpicBusinessService.java (83%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/command}/service/EpicDevService.java (84%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/query}/controller/Oauth2UserController.java (91%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/query/model}/dto/response/UserClientGroupListResponseDTO.java (59%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/query/model}/dto/response/UserClientGroupSingleResponseDTO.java (55%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/query/model}/dto/response/UserClientIndividualListResponseDTO.java (76%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/query/model}/dto/response/UserClientIndividualSingleResponseDTO.java (73%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/query/model}/dto/response/UserPartnerListResponseDTO.java (59%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/query/model}/dto/response/UserPartnerSingleResponseDTO.java (54%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2/repository/BusinessRepository.java => user/query/repository/BusinessViewRepository.java} (65%) rename src/main/java/com/mtvs/devlinkbackend/{oauth2/repository/DevRepository.java => user/query/repository/DevViewRepository.java} (56%) create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/repository/UserViewRepository.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicBusinessViewService.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicDevViewService.java rename src/main/java/com/mtvs/devlinkbackend/{oauth2 => user/query}/service/EpicGamesTokenService.java (97%) create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/service/UserService.java rename src/main/java/com/mtvs/devlinkbackend/{oauth2/component => util}/EpicGamesJWKCache.java (96%) 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 f78fcec..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/UserService.java +++ /dev/null @@ -1,22 +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; - -@Service -public class UserService { - private final JwtUtil jwtUtil; - private final UserRepository userRepository; - - public UserService(JwtUtil jwtUtil, UserRepository userRepository) { - this.jwtUtil = jwtUtil; - this.userRepository = userRepository; - } - - public User findUserByEpicAccountId(String authorizationHeader) throws Exception { - String epicAccountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - return userRepository.findUserByEpicAccountId(epicAccountId); - } -} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicBusinessController.java b/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicBusinessCommandController.java similarity index 85% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicBusinessController.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicBusinessCommandController.java index 211fcc7..dc93f9e 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicBusinessController.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicBusinessCommandController.java @@ -1,9 +1,8 @@ -package com.mtvs.devlinkbackend.oauth2.controller; +package com.mtvs.devlinkbackend.user.command.controller; -import com.mtvs.devlinkbackend.oauth2.dto.request.BusinessRequestDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupListResponseDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupSingleResponseDTO; -import com.mtvs.devlinkbackend.oauth2.service.EpicBusinessService; +import com.mtvs.devlinkbackend.user.command.model.dto.request.BusinessRequestDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.UserClientGroupSingleResponseDTO; +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; @@ -13,11 +12,11 @@ @RestController @RequestMapping("/api/user/epic/business") -public class EpicBusinessController { +public class EpicBusinessCommandController { private final EpicBusinessService epicBusinessService; private final JwtUtil jwtUtil; - public EpicBusinessController(EpicBusinessService epicBusinessService, JwtUtil jwtUtil) { + public EpicBusinessCommandController(EpicBusinessService epicBusinessService, JwtUtil jwtUtil) { this.epicBusinessService = epicBusinessService; this.jwtUtil = jwtUtil; } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicDevController.java b/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicDevCommandController.java similarity index 86% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicDevController.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicDevCommandController.java index 760d640..7ed23d2 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/controller/EpicDevController.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicDevCommandController.java @@ -1,8 +1,8 @@ -package com.mtvs.devlinkbackend.oauth2.controller; +package com.mtvs.devlinkbackend.user.command.controller; -import com.mtvs.devlinkbackend.oauth2.dto.request.DevRequestDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserPartnerSingleResponseDTO; -import com.mtvs.devlinkbackend.oauth2.service.EpicDevService; +import com.mtvs.devlinkbackend.user.command.model.dto.request.DevRequestDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.UserPartnerSingleResponseDTO; +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; @@ -12,11 +12,11 @@ @RestController @RequestMapping("/api/user/epic/dev") -public class EpicDevController { +public class EpicDevCommandController { private final EpicDevService epicDevService; private final JwtUtil jwtUtil; - public EpicDevController(EpicDevService epicDevService, JwtUtil jwtUtil) { + public EpicDevCommandController(EpicDevService epicDevService, JwtUtil jwtUtil) { this.epicDevService = epicDevService; this.jwtUtil = jwtUtil; } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/BusinessRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/BusinessRequestDTO.java similarity index 85% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/BusinessRequestDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/BusinessRequestDTO.java index 9e0b90b..184e880 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/BusinessRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/BusinessRequestDTO.java @@ -1,4 +1,4 @@ -package com.mtvs.devlinkbackend.oauth2.dto.request; +package com.mtvs.devlinkbackend.user.command.model.dto.request; import lombok.*; import org.springframework.web.multipart.MultipartFile; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/DevRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevRequestDTO.java similarity index 52% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/DevRequestDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevRequestDTO.java index 15bc383..78596be 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/request/DevRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevRequestDTO.java @@ -1,13 +1,5 @@ -package com.mtvs.devlinkbackend.oauth2.dto.request; +package com.mtvs.devlinkbackend.user.command.model.dto.request; -import com.fasterxml.jackson.annotation.JsonManagedReference; -import com.mtvs.devlinkbackend.oauth2.entity.CategoryInfo; -import com.mtvs.devlinkbackend.util.StringListConverter; -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Convert; -import jakarta.persistence.OneToMany; import lombok.*; import java.util.List; 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/oauth2/entity/Business.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Business.java similarity index 96% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Business.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Business.java index 07c549d..8fe5a70 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Business.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Business.java @@ -1,4 +1,4 @@ -package com.mtvs.devlinkbackend.oauth2.entity; +package com.mtvs.devlinkbackend.user.command.model.entity; import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/CategoryInfo.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/CategoryInfo.java similarity index 95% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/entity/CategoryInfo.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/CategoryInfo.java index 6006eab..aa67b34 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/CategoryInfo.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/CategoryInfo.java @@ -1,4 +1,4 @@ -package com.mtvs.devlinkbackend.oauth2.entity; +package com.mtvs.devlinkbackend.user.command.model.entity; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonManagedReference; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Dev.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Dev.java similarity index 97% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Dev.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Dev.java index 1f514a8..95e8c97 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Dev.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Dev.java @@ -1,4 +1,4 @@ -package com.mtvs.devlinkbackend.oauth2.entity; +package com.mtvs.devlinkbackend.user.command.model.entity; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonManagedReference; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Evaluation.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Evaluation.java similarity index 95% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Evaluation.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Evaluation.java index 5434c03..405b6be 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/Evaluation.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Evaluation.java @@ -1,4 +1,4 @@ -package com.mtvs.devlinkbackend.oauth2.entity; +package com.mtvs.devlinkbackend.user.command.model.entity; import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/User.java similarity index 97% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/User.java index c7f86ea..a15084a 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/entity/User.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/User.java @@ -1,4 +1,4 @@ -package com.mtvs.devlinkbackend.oauth2.entity; +package com.mtvs.devlinkbackend.user.command.model.entity; import com.mtvs.devlinkbackend.util.LongListConverter; import com.mtvs.devlinkbackend.util.StringListConverter; 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..c2b8f43 --- /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 deleteByUser_EpicAccountId(String epicAccountId); +} 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..cc88c82 --- /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 deleteDevByUser_EpicAccountId(String epicAccountId); +} diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserRepository.java b/src/main/java/com/mtvs/devlinkbackend/user/command/repository/UserRepository.java similarity index 54% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserRepository.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/repository/UserRepository.java index aa38f81..f9085ee 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/UserRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/repository/UserRepository.java @@ -1,9 +1,8 @@ -package com.mtvs.devlinkbackend.oauth2.repository; +package com.mtvs.devlinkbackend.user.command.repository; -import com.mtvs.devlinkbackend.oauth2.entity.User; +import com.mtvs.devlinkbackend.user.command.model.entity.User; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository { - User findUserByEpicAccountId(String epicAccountId); void deleteByEpicAccountId(String epicAccountId); } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicBusinessService.java b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicBusinessService.java similarity index 83% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicBusinessService.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicBusinessService.java index 88ab008..abf1533 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicBusinessService.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicBusinessService.java @@ -1,12 +1,11 @@ -package com.mtvs.devlinkbackend.oauth2.service; +package com.mtvs.devlinkbackend.user.command.service; -import com.mtvs.devlinkbackend.oauth2.dto.request.BusinessRequestDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupListResponseDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserClientGroupSingleResponseDTO; -import com.mtvs.devlinkbackend.oauth2.entity.Business; -import com.mtvs.devlinkbackend.oauth2.entity.User; -import com.mtvs.devlinkbackend.oauth2.repository.BusinessRepository; -import com.mtvs.devlinkbackend.oauth2.repository.UserRepository; +import com.mtvs.devlinkbackend.user.command.model.dto.request.BusinessRequestDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.UserClientGroupSingleResponseDTO; +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 org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicDevService.java b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicDevService.java similarity index 84% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicDevService.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicDevService.java index 7ca3b76..ca63924 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/service/EpicDevService.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicDevService.java @@ -1,13 +1,12 @@ -package com.mtvs.devlinkbackend.oauth2.service; - -import com.mtvs.devlinkbackend.oauth2.dto.request.DevRequestDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserPartnerListResponseDTO; -import com.mtvs.devlinkbackend.oauth2.dto.response.UserPartnerSingleResponseDTO; -import com.mtvs.devlinkbackend.oauth2.entity.CategoryInfo; -import com.mtvs.devlinkbackend.oauth2.entity.Dev; -import com.mtvs.devlinkbackend.oauth2.entity.User; -import com.mtvs.devlinkbackend.oauth2.repository.DevRepository; -import com.mtvs.devlinkbackend.oauth2.repository.UserRepository; +package com.mtvs.devlinkbackend.user.command.service; + +import com.mtvs.devlinkbackend.user.command.model.dto.request.DevRequestDTO; +import com.mtvs.devlinkbackend.user.query.model.dto.response.UserPartnerSingleResponseDTO; +import com.mtvs.devlinkbackend.user.command.model.entity.CategoryInfo; +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 org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; 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 91% 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 b57f2a3..bc3b1ba 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.UserService; 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; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupListResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientGroupListResponseDTO.java similarity index 59% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupListResponseDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientGroupListResponseDTO.java index 47a5ef6..064db0b 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupListResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientGroupListResponseDTO.java @@ -1,6 +1,6 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; +package com.mtvs.devlinkbackend.user.query.model.dto.response; -import com.mtvs.devlinkbackend.oauth2.entity.Business; +import com.mtvs.devlinkbackend.user.command.model.entity.Business; import lombok.*; import java.util.List; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientGroupSingleResponseDTO.java similarity index 55% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupSingleResponseDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientGroupSingleResponseDTO.java index b7cf012..c1e53a0 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientGroupSingleResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientGroupSingleResponseDTO.java @@ -1,6 +1,6 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; +package com.mtvs.devlinkbackend.user.query.model.dto.response; -import com.mtvs.devlinkbackend.oauth2.entity.Business; +import com.mtvs.devlinkbackend.user.command.model.entity.Business; import lombok.*; @Getter diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualListResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualListResponseDTO.java similarity index 76% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualListResponseDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualListResponseDTO.java index c5d6a62..6c84c21 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualListResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualListResponseDTO.java @@ -1,4 +1,4 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; +package com.mtvs.devlinkbackend.user.query.model.dto.response; import lombok.*; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualSingleResponseDTO.java similarity index 73% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualSingleResponseDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualSingleResponseDTO.java index 4c4a17a..b603bae 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserClientIndividualSingleResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualSingleResponseDTO.java @@ -1,4 +1,4 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; +package com.mtvs.devlinkbackend.user.query.model.dto.response; import lombok.*; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerListResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerListResponseDTO.java similarity index 59% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerListResponseDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerListResponseDTO.java index 7fc1d9c..b868319 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerListResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerListResponseDTO.java @@ -1,6 +1,6 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; +package com.mtvs.devlinkbackend.user.query.model.dto.response; -import com.mtvs.devlinkbackend.oauth2.entity.Dev; +import com.mtvs.devlinkbackend.user.command.model.entity.Dev; import lombok.*; import java.util.List; diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerSingleResponseDTO.java similarity index 54% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerSingleResponseDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerSingleResponseDTO.java index 89ab893..0c68433 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/dto/response/UserPartnerSingleResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerSingleResponseDTO.java @@ -1,6 +1,6 @@ -package com.mtvs.devlinkbackend.oauth2.dto.response; +package com.mtvs.devlinkbackend.user.query.model.dto.response; -import com.mtvs.devlinkbackend.oauth2.entity.Dev; +import com.mtvs.devlinkbackend.user.command.model.entity.Dev; import lombok.*; @Getter @Setter diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/BusinessRepository.java b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/BusinessViewRepository.java similarity index 65% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/repository/BusinessRepository.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/repository/BusinessViewRepository.java index 8008ee9..4ac4727 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/BusinessRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/BusinessViewRepository.java @@ -1,13 +1,13 @@ -package com.mtvs.devlinkbackend.oauth2.repository; +package com.mtvs.devlinkbackend.user.query.repository; -import com.mtvs.devlinkbackend.oauth2.entity.Business; +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 BusinessRepository extends JpaRepository { +public interface BusinessViewRepository extends JpaRepository { Business findBusinessByUser_EpicAccountId(String epicAccountId); List findBusinessByManagerNameContainingIgnoreCase(String managerName); @@ -15,6 +15,4 @@ public interface BusinessRepository extends JpaRepository { List findByBusinessNameContainingIgnoreCase(String businessName); List findByManagerPhone(String managerPhone); - - void deleteByUser_EpicAccountId(String epicAccountId); } diff --git a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/DevRepository.java b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/DevViewRepository.java similarity index 56% rename from src/main/java/com/mtvs/devlinkbackend/oauth2/repository/DevRepository.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/repository/DevViewRepository.java index 6408c84..33998c1 100644 --- a/src/main/java/com/mtvs/devlinkbackend/oauth2/repository/DevRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/DevViewRepository.java @@ -1,15 +1,13 @@ -package com.mtvs.devlinkbackend.oauth2.repository; +package com.mtvs.devlinkbackend.user.query.repository; -import com.mtvs.devlinkbackend.oauth2.entity.Dev; +import com.mtvs.devlinkbackend.user.command.model.entity.Dev; 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 DevRepository extends JpaRepository { +public interface DevViewRepository extends JpaRepository { Dev findDevByUser_EpicAccountId(String epicAccountId); Dev findDevByDevPhone(String devPhone); @@ -19,6 +17,4 @@ public interface DevRepository extends JpaRepository { List findDevsByUser_Nickname(String nickname); List findDevsByDevEmail(String devEmail); - - void deleteDevByUser_EpicAccountId(String epicAccountId); } 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/service/EpicBusinessViewService.java b/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicBusinessViewService.java new file mode 100644 index 0000000..2f49d95 --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicBusinessViewService.java @@ -0,0 +1,4 @@ +package com.mtvs.devlinkbackend.user.query.service; + +public class EpicBusinessViewService { +} 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..5778bad --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicDevViewService.java @@ -0,0 +1,4 @@ +package com.mtvs.devlinkbackend.user.query.service; + +public class EpicDevViewService { +} 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/UserService.java b/src/main/java/com/mtvs/devlinkbackend/user/query/service/UserService.java new file mode 100644 index 0000000..1e197ec --- /dev/null +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/service/UserService.java @@ -0,0 +1,22 @@ +package com.mtvs.devlinkbackend.user.query.service; + +import com.mtvs.devlinkbackend.user.command.model.entity.User; +import com.mtvs.devlinkbackend.user.query.repository.UserViewRepository; +import com.mtvs.devlinkbackend.util.JwtUtil; +import org.springframework.stereotype.Service; + +@Service +public class UserService { + private final JwtUtil jwtUtil; + private final UserViewRepository userViewRepository; + + public UserService(JwtUtil jwtUtil, UserViewRepository userViewRepository) { + this.jwtUtil = jwtUtil; + this.userViewRepository = userViewRepository; + } + + public User findUserByEpicAccountId(String authorizationHeader) throws Exception { + String epicAccountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); + return userViewRepository.findUserByEpicAccountId(epicAccountId); + } +} 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/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/test/java/com/mtvs/devlinkbackend/crud/BusinessCRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/BusinessCRUDTest.java index 9fc5e49..acc3f26 100644 --- a/src/test/java/com/mtvs/devlinkbackend/crud/BusinessCRUDTest.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.BusinessRequestDTO; -import com.mtvs.devlinkbackend.oauth2.service.EpicBusinessService; +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; diff --git a/src/test/java/com/mtvs/devlinkbackend/crud/DevCRUDTest.java b/src/test/java/com/mtvs/devlinkbackend/crud/DevCRUDTest.java index b525209..658c29b 100644 --- a/src/test/java/com/mtvs/devlinkbackend/crud/DevCRUDTest.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.DevRequestDTO; -import com.mtvs.devlinkbackend.oauth2.service.EpicDevService; +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; From 00be3c769cf9e0af09bdc2fce202f7b5e3d42299 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Fri, 1 Nov 2024 23:31:57 +0900 Subject: [PATCH 4/5] =?UTF-8?q?refactor:=20User=EC=99=80=20Dev=EC=9D=98=20?= =?UTF-8?q?=EC=97=B0=EA=B4=80=EA=B4=80=EA=B3=84=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 연관관계를 삭제함으로써 생명주기가 다른 DB 엔티티를 분리함 변경된 점: - User와 Dev의 OneToMany관계 해제 - User와 Business의 OneToMany관계 해제 --- .../user/command/model/entity/Business.java | 9 +++-- .../user/command/model/entity/Dev.java | 9 +++-- .../user/command/model/entity/User.java | 10 +++--- .../repository/BusinessRepository.java | 2 +- .../command/repository/DevRepository.java | 2 +- .../command/repository/UserRepository.java | 2 +- .../command/service/EpicBusinessService.java | 34 +++++++++++++------ .../user/command/service/EpicDevService.java | 30 +++++++++++----- .../UserClientIndividualListResponseDTO.java | 14 -------- ...UserClientIndividualSingleResponseDTO.java | 12 ------- .../repository/BusinessViewRepository.java | 2 +- .../query/repository/DevViewRepository.java | 2 +- 12 files changed, 63 insertions(+), 65 deletions(-) delete mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualListResponseDTO.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualSingleResponseDTO.java 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 index 8fe5a70..bdbb07a 100644 --- 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 @@ -42,15 +42,14 @@ public class Business { @Column(name = "MODIFIED_AT") private LocalDateTime modifiedAt; - @OneToOne(mappedBy = "business", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - @JsonIgnore - private User user; + @Column(name = "USER_ID") + private Long userId; - public Business(String businessName, String businessLogoUrl, String managerName, String managerPhone, User user) { + 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.user = user; + 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 index 95e8c97..4e924a1 100644 --- 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 @@ -62,11 +62,10 @@ public class Dev { @Column(name = "MODIFIED_AT") private LocalDateTime modifiedAt; - @OneToOne(mappedBy = "dev", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - @JsonIgnore - private User user; + @Column(name = "USER_ID") + private Long userId; - public Dev(String devName, String devEmail, String devPhone, String githubLink, List portfolioList, String career, String tag, String hope, User user) { + public Dev(String devName, String devEmail, String devPhone, String githubLink, List portfolioList, String career, String tag, String hope, Long userId) { this.devName = devName; this.devEmail = devEmail; this.devPhone = devPhone; @@ -75,7 +74,7 @@ public Dev(String devName, String devEmail, String devPhone, String githubLink, this.career = career; this.tag = tag; this.hope = hope; - this.user = user; + this.userId = userId; } } 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 index a15084a..e2d57e9 100644 --- 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 @@ -31,13 +31,11 @@ public class User { @Column(name = "CHARACTER_ID", unique = true) private Long characterId; - @OneToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "DEV_ID") - private Dev dev; + @Column(name = "DEV_ID") + private Long devId; - @OneToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "BUSINESS_ID") - private Business business; + @Column(name = "BUSINESS_ID") + private Long businessId; @Column(name = "NICKNAME") private String 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 index c2b8f43..8b5e19b 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/repository/BusinessRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/repository/BusinessRepository.java @@ -6,5 +6,5 @@ @Repository public interface BusinessRepository extends JpaRepository { - void deleteByUser_EpicAccountId(String epicAccountId); + 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 index cc88c82..0428311 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/repository/DevRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/repository/DevRepository.java @@ -6,5 +6,5 @@ @Repository public interface DevRepository extends JpaRepository { - void deleteDevByUser_EpicAccountId(String epicAccountId); + 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 index f9085ee..cd8b6c2 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/repository/UserRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/repository/UserRepository.java @@ -4,5 +4,5 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository { - void deleteByEpicAccountId(String epicAccountId); + 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 index abf1533..4d6cc9a 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicBusinessService.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicBusinessService.java @@ -6,6 +6,8 @@ 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; @@ -13,17 +15,22 @@ 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) { + + public EpicBusinessService(BusinessRepository businessRepository, UserRepository userRepository, UserViewRepository userViewRepository, BusinessViewRepository businessViewRepository) { this.businessRepository = businessRepository; this.userRepository = userRepository; + this.userViewRepository = userViewRepository; + this.businessViewRepository = businessViewRepository; } @Transactional public UserClientGroupSingleResponseDTO registUserClientGroup(BusinessRequestDTO businessRequestDTO, String accountId) { - User user = userRepository.findUserByEpicAccountId(accountId); + User user = userViewRepository.findUserByEpicAccountId(accountId); if (user == null) { user = new User( accountId, @@ -32,18 +39,20 @@ public UserClientGroupSingleResponseDTO registUserClientGroup(BusinessRequestDTO businessRequestDTO.getNickname() ); } + User savedUser = userRepository.save(user); + Business business = new Business( businessRequestDTO.getBusinessName(), businessRequestDTO.getBusinessLogoImg().getOriginalFilename(), businessRequestDTO.getManagerName(), businessRequestDTO.getManagerPhone(), - user + savedUser.getUserId() ); + Business savedBusiness = businessRepository.save(business); - user.setBusiness(business); + savedUser.setBusinessId(savedBusiness.getBusinessId()); - userRepository.save(user); // Response 나오면 바로 refactoring return new UserClientGroupSingleResponseDTO(businessRepository.save(business)); @@ -53,10 +62,12 @@ public UserClientGroupSingleResponseDTO registUserClientGroup(BusinessRequestDTO public UserClientGroupSingleResponseDTO updateUserClientGroup(BusinessRequestDTO businessRequestDTO, String accountId) { - User user = userRepository.findUserByEpicAccountId(accountId); - Business business = businessRepository.findBusinessByUser_EpicAccountId(accountId); - if (business == null || user == null) - throw new IllegalArgumentException("잘못된 계정으로 그룹 정보 수정 시도"); + 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()); @@ -68,6 +79,9 @@ public UserClientGroupSingleResponseDTO updateUserClientGroup(BusinessRequestDTO } public void deleteByAccountId(String accountId) { - businessRepository.deleteByUser_EpicAccountId(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 index ca63924..d5b7f54 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicDevService.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicDevService.java @@ -7,6 +7,8 @@ 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; @@ -17,16 +19,20 @@ 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) { + public EpicDevService(DevRepository devRepository, UserRepository userRepository, UserViewRepository userViewRepository, DevViewRepository devViewRepository) { this.devRepository = devRepository; this.userRepository = userRepository; + this.userViewRepository = userViewRepository; + this.devViewRepository = devViewRepository; } @Transactional public UserPartnerSingleResponseDTO registUserPartner(DevRequestDTO devRequestDTO, String accountId) { - User user = userRepository.findUserByEpicAccountId(accountId); + User user = userViewRepository.findUserByEpicAccountId(accountId); if (user == null) { user = new User( accountId, @@ -35,6 +41,7 @@ public UserPartnerSingleResponseDTO registUserPartner(DevRequestDTO devRequestDT devRequestDTO.getNickname() ); } + User savedUser = userRepository.save(user); Dev dev = new Dev( devRequestDTO.getDevName(), @@ -45,7 +52,7 @@ public UserPartnerSingleResponseDTO registUserPartner(DevRequestDTO devRequestDT devRequestDTO.getCareer(), devRequestDTO.getTag(), devRequestDTO.getHope(), - user + savedUser.getUserId() ); List categoryInfoList = devRequestDTO.getCategoryNameList() @@ -53,7 +60,9 @@ public UserPartnerSingleResponseDTO registUserPartner(DevRequestDTO devRequestDT .peek(categoryInfo -> categoryInfo.setDev(dev)).toList(); dev.setCategoryInfoList(categoryInfoList); - user.setDev(dev); + Dev savedDev = devRepository.save(dev); + + user.setDevId(savedDev.getDevId()); userRepository.save(user); @@ -65,9 +74,11 @@ public UserPartnerSingleResponseDTO registUserPartner(DevRequestDTO devRequestDT public UserPartnerSingleResponseDTO updateUserPartner(DevRequestDTO devRequestDTO, String accountId) { - Dev dev = devRepository.findDevByUser_EpicAccountId(accountId); - User user = userRepository.findUserByEpicAccountId(accountId); - if(dev == null || user == null) + User user = userViewRepository.findUserByEpicAccountId(accountId); + if (user == null) + throw new IllegalArgumentException("잘못된 계정으로 파트너스 정보 수정 시도"); + Dev dev = devViewRepository.findDevByUserId(user.getUserId()); + if(dev == null) throw new IllegalArgumentException("잘못된 계정으로 파트너스 정보 수정 시도"); user.setNickname(devRequestDTO.getNickname()); @@ -86,6 +97,9 @@ public UserPartnerSingleResponseDTO updateUserPartner(DevRequestDTO devRequestDT } public void deleteByAccountId(String accountId) { - devRepository.deleteDevByUser_EpicAccountId(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/model/dto/response/UserClientIndividualListResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualListResponseDTO.java deleted file mode 100644 index 6c84c21..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualListResponseDTO.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.mtvs.devlinkbackend.user.query.model.dto.response; - -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/user/query/model/dto/response/UserClientIndividualSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualSingleResponseDTO.java deleted file mode 100644 index b603bae..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientIndividualSingleResponseDTO.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mtvs.devlinkbackend.user.query.model.dto.response; - -import lombok.*; - -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class UserClientIndividualSingleResponseDTO { - private UserClientIndividual data; -} 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 index 4ac4727..516397c 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/repository/BusinessViewRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/BusinessViewRepository.java @@ -8,7 +8,7 @@ @Repository public interface BusinessViewRepository extends JpaRepository { - Business findBusinessByUser_EpicAccountId(String epicAccountId); + Business findBusinessByUserId(Long usreId); List findBusinessByManagerNameContainingIgnoreCase(String managerName); 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 index 33998c1..53724ae 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/repository/DevViewRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/DevViewRepository.java @@ -8,7 +8,7 @@ @Repository public interface DevViewRepository extends JpaRepository { - Dev findDevByUser_EpicAccountId(String epicAccountId); + Dev findDevByUserId(Long userId); Dev findDevByDevPhone(String devPhone); From 6486cd2beb9a6fbcc58bdadeb73bc7d0693ef8c5 Mon Sep 17 00:00:00 2001 From: in seong Park <123macanic@naver.com> Date: Mon, 4 Nov 2024 15:48:14 +0900 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20Domain:User,=20Dev,=20Business,?= =?UTF-8?q?=20SkillCategoryInfo=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 언리얼에서 요청한 API 양식에 맞춰 구현 추가된 기능: - Domain:User, Dev, Business, SkillCategoryInfo API 구현 --- .../character/entity/UserCharacter.java | 15 ++++ .../command/model/entity/Evaluation.java | 7 +- .../guild/repository/GuildRepository.java | 2 + .../projection/Guild_GuildName.java | 5 ++ .../EpicBusinessCommandController.java | 12 ++-- .../controller/EpicDevCommandController.java | 19 ++--- .../model/dto/request/BusinessRequestDTO.java | 1 - ...RequestDTO.java => DevInfoRequestDTO.java} | 9 ++- .../dto/request/DevRegistRequestDTO.java | 13 ++++ .../dto/request/DevUpdateRequestDTO.java | 13 ++++ .../user/command/model/entity/Dev.java | 14 ++-- ...tegoryInfo.java => SkillCategoryInfo.java} | 18 +++-- .../user/command/model/entity/User.java | 5 +- .../command/service/EpicBusinessService.java | 14 ++-- .../user/command/service/EpicDevService.java | 68 ++++++++++-------- .../EpicBusinessQueryController.java | 33 +++++++++ .../controller/EpicDevQueryController.java | 63 +++++++++++++++++ .../controller/Oauth2UserController.java | 12 ++-- .../query/controller/UserQueryController.java | 46 ++++++++++++ ...eDTO.java => BusinessListResponseDTO.java} | 2 +- ...TO.java => BusinessSingleResponseDTO.java} | 2 +- ...onseDTO.java => DevPagingResponseDTO.java} | 3 +- ...onseDTO.java => DevSingleResponseDTO.java} | 2 +- .../response/UserDetailSingleResponseDTO.java | 13 ++++ .../dto/response/UserSingleResponseDTO.java | 13 ++++ .../dto/response/sub/CharacterInfoDTO.java | 14 ++++ .../model/dto/response/sub/DevInfoDTO.java | 15 ++++ .../response/sub/UserDetailResponseDTO.java | 17 +++++ .../query/repository/DevViewRepository.java | 6 +- .../SkillCategoryInfoViewRepository.java | 11 +++ ...SkillCategory_CategoryNameAndPointAvg.java | 6 ++ .../service/EpicBusinessViewService.java | 14 ++++ .../query/service/EpicDevViewService.java | 39 +++++++++++ .../user/query/service/UserService.java | 22 ------ .../user/query/service/UserViewService.java | 70 +++++++++++++++++++ .../util/IntegerListConverter.java | 34 +++++++++ 36 files changed, 539 insertions(+), 113 deletions(-) rename src/main/java/com/mtvs/devlinkbackend/{user => evaluation}/command/model/entity/Evaluation.java (81%) create mode 100644 src/main/java/com/mtvs/devlinkbackend/guild/repository/projection/Guild_GuildName.java rename src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/{DevRequestDTO.java => DevInfoRequestDTO.java} (70%) create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevRegistRequestDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevUpdateRequestDTO.java rename src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/{CategoryInfo.java => SkillCategoryInfo.java} (63%) create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/controller/EpicBusinessQueryController.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/controller/EpicDevQueryController.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/controller/UserQueryController.java rename src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/{UserClientGroupListResponseDTO.java => BusinessListResponseDTO.java} (85%) rename src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/{UserClientGroupSingleResponseDTO.java => BusinessSingleResponseDTO.java} (83%) rename src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/{UserPartnerListResponseDTO.java => DevPagingResponseDTO.java} (79%) rename src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/{UserPartnerSingleResponseDTO.java => DevSingleResponseDTO.java} (84%) create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserDetailSingleResponseDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserSingleResponseDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/CharacterInfoDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/DevInfoDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/sub/UserDetailResponseDTO.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/repository/SkillCategoryInfoViewRepository.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/repository/projection/SkillCategory_CategoryNameAndPointAvg.java delete mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/service/UserService.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/user/query/service/UserViewService.java create mode 100644 src/main/java/com/mtvs/devlinkbackend/util/IntegerListConverter.java 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/user/command/model/entity/Evaluation.java b/src/main/java/com/mtvs/devlinkbackend/evaluation/command/model/entity/Evaluation.java similarity index 81% rename from src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Evaluation.java rename to src/main/java/com/mtvs/devlinkbackend/evaluation/command/model/entity/Evaluation.java index 405b6be..80a981e 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Evaluation.java +++ b/src/main/java/com/mtvs/devlinkbackend/evaluation/command/model/entity/Evaluation.java @@ -1,6 +1,7 @@ -package com.mtvs.devlinkbackend.user.command.model.entity; +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; @@ -36,9 +37,9 @@ public class Evaluation { private LocalDateTime createdAt; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "CATEGORY_INFO_ID", nullable = false) + @JoinColumn(name = "SKILL_CATEGORY_INFO_ID", nullable = false) @JsonIgnore - private CategoryInfo categoryInfo; + private SkillCategoryInfo skillCategoryInfo; public Evaluation(Long userId, String cause, Integer point, LocalDateTime createdAt) { this.userId = userId; 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/user/command/controller/EpicBusinessCommandController.java b/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicBusinessCommandController.java index dc93f9e..0a29df7 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicBusinessCommandController.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicBusinessCommandController.java @@ -1,7 +1,7 @@ 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.UserClientGroupSingleResponseDTO; +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; @@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.*; @RestController -@RequestMapping("/api/user/epic/business") +@RequestMapping("/api/epic/businesses") public class EpicBusinessCommandController { private final EpicBusinessService epicBusinessService; private final JwtUtil jwtUtil; @@ -27,12 +27,12 @@ public EpicBusinessCommandController(EpicBusinessService epicBusinessService, Jw @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") }) @PostMapping - public ResponseEntity registerBusiness( + public ResponseEntity registerBusiness( @RequestBody BusinessRequestDTO businessRequestDTO, @RequestHeader("Authorization") String authorizationHeader) throws Exception { String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserClientGroupSingleResponseDTO userClientGroup = + BusinessSingleResponseDTO userClientGroup = epicBusinessService.registUserClientGroup(businessRequestDTO, accountId); return ResponseEntity.ok(userClientGroup); } @@ -43,12 +43,12 @@ public ResponseEntity registerBusiness( @ApiResponse(responseCode = "404", description = "찾을 수 없음") }) @PatchMapping - public ResponseEntity update( + public ResponseEntity update( @RequestBody BusinessRequestDTO businessRequestDTO, @RequestHeader("Authorization") String authorizationHeader) throws Exception { String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserClientGroupSingleResponseDTO userClientGroup = + BusinessSingleResponseDTO userClientGroup = epicBusinessService.updateUserClientGroup(businessRequestDTO, accountId); return ResponseEntity.ok(userClientGroup); } 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 index 7ed23d2..780ada0 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicDevCommandController.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/controller/EpicDevCommandController.java @@ -1,7 +1,8 @@ package com.mtvs.devlinkbackend.user.command.controller; -import com.mtvs.devlinkbackend.user.command.model.dto.request.DevRequestDTO; -import com.mtvs.devlinkbackend.user.query.model.dto.response.UserPartnerSingleResponseDTO; +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; @@ -11,7 +12,7 @@ import org.springframework.web.bind.annotation.*; @RestController -@RequestMapping("/api/user/epic/dev") +@RequestMapping("/api/epic/developer") public class EpicDevCommandController { private final EpicDevService epicDevService; private final JwtUtil jwtUtil; @@ -27,12 +28,12 @@ public EpicDevCommandController(EpicDevService epicDevService, JwtUtil jwtUtil) @ApiResponse(responseCode = "400", description = "잘못된 입력 데이터") }) @PostMapping - public ResponseEntity registerDev( - @RequestBody DevRequestDTO devRequestDTO, + public ResponseEntity registerDev( + @RequestBody DevRegistRequestDTO devRegistRequestDTO, @RequestHeader("Authorization") String authorizationHeader) throws Exception { String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserPartnerSingleResponseDTO userPartner = epicDevService.registUserPartner(devRequestDTO, accountId); + DevSingleResponseDTO userPartner = epicDevService.registDev(devRegistRequestDTO, accountId); return ResponseEntity.ok(userPartner); } @@ -42,12 +43,12 @@ public ResponseEntity registerDev( @ApiResponse(responseCode = "404", description = "찾을 수 없음") }) @PatchMapping - public ResponseEntity update( - @RequestBody DevRequestDTO devRequestDTO, + public ResponseEntity update( + @RequestBody DevUpdateRequestDTO devUpdateRequestDTO, @RequestHeader("Authorization") String authorizationHeader) throws Exception { String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - UserPartnerSingleResponseDTO userPartner = epicDevService.updateUserPartner(devRequestDTO, accountId); + DevSingleResponseDTO userPartner = epicDevService.updateUserPartner(devUpdateRequestDTO, accountId); return ResponseEntity.ok(userPartner); } 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 index 184e880..898129f 100644 --- 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 @@ -8,7 +8,6 @@ @AllArgsConstructor @ToString public class BusinessRequestDTO { - private Long characterId; private String nickname; private String businessName; private MultipartFile businessLogoImg; diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevRequestDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevInfoRequestDTO.java similarity index 70% rename from src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevRequestDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevInfoRequestDTO.java index 78596be..acea2f0 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevRequestDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/dto/request/DevInfoRequestDTO.java @@ -1,6 +1,7 @@ package com.mtvs.devlinkbackend.user.command.model.dto.request; import lombok.*; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -8,16 +9,14 @@ @NoArgsConstructor @AllArgsConstructor @ToString -public class DevRequestDTO { - private Long characterId; - private String nickname; +public class DevInfoRequestDTO { private String devName; private String devEmail; private String devPhone; private String githubLink; - private List portfolioList; + private MultipartFile[] portfolioList; private String career; private List categoryNameList; - private String tag; + 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/user/command/model/entity/Dev.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/Dev.java index 4e924a1..626efd7 100644 --- 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 @@ -1,6 +1,5 @@ package com.mtvs.devlinkbackend.user.command.model.entity; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonManagedReference; import com.mtvs.devlinkbackend.util.StringListConverter; import jakarta.persistence.*; @@ -39,17 +38,18 @@ public class Dev { @Convert(converter = StringListConverter.class) @Column(name = "PORTFOLIO_LIST", columnDefinition = "TEXT") - private List portfolioList; + private List portfolioUrlList; @Column(name = "CAREER", columnDefinition = "TEXT") // 경력 기술 private String career; @OneToMany(mappedBy = "dev", cascade = CascadeType.ALL, orphanRemoval = true) @JsonManagedReference - private List categoryInfoList; + private List skillCategoryList; - @Column(name = "TAG") - private String tag; + @Convert(converter = StringListConverter.class) + @Column(name = "TAG", columnDefinition = "TEXT") + private List tag; @Column(name = "HOPE") private String hope; @@ -65,12 +65,12 @@ public class Dev { @Column(name = "USER_ID") private Long userId; - public Dev(String devName, String devEmail, String devPhone, String githubLink, List portfolioList, String career, String tag, String hope, 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.portfolioList = portfolioList; + this.portfolioUrlList = portfolioUrlList; this.career = career; this.tag = tag; this.hope = hope; diff --git a/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/CategoryInfo.java b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/SkillCategoryInfo.java similarity index 63% rename from src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/CategoryInfo.java rename to src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/SkillCategoryInfo.java index aa67b34..1b91739 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/CategoryInfo.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/model/entity/SkillCategoryInfo.java @@ -2,6 +2,7 @@ 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; @@ -10,13 +11,13 @@ import java.util.List; -@Table(name = "CATEGORY_INFO") -@Entity(name = "CategoryInfo") +@Table(name = "SKILL_CATEGORY_INFO") +@Entity(name = "SkillCategoryInfo") @Getter @Setter @ToString(exclude = "dev") @NoArgsConstructor -public class CategoryInfo { +public class SkillCategoryInfo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "CATEGORY_INFO_ID") @@ -28,19 +29,22 @@ public class CategoryInfo { @Column(name = "IS_EVALUATED") private Boolean isEvaluated; - @OneToMany(mappedBy = "categoryInfo", cascade = CascadeType.ALL, orphanRemoval = true) + @Column(name = "POINT_AVG") + private Integer pointAvg; + + @OneToMany(mappedBy = "skillCategoryInfo", cascade = CascadeType.ALL, orphanRemoval = true) @JsonManagedReference - private List categoryPointList; + private List evaluationIdList; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "DEV_ID", nullable = false) @JsonIgnore private Dev dev; - public CategoryInfo(String categoryName, List categoryPointList) { + public SkillCategoryInfo(String categoryName, List evaluationIdList) { this.categoryName = categoryName; this.isEvaluated = false; - this.categoryPointList = categoryPointList; + 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 index e2d57e9..dde3da4 100644 --- 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 @@ -44,9 +44,8 @@ public class User { @Column(name = "CHANNEL_LIST", columnDefinition = "TEXT") private List channelList; - @Convert(converter = LongListConverter.class) - @Column(name = "EXPERIENCE_LIST", columnDefinition = "TEXT") - private List experienceList; + @Column(name = "EXPERIENCE_VALUE") + private Integer experienceValue; @CreationTimestamp @Column(name = "CREATED_AT", updatable = false) 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 index 4d6cc9a..94128e1 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicBusinessService.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicBusinessService.java @@ -1,7 +1,7 @@ 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.UserClientGroupSingleResponseDTO; +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; @@ -27,8 +27,8 @@ public EpicBusinessService(BusinessRepository businessRepository, UserRepository } @Transactional - public UserClientGroupSingleResponseDTO registUserClientGroup(BusinessRequestDTO businessRequestDTO, - String accountId) { + public BusinessSingleResponseDTO registUserClientGroup(BusinessRequestDTO businessRequestDTO, + String accountId) { User user = userViewRepository.findUserByEpicAccountId(accountId); if (user == null) { @@ -55,12 +55,12 @@ public UserClientGroupSingleResponseDTO registUserClientGroup(BusinessRequestDTO // Response 나오면 바로 refactoring - return new UserClientGroupSingleResponseDTO(businessRepository.save(business)); + return new BusinessSingleResponseDTO(businessRepository.save(business)); } @Transactional - public UserClientGroupSingleResponseDTO updateUserClientGroup(BusinessRequestDTO businessRequestDTO, - String accountId) { + public BusinessSingleResponseDTO updateUserClientGroup(BusinessRequestDTO businessRequestDTO, + String accountId) { User user = userViewRepository.findUserByEpicAccountId(accountId); if (user == null) @@ -75,7 +75,7 @@ public UserClientGroupSingleResponseDTO updateUserClientGroup(BusinessRequestDTO business.setManagerName(businessRequestDTO.getManagerName()); business.setManagerPhone(businessRequestDTO.getManagerPhone()); - return new UserClientGroupSingleResponseDTO(business); + return new BusinessSingleResponseDTO(business); } public void deleteByAccountId(String accountId) { 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 index d5b7f54..da65d1b 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicDevService.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/command/service/EpicDevService.java @@ -1,8 +1,10 @@ package com.mtvs.devlinkbackend.user.command.service; -import com.mtvs.devlinkbackend.user.command.model.dto.request.DevRequestDTO; -import com.mtvs.devlinkbackend.user.query.model.dto.response.UserPartnerSingleResponseDTO; -import com.mtvs.devlinkbackend.user.command.model.entity.CategoryInfo; +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; @@ -30,36 +32,38 @@ public EpicDevService(DevRepository devRepository, UserRepository userRepository } @Transactional - public UserPartnerSingleResponseDTO registUserPartner(DevRequestDTO devRequestDTO, - String accountId) { + public DevSingleResponseDTO registDev(DevRegistRequestDTO devRegistRequestDTO, + String accountId) { User user = userViewRepository.findUserByEpicAccountId(accountId); if (user == null) { user = new User( accountId, null, - devRequestDTO.getCharacterId(), - devRequestDTO.getNickname() + null, + devRegistRequestDTO.getNickname() ); } User savedUser = userRepository.save(user); + DevInfoRequestDTO devInfoRequestDTO = devRegistRequestDTO.getDevInfo(); Dev dev = new Dev( - devRequestDTO.getDevName(), - devRequestDTO.getDevEmail(), - devRequestDTO.getDevPhone(), - devRequestDTO.getGithubLink(), - devRequestDTO.getPortfolioList(), - devRequestDTO.getCareer(), - devRequestDTO.getTag(), - devRequestDTO.getHope(), + devInfoRequestDTO.getDevName(), + devInfoRequestDTO.getDevEmail(), + devInfoRequestDTO.getDevPhone(), + devInfoRequestDTO.getGithubLink(), + //TODO:: AWS S3 로직 개발 이후 저장 예정 + List.of(""), + devInfoRequestDTO.getCareer(), + devInfoRequestDTO.getTag(), + devInfoRequestDTO.getHope(), savedUser.getUserId() ); - List categoryInfoList = devRequestDTO.getCategoryNameList() - .stream().map(categoryName -> new CategoryInfo(categoryName, new ArrayList<>())) - .peek(categoryInfo -> categoryInfo.setDev(dev)).toList(); + List skillCategoryInfoList = devInfoRequestDTO.getCategoryNameList() + .stream().map(categoryName -> new SkillCategoryInfo(categoryName, new ArrayList<>())) + .peek(skillCategoryInfo -> skillCategoryInfo.setDev(dev)).toList(); - dev.setCategoryInfoList(categoryInfoList); + dev.setSkillCategoryList(skillCategoryInfoList); Dev savedDev = devRepository.save(dev); user.setDevId(savedDev.getDevId()); @@ -67,12 +71,12 @@ public UserPartnerSingleResponseDTO registUserPartner(DevRequestDTO devRequestDT userRepository.save(user); // Response 정리되면 Refactoring - return new UserPartnerSingleResponseDTO(devRepository.save(dev)); + return new DevSingleResponseDTO(devRepository.save(dev)); } @Transactional - public UserPartnerSingleResponseDTO updateUserPartner(DevRequestDTO devRequestDTO, - String accountId) { + public DevSingleResponseDTO updateUserPartner(DevUpdateRequestDTO devUpdateRequestDTO, + String accountId) { User user = userViewRepository.findUserByEpicAccountId(accountId); if (user == null) @@ -81,19 +85,21 @@ public UserPartnerSingleResponseDTO updateUserPartner(DevRequestDTO devRequestDT if(dev == null) throw new IllegalArgumentException("잘못된 계정으로 파트너스 정보 수정 시도"); - user.setNickname(devRequestDTO.getNickname()); - dev.setDevName(devRequestDTO.getDevName()); - dev.setDevEmail(devRequestDTO.getDevEmail()); - dev.setDevPhone(devRequestDTO.getDevPhone()); - dev.setGithubLink(devRequestDTO.getGithubLink()); - dev.setPortfolioList(devRequestDTO.getPortfolioList()); - dev.setCareer(devRequestDTO.getCareer()); - dev.setHope(devRequestDTO.getHope()); + 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 UserPartnerSingleResponseDTO(devRepository.save(dev)); + return new DevSingleResponseDTO(devRepository.save(dev)); } public void deleteByAccountId(String accountId) { 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/user/query/controller/Oauth2UserController.java b/src/main/java/com/mtvs/devlinkbackend/user/query/controller/Oauth2UserController.java index bc3b1ba..ca6289e 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/controller/Oauth2UserController.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/controller/Oauth2UserController.java @@ -1,6 +1,6 @@ package com.mtvs.devlinkbackend.user.query.controller; -import com.mtvs.devlinkbackend.user.query.service.UserService; +import com.mtvs.devlinkbackend.user.query.service.UserViewService; import com.mtvs.devlinkbackend.util.JwtUtil; import com.mtvs.devlinkbackend.user.command.model.dto.request.EpicGamesCallbackRequestDTO; import com.mtvs.devlinkbackend.user.command.model.entity.User; @@ -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 @@ -93,10 +93,10 @@ public ResponseEntity authLogin( @RequestHeader(name = "Authorization") String authorizationHeader) throws Exception { String accountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - User user = userService.findUserByEpicAccountId(accountId); + 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/UserClientGroupListResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessListResponseDTO.java similarity index 85% rename from src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientGroupListResponseDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessListResponseDTO.java index 064db0b..a575570 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientGroupListResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessListResponseDTO.java @@ -10,6 +10,6 @@ @NoArgsConstructor @AllArgsConstructor @ToString -public class UserClientGroupListResponseDTO { +public class BusinessListResponseDTO { private List data; } diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientGroupSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessSingleResponseDTO.java similarity index 83% rename from src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientGroupSingleResponseDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessSingleResponseDTO.java index c1e53a0..690faf6 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserClientGroupSingleResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/BusinessSingleResponseDTO.java @@ -8,6 +8,6 @@ @NoArgsConstructor @AllArgsConstructor @ToString -public class UserClientGroupSingleResponseDTO { +public class BusinessSingleResponseDTO { private Business data; } diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerListResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevPagingResponseDTO.java similarity index 79% rename from src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerListResponseDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevPagingResponseDTO.java index b868319..81931d2 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerListResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevPagingResponseDTO.java @@ -10,6 +10,7 @@ @NoArgsConstructor @AllArgsConstructor @ToString -public class UserPartnerListResponseDTO { +public class DevPagingResponseDTO { private List data; + private Integer totalPages; } diff --git a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerSingleResponseDTO.java b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevSingleResponseDTO.java similarity index 84% rename from src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerSingleResponseDTO.java rename to src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevSingleResponseDTO.java index 0c68433..0f7e3ac 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/UserPartnerSingleResponseDTO.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/model/dto/response/DevSingleResponseDTO.java @@ -7,6 +7,6 @@ @NoArgsConstructor @AllArgsConstructor @ToString -public class UserPartnerSingleResponseDTO { +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/DevViewRepository.java b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/DevViewRepository.java index 53724ae..6f817bd 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/repository/DevViewRepository.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/repository/DevViewRepository.java @@ -1,6 +1,8 @@ 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; @@ -14,7 +16,7 @@ public interface DevViewRepository extends JpaRepository { List findDevsByDevNameContainingIgnoreCase(String devName); - List findDevsByUser_Nickname(String nickname); - 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/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 index 2f49d95..34de90d 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicBusinessViewService.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicBusinessViewService.java @@ -1,4 +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 index 5778bad..653b64f 100644 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicDevViewService.java +++ b/src/main/java/com/mtvs/devlinkbackend/user/query/service/EpicDevViewService.java @@ -1,4 +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/user/query/service/UserService.java b/src/main/java/com/mtvs/devlinkbackend/user/query/service/UserService.java deleted file mode 100644 index 1e197ec..0000000 --- a/src/main/java/com/mtvs/devlinkbackend/user/query/service/UserService.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.mtvs.devlinkbackend.user.query.service; - -import com.mtvs.devlinkbackend.user.command.model.entity.User; -import com.mtvs.devlinkbackend.user.query.repository.UserViewRepository; -import com.mtvs.devlinkbackend.util.JwtUtil; -import org.springframework.stereotype.Service; - -@Service -public class UserService { - private final JwtUtil jwtUtil; - private final UserViewRepository userViewRepository; - - public UserService(JwtUtil jwtUtil, UserViewRepository userViewRepository) { - this.jwtUtil = jwtUtil; - this.userViewRepository = userViewRepository; - } - - public User findUserByEpicAccountId(String authorizationHeader) throws Exception { - String epicAccountId = jwtUtil.getSubjectFromAuthHeaderWithoutAuth(authorizationHeader); - return userViewRepository.findUserByEpicAccountId(epicAccountId); - } -} 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/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); + } + } +}