Skip to content

Commit 38b2d23

Browse files
authored
feat: 유저 초기 설정 변경 (#118)
- 초기 설정에서 권한 설정 삭제 - SetupStep 추가 및 설정 단계 저장
1 parent 1daf60b commit 38b2d23

File tree

10 files changed

+58
-35
lines changed

10 files changed

+58
-35
lines changed

backend/src/main/java/com/cmg/comtogether/certification/service/CertificationService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class CertificationService {
2222
private final UserService userService;
2323
private final S3Service s3Service;
2424

25+
@Transactional
2526
public CertificationResponseDto createCertification(Long userId, String fileKey) {
2627
String publicUrl = s3Service.getPublicUrl(fileKey);
2728

@@ -33,6 +34,7 @@ public CertificationResponseDto createCertification(Long userId, String fileKey)
3334
.build();
3435

3536
certificationRepository.save(cert);
37+
userService.updateCertificationUploaded(userId);
3638

3739
return CertificationResponseDto.fromEntity(cert, publicUrl);
3840
}
@@ -92,5 +94,7 @@ public void deleteCertification(Long certificationId, Long userId) {
9294
}
9395

9496
certificationRepository.delete(c);
97+
98+
userService.updateCertificationNotStarted(userId);
9599
}
96100
}

backend/src/main/java/com/cmg/comtogether/user/controller/UserController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.cmg.comtogether.common.security.CustomUserDetails;
55
import com.cmg.comtogether.jwt.dto.TokenDto;
66
import com.cmg.comtogether.user.dto.LoginRequestDto;
7-
import com.cmg.comtogether.user.dto.UserInitializeRequestDto;
7+
import com.cmg.comtogether.user.dto.UserInterestInitializeDto;
88
import com.cmg.comtogether.user.dto.UserResponseDto;
99
import com.cmg.comtogether.user.entity.User;
1010
import com.cmg.comtogether.user.service.UserService;
@@ -47,9 +47,9 @@ public ResponseEntity<ApiResponse<UserResponseDto>> getUserInfo(@AuthenticationP
4747
@PutMapping("/initialize")
4848
public ResponseEntity<ApiResponse<UserResponseDto>> initializeUser(
4949
@AuthenticationPrincipal CustomUserDetails userDetails,
50-
@Valid @RequestBody UserInitializeRequestDto request
50+
@Valid @RequestBody UserInterestInitializeDto request
5151
) {
52-
UserResponseDto userResponseDto = userService.initializeUser(userDetails.getUser().getUserId(), request);
52+
UserResponseDto userResponseDto = userService.initializeUserInterest(userDetails.getUser().getUserId(), request);
5353
return ResponseEntity.ok(ApiResponse.success(userResponseDto));
5454
}
5555

backend/src/main/java/com/cmg/comtogether/user/dto/UserInitializeRequestDto.java renamed to backend/src/main/java/com/cmg/comtogether/user/dto/UserInterestInitializeDto.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.cmg.comtogether.user.dto;
22

3-
import com.cmg.comtogether.user.entity.Role;
43
import com.fasterxml.jackson.annotation.JsonProperty;
5-
import jakarta.validation.constraints.NotNull;
64
import lombok.AllArgsConstructor;
75
import lombok.Builder;
86
import lombok.Getter;
@@ -14,10 +12,7 @@
1412
@NoArgsConstructor
1513
@AllArgsConstructor
1614
@Builder
17-
public class UserInitializeRequestDto {
18-
19-
@NotNull(message = "역할(role)은 필수 값입니다.")
20-
private Role role;
15+
public class UserInterestInitializeDto {
2116

2217
@JsonProperty("interest_ids")
2318
private List<Long> interestIds;

backend/src/main/java/com/cmg/comtogether/user/dto/UserResponseDto.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.cmg.comtogether.interest.dto.InterestDto;
44
import com.cmg.comtogether.user.entity.Role;
5+
import com.cmg.comtogether.user.entity.SetupStep;
56
import lombok.AllArgsConstructor;
67
import lombok.Builder;
78
import lombok.Getter;
@@ -18,7 +19,7 @@ public class UserResponseDto {
1819
private Role role;
1920
private Integer point;
2021
private String profileImageUrl;
21-
private boolean initialized;
22+
private SetupStep setupStep;
2223
private List<InterestDto> interests;
2324
}
2425

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.cmg.comtogether.user.entity;
2+
3+
public enum SetupStep {
4+
NOT_STARTED,
5+
CERTIFICATION_UPLOADED,
6+
COMPLETED
7+
}
8+

backend/src/main/java/com/cmg/comtogether/user/entity/User.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,15 @@ public class User {
4343

4444
private String profileImageUrl;
4545

46+
@Enumerated(EnumType.STRING)
4647
@Builder.Default
47-
private boolean initialized = false;
48+
@Column(nullable = false)
49+
private SetupStep setupStep = SetupStep.NOT_STARTED;
4850

4951
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
5052
@Builder.Default
5153
private Set<UserInterest> interests = new HashSet<>();;
5254

53-
public void updateRole(Role role) {
54-
this.role = role;
55-
}
56-
57-
public void completeInitialization() {
58-
this.initialized = true;
59-
}
60-
6155
public void updateInterests(List<Interest> newInterests) {
6256
this.interests.clear();
6357
for (Interest interest : newInterests) {
@@ -68,4 +62,8 @@ public void updateInterests(List<Interest> newInterests) {
6862
public void changeRole(Role role) {
6963
this.role = role;
7064
}
65+
66+
public void updateSetupStep(SetupStep setupStep) {
67+
this.setupStep = setupStep;
68+
}
7169
}

backend/src/main/java/com/cmg/comtogether/user/mapper/UserMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public UserResponseDto toResponse(User user) {
2424
.role(user.getRole())
2525
.point(user.getPoint())
2626
.profileImageUrl(user.getProfileImageUrl())
27-
.initialized(user.isInitialized())
27+
.setupStep(user.getSetupStep())
2828
.interests(interests)
2929
.build();
3030
}

backend/src/main/java/com/cmg/comtogether/user/service/UserService.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66
import com.cmg.comtogether.interest.service.InterestService;
77
import com.cmg.comtogether.jwt.dto.TokenDto;
88
import com.cmg.comtogether.jwt.service.JwtService;
9-
import com.cmg.comtogether.user.dto.UserInitializeRequestDto;
9+
import com.cmg.comtogether.user.dto.UserInterestInitializeDto;
1010
import com.cmg.comtogether.user.dto.UserResponseDto;
1111
import com.cmg.comtogether.user.entity.Role;
12+
import com.cmg.comtogether.user.entity.SetupStep;
1213
import com.cmg.comtogether.user.entity.User;
1314
import com.cmg.comtogether.user.mapper.UserMapper;
1415
import com.cmg.comtogether.user.repository.UserRepository;
@@ -47,11 +48,10 @@ public UserResponseDto getUserInfo(Long userId) {
4748
}
4849

4950
@Transactional
50-
public UserResponseDto initializeUser(Long userId, UserInitializeRequestDto requestDto) {
51+
public UserResponseDto initializeUserInterest(Long userId, UserInterestInitializeDto requestDto) {
5152
User user = userRepository.findById(userId)
5253
.orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND));
5354

54-
user.updateRole(requestDto.getRole());
5555
List<Interest> interests = new ArrayList<>();
5656

5757
if (requestDto.getInterestIds() != null) {
@@ -62,7 +62,8 @@ public UserResponseDto initializeUser(Long userId, UserInitializeRequestDto requ
6262
}
6363

6464
user.updateInterests(interests);
65-
user.completeInitialization();
65+
user.updateSetupStep(SetupStep.COMPLETED);
66+
6667
return userMapper.toResponse(user);
6768
}
6869

@@ -90,10 +91,27 @@ public TokenDto login(String email, String password) {
9091
return jwtService.generateToken(user);
9192
}
9293

94+
@Transactional
9395
public void updateRoleToExpert(Long userId) {
9496
User user = userRepository.findById(userId)
9597
.orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND));
9698

9799
user.changeRole(Role.EXPERT);
98100
}
101+
102+
@Transactional
103+
public void updateCertificationUploaded(Long userId) {
104+
User user = userRepository.findById(userId)
105+
.orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND));
106+
107+
user.updateSetupStep(SetupStep.CERTIFICATION_UPLOADED);
108+
}
109+
110+
@Transactional
111+
public void updateCertificationNotStarted(Long userId) {
112+
User user = userRepository.findById(userId)
113+
.orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND));
114+
115+
user.updateSetupStep(SetupStep.NOT_STARTED);
116+
}
99117
}

