Skip to content

Commit

Permalink
[#44] refactor: LoginController, LoginService를 Member관련 클래스에서 분리
Browse files Browse the repository at this point in the history
  • Loading branch information
wbluke committed Aug 15, 2019
1 parent a39ec2f commit b8b8883
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 27 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.woowacourse.zzazanstagram.model.member;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.servlet.http.HttpSession;

import static com.woowacourse.zzazanstagram.util.SessionKeys.MEMBER;

@Controller
public class LoginController {
private final LoginService loginService;

public LoginController(LoginService loginService) {
this.loginService = loginService;
}

@GetMapping("/login")
public String loginForm() {
return "login";
}

@PostMapping("/login")
public String login(MemberLoginRequest memberLoginRequest, HttpSession httpSession) {
MemberResponse memberResponse = loginService.find(memberLoginRequest);
httpSession.setAttribute(MEMBER, new MemberSession(memberResponse.getEmail()));
return "redirect:/";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.woowacourse.zzazanstagram.model.member;

import com.woowacourse.zzazanstagram.model.member.exception.MemberException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice(assignableTypes = LoginController.class)
public class LoginControllerAdvice {
private static final Logger log = LoggerFactory.getLogger(LoginControllerAdvice.class);
private static final String TAG = "[LoginControllerAdvice]";

@ExceptionHandler(MemberException.class)
public String handleIllegalUserParamsException(MemberException e) {
log.error("{} MemberException >> {}", TAG, e.getMessage());

return "redirect:/login";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.woowacourse.zzazanstagram.model.member;

import com.woowacourse.zzazanstagram.model.member.exception.MemberException;
import com.woowacourse.zzazanstagram.model.member.vo.Email;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
public class LoginService {
private static final String ERROR_ILLEGAL_LOGIN_MESSAGE = "로그인 정보가 올바르지 않습니다.";
private final MemberRepository memberRepository;

public LoginService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}

public MemberResponse find(MemberLoginRequest request) {
Member member = checkEnrolledMember(request);
return MemberAssembler.assemble(member);
}

private Member checkEnrolledMember(MemberLoginRequest request) {
return findByEmail(request.getEmail())
.filter(m -> m.isMatchPassword(request.getPassword()))
.orElseThrow(() -> new MemberException(ERROR_ILLEGAL_LOGIN_MESSAGE));
}

private Optional<Member> findByEmail(String email) {
return memberRepository.findByEmail(Email.of(email));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.servlet.http.HttpSession;
import javax.validation.Valid;

@Controller
Expand All @@ -20,18 +19,6 @@ public String signUp() {
return "signup";
}

@GetMapping("/login")
public String loginForm() {
return "login";
}

@PostMapping("/login")
public String login(MemberLoginRequest memberLoginRequest, HttpSession httpSession) {
MemberResponse memberResponse = memberService.find(memberLoginRequest);
httpSession.setAttribute("user", new UserSession(memberResponse.getEmail()));
return "redirect:/";
}

@PostMapping("/members")
public String saveMember(@Valid MemberSignUpRequest memberSignupRequest) {
memberService.save(memberSignupRequest);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,12 @@

@Service
public class MemberService {
private static final String ERROR_ILLEGAL_LOGIN_MESSAGE = "로그인 정보가 올바르지 않습니다.";
private MemberRepository memberRepository;

public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}

public MemberResponse find(MemberLoginRequest request) {
Member member = checkEnrolledMember(request);
return MemberAssembler.assemble(member);
}

private Member checkEnrolledMember(MemberLoginRequest request) {
return findByEmail(request.getEmail())
.filter(m -> m.isMatchPassword(request.getPassword()))
.orElseThrow(() -> new MemberException(ERROR_ILLEGAL_LOGIN_MESSAGE));
}

private Optional<Member> findByEmail(String email) {
return memberRepository.findByEmail(Email.of(email));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ class MemberControllerTest extends RequestTemplate {
.body(WebTestHelper.loginForm("[email protected]",
"Password!1"))
.exchange()
.expectHeader().valueMatches("location", URL_REGEX + "/signup" + JSESSIONID_URL)
.expectHeader().valueMatches("location", URL_REGEX + "/login" + JSESSIONID_URL)
.expectStatus().is3xxRedirection();
}

Expand All @@ -87,7 +87,7 @@ class MemberControllerTest extends RequestTemplate {
.body(WebTestHelper.loginForm("[email protected]",
"Password@2"))
.exchange()
.expectHeader().valueMatches("location", URL_REGEX + "/signup" + JSESSIONID_URL)
.expectHeader().valueMatches("location", URL_REGEX + "/login" + JSESSIONID_URL)
.expectStatus().is3xxRedirection();
}
}

0 comments on commit b8b8883

Please sign in to comment.