현재 Event Create 로직만 구현되어 있으며 별도의 추가 logic이 없기 때문에 테스트 코드 작성은 차후에 합니다.
(왜냐면 순전히 JPA 기능만 사용하기 때문에 별도의 추가 로직이 없는 경우, Service 테스트는 JPA 기능 테스트가 되기 때문! 따라서 차후 로직 추가 시, 테스트 코드 구현)
여기서 중요한 것은 DTO to Model은 Service layer에서 해야 한다.
package com.carrykim.restapi.event.service;
import com.carrykim.restapi.event.infra.EventRepository;
import com.carrykim.restapi.event.model.Event;
import com.carrykim.restapi.event.model.dto.EventDto;
import org.springframework.stereotype.Service;
@Service
public class EventService {
private final EventRepository eventRepository;
public EventService(EventRepository eventRepository) {
this.eventRepository = eventRepository;
}
public Event create(EventDto eventDto){
Event newEvent = eventDto.toModel();
return eventRepository.save(newEvent);
}
}
package com.carrykim.restapi.event.controller;
import com.carrykim.restapi.event.model.Event;
import com.carrykim.restapi.event.model.dto.EventDto;
import com.carrykim.restapi.event.service.EventService;
import org.springframework.hateoas.MediaTypes;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.net.URI;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
@RestController()
@RequestMapping(value = "/api/events", produces = MediaTypes.HAL_JSON_VALUE)
public class EventController {
private final EventService eventService;
public EventController(EventService eventService) {
this.eventService = eventService;
}
@PostMapping("")
public ResponseEntity create(@RequestBody @Valid EventDto eventDto) {
Event newEvent = this.eventService.create(eventDto);
URI uri = linkTo(methodOn(EventController.class).create(new EventDto())).slash(newEvent.getId()).toUri();
return ResponseEntity.created(uri).body(newEvent);
}
}