refactor: 회원 repository & service 코틀린 변환

This commit is contained in:
이상진 2025-07-12 19:55:44 +09:00
parent 6954baf95f
commit 65eddf6b3c
6 changed files with 47 additions and 57 deletions

View File

@ -1,47 +1,40 @@
package roomescape.member.business; package roomescape.member.business
import java.util.List; import org.springframework.data.repository.findByIdOrNull
import org.springframework.http.HttpStatus
import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service
import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional
import org.springframework.transaction.annotation.Transactional; import roomescape.member.infrastructure.entity.Member
import roomescape.member.infrastructure.entity.MemberRepository
import roomescape.member.infrastructure.entity.Member; import roomescape.member.web.MembersResponse
import roomescape.member.infrastructure.entity.MemberRepository; import roomescape.member.web.toResponse
import roomescape.member.web.MemberResponse; import roomescape.system.exception.ErrorType
import roomescape.member.web.MembersResponse; import roomescape.system.exception.RoomEscapeException
import roomescape.system.exception.ErrorType;
import roomescape.system.exception.RoomEscapeException;
@Service @Service
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Transactional(readOnly = true) @Transactional(readOnly = true)
public MembersResponse findAllMembers() { class MemberService(
List<MemberResponse> response = memberRepository.findAll().stream() private val memberRepository: MemberRepository
.map(MemberResponse::fromEntity) ) {
.toList(); fun readAllMembers(): MembersResponse = MembersResponse(
memberRepository.findAll()
.map { it.toResponse() }
.toList()
)
return new MembersResponse(response); fun findById(memberId: Long): Member = memberRepository.findByIdOrNull(memberId)
?: throw RoomEscapeException(
ErrorType.MEMBER_NOT_FOUND,
String.format("[memberId: %d]", memberId),
HttpStatus.BAD_REQUEST
)
fun findMemberByEmailAndPassword(email: String, password: String): Member =
memberRepository.findByEmailAndPassword(email, password)
?: throw RoomEscapeException(
ErrorType.MEMBER_NOT_FOUND,
String.format("[email: %s, password: %s]", email, password),
HttpStatus.BAD_REQUEST
)
} }
@Transactional(readOnly = true)
public Member findMemberById(Long memberId) {
return memberRepository.findById(memberId)
.orElseThrow(() -> new RoomEscapeException(ErrorType.MEMBER_NOT_FOUND,
String.format("[memberId: %d]", memberId), HttpStatus.BAD_REQUEST));
}
@Transactional(readOnly = true)
public Member findMemberByEmailAndPassword(String email, String password) {
return memberRepository.findByEmailAndPassword(email, password)
.orElseThrow(() -> new RoomEscapeException(ErrorType.MEMBER_NOT_FOUND,
String.format("[email: %s, password: %s]", email, password), HttpStatus.BAD_REQUEST));
}
}

View File

@ -1,10 +1,7 @@
package roomescape.member.infrastructure.entity; package roomescape.member.infrastructure.entity
import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.JpaRepository; interface MemberRepository : JpaRepository<Member, Long> {
fun findByEmailAndPassword(email: String, password: String): Member?
public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findByEmailAndPassword(String email, String password);
} }

View File

