Skip to content

Commit 748f368

Browse files
authored
Merge pull request #62 from Capstone-OpenStep/feature/#34-repo-suggest
Refactor: 사용자 관심언어 및 관심분야 선택 로직 변경
2 parents e2ce91f + 9dade72 commit 748f368

21 files changed

+287
-218
lines changed

src/main/java/com/chungang/capstone/openstep/domain/Member/controller/MemberController.java

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.List;
44

55
import com.chungang.capstone.openstep.domain.Member.service.AuthService;
6+
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
67
import jakarta.validation.Valid;
78
import org.springframework.web.bind.annotation.*;
89

@@ -61,43 +62,59 @@ public ApiResponse<MemberResponseDTO.TokenRefreshResponseDTO> refresh(@Valid @Re
6162
return ApiResponse.onSuccess(SuccessStatus.MEMBER_UPDATE_ACCESS_TOKEN_OK, response);
6263
}
6364

64-
65-
@Operation(summary = "관심사(domain) 조회 API", description = "사용자의 관심사(도메인)을 조회합니다.")
66-
@GetMapping("/domains")
67-
public ApiResponse<MemberResponseDTO.DomainsRes> getDomains(){
68-
Long memberId= SecurityUtils.getCurrentMemberId();
69-
log.info("memberId={}",memberId);
70-
MemberResponseDTO.DomainsRes domainsRes =memberQueryService.getDomains(memberId);
71-
return ApiResponse.onSuccess(SuccessStatus.MEMBER_GET_INTERESTS_OK, domainsRes);
65+
@PostMapping("/{memberId}/interest/languages")
66+
@Operation(summary = "관심언어(languages) 선택 API", description = "사용자의 기술스택 내역을 수정합니다.")
67+
public ApiResponse<MemberResponseDTO.LanguagesRes> selectInterestLanguages(@PathVariable Long memberId,
68+
@Valid @RequestBody MemberRequestDTO.UpdateLanguagesReq languagesReq) {
69+
MemberResponseDTO.LanguagesRes languagesRes = memberCommandService.selectInterestLanguages(memberId, languagesReq);
70+
return ApiResponse.onSuccess(SuccessStatus.MEMBER_SELECT_INTEREST_LANGUAGES_OK, languagesRes);
7271
}
7372

74-
@Operation(summary = "관심사(domain) 수정 API", description = "사용자의 관심사(도메인)내역을 수정합니다.")
75-
@PatchMapping("/domains")
76-
public ApiResponse<MemberResponseDTO.DomainsRes> updateDomains(@RequestBody MemberRequestDTO.UpdateDomainsReq domainsReq){
77-
Long memberId= SecurityUtils.getCurrentMemberId();
78-
log.info("memberId={}",memberId);
79-
MemberResponseDTO.DomainsRes domainsRes =memberCommandService.updateDomains(memberId,domainsReq);
80-
return ApiResponse.onSuccess(SuccessStatus.MEMBER_PATCH_INTERESTS_OK, domainsRes);
73+
@PostMapping("/{memberId}/interest/domains")
74+
@Operation(summary = "관심분야(domains) 선택 API", description = "사용자가 관심있는 분야를 수정합니다.")
75+
public ApiResponse<MemberResponseDTO.DomainsRes> selectInterestDomains(@PathVariable Long memberId,
76+
@Valid @RequestBody MemberRequestDTO.UpdateDomainsReq domainsReq) {
77+
MemberResponseDTO.DomainsRes domainsRes = memberCommandService.selectInterestDomains(memberId, domainsReq);
78+
return ApiResponse.onSuccess(SuccessStatus.MEMBER_SELECT_INTEREST_DOMAINS_OK, domainsRes);
8179
}
8280

83-
@Operation(summary = "기술스택 조회 API", description = "사용자의 기술스택 내역을 조회합니다.")
84-
@GetMapping("/skills")
85-
public ApiResponse<MemberResponseDTO.SkillsRes> getSkills(){
81+
@GetMapping("/languages")
82+
@Operation(summary = "사용자 관심언어(languages) 조회 API", description = "사용자의 관심언어를 조회합니다.")
83+
public ApiResponse<MemberResponseDTO.LanguagesRes> getMemberLanguages(){
8684
Long memberId= SecurityUtils.getCurrentMemberId();
8785
log.info("memberId={}",memberId);
88-
MemberResponseDTO.SkillsRes skillRes =memberQueryService.getSkills(memberId);
89-
return ApiResponse.onSuccess(SuccessStatus.MEMBER_GET_SKILLS_OK, skillRes);
86+
MemberResponseDTO.LanguagesRes languageRes =memberQueryService.getLanguages(memberId);
87+
return ApiResponse.onSuccess(SuccessStatus.MEMBER_GET_INTEREST_LANGUAGES_OK, languageRes);
9088
}
9189

92-
@Operation(summary = "기술스택 수정 API", description = "사용자의 기술스택 내역을 수정합니다.")
93-
@PatchMapping("/skills")
94-
public ApiResponse<MemberResponseDTO.SkillsRes> updateSkills(@RequestBody MemberRequestDTO.UpdateSkillsReq skillsReq){
90+
@GetMapping("/domains")
91+
@Operation(summary = "사용자 관심분야(domains) 조회 API", description = "사용자의 관심분야을 조회합니다.")
92+
public ApiResponse<MemberResponseDTO.DomainsRes> getMemberDomains(){
9593
Long memberId= SecurityUtils.getCurrentMemberId();
9694
log.info("memberId={}",memberId);
97-
MemberResponseDTO.SkillsRes skillsRes =memberCommandService.updateSkills(memberId,skillsReq);
98-
return ApiResponse.onSuccess(SuccessStatus.MEMBER_PATCH_SKILLS_OK, skillsRes);
95+
MemberResponseDTO.DomainsRes domainsRes =memberQueryService.getDomains(memberId);
96+
return ApiResponse.onSuccess(SuccessStatus.MEMBER_GET_INTEREST_DOMAINS_OK, domainsRes);
9997
}
10098

99+
// @Operation(summary = "관심언어(languages) 선택 API", description = "사용자의 기술스택 내역을 수정합니다.")
100+
// @PostMapping("/interest/languages")
101+
// public ApiResponse<MemberResponseDTO.LanguagesRes> selectLanguages(@Valid @RequestBody MemberRequestDTO.UpdateLanguagesReq languagesReq){
102+
// Long memberId= SecurityUtils.getCurrentMemberId();
103+
// log.info("memberId={}",memberId);
104+
// MemberResponseDTO.LanguagesRes languagesRes =memberCommandService.updateLanguages(memberId,languagesReq);
105+
// return ApiResponse.onSuccess(SuccessStatus.MEMBER_PATCH_LANGUAGES_OK, languagesRes);
106+
// }
107+
108+
// @Operation(summary = "관심분야(domains) 선택 API", description = "사용자가 관심있는 분야를 선택합니다.")
109+
// @PatchMapping("/interest/domains")
110+
// public ApiResponse<MemberResponseDTO.DomainsRes> selectDomains(@Valid @RequestBody MemberRequestDTO.UpdateDomainsReq domainsReq){
111+
// Long memberId= SecurityUtils.getCurrentMemberId();
112+
// log.info("memberId={}",memberId);
113+
// MemberResponseDTO.DomainsRes domainsRes =memberCommandService.updateDomains(memberId,domainsReq);
114+
// return ApiResponse.onSuccess(SuccessStatus.MEMBER_PATCH_INTERESTS_OK, domainsRes);
115+
// }
116+
117+
101118
@Operation(summary = "기여내역 조회 API", description = "사용자의 기여내역을 조회합니다.")
102119
@GetMapping("/contributions")
103120
public ApiResponse<List<PullRequestResponse.PullRequestRes>> getContributions(){

src/main/java/com/chungang/capstone/openstep/domain/Member/converter/MemberConverter.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import com.chungang.capstone.openstep.domain.Member.dto.MemberRequestDTO;
66
import com.chungang.capstone.openstep.domain.Member.dto.MemberResponseDTO;
77
import com.chungang.capstone.openstep.domain.Member.entity.Member;
8+
import com.chungang.capstone.openstep.domain.common.InterestDomain;
9+
import com.chungang.capstone.openstep.domain.common.InterestLanguage;
810

911
public class MemberConverter {
1012
public static MemberResponseDTO.MemberRes memberTo(Member member,boolean isNewMember,String accessToken) {
@@ -16,16 +18,16 @@ public static MemberResponseDTO.MemberRes memberTo(Member member,boolean isNewMe
1618
.build();
1719
}
1820

19-
public static MemberResponseDTO.DomainsRes toDomainRes(List<String> domains) {
21+
public static MemberResponseDTO.DomainsRes toDomainRes(List<InterestDomain> domains) {
2022
return MemberResponseDTO.DomainsRes.builder()
21-
.domains(domains)
22-
.build();
23+
.domains(domains.stream().map(Enum::name).toList())
24+
.build();
2325
}
2426

25-
public static MemberResponseDTO.SkillsRes toSkillRes(List<String> skills) {
26-
return MemberResponseDTO.SkillsRes.builder()
27-
.skills(skills)
28-
.build();
27+
public static MemberResponseDTO.LanguagesRes toLanguageRes(List<InterestLanguage> languages) {
28+
return MemberResponseDTO.LanguagesRes.builder()
29+
.languages(languages.stream().map(Enum::name).toList())
30+
.build();
2931
}
3032

3133
// 이메일 회원가입용

src/main/java/com/chungang/capstone/openstep/domain/Member/dto/MemberRequestDTO.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,14 @@
66
import com.fasterxml.jackson.annotation.JsonInclude;
77
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
88
import com.fasterxml.jackson.databind.annotation.JsonNaming;
9+
import io.swagger.v3.oas.annotations.media.Schema;
910
import lombok.Builder;
1011
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
1112

1213
import java.time.LocalDate;
1314
import java.util.List;
1415

1516
public class MemberRequestDTO {
16-
public record UpdateDomainsReq(
17-
List<String> domains
18-
) { }
19-
20-
public record UpdateSkillsReq(
21-
List<String> skills
22-
){}
2317

2418
// 회원가입 요청 DTO
2519
@JsonInclude(JsonInclude.Include.NON_NULL)
@@ -64,5 +58,23 @@ public record refreshRequestDTO(
6458
String refreshToken) {
6559
}
6660

61+
public record UpdateDomainsReq(
62+
// @Schema(description = "도메인 리스트", example = "[\"BACKEND\", \"AI\"]", allowableValues = {
63+
// "FRONTEND", "BACKEND", "SPRING_BOOT", "REACT", "UI_UX", "DEVOPS", "CLOUD",
64+
// "DOCKER", "DATABASE", "MYSQL", "AI", "DEEP_LEARNING", "MOBILE", "SECURITY",
65+
// "EMBEDDED", "GAME_DEV", "BLOCKCHAIN", "DATA_SCIENCE", "LINUX", "GRAPHQL"
66+
// })
67+
List<String> domains
68+
) {}
69+
70+
public record UpdateLanguagesReq(
71+
// @Schema(description = "언어 리스트", example = "[\"JAVA\", \"PYTHON\"]", allowableValues = {
72+
// "C", "CPP", "C_SHARP", "JAVA", "JAVASCRIPT", "TYPESCRIPT", "SWIFT", "KOTLIN",
73+
// "PYTHON", "RUST", "GO", "R", "RUBY", "PERL", "PHP", "SQL", "MATLAB", "SCRATCH"
74+
// })
75+
List<String> languages
76+
) {}
77+
78+
6779

6880
}

src/main/java/com/chungang/capstone/openstep/domain/Member/dto/MemberResponseDTO.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ public record DomainsRes(
2323
) {}
2424

2525
@Builder
26-
public record SkillsRes(
27-
List<String> skills
26+
public record LanguagesRes(
27+
List<String> languages
2828
) {}
2929

3030
@Builder

src/main/java/com/chungang/capstone/openstep/domain/Member/entity/Domain.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/main/java/com/chungang/capstone/openstep/domain/Member/entity/Member.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class Member extends BaseEntity {
3838
private int xp;
3939

4040
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true)
41-
private List<MemberSkill> skills = new ArrayList<>();
41+
private List<MemberLanguage> languages = new ArrayList<>();
4242

4343
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true)
4444
private List<MemberDomain> domains = new ArrayList<>();

src/main/java/com/chungang/capstone/openstep/domain/Member/entity/MemberDomain.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,8 @@
22

33
import com.chungang.capstone.openstep.domain.common.BaseEntity;
44

5-
import jakarta.persistence.Entity;
6-
import jakarta.persistence.GeneratedValue;
7-
import jakarta.persistence.GenerationType;
8-
import jakarta.persistence.Id;
9-
import jakarta.persistence.JoinColumn;
10-
import jakarta.persistence.ManyToOne;
5+
import com.chungang.capstone.openstep.domain.common.InterestDomain;
6+
import jakarta.persistence.*;
117
import lombok.AccessLevel;
128
import lombok.AllArgsConstructor;
139
import lombok.Builder;
@@ -25,7 +21,7 @@ public class MemberDomain extends BaseEntity {
2521
@JoinColumn(name = "member_id")
2622
private Member member;
2723

28-
@ManyToOne
29-
@JoinColumn(name = "domain_id")
30-
private Domain domain;
24+
@Enumerated(EnumType.STRING)
25+
@Column(nullable = false)
26+
private InterestDomain domain;
3127
}

src/main/java/com/chungang/capstone/openstep/domain/Member/entity/MemberSkill.java renamed to src/main/java/com/chungang/capstone/openstep/domain/Member/entity/MemberLanguage.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package com.chungang.capstone.openstep.domain.Member.entity;
22

3-
import jakarta.persistence.Entity;
4-
import jakarta.persistence.GeneratedValue;
5-
import jakarta.persistence.GenerationType;
6-
import jakarta.persistence.Id;
7-
import jakarta.persistence.JoinColumn;
8-
import jakarta.persistence.ManyToOne;
3+
import com.chungang.capstone.openstep.domain.common.InterestLanguage;
4+
import jakarta.persistence.*;
95
import lombok.AccessLevel;
106
import lombok.AllArgsConstructor;
117
import lombok.Builder;
@@ -15,7 +11,7 @@
1511
@Builder
1612
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
1713
@AllArgsConstructor
18-
public class MemberSkill {
14+
public class MemberLanguage {
1915
@Id
2016
@GeneratedValue(strategy = GenerationType.IDENTITY)
2117
private Long id;
@@ -24,7 +20,7 @@ public class MemberSkill {
2420
@JoinColumn(name = "member_id")
2521
private Member member;
2622

27-
@ManyToOne
28-
@JoinColumn(name = "skill_id")
29-
private Skill skill;
23+
@Enumerated(EnumType.STRING)
24+
@Column(nullable = false)
25+
private InterestLanguage language;
3026
}

src/main/java/com/chungang/capstone/openstep/domain/Member/entity/Skill.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/main/java/com/chungang/capstone/openstep/domain/Member/repository/DomainRepository.java

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)