Skip to content

Commit a95c56e

Browse files
kjhh26052jiyong
authored andcommitted
feat:컨버터 분리 / techStackName 이넘 사이즈 수정 및 TechStack테이블 제약조건 추가
1 parent fa3f18d commit a95c56e

3 files changed

Lines changed: 44 additions & 25 deletions

File tree

src/main/java/com/devpath/domain/user/converter/UserConverter.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.devpath.domain.user.dto.CardPrevRes;
44
import com.devpath.domain.user.dto.MyCardRes;
5+
import com.devpath.domain.user.dto.UserProfileRequest;
6+
import com.devpath.domain.user.entity.TechStack;
57
import com.devpath.domain.user.entity.User;
68

79
public class UserConverter {
@@ -19,4 +21,23 @@ public static CardPrevRes toCardPrevRes(User user) {
1921
.jobGroup(user.getJobGroup().toString())
2022
.build();
2123
}
24+
25+
public static User toUser(UserProfileRequest request) {
26+
User user = User.builder()
27+
.name(request.getName())
28+
.nickname(request.getNickname())
29+
.email(request.getEmail())
30+
.phone(request.getPhone())
31+
.link(request.getLink())
32+
.jobGroup(request.getJobGroup())
33+
.level(request.getLevel())
34+
.build();
35+
36+
// techStackName 리스트를 TechStack으로 변환
37+
request.getTechStackNames().stream()
38+
.map(techStackName -> TechStack.create(user, techStackName))
39+
.forEach(user::addTechStack);
40+
41+
return user;
42+
}
2243
}

src/main/java/com/devpath/domain/user/entity/TechStack.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@
55
import lombok.*;
66

77
@Entity
8-
@Table(name = "tech_stacks")
8+
@Table(name = "tech_stacks", uniqueConstraints = {
9+
@UniqueConstraint(
10+
name = "tech_stack_user_unique",
11+
columnNames = {"user_id", "tech_stack_name"}
12+
)
13+
})
914
@Getter
1015
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1116
@AllArgsConstructor
@@ -18,7 +23,7 @@ public class TechStack {
1823
private Long techStackId;
1924

2025
@Enumerated(EnumType.STRING)
21-
@Column(name = "tech_stack_name", nullable = false)
26+
@Column(name = "tech_stack_name", nullable = false, length = 30)
2227
private TechStackName techStackName;
2328

2429
@ManyToOne(fetch = FetchType.LAZY)
@@ -28,4 +33,11 @@ public class TechStack {
2833
public void setUser(User user) {
2934
this.user = user;
3035
}
36+
37+
public static TechStack create(User user, TechStackName stackName) {
38+
return TechStack.builder()
39+
.user(user)
40+
.techStackName(stackName)
41+
.build();
42+
}
3143
}

src/main/java/com/devpath/domain/user/service/UserServiceImpl.java

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.devpath.domain.user.service;
22

33
import com.devpath.domain.user.dto.UserProfileRequest;
4-
import com.devpath.domain.user.entity.TechStack;
4+
55
import com.devpath.domain.user.converter.UserConverter;
66
import com.devpath.domain.user.dto.CardPrevRes;
77
import com.devpath.domain.user.dto.MyCardRes;
88
import com.devpath.domain.user.entity.Follow;
9+
import com.devpath.domain.user.entity.TechStack;
910
import com.devpath.domain.user.entity.User;
1011
import com.devpath.domain.user.enums.JobGroup;
12+
import com.devpath.domain.user.enums.TechStackName;
1113
import com.devpath.domain.user.repository.FollowRepository;
1214
import com.devpath.domain.user.repository.UserRepository;
1315
import com.devpath.global.apiPayload.code.status.GeneralErrorCode;
@@ -21,6 +23,7 @@
2123
import org.springframework.stereotype.Service;
2224
import org.springframework.transaction.annotation.Transactional;
2325

26+
import java.util.List;
2427

2528
@Service
2629
@RequiredArgsConstructor
@@ -39,26 +42,8 @@ public User createProfile(UserProfileRequest request) {
3942
}
4043

4144
// User 엔티티 생성
42-
User user = User.builder()
43-
.name(request.getName())
44-
.nickname(request.getNickname())
45-
.email(request.getEmail())
46-
.phone(request.getPhone())
47-
.link(request.getLink())
48-
.jobGroup(request.getJobGroup())
49-
.level(request.getLevel())
50-
.build();
51-
52-
// TechStack 엔티티들 생성 및 연결
53-
request.getTechStackNames().forEach(techStackName -> {
54-
TechStack techStack = TechStack.builder()
55-
.user(user)
56-
.techStackName(techStackName)
57-
.build();
58-
user.addTechStack(techStack);
59-
});
60-
61-
// User 저장 (TechStack은 cascade로 함께 저장됨)
45+
User user = UserConverter.toUser(request);
46+
6247
return userRepository.save(user);
6348
}
6449

@@ -71,7 +56,8 @@ public MyCardRes getMyCardRes(String userId) {
7156

7257
@Override
7358
@Transactional(readOnly = true)
74-
public CursorResponseDto<CardPrevRes> getCardPrevRes(String userId, String cursor, Integer size, JobGroup jobGroup) {
59+
public CursorResponseDto<CardPrevRes> getCardPrevRes(String userId, String cursor, Integer size,
60+
JobGroup jobGroup) {
7561

7662
Long uid = Long.valueOf(userId);
7763
Long cursorId = cursor != null ? Long.valueOf(cursor) : null;
@@ -97,7 +83,7 @@ public void exchangeCard(String userId, String cardCode) {
9783
User user = checkUser(uid);
9884
User friend = checkUser(fid);
9985

100-
if(followRepository.existsByUser_IdAndFollower_Id(uid, fid)){
86+
if (followRepository.existsByUser_IdAndFollower_Id(uid, fid)) {
10187
throw new GlobalHandler(GeneralErrorCode.FOLLOW_ALREADY_EXISTED);
10288
}
10389

0 commit comments

Comments
 (0)