From 42a0a8136b286d3c4298ca366d2d77e6266b6a32 Mon Sep 17 00:00:00 2001 From: gominnam Date: Thu, 13 Feb 2025 19:24:41 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20ShowtimeResponse=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EC=99=80=20=EC=A7=81=EB=A0=AC=ED=99=94=20Config=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 직렬화 하기위한 JacksonConfig 추가 - ShowtimeResponse DTO 추가 --- .../common/config/JacksonConfig.java | 18 ++++++ .../com/safeticket/event/EventController.java | 36 ++++++++++++ .../safeticket/event/dto/EventResponse.java | 5 ++ .../event/service/EventServiceImpl.java | 8 +++ .../showtime/dto/ShowtimeResponse.java | 55 +++++++++++++++++++ 5 files changed, 122 insertions(+) create mode 100644 src/main/java/com/safeticket/common/config/JacksonConfig.java create mode 100644 src/main/java/com/safeticket/event/EventController.java create mode 100644 src/main/java/com/safeticket/showtime/dto/ShowtimeResponse.java diff --git a/src/main/java/com/safeticket/common/config/JacksonConfig.java b/src/main/java/com/safeticket/common/config/JacksonConfig.java new file mode 100644 index 0000000..7740ab9 --- /dev/null +++ b/src/main/java/com/safeticket/common/config/JacksonConfig.java @@ -0,0 +1,18 @@ +package com.safeticket.common.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class JacksonConfig { + @Bean + public ObjectMapper objectMapper() { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new Hibernate5Module()); + objectMapper.registerModule(new JavaTimeModule()); + return objectMapper; + } +} diff --git a/src/main/java/com/safeticket/event/EventController.java b/src/main/java/com/safeticket/event/EventController.java new file mode 100644 index 0000000..b7caafa --- /dev/null +++ b/src/main/java/com/safeticket/event/EventController.java @@ -0,0 +1,36 @@ +package com.safeticket.event; + +import com.safeticket.event.dto.EventResponse; +import com.safeticket.event.entity.Event; +import com.safeticket.event.service.EventService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/events") +public class EventController { + + private final EventService eventService; + + @GetMapping("/{id}") + public ResponseEntity getEventById(@PathVariable Long id) { + return ResponseEntity.ok(EventResponse.of(eventService.getEventById(id))); + } + + @GetMapping("/{id}/showtimes") + public ResponseEntity getEventByIdWithShowtimes(@PathVariable Long id) { + return ResponseEntity.ok(EventResponse.of(eventService.getEventByIdWithShowtimes(id))); + } + + @GetMapping + public List getAllEvents() { + return eventService.getAllEvents(); + } +} diff --git a/src/main/java/com/safeticket/event/dto/EventResponse.java b/src/main/java/com/safeticket/event/dto/EventResponse.java index 59d2fab..2bfe837 100644 --- a/src/main/java/com/safeticket/event/dto/EventResponse.java +++ b/src/main/java/com/safeticket/event/dto/EventResponse.java @@ -1,12 +1,15 @@ package com.safeticket.event.dto; import com.safeticket.event.entity.Event; +import com.safeticket.showtime.dto.ShowtimeResponse; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; @Builder @Getter @@ -18,6 +21,7 @@ public class EventResponse { private String description; private Integer durationMinutes; private String status; + private List showtimes; private LocalDateTime createdAt; private LocalDateTime updatedAt; @@ -29,6 +33,7 @@ public static EventResponse of(Event event) { .description(event.getDescription()) .durationMinutes(event.getDurationMinutes()) .status(event.getStatus().getStatus()) + .showtimes(event.getShowtimes() == null ? null : ShowtimeResponse.ofList(event.getShowtimes())) .createdAt(event.getCreatedAt()) .updatedAt(event.getUpdatedAt()) .build(); diff --git a/src/main/java/com/safeticket/event/service/EventServiceImpl.java b/src/main/java/com/safeticket/event/service/EventServiceImpl.java index 5d40931..a88d5b0 100644 --- a/src/main/java/com/safeticket/event/service/EventServiceImpl.java +++ b/src/main/java/com/safeticket/event/service/EventServiceImpl.java @@ -4,7 +4,9 @@ import com.safeticket.event.EventRepository; import com.safeticket.event.exception.EventNotFoundException; import lombok.RequiredArgsConstructor; +import org.hibernate.Hibernate; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -15,6 +17,7 @@ public class EventServiceImpl implements EventService { private final EventRepository eventRepository; @Override + @Transactional(readOnly = true) public Event getEventById(Long id) { return eventRepository.findById(id) .orElseThrow(() -> new EventNotFoundException(id)); @@ -24,4 +27,9 @@ public Event getEventById(Long id) { public List getAllEvents() { return eventRepository.findAll(); } + + public Event getEventByIdWithShowtimes(Long id) { + return eventRepository.findByIdWithShowtimes(id) + .orElseThrow(() -> new EventNotFoundException(id)); + } } diff --git a/src/main/java/com/safeticket/showtime/dto/ShowtimeResponse.java b/src/main/java/com/safeticket/showtime/dto/ShowtimeResponse.java new file mode 100644 index 0000000..f170b46 --- /dev/null +++ b/src/main/java/com/safeticket/showtime/dto/ShowtimeResponse.java @@ -0,0 +1,55 @@ +package com.safeticket.showtime.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.safeticket.event.entity.Event; +import com.safeticket.showtime.entity.Showtime; +import com.safeticket.venue.entity.Venue; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +@Builder +@Getter +@NoArgsConstructor +@AllArgsConstructor +@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class ShowtimeResponse { + private Long id; + private LocalDateTime startTime; + private LocalDateTime endTime; + private Event event; + private Venue venue; + + private LocalDateTime createdAt; + private LocalDateTime updatedAt; + + public static ShowtimeResponse of(Showtime showtime) { + if (showtime == null) { + return null; + } + return ShowtimeResponse.builder() + .id(showtime.getId()) + .startTime(showtime.getStartTime()) + .endTime(showtime.getEndTime()) + .event(showtime.getEvent()) + .venue(showtime.getVenue()) + .createdAt(showtime.getCreatedAt()) + .updatedAt(showtime.getUpdatedAt()) + .build(); + } + + public static List ofList(List showtimes) { + return (showtimes == null) ? Collections.emptyList() + : showtimes.stream().map(ShowtimeResponse::of).collect(Collectors.toList()); + } + + +}