Skip to content
Open
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
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

implementation 'dev.akkinoc.spring.boot:logback-access-spring-boot-starter:4.0.0'

Expand Down
11 changes: 11 additions & 0 deletions src/main/java/roomescape/member/Member.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,23 @@
package roomescape.member;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
private String password;
private String role;

public Member() {
}
Comment on lines +18 to +19

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

jpa를 사용하기 위해 추가한 기본생성자는 public 접근 제어자 보다는 protected 접근제어자가 좋을 것 같습니다.


public Member(Long id, String name, String email, String role) {
this.id = id;
this.name = name;
Expand Down
72 changes: 0 additions & 72 deletions src/main/java/roomescape/member/MemberDao.java

This file was deleted.

13 changes: 13 additions & 0 deletions src/main/java/roomescape/member/MemberRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
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);


}
17 changes: 11 additions & 6 deletions src/main/java/roomescape/member/MemberService.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,32 @@

@Service
public class MemberService {
private MemberDao memberDao;
private MemberRepository memberRepository;

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

public MemberResponse createMember(MemberRequest memberRequest) {
Member member = memberDao.save(new Member(memberRequest.getName(), memberRequest.getEmail(), memberRequest.getPassword(), "USER"));
Member member = memberRepository.save(new Member(memberRequest.getName(), memberRequest.getEmail(), memberRequest.getPassword(), "USER"));
return new MemberResponse(member.getId(), member.getName(), member.getEmail(), member.getRole());
}

public MemberResponse findById(Long id) {
Optional<Member> optionalMember = memberDao.findById(id);
Optional<Member> optionalMember = memberRepository.findById(id);
Member member = optionalMember.orElseThrow(() -> new IllegalArgumentException("해당 id를 가진 Member 객체를 찾을 수 없습니다."));
return new MemberResponse(member.getId(), member.getName(), member.getEmail(), member.getRole());
}

public MemberResponse findByEmailAndPassword(String email, String password) {
Optional<Member> optionalMember = memberDao.findByEmailAndPassword(email, password);
Optional<Member> optionalMember = memberRepository.findByEmailAndPassword(email, password);
Member member = optionalMember.orElseThrow(() -> new IllegalArgumentException("해당 email와 password를 가진 Member 객체를 찾을 수 없습니다."));
return new MemberResponse(member.getId(), member.getName(), member.getEmail(), member.getRole());
}

public Member findByName(String name) {
return memberRepository.findByName(name)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 회원"));
}
Comment on lines +31 to +34

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 해당 method는 reservation을 생성하는 메소드에서 사용하는데 유저의 존재 여부를 검증 후 불러올 때에는 name 보다는 id를 이용하는 것이 좋습니다. 그 이유는 name 같은 경우에는 동명이인이 있을 수 있기 때문에 잘못된 유저 정보를 가져올 수 있기 때문에 id 처럼 유일한 정보를 바탕으로 객체 정보를 불러오는 것이 좋습니다.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 넵 맞습니다 !! 그런데 주어진 테스트코드에서

void 이단계() {
        String token = createToken("[email protected]", "password");

        Map<String, String> params = new HashMap<>();
        params.put("date", "2024-03-01");
        params.put("time", "1");
        params.put("theme", "1");

        ExtractableResponse<Response> response = RestAssured.given().log().all()
            .body(params)
            .cookie("token", token)
            .contentType(ContentType.JSON)
            .post("/reservations")
            .then().log().all()
            .extract();

        assertThat(response.statusCode()).isEqualTo(201);
        assertThat(response.as(ReservationResponse.class).getName()).isEqualTo("어드민");

        params.put("name", "브라운");

        ExtractableResponse<Response> adminResponse = RestAssured.given().log().all()
            .body(params)
            .cookie("token", token)
            .contentType(ContentType.JSON)
            .post("/reservations")
            .then().log().all()
            .extract();

        assertThat(adminResponse.statusCode()).isEqualTo(201);
        assertThat(adminResponse.as(ReservationResponse.class).getName()).isEqualTo("브라운");
    }
    ```
와 같이 name이 주어지는 경우가 있어 위와 같이 구현하였었습니다..!


}
64 changes: 64 additions & 0 deletions src/main/java/roomescape/reservation/MyReservationResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package roomescape.reservation;


import roomescape.waiting.WaitingResponse;

public class MyReservationResponse {

private Long id;
private String theme;
private String date;
private String time;
private String status;

private MyReservationResponse() {
}

private MyReservationResponse(Long id, String theme, String date, String time, String status) {
this.id = id;
this.theme = theme;
this.date = date;
this.time = time;
this.status = status;
}

public static MyReservationResponse from(Reservation reservation) {
return new MyReservationResponse(
reservation.getId(),
reservation.getTheme().getName(),
reservation.getDate(),
reservation.getTime().getValue(),
"예약"
);
}

public static MyReservationResponse from(WaitingResponse waitingResponse) {
return new MyReservationResponse(
waitingResponse.getId(),
waitingResponse.getTheme(),
waitingResponse.getDate(),
waitingResponse.getTime(),
waitingResponse.getWaitingNumber() + "번째 예약대기"
);
}

public Long getId() {
return id;
}

public String getTheme() {
return theme;
}

public String getDate() {
return date;
}

public String getTime() {
return time;
}

public String getStatus() {
return status;
}
}
43 changes: 34 additions & 9 deletions src/main/java/roomescape/reservation/Reservation.java
Original file line number Diff line number Diff line change
@@ -1,40 +1,64 @@
package roomescape.reservation;

import jakarta.persistence.Entity;
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;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;
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) {
protected Reservation() {

}

public Reservation(Long id, Member member, String date, Time time, Theme theme) {
this.id = id;
this.name = name;
this.member= member;
this.date = date;
this.time = time;
this.theme = theme;
}

public Reservation(String name, String date, Time time, Theme theme) {
this.name = name;
public Reservation(Member member, String date, Time time, Theme theme) {
this.member = member;
this.date = date;
this.time = time;
this.theme = theme;
}

public Reservation() {

}

public Long getId() {
return id;
}

public String getName() {
return name;
public String getMemberName() {
return member.getName();
}

public String geeeet() {
return member.getId().toString();
}

public String getDate() {
Expand All @@ -48,4 +72,5 @@ public Time getTime() {
public Theme getTheme() {
return theme;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import java.util.List;
import roomescape.login.LoginMember;
import roomescape.member.Member;
import roomescape.member.MemberResponse;

@RestController
public class ReservationController {
Expand All @@ -39,7 +38,7 @@ public ResponseEntity create(@RequestBody ReservationRequest reservationRequest,
|| reservationRequest.getTime() == null) {
return ResponseEntity.badRequest().build();
}
ReservationResponse reservation = reservationService.save(reservationRequest);
ReservationResponse reservation = reservationService.save(reservationRequest, member);

return ResponseEntity.created(URI.create("/reservations/" + reservation.getId())).body(reservation);
}
Expand All @@ -49,4 +48,9 @@ public ResponseEntity delete(@PathVariable Long id) {
reservationService.deleteById(id);
return ResponseEntity.noContent().build();
}

@GetMapping("/reservations-mine")
public List<MyReservationResponse> getReservationList(@LoginMember Member member) {
return reservationService.findAllMine(member.getId());
}
}
Loading