backend/src/main/resources/data.sql

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ INSERT INTO interest (name, is_custom) VALUES ('디자인', false);
33
INSERT INTO interest (name, is_custom) VALUES ('게임', false);
44
INSERT INTO interest (name, is_custom) VALUES ('커스텀', true);
55

6-
INSERT INTO user (name, email, password, role, social_type, social_id, point, profile_image_url, initialized)
7-
VALUES ('admin01', '[email protected]','$2a$10$bfTyi9V6o3kaOJnehJufCeLinAOXzkZrqdLOmMV9rFWj.SmHCo3Vy', 'ADMIN', NULL, NULL, 0, NULL,TRUE);
8-
INSERT INTO user (name, email, password, role, social_type, social_id, point, profile_image_url, initialized)
9-
VALUES ('expert01', '[email protected]', '$2a$10$aBLIdWBNt5te1Rf57lh/b.XYs9pshgW9xj.E3JI5w.BGg8x8j/N8O', 'EXPERT', NULL, NULL, 0, NULL, TRUE);
10-
INSERT INTO user (name, email, password, role, social_type, social_id, point, profile_image_url, initialized)
11-
VALUES ('beginner01', '[email protected]', '$2a$10$q2cPZqXqu04FzPBV7Np94OtEi9M1P3q7/keSVGwPVZSonutRdWggm', 'BEGINNER', NULL, NULL, 0, NULL, TRUE);
6+
INSERT INTO user (name, email, password, role, social_type, social_id, point, profile_image_url, setup_step)
7+
VALUES ('admin01', '[email protected]','$2a$10$bfTyi9V6o3kaOJnehJufCeLinAOXzkZrqdLOmMV9rFWj.SmHCo3Vy', 'ADMIN', NULL, NULL, 0, NULL,'COMPLETED');
8+
INSERT INTO user (name, email, password, role, social_type, social_id, point, profile_image_url, setup_step)
9+
VALUES ('expert01', '[email protected]', '$2a$10$aBLIdWBNt5te1Rf57lh/b.XYs9pshgW9xj.E3JI5w.BGg8x8j/N8O', 'EXPERT', NULL, NULL, 0, NULL, 'COMPLETED');
10+
INSERT INTO user (name, email, password, role, social_type, social_id, point, profile_image_url, setup_step)
11+
VALUES ('beginner01', '[email protected]', '$2a$10$q2cPZqXqu04FzPBV7Np94OtEi9M1P3q7/keSVGwPVZSonutRdWggm', 'BEGINNER', NULL, NULL, 0, NULL, 'COMPLETED');
1212

