Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@

import jakarta.servlet.http.HttpServletRequest;
import moja.refrigerator.dto.user.request.UserCreateRequest;
import moja.refrigerator.dto.user.request.UserUpdateRequest;
import moja.refrigerator.service.user.UserService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

@RestController
public class UserController {
Expand All @@ -27,6 +25,13 @@ public String getMainPage() {
@PostMapping("/auth/join")
public ResponseEntity<?> join(@RequestBody UserCreateRequest request) {
userService.createUser(request);
return ResponseEntity.ok().body("회원가입이 완료되었습니다.");
return ResponseEntity.ok().body("회원 가입이 완료되었습니다.");
}

// 회원 정보 수정
@PutMapping("/update")
public ResponseEntity<?> update(@RequestBody UserUpdateRequest request) {
userService.updateUser(request);
return ResponseEntity.ok().body("회원 정보가 수정되었습니다.");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package moja.refrigerator.dto.user.request;

import lombok.Data;

@Data
public class UserUpdateRequest {
private String userEmail;
private String userNickname;
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ protected void successfulAuthentication(HttpServletRequest request, HttpServletR

String role = auth.getAuthority();

String token = jwtUtil.createJwt(username, role, 60*60*10L);
String token = jwtUtil.createJwt(username, role, 60*60*10*1000L);

response.addHeader("Authorization", "Bearer " + token);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package moja.refrigerator.service.user;

import jakarta.servlet.http.HttpServletRequest;
import moja.refrigerator.dto.user.request.UserCreateRequest;
import moja.refrigerator.dto.user.request.UserUpdateRequest;

public interface UserService {
void createUser(UserCreateRequest request);
void updateUser(UserUpdateRequest request);
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package moja.refrigerator.service.user;

import jakarta.servlet.http.HttpServletRequest;
import moja.refrigerator.aggregate.user.TokenBlacklist;
import moja.refrigerator.aggregate.user.User;
import moja.refrigerator.dto.user.request.UserCreateRequest;
import moja.refrigerator.dto.user.request.UserUpdateRequest;
import moja.refrigerator.exception.user.DuplicateUserException;
import moja.refrigerator.repository.user.TokenBlacklistRepository;
import moja.refrigerator.repository.user.UserRepository;
import org.modelmapper.ModelMapper;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -20,13 +22,11 @@ public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
private final BCryptPasswordEncoder passwordEncoder;
private final ModelMapper modelMapper;
private final TokenBlacklistRepository tokenBlacklistRepository;

public UserServiceImpl(UserRepository userRepository, BCryptPasswordEncoder passwordEncoder, ModelMapper modelMapper, TokenBlacklistRepository tokenBlacklistRepository) {
public UserServiceImpl(UserRepository userRepository, BCryptPasswordEncoder passwordEncoder, ModelMapper modelMapper) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
this.modelMapper = modelMapper;
this.tokenBlacklistRepository = tokenBlacklistRepository;
}

@Override
Expand All @@ -45,6 +45,35 @@ public void createUser(UserCreateRequest request) {
userRepository.save(user);
}

@Override
@Transactional
public void updateUser(UserUpdateRequest request) {
// 현재 로그인한 사용자 정보 가져오기
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String userId = authentication.getName();

User user = userRepository.findByUserId(userId)
.orElseThrow(() -> new UsernameNotFoundException("사용자를 찾을 수 없습니다."));

// 이메일 변경 요청이 있는 경우
if (request.getUserEmail() != null) {
if (!request.getUserEmail().equals(user.getUserEmail())
&& userRepository.existsByUserEmail(request.getUserEmail())) {
throw new DuplicateUserException("이미 사용 중인 이메일입니다.");
}
user.setUserEmail(request.getUserEmail());
}

// 닉네임 변경 요청이 있는 경우
if (request.getUserNickname() != null) {
if (!request.getUserNickname().equals(user.getUserNickname())
&& userRepository.existsByUserNickname(request.getUserNickname())) {
throw new DuplicateUserException("이미 사용 중인 닉네임입니다.");
}
user.setUserNickname(request.getUserNickname());
}
}

private void checkDuplicateUser(UserCreateRequest request) {
List<String> errors = new ArrayList<>();
if (userRepository.existsByUserId(request.getUserId())) {
Expand Down