[사이드프로젝트] 그저 그런 REST API로 괜찮은가? - 진정한 REST API 구현해보기 - Controller & Service 분리

gimseonjin616·2022년 3월 18일
0

Event Service 만들기


현재 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);
    }

}

EventController 수정


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);
    }
}
profile
to be data engineer

0개의 댓글

관련 채용 정보