1313
-- Guide 테이블 샘플 데이터
1414
INSERT INTO guide (category, intro, detail, caution, beginner) VALUES

backend/src/test/java/com/cmg/comtogether/user/service/UserServiceTest.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import com.cmg.comtogether.interest.dto.InterestDto;
66
import com.cmg.comtogether.jwt.entity.RefreshToken;
77
import com.cmg.comtogether.jwt.repository.RefreshTokenRepository;
8-
import com.cmg.comtogether.user.dto.UserInitializeRequestDto;
8+
import com.cmg.comtogether.user.dto.UserInterestInitializeDto;
99
import com.cmg.comtogether.user.dto.UserResponseDto;
1010
import com.cmg.comtogether.user.entity.Role;
1111
import com.cmg.comtogether.user.entity.SocialType;
@@ -92,17 +92,16 @@ void getUserInfo_fail_notfound() {
9292

9393
@Test
9494
@DisplayName("성공 - 유저 초기화 성공 (관심사 포함)")
95-
void initializeUser_success() {
95+
void initializeUser_Interest_success() {
9696
// given
9797
User user = createUser();
9898

99-
UserInitializeRequestDto requestDto = UserInitializeRequestDto.builder()
100-
.role(Role.EXPERT)
99+
UserInterestInitializeDto requestDto = UserInterestInitializeDto.builder()
101100
.interestIds(List.of(1L, 2L))
102101
.build();
103102

104103
// when
105-
UserResponseDto response = userService.initializeUser(user.getUserId(), requestDto);
104+
UserResponseDto response = userService.initializeUserInterest(user.getUserId(), requestDto);
106105

107106
// then
108107
assertThat(response.getRole()).isEqualTo(Role.EXPERT);

0 commit comments

Comments
 (0)