Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor : 유저 로그인, 회원가입 DTO 생성 #42

Merged
merged 2 commits into from
Oct 3, 2023
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
1 change: 1 addition & 0 deletions src/main/java/everymeal/server/global/util/MailUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public void sendMail(String email, String title, String text) {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
mimeMessage.setSubject(title);
mimeMessage.setText(text);
mimeMessage.setContent(text, "text/html; charset=utf-8");
mimeMessage.setRecipients(RecipientType.TO, email);
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
Expand Down
21 changes: 5 additions & 16 deletions src/main/java/everymeal/server/user/controller/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
import everymeal.server.global.util.authresolver.entity.AuthenticatedUser;
import everymeal.server.user.controller.dto.request.UserEmailAuthReq;
import everymeal.server.user.controller.dto.request.UserEmailAuthVerifyReq;
import everymeal.server.user.controller.dto.request.UserSingReq;
import everymeal.server.user.controller.dto.response.UserEmailAuthRes;
import everymeal.server.user.controller.dto.response.UserLoginRes;
import everymeal.server.user.service.UserService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
Expand All @@ -34,26 +34,15 @@ public class UserController {

@Operation(summary = "회원가입")
@PostMapping
public ApplicationResponse<Boolean> signUp(
@RequestBody
@Schema(
description = "유저의 기기 고유 번호",
defaultValue = "123456789",
example = "1234567890")
String userDeviceId) {
return ApplicationResponse.ok(userService.signUp(userDeviceId));
public ApplicationResponse<Boolean> signUp(@RequestBody UserSingReq request) {
return ApplicationResponse.ok(userService.signUp(request));
}

@Operation(summary = "로그인")
@PostMapping("/login")
public ResponseEntity<ApplicationResponse<UserLoginRes>> login(
@RequestBody
@Schema(
description = "유저의 기기 고유 번호",
defaultValue = "123456789",
example = "1234567890")
String userDeviceId) {
UserLoginRes response = userService.login(userDeviceId);
@RequestBody UserSingReq request) {
UserLoginRes response = userService.login(request);
ResponseCookie cookie =
ResponseCookie.from("refresh-token", response.getRefreshToken())
.httpOnly(true)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package everymeal.server.user.controller.dto.request;


import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Builder
public class UserSingReq {

@Schema(description = "유저의 기기 고유 번호", defaultValue = "123456789", example = "1234567890")
private String deviceId;
}
5 changes: 3 additions & 2 deletions src/main/java/everymeal/server/user/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@
import everymeal.server.global.util.authresolver.entity.AuthenticatedUser;
import everymeal.server.user.controller.dto.request.UserEmailAuthReq;
import everymeal.server.user.controller.dto.request.UserEmailAuthVerifyReq;
import everymeal.server.user.controller.dto.request.UserSingReq;
import everymeal.server.user.controller.dto.response.UserEmailAuthRes;
import everymeal.server.user.controller.dto.response.UserLoginRes;

public interface UserService {

Boolean signUp(String userDeviceId);
Boolean signUp(UserSingReq userDeviceId);

UserLoginRes login(String userDeviceId);
UserLoginRes login(UserSingReq request);

Boolean isAuth(AuthenticatedUser authenticatedUser);

Expand Down
27 changes: 22 additions & 5 deletions src/main/java/everymeal/server/user/service/UserServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import everymeal.server.global.util.authresolver.entity.AuthenticatedUser;
import everymeal.server.user.controller.dto.request.UserEmailAuthReq;
import everymeal.server.user.controller.dto.request.UserEmailAuthVerifyReq;
import everymeal.server.user.controller.dto.request.UserSingReq;
import everymeal.server.user.controller.dto.response.UserEmailAuthRes;
import everymeal.server.user.controller.dto.response.UserLoginRes;
import everymeal.server.user.entity.User;
Expand All @@ -30,17 +31,17 @@ public class UserServiceImpl implements UserService {

@Override
@Transactional
public Boolean signUp(String userDeviceId) {
User user = User.builder().deviceId(userDeviceId).build();
public Boolean signUp(UserSingReq request) {
User user = User.builder().deviceId(request.getDeviceId()).build();
userRepository.save(user);
return true;
}

@Override
public UserLoginRes login(String userDeviceId) {
public UserLoginRes login(UserSingReq request) {
User user =
userRepository
.findByDeviceId(userDeviceId)
.findByDeviceId(request.getDeviceId())
.orElseThrow(() -> new ApplicationException(ExceptionList.USER_NOT_FOUND));
String accessToken = jwtUtil.generateAccessToken(user.getIdx());
String refreshToken = jwtUtil.generateRefreshToken(user.getIdx(), accessToken);
Expand All @@ -62,7 +63,23 @@ public UserEmailAuthRes emailAuth(
try {
Random random = SecureRandom.getInstanceStrong();
int authCode = random.nextInt(900000) + 100000;
mailUtil.sendMail(request.getEmail(), "[에브리밀] 대학교 이메일 인증", "인증번호 : " + authCode);
String htmlText =
String.format(
"<html>"
+ "<body>"
+ "<p>안녕하세요!</p>"
+ "<p>에브리밀 서비스에 가입해주셔서 감사합니다. 이메일 인증을 완료하여 식당 및 학식 정보를 더욱 편리하게 이용할 수 있습니다.</p>"
+ "<p>아래의 인증 코드를 사용하여 이메일 인증을 진행해주세요:</p>"
+ "<p><strong>인증 코드: %s</strong></p>"
+ "<br />"
+ "<p>감사합니다.</p>"
+ "<br />"
+ "<img src=\"https://github.com/everymeals/EveryMeal_Server/assets/53048655/b4543167-a03b-435d-b326-105aeeff3d6c\" alt=\"에브리밀 로고\" width=\"200px\" height=\"75px\">"
+ "</body>"
+ "</html>",
authCode);

mailUtil.sendMail(request.getEmail(), "[에브리밀] 대학교 이메일 인증", htmlText);
String mailJwt =
jwtUtil.generateEmailToken(
authenticatedUser.getIdx(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package everymeal.server.user.controller;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
Expand All @@ -12,6 +11,7 @@
import everymeal.server.global.ControllerTestSupport;
import everymeal.server.user.controller.dto.request.UserEmailAuthReq;
import everymeal.server.user.controller.dto.request.UserEmailAuthVerifyReq;
import everymeal.server.user.controller.dto.request.UserSingReq;
import everymeal.server.user.controller.dto.response.UserLoginRes;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
Expand All @@ -24,12 +24,12 @@ class UserControllerTest extends ControllerTestSupport {
@Test
void signUp() throws Exception {
// given
String deviceId = "123456789";
UserSingReq request = UserSingReq.builder().deviceId("123456789").build();

// when then
mockMvc.perform(
post("/api/v1/users")
.content(deviceId)
.content(objectMapper.writeValueAsString(request))
.contentType(MediaType.APPLICATION_JSON))
.andDo(MockMvcResultHandlers.print())
.andExpect(status().isOk())
Expand All @@ -41,7 +41,7 @@ void signUp() throws Exception {
@Test
void login() throws Exception {
// given
String deviceId = "123456789";
UserSingReq request = UserSingReq.builder().deviceId("123456789").build();

given(userService.login(any()))
.willReturn(
Expand All @@ -53,7 +53,7 @@ void login() throws Exception {
// when then
mockMvc.perform(
post("/api/v1/users/login")
.content(deviceId)
.content(objectMapper.writeValueAsString(request))
.contentType(MediaType.APPLICATION_JSON))
.andDo(MockMvcResultHandlers.print())
.andExpect(status().isOk())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import everymeal.server.global.util.authresolver.entity.AuthenticatedUser;
import everymeal.server.user.controller.dto.request.UserEmailAuthReq;
import everymeal.server.user.controller.dto.request.UserEmailAuthVerifyReq;
import everymeal.server.user.controller.dto.request.UserSingReq;
import everymeal.server.user.controller.dto.response.UserEmailAuthRes;
import everymeal.server.user.controller.dto.response.UserLoginRes;
import everymeal.server.user.entity.User;
Expand All @@ -36,25 +37,27 @@ void tearDown() {
@Test
void singUp() {
// given
String deviceId = "123456789";
UserSingReq request = UserSingReq.builder().deviceId("123456789").build();

// when
Boolean response = userService.signUp(deviceId);
Boolean response = userService.signUp(request);

// then
assertEquals(userRepository.findByDeviceId(deviceId).get().getDeviceId(), deviceId);
assertEquals(
userRepository.findByDeviceId(request.getDeviceId()).get().getDeviceId(),
request.getDeviceId());
assertTrue(response);
}

@DisplayName("로그인을 진행한다.")
@Test
void login() {
// given
String deviceId = "123456789";
userService.signUp(deviceId);
UserSingReq request = UserSingReq.builder().deviceId("123456789").build();
userService.signUp(request);

// when
UserLoginRes response = userService.login(deviceId);
UserLoginRes response = userService.login(request);

// then
assertNotNull(response.getRefreshToken());
Expand Down
Loading