Skip to content

Commit

Permalink
Merge pull request #6 from f-lab-edu/review/3-ticket-api-serialization
Browse files Browse the repository at this point in the history
feat: ShowtimeResponse 객체와 직렬화 Config 추가
  • Loading branch information
gominnam authored Feb 14, 2025
2 parents 623279f + 42a0a81 commit fd0fa2c
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/main/java/com/safeticket/common/config/JacksonConfig.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
36 changes: 36 additions & 0 deletions src/main/java/com/safeticket/event/EventController.java
Original file line number Diff line number Diff line change
@@ -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<EventResponse> getEventById(@PathVariable Long id) {
return ResponseEntity.ok(EventResponse.of(eventService.getEventById(id)));
}

@GetMapping("/{id}/showtimes")
public ResponseEntity<EventResponse> getEventByIdWithShowtimes(@PathVariable Long id) {
return ResponseEntity.ok(EventResponse.of(eventService.getEventByIdWithShowtimes(id)));
}

@GetMapping
public List<Event> getAllEvents() {
return eventService.getAllEvents();
}
}
5 changes: 5 additions & 0 deletions src/main/java/com/safeticket/event/dto/EventResponse.java
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -18,6 +21,7 @@ public class EventResponse {
private String description;
private Integer durationMinutes;
private String status;
private List<ShowtimeResponse> showtimes;

private LocalDateTime createdAt;
private LocalDateTime updatedAt;
Expand All @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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));
Expand All @@ -24,4 +27,9 @@ public Event getEventById(Long id) {
public List<Event> getAllEvents() {
return eventRepository.findAll();
}

public Event getEventByIdWithShowtimes(Long id) {
return eventRepository.findByIdWithShowtimes(id)
.orElseThrow(() -> new EventNotFoundException(id));
}
}
55 changes: 55 additions & 0 deletions src/main/java/com/safeticket/showtime/dto/ShowtimeResponse.java
Original file line number Diff line number Diff line change
@@ -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<ShowtimeResponse> ofList(List<Showtime> showtimes) {
return (showtimes == null) ? Collections.emptyList()
: showtimes.stream().map(ShowtimeResponse::of).collect(Collectors.toList());
}


}

0 comments on commit fd0fa2c

Please sign in to comment.