-
Notifications
You must be signed in to change notification settings - Fork 78
[Spring Data JPA] 이예진 미션 제출합니다 #191
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
base: yaevrai
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,34 +1,39 @@ | ||
| package roomescape.auth.service; | ||
|
|
||
| import org.springframework.stereotype.Service; | ||
| import roomescape.member.Member; | ||
| import roomescape.member.MemberDao; | ||
| import roomescape.member.MemberInfo; | ||
| import roomescape.auth.util.JwtPayload; | ||
| import roomescape.auth.util.JwtUtil; | ||
| import roomescape.member.Member; | ||
| import roomescape.member.MemberInfo; | ||
| import roomescape.member.MemberRepository; | ||
|
|
||
|
|
||
| @Service | ||
| public class LoginService { | ||
|
|
||
| private final MemberDao memberDao; | ||
| private final MemberRepository memberRepository; | ||
| private final JwtUtil jwtUtil; | ||
|
|
||
| public LoginService(MemberDao memberDao, JwtUtil jwtUtil) { | ||
| this.memberDao = memberDao; | ||
| public LoginService(MemberRepository memberRepository, JwtUtil jwtUtil) { | ||
| this.memberRepository = memberRepository; | ||
| this.jwtUtil = jwtUtil; | ||
| } | ||
|
|
||
| public String login(String email, String password) { | ||
| Member member = memberDao.findByEmailAndPassword(email, password); | ||
| Member member = memberRepository.findByEmailAndPassword(email, password) | ||
| .orElseThrow( | ||
| () -> new IllegalArgumentException("not found Member with email: " + email)); | ||
| return jwtUtil.createToken(member); | ||
| } | ||
|
|
||
| public MemberInfo check(String token) { | ||
| JwtPayload payload = jwtUtil.parseToken(token); | ||
| Member member = memberDao.findByName(payload.name()); | ||
| Member member = memberRepository.findByName(payload.name()) | ||
| .orElseThrow(() -> new IllegalArgumentException( | ||
| "not found Member with name: " + payload.name())); | ||
|
Comment on lines
-17
to
+33
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
|
|
||
| return new MemberInfo( | ||
| member.getId(), | ||
| member.getName(), | ||
| member.getRole() | ||
| ); | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| package roomescape.auth.util; | ||
|
|
||
| public record JwtPayload(String name, String role) { | ||
| public record JwtPayload(Long id, String name, String role) { | ||
|
|
||
| } |
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,7 @@ | ||
| package roomescape.member; | ||
|
|
||
| public record MemberInfo( | ||
| Long id, | ||
| String name, | ||
| String role | ||
| ) { | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| package roomescape.member; | ||
|
|
||
| import java.util.Optional; | ||
| import org.springframework.data.jpa.repository.JpaRepository; | ||
|
|
||
| public interface MemberRepository extends JpaRepository<Member, Long> { | ||
|
|
||
| Optional<Member> findByEmailAndPassword(String email, String password); | ||
|
|
||
| Optional<Member> findByName(String name); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| package roomescape.reservation; | ||
|
|
||
| public record MyReservationResponse( | ||
| Long reservationId, | ||
| String theme, | ||
| String date, | ||
| String time, | ||
| String status | ||
| ) { | ||
|
|
||
| public static MyReservationResponse from(Reservation reservation, Integer rank) { | ||
| return new MyReservationResponse( | ||
| reservation.getId(), | ||
| reservation.getTheme().getName(), | ||
| reservation.getDate(), | ||
| reservation.getTime().getValue(), | ||
| getStatus(reservation, rank) | ||
| ); | ||
| } | ||
|
|
||
| public static String getStatus(Reservation reservation, Integer rank) { | ||
| if (reservation.isWaiting()) { | ||
| return rank + "번째 예약대기"; | ||
| } | ||
| return "예약"; | ||
| } | ||
|
Comment on lines
+21
to
+26
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. DTO의 메서드에 접근자가 |
||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,34 +1,72 @@ | ||
| package roomescape.reservation; | ||
|
|
||
| import jakarta.persistence.Entity; | ||
| import jakarta.persistence.EnumType; | ||
| import jakarta.persistence.Enumerated; | ||
| import jakarta.persistence.FetchType; | ||
| import jakarta.persistence.GeneratedValue; | ||
| import jakarta.persistence.GenerationType; | ||
| import jakarta.persistence.Id; | ||
| import jakarta.persistence.JoinColumn; | ||
| import jakarta.persistence.ManyToOne; | ||
| import roomescape.member.Member; | ||
| import roomescape.theme.Theme; | ||
| import roomescape.time.Time; | ||
|
|
||
| @Entity | ||
| public class Reservation { | ||
|
|
||
| @Id | ||
| @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
| private Long id; | ||
| private String name; | ||
| private String date; | ||
|
|
||
| @ManyToOne(fetch = FetchType.LAZY) | ||
| @JoinColumn(name = "time_id") | ||
| private Time time; | ||
|
|
||
| @ManyToOne(fetch = FetchType.LAZY) | ||
| @JoinColumn(name = "theme_id") | ||
| private Theme theme; | ||
|
|
||
| public Reservation(Long id, String name, String date, Time time, Theme theme) { | ||
| this.id = id; | ||
| this.name = name; | ||
| this.date = date; | ||
| this.time = time; | ||
| this.theme = theme; | ||
| } | ||
| @ManyToOne(fetch = FetchType.LAZY) | ||
| @JoinColumn(name = "member_id") | ||
| private Member member; | ||
|
Comment on lines
+33
to
+35
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
|
|
||
| @Enumerated(EnumType.STRING) | ||
| private ReservationStatus status; | ||
|
|
||
| public Reservation(String name, String date, Time time, Theme theme) { | ||
| public Reservation(String name, String date, Time time, Theme theme, Member member, | ||
| ReservationStatus status) { | ||
| this.name = name; | ||
| this.date = date; | ||
| this.time = time; | ||
| this.theme = theme; | ||
| this.member = member; | ||
| this.status = status; | ||
| } | ||
|
|
||
| public Reservation() { | ||
|
|
||
| } | ||
|
|
||
| public boolean isOwnedBy(Long memberId) { | ||
| return this.member.getId().equals(memberId); | ||
| } | ||
|
|
||
| public boolean isReserved() { | ||
| return this.status == ReservationStatus.RESERVED; | ||
| } | ||
|
|
||
| public boolean isWaiting() { | ||
| return this.status == ReservationStatus.WAITING; | ||
| } | ||
|
|
||
| public void promoteToReserved() { | ||
| this.status = ReservationStatus.RESERVED; | ||
| } | ||
|
Comment on lines
+58
to
+68
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 상태를 직접 노출하지 않고, 명확한 이름으로 의미를 잘 전달하는군요! |
||
|
|
||
| public Long getId() { | ||
| return id; | ||
| } | ||
|
|
@@ -48,4 +86,12 @@ public Time getTime() { | |
| public Theme getTheme() { | ||
| return theme; | ||
| } | ||
|
|
||
| public Member getMember() { | ||
| return member; | ||
| } | ||
|
|
||
| public ReservationStatus getStatus() { | ||
| return status; | ||
| } | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NotFoundException은 언체크 예외인데, 메서드에 명시적으로 적어주신 이유가 있을까요?