From e08e254409fcc08462fd28cee995b8f380f7794a Mon Sep 17 00:00:00 2001 From: mmm307955 Date: Sat, 16 Aug 2025 12:57:19 +0900 Subject: [PATCH 1/4] docs: update README.md --- README.md | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ img_1.png | Bin 0 -> 131735 bytes img_2.png | Bin 0 -> 64580 bytes 3 files changed, 161 insertions(+) create mode 100644 img_1.png create mode 100644 img_2.png diff --git a/README.md b/README.md index ca861f26..2c9c4c2c 100644 --- a/README.md +++ b/README.md @@ -193,3 +193,164 @@ public class MissionStepTest { } } ``` +## πŸš€ 4단계 - JPA μ „ν™˜ +### μš”κ΅¬μ‚¬ν•­ +- [ ] JPAλ₯Ό ν™œμš©ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜λ„λ‘ μˆ˜μ •ν•˜μ„Έμš”. +### μ„ΈλΆ€ μš”κ΅¬μ‚¬ν•­ +#### gradle μ˜μ‘΄μ„± μΆ”κ°€ +- [ ] build.gradle νŒŒμΌμ„ μ΄μš©ν•˜μ—¬ λ‹€μŒ μ˜μ‘΄μ„±μ„ λŒ€μ²΄ν•˜μ„Έμš”. + - [ ] as is: spring-boot-stater-jdbc + - [ ] to be: spring-boot-starter-data-jpa +#### μ—”ν‹°ν‹° λ§€ν•‘ +- [ ] λ‹€λ₯Έ 클래슀λ₯Ό μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ” 클래슀 λ¨Όμ € μ—”ν‹°ν‹° 섀정을 ν•˜μ„Έμš”. + - [ ] ex) Themeλ‚˜ Time λ“± +#### 연관관계 λ§€ν•‘ +- [ ] λ‹€λ₯Έ ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜λŠ” ν΄λž˜μŠ€λŠ” 연관관계 맀핑을 μΆ”κ°€λ‘œ ν•˜μ„Έμš”. + - [ ] ex) Reservation은 Memberλ‚˜ Theme λ“±μ˜ 객체에 μ˜μ‘΄ν•©λ‹ˆλ‹€. +### μš”κ΅¬μ‚¬ν•­ ν…ŒμŠ€νŠΈ +```java +@DataJpaTest +public class JpaTest { + @Autowired + private TestEntityManager entityManager; + + @Autowired + private TimeRepository timeRepository; + + @Test + void 사단계() { + Time time = new Time("10:00"); + entityManager.persist(time); + entityManager.flush(); + + Time persistTime = timeRepository.findById(time.getId()).orElse(null); + + assertThat(persistTime.getTime()).isEqualTo(time.getTime()); + } +} + +``` + +## πŸš€ 5단계 - λ‚΄ μ˜ˆμ•½ λͺ©λ‘ 쑰회 +### μš”κ΅¬μ‚¬ν•­ +- [ ] λ‚΄ μ˜ˆμ•½ λͺ©λ‘μ„ μ‘°νšŒν•˜λŠ” APIλ₯Ό κ΅¬ν˜„ν•˜μ„Έμš”. +### λ‚΄ μ˜ˆμ•½ λͺ©λ‘ κΈ°λŠ₯ +- [ ] μ•„λž˜μ˜ request와 response μš”κ΅¬μ‚¬ν•­μ— 따라 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ„Έμš”. +#### Request +``` +GET /reservations-mine HTTP/1.1 +cookie: token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwibmFtZSI6IuyWtOuTnOuvvCIsInJvbGUiOiJBRE1JTiJ9.vcK93ONRQYPFCxT5KleSM6b7cl1FE-neSLKaFyslsZM +host: localhost:8080 +``` +#### Response +``` +HTTP/1.1 200 +Content-Type: application/json + +[ + { + "reservationId": 1, + "theme": "ν…Œλ§ˆ1", + "date": "2024-03-01", + "time": "10:00", + "status": "μ˜ˆμ•½" + }, + { + "reservationId": 2, + "theme": "ν…Œλ§ˆ2", + "date": "2024-03-01", + "time": "12:00", + "status": "μ˜ˆμ•½" + }, + { + "reservationId": 3, + "theme": "ν…Œλ§ˆ3", + "date": "2024-03-01", + "time": "14:00", + "status": "μ˜ˆμ•½" + } +] + +``` +### μš”κ΅¬μ‚¬ν•­ ν…ŒμŠ€νŠΈ +```java +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +public class MissionStepTest { + @Test + void μ˜€λ‹¨κ³„() { + String adminToken = createToken("admin@email.com", "password"); + + List reservations = RestAssured.given().log().all() + .cookie("token", adminToken) + .get("/reservations-mine") + .then().log().all() + .statusCode(200) + .extract().jsonPath().getList(".", MyReservationResponse.class); + + assertThat(reservations).hasSize(3); + } +} +``` + +## πŸš€ 6단계 - μ˜ˆμ•½ λŒ€κΈ° κΈ°λŠ₯ +### μš”κ΅¬μ‚¬ν•­ +- [ ] μ˜ˆμ•½ λŒ€κΈ° μš”μ²­ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ„Έμš”. +- [ ] μ˜ˆμ•½ λŒ€κΈ° μ·¨μ†Œ κΈ°λŠ₯도 ν•¨κ»˜ κ΅¬ν˜„ν•˜μ„Έμš”. +- [ ] λ‚΄ μ˜ˆμ•½ λͺ©λ‘ 쑰회 μ‹œ μ˜ˆμ•½ λŒ€κΈ° λͺ©λ‘λ„ ν•¨κ»˜ ν¬ν•¨ν•˜μ„Έμš”. +- [ ] 쀑볡 μ˜ˆμ•½μ΄ λΆˆκ°€λŠ₯ ν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ„Έμš”. + +> - [ ] ⚠️ 심화 μš”κ΅¬μ‚¬ν•­ - λ‚΄ μ˜ˆμ•½ λͺ©λ‘μ˜ μ˜ˆμ•½ λŒ€κΈ° μƒνƒœμ— λͺ‡ 번째 λŒ€κΈ°μΈμ§€λ„ ν•¨κ»˜ ν‘œμ‹œν•˜μ„Έμš”. +#### μ˜ˆμ•½ λŒ€κΈ° μš”μ²­ +![img_1.png](img_1.png) +#### λ‚΄ μ˜ˆμ•½ λͺ©λ‘μ—μ„œ 쑰회 & μ˜ˆμ•½ λŒ€κΈ° μ·¨μ†Œ +![img_2.png](img_2.png) +### μš”κ΅¬μ‚¬ν•­ ν…ŒμŠ€νŠΈ +```java +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +public class MissionStepTest { + @Test + void μœ‘λ‹¨κ³„() { + String brownToken = createToken("brown@email.com", "password"); + + Map params = new HashMap<>(); + params.put("date", "2024-03-01"); + params.put("time", "1"); + params.put("theme", "1"); + + // μ˜ˆμ•½ λŒ€κΈ° 생성 + WaitingResponse waiting = RestAssured.given().log().all() + .body(params) + .cookie("token", brownToken) + .contentType(ContentType.JSON) + .post("/waitings") + .then().log().all() + .statusCode(201) + .extract().as(WaitingResponse.class); + + // λ‚΄ μ˜ˆμ•½ λͺ©λ‘ 쑰회 + List myReservations = RestAssured.given().log().all() + .body(params) + .cookie("token", brownToken) + .contentType(ContentType.JSON) + .get("/reservations-mine") + .then().log().all() + .statusCode(200) + .extract().jsonPath().getList(".", MyReservationResponse.class); + + // μ˜ˆμ•½ λŒ€κΈ° μƒνƒœ 확인 + String status = myReservations.stream() + .filter(it -> it.getId() == waiting.getId()) + .filter(it -> !it.getStatus().equals("μ˜ˆμ•½")) + .findFirst() + .map(it -> it.getStatus()) + .orElse(null); + + assertThat(status).isEqualTo("1번째 μ˜ˆμ•½λŒ€κΈ°"); + } +} + + +``` + diff --git a/img_1.png b/img_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c1c0b69c4076277eb8a7b16eda34f39765c18135 GIT binary patch literal 131735 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
  • D!9zXhd;6ElB}N$4 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 literal 0 HcmV?d00001 diff --git a/img_2.png b/img_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d27d5221335e34410bed10b287209c045f9d4052 GIT binary patch literal 64580 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 literal 0 HcmV?d00001 From c5fa8dd8601e27de6a1a92005bab13f357fb6170 Mon Sep 17 00:00:00 2001 From: mmm307955 Date: Tue, 19 Aug 2025 13:10:16 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat:=204=EB=8B=A8=EA=B3=84=20-=20JPA=20?= =?UTF-8?q?=EC=A0=84=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +-- build.gradle | 2 +- .../java/roomescape/auth/AuthService.java | 17 ++- src/main/java/roomescape/member/Member.java | 11 ++ .../java/roomescape/member/MemberDao.java | 75 ---------- .../roomescape/member/MemberRepository.java | 10 ++ .../java/roomescape/member/MemberService.java | 11 +- .../roomescape/reservation/Reservation.java | 19 ++- .../reservation/ReservationDao.java | 132 ------------------ .../reservation/ReservationRepository.java | 8 ++ .../reservation/ReservationService.java | 60 +++++--- src/main/java/roomescape/theme/Theme.java | 10 +- .../roomescape/theme/ThemeController.java | 25 ++-- src/main/java/roomescape/theme/ThemeDao.java | 42 ------ .../roomescape/theme/ThemeRepository.java | 8 ++ .../java/roomescape/theme/ThemeRequest.java | 4 + .../java/roomescape/theme/ThemeResponse.java | 7 + src/main/java/roomescape/time/Time.java | 28 ++-- .../java/roomescape/time/TimeController.java | 12 +- src/main/java/roomescape/time/TimeDao.java | 41 ------ .../java/roomescape/time/TimeRepository.java | 9 ++ .../java/roomescape/time/TimeService.java | 39 +++--- src/main/resources/application.properties | 8 +- src/main/resources/schema.sql | 78 +++++------ src/test/java/roomescape/JpaTest.java | 31 ++++ 25 files changed, 281 insertions(+), 422 deletions(-) delete mode 100644 src/main/java/roomescape/member/MemberDao.java create mode 100644 src/main/java/roomescape/member/MemberRepository.java delete mode 100644 src/main/java/roomescape/reservation/ReservationDao.java create mode 100644 src/main/java/roomescape/reservation/ReservationRepository.java delete mode 100644 src/main/java/roomescape/theme/ThemeDao.java create mode 100644 src/main/java/roomescape/theme/ThemeRepository.java create mode 100644 src/main/java/roomescape/theme/ThemeRequest.java create mode 100644 src/main/java/roomescape/theme/ThemeResponse.java delete mode 100644 src/main/java/roomescape/time/TimeDao.java create mode 100644 src/main/java/roomescape/time/TimeRepository.java create mode 100644 src/test/java/roomescape/JpaTest.java diff --git a/README.md b/README.md index 2c9c4c2c..44172920 100644 --- a/README.md +++ b/README.md @@ -195,18 +195,18 @@ public class MissionStepTest { ``` ## πŸš€ 4단계 - JPA μ „ν™˜ ### μš”κ΅¬μ‚¬ν•­ -- [ ] JPAλ₯Ό ν™œμš©ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜λ„λ‘ μˆ˜μ •ν•˜μ„Έμš”. +- [x] JPAλ₯Ό ν™œμš©ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜λ„λ‘ μˆ˜μ •ν•˜μ„Έμš”. ### μ„ΈλΆ€ μš”κ΅¬μ‚¬ν•­ #### gradle μ˜μ‘΄μ„± μΆ”κ°€ -- [ ] build.gradle νŒŒμΌμ„ μ΄μš©ν•˜μ—¬ λ‹€μŒ μ˜μ‘΄μ„±μ„ λŒ€μ²΄ν•˜μ„Έμš”. - - [ ] as is: spring-boot-stater-jdbc - - [ ] to be: spring-boot-starter-data-jpa +- [x] build.gradle νŒŒμΌμ„ μ΄μš©ν•˜μ—¬ λ‹€μŒ μ˜μ‘΄μ„±μ„ λŒ€μ²΄ν•˜μ„Έμš”. + - [x] as is: spring-boot-stater-jdbc + - [x] to be: spring-boot-starter-data-jpa #### μ—”ν‹°ν‹° λ§€ν•‘ -- [ ] λ‹€λ₯Έ 클래슀λ₯Ό μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ” 클래슀 λ¨Όμ € μ—”ν‹°ν‹° 섀정을 ν•˜μ„Έμš”. - - [ ] ex) Themeλ‚˜ Time λ“± +- [x] λ‹€λ₯Έ 클래슀λ₯Ό μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ” 클래슀 λ¨Όμ € μ—”ν‹°ν‹° 섀정을 ν•˜μ„Έμš”. + - [x] ex) Themeλ‚˜ Time λ“± #### 연관관계 λ§€ν•‘ -- [ ] λ‹€λ₯Έ ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜λŠ” ν΄λž˜μŠ€λŠ” 연관관계 맀핑을 μΆ”κ°€λ‘œ ν•˜μ„Έμš”. - - [ ] ex) Reservation은 Memberλ‚˜ Theme λ“±μ˜ 객체에 μ˜μ‘΄ν•©λ‹ˆλ‹€. +- [x] λ‹€λ₯Έ ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜λŠ” ν΄λž˜μŠ€λŠ” 연관관계 맀핑을 μΆ”κ°€λ‘œ ν•˜μ„Έμš”. + - [x] ex) Reservation은 Memberλ‚˜ Theme λ“±μ˜ 객체에 μ˜μ‘΄ν•©λ‹ˆλ‹€. ### μš”κ΅¬μ‚¬ν•­ ν…ŒμŠ€νŠΈ ```java @DataJpaTest diff --git a/build.gradle b/build.gradle index 8d52aebc..9bc129a0 100644 --- a/build.gradle +++ b/build.gradle @@ -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' diff --git a/src/main/java/roomescape/auth/AuthService.java b/src/main/java/roomescape/auth/AuthService.java index f48933bb..5b77d4d0 100644 --- a/src/main/java/roomescape/auth/AuthService.java +++ b/src/main/java/roomescape/auth/AuthService.java @@ -4,28 +4,31 @@ import roomescape.auth.dto.LoginMember; import roomescape.auth.dto.LoginRequest; import roomescape.auth.jwt.TokenProvider; +import roomescape.exception.AuthorizationException; import roomescape.member.Member; -import roomescape.member.MemberDao; +import roomescape.member.MemberRepository; @Service public class AuthService { - private final MemberDao memberDao; + private final MemberRepository memberRepository; private final TokenProvider tokenProvider; - public AuthService(MemberDao memberDao, TokenProvider tokenProvider) { - this.memberDao = memberDao; + public AuthService(MemberRepository memberRepository, TokenProvider tokenProvider) { + this.memberRepository = memberRepository; this.tokenProvider = tokenProvider; } public String createToken(LoginRequest loginRequest) { - Member member = memberDao.findByEmailAndPassword(loginRequest.getEmail(), - loginRequest.getPassword()); + Member member = memberRepository.findByEmailAndPassword(loginRequest.getEmail(), + loginRequest.getPassword()) + .orElseThrow(() -> new AuthorizationException("μ‚¬μš©μžλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.")); return tokenProvider.createToken(member); } public LoginMember login(String email, String password) { - Member member = memberDao.findByEmailAndPassword(email, password); + Member member = memberRepository.findByEmailAndPassword(email, password) + .orElseThrow(() -> new AuthorizationException("μ‚¬μš©μžλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.")); return new LoginMember( member.getId(), member.getName(), diff --git a/src/main/java/roomescape/member/Member.java b/src/main/java/roomescape/member/Member.java index 3e0dfc10..e9521042 100644 --- a/src/main/java/roomescape/member/Member.java +++ b/src/main/java/roomescape/member/Member.java @@ -1,6 +1,14 @@ 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; @@ -29,6 +37,9 @@ public Member(String name, String email, String password, String role) { this.role = role; } + protected Member() { + } + public Long getId() { return id; } diff --git a/src/main/java/roomescape/member/MemberDao.java b/src/main/java/roomescape/member/MemberDao.java deleted file mode 100644 index 5256a593..00000000 --- a/src/main/java/roomescape/member/MemberDao.java +++ /dev/null @@ -1,75 +0,0 @@ -package roomescape.member; - -import java.util.List; -import java.util.Optional; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.support.GeneratedKeyHolder; -import org.springframework.jdbc.support.KeyHolder; -import org.springframework.stereotype.Repository; - -@Repository -public class MemberDao { - private JdbcTemplate jdbcTemplate; - - public MemberDao(JdbcTemplate jdbcTemplate) { - this.jdbcTemplate = jdbcTemplate; - } - - public Member save(Member member) { - KeyHolder keyHolder = new GeneratedKeyHolder(); - jdbcTemplate.update(connection -> { - var ps = connection.prepareStatement( - "INSERT INTO member(name, email, password, role) VALUES (?, ?, ?, ?)", - new String[]{"id"}); - ps.setString(1, member.getName()); - ps.setString(2, member.getEmail()); - ps.setString(3, member.getPassword()); - ps.setString(4, member.getRole()); - return ps; - }, keyHolder); - - return new Member(keyHolder.getKey().longValue(), member.getName(), member.getEmail(), - member.getRole()); - } - - public Member findByEmailAndPassword(String email, String password) { - return jdbcTemplate.queryForObject( - "SELECT id, name, email, role FROM member WHERE email = ? AND password = ?", - (rs, rowNum) -> new Member( - rs.getLong("id"), - rs.getString("name"), - rs.getString("email"), - rs.getString("role") - ), - email, password - ); - } - - public Member findByName(String name) { - return jdbcTemplate.queryForObject( - "SELECT id, name, email, role FROM member WHERE name = ?", - (rs, rowNum) -> new Member( - rs.getLong("id"), - rs.getString("name"), - rs.getString("email"), - rs.getString("role") - ), - name - ); - } - - public Optional findById(Long id) { - List result = jdbcTemplate.query( - "SELECT id, name, email, password, role FROM member WHERE id = ?", - (rs, rowNum) -> new Member( - rs.getLong("id"), - rs.getString("name"), - rs.getString("email"), - rs.getString("password"), - rs.getString("role") - ), - id - ); - return result.stream().findAny(); - } -} diff --git a/src/main/java/roomescape/member/MemberRepository.java b/src/main/java/roomescape/member/MemberRepository.java new file mode 100644 index 00000000..32b482dc --- /dev/null +++ b/src/main/java/roomescape/member/MemberRepository.java @@ -0,0 +1,10 @@ +package roomescape.member; + +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface MemberRepository extends JpaRepository { + Optional findByEmailAndPassword(String email, String password); +} diff --git a/src/main/java/roomescape/member/MemberService.java b/src/main/java/roomescape/member/MemberService.java index dd8dea76..b0c40075 100644 --- a/src/main/java/roomescape/member/MemberService.java +++ b/src/main/java/roomescape/member/MemberService.java @@ -4,15 +4,16 @@ @Service public class MemberService { - private MemberDao memberDao; + private final 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()); } } diff --git a/src/main/java/roomescape/reservation/Reservation.java b/src/main/java/roomescape/reservation/Reservation.java index 83a7edf1..db040fbf 100644 --- a/src/main/java/roomescape/reservation/Reservation.java +++ b/src/main/java/roomescape/reservation/Reservation.java @@ -1,13 +1,29 @@ 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.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) { @@ -25,8 +41,7 @@ public Reservation(String name, String date, Time time, Theme theme) { this.theme = theme; } - public Reservation() { - + protected Reservation() { } public Long getId() { diff --git a/src/main/java/roomescape/reservation/ReservationDao.java b/src/main/java/roomescape/reservation/ReservationDao.java deleted file mode 100644 index d6902e68..00000000 --- a/src/main/java/roomescape/reservation/ReservationDao.java +++ /dev/null @@ -1,132 +0,0 @@ -package roomescape.reservation; - -import java.sql.PreparedStatement; -import java.util.List; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.support.GeneratedKeyHolder; -import org.springframework.jdbc.support.KeyHolder; -import org.springframework.stereotype.Repository; -import roomescape.theme.Theme; -import roomescape.time.Time; - -@Repository -public class ReservationDao { - - private final JdbcTemplate jdbcTemplate; - - public ReservationDao(JdbcTemplate jdbcTemplate) { - this.jdbcTemplate = jdbcTemplate; - } - - public List findAll() { - return jdbcTemplate.query( - "SELECT r.id AS reservation_id, r.name as reservation_name, r.date as reservation_date, " - + - "t.id AS theme_id, t.name AS theme_name, t.description AS theme_description, " + - "ti.id AS time_id, ti.time_value AS time_value " + - "FROM reservation r " + - "JOIN theme t ON r.theme_id = t.id " + - "JOIN time ti ON r.time_id = ti.id", - - (rs, rowNum) -> new Reservation( - rs.getLong("reservation_id"), - rs.getString("reservation_name"), - rs.getString("reservation_date"), - new Time( - rs.getLong("time_id"), - rs.getString("time_value") - ), - new Theme( - rs.getLong("theme_id"), - rs.getString("theme_name"), - rs.getString("theme_description") - ))); - } - - public Reservation save(ReservationRequest reservationRequest) { - KeyHolder keyHolder = new GeneratedKeyHolder(); - jdbcTemplate.update(connection -> { - PreparedStatement ps = connection.prepareStatement( - "INSERT INTO reservation(date, name, theme_id, time_id) VALUES (?, ?, ?, ?)", - new String[]{"id"}); - ps.setString(1, reservationRequest.getDate()); - ps.setString(2, reservationRequest.getName()); - ps.setLong(3, reservationRequest.getTheme()); - ps.setLong(4, reservationRequest.getTime()); - return ps; - }, keyHolder); - - Time time = jdbcTemplate.queryForObject("SELECT * FROM time WHERE id = ?", - (rs, rowNum) -> new Time(rs.getLong("id"), rs.getString("time_value")), - reservationRequest.getTime()); - - Theme theme = jdbcTemplate.queryForObject("SELECT * FROM theme WHERE id = ?", - (rs, rowNum) -> new Theme(rs.getLong("id"), rs.getString("name"), - rs.getString("description")), - reservationRequest.getTheme()); - - return new Reservation( - keyHolder.getKey().longValue(), - reservationRequest.getName(), - reservationRequest.getDate(), - time, - theme - ); - } - - public void deleteById(Long id) { - jdbcTemplate.update("DELETE FROM reservation WHERE id = ?", id); - } - - public List findReservationsByDateAndTheme(String date, Long themeId) { - return jdbcTemplate.query( - "SELECT r.id AS reservation_id, r.name as reservation_name, r.date as reservation_date, " - + - "t.id AS theme_id, t.name AS theme_name, t.description AS theme_description, " + - "ti.id AS time_id, ti.time_value AS time_value " + - "FROM reservation r " + - "JOIN theme t ON r.theme_id = t.id " + - "JOIN time ti ON r.time_id = ti.id" + - "WHERE r.date = ? AND r.theme_id = ?", - new Object[]{date, themeId}, - (rs, rowNum) -> new Reservation( - rs.getLong("reservation_id"), - rs.getString("reservation_name"), - rs.getString("reservation_date"), - new Time( - rs.getLong("time_id"), - rs.getString("time_value") - ), - new Theme( - rs.getLong("theme_id"), - rs.getString("theme_name"), - rs.getString("theme_description") - ))); - } - - public List findByDateAndThemeId(String date, Long themeId) { - return jdbcTemplate.query( - "SELECT r.id AS reservation_id, r.name as reservation_name, r.date as reservation_date, " - + - "t.id AS theme_id, t.name AS theme_name, t.description AS theme_description, " + - "ti.id AS time_id, ti.time_value AS time_value " + - "FROM reservation r " + - "JOIN theme t ON r.theme_id = t.id " + - "JOIN time ti ON r.time_id = ti.id " + - "WHERE r.date = ? AND r.theme_id = ?", - new Object[]{date, themeId}, - (rs, rowNum) -> new Reservation( - rs.getLong("reservation_id"), - rs.getString("reservation_name"), - rs.getString("reservation_date"), - new Time( - rs.getLong("time_id"), - rs.getString("time_value") - ), - new Theme( - rs.getLong("theme_id"), - rs.getString("theme_name"), - rs.getString("theme_description") - ))); - } -} diff --git a/src/main/java/roomescape/reservation/ReservationRepository.java b/src/main/java/roomescape/reservation/ReservationRepository.java new file mode 100644 index 00000000..2adee519 --- /dev/null +++ b/src/main/java/roomescape/reservation/ReservationRepository.java @@ -0,0 +1,8 @@ +package roomescape.reservation; + +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ReservationRepository extends JpaRepository { + List findByDateAndThemeId(String date, Long themeId); +} diff --git a/src/main/java/roomescape/reservation/ReservationService.java b/src/main/java/roomescape/reservation/ReservationService.java index 0fde1027..0ca95da1 100644 --- a/src/main/java/roomescape/reservation/ReservationService.java +++ b/src/main/java/roomescape/reservation/ReservationService.java @@ -2,24 +2,50 @@ import java.util.List; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import roomescape.auth.dto.LoginMember; +import roomescape.theme.Theme; +import roomescape.theme.ThemeRepository; +import roomescape.time.Time; +import roomescape.time.TimeRepository; @Service public class ReservationService { - private final ReservationDao reservationDao; + private final ReservationRepository reservationRepository; + private final ThemeRepository themeRepository; + private final TimeRepository timeRepository; - public ReservationService(ReservationDao reservationDao) { - this.reservationDao = reservationDao; + public ReservationService(ReservationRepository reservationRepository, + ThemeRepository themeRepository, TimeRepository timeRepository) { + this.reservationRepository = reservationRepository; + this.themeRepository = themeRepository; + this.timeRepository = timeRepository; } - public ReservationResponse save(ReservationRequest reservationRequest) { - Reservation reservation = reservationDao.save(reservationRequest); + @Transactional + public ReservationResponse save(ReservationRequest request) { + Theme theme = themeRepository.findById(request.getTheme()) + .orElseThrow( + () -> new IllegalArgumentException("μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν…Œλ§ˆμž…λ‹ˆλ‹€. id=" + request.getTheme())); + Time time = timeRepository.findById(request.getTime()) + .orElseThrow( + () -> new IllegalArgumentException("μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ‹œκ°„μž…λ‹ˆλ‹€. id=" + request.getTime())); - return new ReservationResponse(reservation.getId(), reservationRequest.getName(), - reservation.getTheme().getName(), reservation.getDate(), - reservation.getTime().getValue()); + Reservation reservation = new Reservation( + request.getName(), + request.getDate(), + time, + theme + ); + + Reservation saved = reservationRepository.save(reservation); + + return new ReservationResponse(saved.getId(), saved.getName(), + saved.getTheme().getName(), saved.getDate(), + saved.getTime().getTime()); } + @Transactional public ReservationResponse save(ReservationRequest request, LoginMember member) { String name = request.getName(); @@ -27,26 +53,18 @@ public ReservationResponse save(ReservationRequest request, LoginMember member) name = member.name(); request.setName(name); } - - Reservation reservation = reservationDao.save(request); - - return new ReservationResponse( - reservation.getId(), - name, - reservation.getTheme().getName(), - reservation.getDate(), - reservation.getTime().getValue() - ); + return save(request); } + @Transactional public void deleteById(Long id) { - reservationDao.deleteById(id); + reservationRepository.deleteById(id); } public List findAll() { - return reservationDao.findAll().stream() + return reservationRepository.findAll().stream() .map(it -> new ReservationResponse(it.getId(), it.getName(), it.getTheme().getName(), - it.getDate(), it.getTime().getValue())) + it.getDate(), it.getTime().getTime())) .toList(); } } diff --git a/src/main/java/roomescape/theme/Theme.java b/src/main/java/roomescape/theme/Theme.java index 430a6239..9a18b734 100644 --- a/src/main/java/roomescape/theme/Theme.java +++ b/src/main/java/roomescape/theme/Theme.java @@ -1,11 +1,19 @@ package roomescape.theme; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +@Entity public class Theme { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String description; - public Theme() { + protected Theme() { } public Theme(Long id, String name, String description) { diff --git a/src/main/java/roomescape/theme/ThemeController.java b/src/main/java/roomescape/theme/ThemeController.java index fa7aef08..2cbb79a5 100644 --- a/src/main/java/roomescape/theme/ThemeController.java +++ b/src/main/java/roomescape/theme/ThemeController.java @@ -12,26 +12,33 @@ @RestController public class ThemeController { - private ThemeDao themeDao; + private final ThemeRepository themeRepository; - public ThemeController(ThemeDao themeDao) { - this.themeDao = themeDao; + public ThemeController(ThemeRepository themeRepository) { + this.themeRepository = themeRepository; } @PostMapping("/themes") - public ResponseEntity createTheme(@RequestBody Theme theme) { - Theme newTheme = themeDao.save(theme); - return ResponseEntity.created(URI.create("/themes/" + newTheme.getId())).body(newTheme); + public ResponseEntity createTheme(@RequestBody ThemeRequest request) { + Theme newTheme = themeRepository.save(new Theme(request.name(), request.description())); + return ResponseEntity.created(URI.create("/themes/" + newTheme.getId())) + .body(ThemeResponse.from(newTheme)); } @GetMapping("/themes") - public ResponseEntity> list() { - return ResponseEntity.ok(themeDao.findAll()); + public ResponseEntity> list() { + List result = themeRepository.findAll().stream() + .map(ThemeResponse::from) + .toList(); + return ResponseEntity.ok(result); } @DeleteMapping("/themes/{id}") public ResponseEntity deleteTheme(@PathVariable Long id) { - themeDao.deleteById(id); + if (!themeRepository.existsById(id)) { + return ResponseEntity.notFound().build(); + } + themeRepository.deleteById(id); return ResponseEntity.noContent().build(); } } diff --git a/src/main/java/roomescape/theme/ThemeDao.java b/src/main/java/roomescape/theme/ThemeDao.java deleted file mode 100644 index bd4cc55b..00000000 --- a/src/main/java/roomescape/theme/ThemeDao.java +++ /dev/null @@ -1,42 +0,0 @@ -package roomescape.theme; - -import java.util.List; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.support.GeneratedKeyHolder; -import org.springframework.jdbc.support.KeyHolder; -import org.springframework.stereotype.Repository; - -@Repository -public class ThemeDao { - private JdbcTemplate jdbcTemplate; - - public ThemeDao(JdbcTemplate jdbcTemplate) { - this.jdbcTemplate = jdbcTemplate; - } - - public List findAll() { - return jdbcTemplate.query("SELECT * FROM theme where deleted = false", - (rs, rowNum) -> new Theme( - rs.getLong("id"), - rs.getString("name"), - rs.getString("description") - )); - } - - public Theme save(Theme theme) { - KeyHolder keyHolder = new GeneratedKeyHolder(); - jdbcTemplate.update(connection -> { - var ps = connection.prepareStatement( - "INSERT INTO theme(name, description) VALUES (?, ?)", new String[]{"id"}); - ps.setString(1, theme.getName()); - ps.setString(2, theme.getDescription()); - return ps; - }, keyHolder); - - return new Theme(keyHolder.getKey().longValue(), theme.getName(), theme.getDescription()); - } - - public void deleteById(Long id) { - jdbcTemplate.update("UPDATE theme SET deleted = true WHERE id = ?", id); - } -} diff --git a/src/main/java/roomescape/theme/ThemeRepository.java b/src/main/java/roomescape/theme/ThemeRepository.java new file mode 100644 index 00000000..304cb0ef --- /dev/null +++ b/src/main/java/roomescape/theme/ThemeRepository.java @@ -0,0 +1,8 @@ +package roomescape.theme; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ThemeRepository extends JpaRepository { +} diff --git a/src/main/java/roomescape/theme/ThemeRequest.java b/src/main/java/roomescape/theme/ThemeRequest.java new file mode 100644 index 00000000..4acfab8b --- /dev/null +++ b/src/main/java/roomescape/theme/ThemeRequest.java @@ -0,0 +1,4 @@ +package roomescape.theme; + +public record ThemeRequest(String name, String description) { +} diff --git a/src/main/java/roomescape/theme/ThemeResponse.java b/src/main/java/roomescape/theme/ThemeResponse.java new file mode 100644 index 00000000..99fc401d --- /dev/null +++ b/src/main/java/roomescape/theme/ThemeResponse.java @@ -0,0 +1,7 @@ +package roomescape.theme; + +public record ThemeResponse(Long id, String name, String description) { + public static ThemeResponse from(Theme theme) { + return new ThemeResponse(theme.getId(), theme.getName(), theme.getDescription()); + } +} diff --git a/src/main/java/roomescape/time/Time.java b/src/main/java/roomescape/time/Time.java index 008ed93c..30ade351 100644 --- a/src/main/java/roomescape/time/Time.java +++ b/src/main/java/roomescape/time/Time.java @@ -1,27 +1,37 @@ package roomescape.time; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +@Entity public class Time { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - private String value; - public Time(Long id, String value) { + @Column(name = "time_value") + private String time; + + public Time(Long id, String time) { this.id = id; - this.value = value; + this.time = time; } - public Time(String value) { - this.value = value; + public Time(String time) { + this.time = time; } - public Time() { - + protected Time() { } public Long getId() { return id; } - public String getValue() { - return value; + public String getTime() { + return time; } } diff --git a/src/main/java/roomescape/time/TimeController.java b/src/main/java/roomescape/time/TimeController.java index 2343114d..8b026c23 100644 --- a/src/main/java/roomescape/time/TimeController.java +++ b/src/main/java/roomescape/time/TimeController.java @@ -1,5 +1,7 @@ package roomescape.time; +import java.net.URI; +import java.util.List; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -9,9 +11,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.net.URI; -import java.util.List; - @RestController public class TimeController { private TimeService timeService; @@ -27,7 +26,7 @@ public List