@ -9,8 +9,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import roomescape.member.infrastructure.entity.Member;
import roomescape.member.business.MemberService; import roomescape.member.business.MemberService;
import roomescape.member.infrastructure.entity.Member;
import roomescape.reservation.domain.Reservation; import roomescape.reservation.domain.Reservation;
import roomescape.reservation.domain.ReservationStatus; import roomescape.reservation.domain.ReservationStatus;
import roomescape.reservation.domain.ReservationTime; import roomescape.reservation.domain.ReservationTime;
@ -147,7 +147,7 @@ public class ReservationService {
ReservationStatus status) { ReservationStatus status) {
ReservationTime time = reservationTimeService.findTimeById(timeId); ReservationTime time = reservationTimeService.findTimeById(timeId);
Theme theme = themeService.findThemeById(themeId); Theme theme = themeService.findThemeById(themeId);
Member member = memberService.findMemberById(memberId); Member member = memberService.findById(memberId);
validateDateAndTime(date, time); validateDateAndTime(date, time);
return new Reservation(date, time, theme, member, status); return new Reservation(date, time, theme, member, status);
@ -213,7 +213,7 @@ public class ReservationService {
} }
private void validateIsMemberAdmin(Long memberId) { private void validateIsMemberAdmin(Long memberId) {
Member member = memberService.findMemberById(memberId); Member member = memberService.findById(memberId);
if (member.isAdmin()) { if (member.isAdmin()) {
return; return;
} }

View File

@ -10,8 +10,8 @@ import org.springframework.web.servlet.HandlerInterceptor;
import jakarta.servlet.http.Cookie; import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import roomescape.member.infrastructure.entity.Member;
import roomescape.member.business.MemberService; import roomescape.member.business.MemberService;
import roomescape.member.infrastructure.entity.Member;
import roomescape.system.auth.annotation.Admin; import roomescape.system.auth.annotation.Admin;
import roomescape.system.auth.jwt.JwtHandler; import roomescape.system.auth.jwt.JwtHandler;
import roomescape.system.exception.ErrorType; import roomescape.system.exception.ErrorType;
@ -44,7 +44,7 @@ public class AdminInterceptor implements HandlerInterceptor {
try { try {
Cookie token = getToken(request); Cookie token = getToken(request);
Long memberId = jwtHandler.getMemberIdFromToken(token.getValue()); Long memberId = jwtHandler.getMemberIdFromToken(token.getValue());
member = memberService.findMemberById(memberId); member = memberService.findById(memberId);
} catch (RoomEscapeException e) { } catch (RoomEscapeException e) {
response.sendRedirect("/login"); response.sendRedirect("/login");
throw e; throw e;

View File

@ -10,8 +10,8 @@ import org.springframework.web.servlet.HandlerInterceptor;
import jakarta.servlet.http.Cookie; import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import roomescape.member.infrastructure.entity.Member;
import roomescape.member.business.MemberService; import roomescape.member.business.MemberService;
import roomescape.member.infrastructure.entity.Member;
import roomescape.system.auth.annotation.LoginRequired; import roomescape.system.auth.annotation.LoginRequired;
import roomescape.system.auth.jwt.JwtHandler; import roomescape.system.auth.jwt.JwtHandler;
import roomescape.system.exception.ErrorType; import roomescape.system.exception.ErrorType;
@ -44,7 +44,7 @@ public class LoginInterceptor implements HandlerInterceptor {
try { try {
Cookie token = getToken(request); Cookie token = getToken(request);
Long memberId = jwtHandler.getMemberIdFromToken(token.getValue()); Long memberId = jwtHandler.getMemberIdFromToken(token.getValue());
member = memberService.findMemberById(memberId); member = memberService.findById(memberId);
return member != null; return member != null;
} catch (RoomEscapeException e) { } catch (RoomEscapeException e) {
response.sendRedirect("/login"); response.sendRedirect("/login");

View File

@ -2,8 +2,8 @@ package roomescape.system.auth.service;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import roomescape.member.infrastructure.entity.Member;
import roomescape.member.business.MemberService; import roomescape.member.business.MemberService;
import roomescape.member.infrastructure.entity.Member;
import roomescape.system.auth.dto.LoginCheckResponse; import roomescape.system.auth.dto.LoginCheckResponse;
import roomescape.system.auth.dto.LoginRequest; import roomescape.system.auth.dto.LoginRequest;
import roomescape.system.auth.jwt.JwtHandler; import roomescape.system.auth.jwt.JwtHandler;
@ -27,7 +27,7 @@ public class AuthService {
} }
public LoginCheckResponse checkLogin(Long memberId) { public LoginCheckResponse checkLogin(Long memberId) {
Member member = memberService.findMemberById(memberId); Member member = memberService.findById(memberId);
return new LoginCheckResponse(member.getName()); return new LoginCheckResponse(member.getName());
} }