Skip to content

Commit 7a1d0ca

Browse files
committed
feat(user) : 회원가입 구현
1 parent 2db7f5a commit 7a1d0ca

File tree

6 files changed

+55
-16
lines changed

6 files changed

+55
-16
lines changed

src/main/java/back/kalender/domain/auth/entity/PasswordResetToken.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class PasswordResetToken extends BaseEntity {
2323

2424
private Long userId;
2525

26-
@Column(nullable = false, length = 100)
26+
@Column(nullable = false, length = 500)
2727
private String token;
2828

2929
private boolean used;

src/main/java/back/kalender/domain/auth/entity/RefreshToken.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class RefreshToken extends BaseEntity {
2323

2424
private Long userId;
2525

26-
@Column(nullable = false, length = 100)
26+
@Column(nullable = false, length = 1000)
2727
private String token;
2828

2929
@Column(nullable = false)

src/main/java/back/kalender/domain/user/controller/UserController.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
import org.springframework.web.bind.annotation.*;
2020
import org.springframework.web.multipart.MultipartFile;
2121

22-
import java.time.LocalDateTime;
23-
2422
@Tag(name = "User", description = "회원가입, 회원 정보 관련 API")
2523
@RestController
2624
@RequestMapping("/api/v1/user")
@@ -94,18 +92,8 @@ public class UserController {
9492
public ResponseEntity<UserSignupResponse> signup(
9593
@RequestBody UserSignupRequest request
9694
) {
97-
// TODO: 더미데이터 삭제, 서비스 연결 필요
98-
99-
// 더미 데이터
100-
UserSignupResponse dummyData = new UserSignupResponse(
101-
1L,
102-
request.email(),
103-
request.nickname(),
104-
request.birthDate(),
105-
LocalDateTime.now()
106-
);
107-
108-
return ResponseEntity.ok(dummyData);
95+
UserSignupResponse response = userService.signup(request);
96+
return ResponseEntity.ok(response);
10997
}
11098

11199

src/main/java/back/kalender/domain/user/service/UserService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33

44
import back.kalender.domain.user.dto.request.UpdateProfileRequest;
5+
import back.kalender.domain.user.dto.request.UserSignupRequest;
56
import back.kalender.domain.user.dto.response.UploadProfileImgResponse;
67
import back.kalender.domain.user.dto.response.UserProfileResponse;
8+
import back.kalender.domain.user.dto.response.UserSignupResponse;
79
import org.springframework.web.multipart.MultipartFile;
810

911
public interface UserService {
1012

13+
UserSignupResponse signup(UserSignupRequest request);
1114
UserProfileResponse getMyProfile(Long userId);
1215
UploadProfileImgResponse uploadProfileImage(Long userId, MultipartFile profileImage);
1316
UserProfileResponse updateMyProfile(Long userId, UpdateProfileRequest request);

src/main/java/back/kalender/domain/user/service/UserServiceImpl.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package back.kalender.domain.user.service;
22

33
import back.kalender.domain.user.dto.request.UpdateProfileRequest;
4+
import back.kalender.domain.user.dto.request.UserSignupRequest;
45
import back.kalender.domain.user.dto.response.UploadProfileImgResponse;
56
import back.kalender.domain.user.dto.response.UserProfileResponse;
7+
import back.kalender.domain.user.dto.response.UserSignupResponse;
68
import back.kalender.domain.user.entity.User;
79
import back.kalender.domain.user.repository.UserRepository;
10+
import back.kalender.global.common.Enum.Gender;
811
import back.kalender.global.exception.ErrorCode;
912
import back.kalender.global.exception.ServiceException;
1013
import lombok.RequiredArgsConstructor;
14+
import org.springframework.security.crypto.password.PasswordEncoder;
1115
import org.springframework.stereotype.Service;
1216
import org.springframework.transaction.annotation.Transactional;
1317
import org.springframework.web.multipart.MultipartFile;
@@ -17,6 +21,49 @@
1721
@Transactional(readOnly = true)
1822
public class UserServiceImpl implements UserService{
1923
private final UserRepository userRepository;
24+
private final PasswordEncoder passwordEncoder;
25+
26+
// 회원가입 251211 ahnbs
27+
@Override
28+
@Transactional
29+
public UserSignupResponse signup(UserSignupRequest request) {
30+
// 이메일 중복 확인
31+
if (userRepository.findByEmail(request.email()).isPresent()) {
32+
throw new ServiceException(ErrorCode.DUPLICATE_EMAIL);
33+
}
34+
35+
// 닉네임 중복 확인
36+
if (userRepository.findByNickname(request.nickname()).isPresent()) {
37+
throw new ServiceException(ErrorCode.DUPLICATE_NICKNAME);
38+
}
39+
40+
// Gender 변환
41+
Gender gender = null;
42+
if (request.gender() != null && !request.gender().isEmpty()) {
43+
try {
44+
gender = Gender.valueOf(request.gender().toUpperCase());
45+
} catch (IllegalArgumentException e) {
46+
throw new ServiceException(ErrorCode.BAD_REQUEST);
47+
}
48+
}
49+
50+
// 비밀번호 암호화
51+
String encodedPassword = passwordEncoder.encode(request.password());
52+
53+
// 유저 생성
54+
User user = User.builder()
55+
.email(request.email())
56+
.password(encodedPassword)
57+
.nickname(request.nickname())
58+
.gender(gender)
59+
.birthDate(request.birthDate())
60+
.emailVerified(false)
61+
.build();
62+
63+
User savedUser = userRepository.save(user);
64+
65+
return UserSignupResponse.from(savedUser);
66+
}
2067

2168
/**
2269
* 내 정보 조회

src/main/java/back/kalender/global/exception/ErrorCode.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public enum ErrorCode {
1212
// User 1000
1313
USER_NOT_FOUND("1001", HttpStatus.NOT_FOUND, "유저를 찾을 수 없습니다."),
1414
DUPLICATE_NICKNAME("1002", HttpStatus.CONFLICT, "이미 사용 중인 닉네임입니다."),
15+
DUPLICATE_EMAIL("1003", HttpStatus.CONFLICT, "이미 사용 중인 이메일입니다."),
1516

1617
// Artist 2000
1718
ARTIST_NOT_FOUND("2001",HttpStatus.NOT_FOUND,"아티스트를 찾을 수 없습니다."),

0 commit comments

Comments
 (0)