Untitled
unknown
java
a year ago
4.1 kB
2
Indexable
Never
package at.ac.tuwien.sepm.assignment.individual.rest; import at.ac.tuwien.sepm.assignment.individual.dto.HorseDetailDto; import at.ac.tuwien.sepm.assignment.individual.dto.HorseListDto; import at.ac.tuwien.sepm.assignment.individual.dto.HorseSearchDto; import at.ac.tuwien.sepm.assignment.individual.exception.ConflictException; import at.ac.tuwien.sepm.assignment.individual.exception.NotFoundException; import at.ac.tuwien.sepm.assignment.individual.exception.ValidationException; import at.ac.tuwien.sepm.assignment.individual.rest.service.HorseService; import java.lang.invoke.MethodHandles; import java.util.stream.Stream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ResponseStatusException; @RestController @RequestMapping(path = HorseEndpoint.BASE_PATH) public class HorseEndpoint { private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); static final String BASE_PATH = "/horses"; private final HorseService service; public HorseEndpoint(HorseService service) { this.service = service; } @GetMapping public Stream<HorseListDto> searchHorses(HorseSearchDto searchParameters) { LOG.info("GET " + BASE_PATH); LOG.debug("request parameters: {}", searchParameters); // TODO We have the request params in the DTO now, but don't do anything with them yet… return service.allHorses(); } @GetMapping("{id}") public HorseDetailDto getById(@PathVariable long id) { LOG.info("GET " + BASE_PATH + "/{}", id); try { return service.getById(id); } catch (NotFoundException e) { HttpStatus status = HttpStatus.NOT_FOUND; logClientError(status, "Horse to get details of not found", e); throw new ResponseStatusException(status, e.getMessage(), e); } } @PutMapping("{id}") @ResponseStatus(HttpStatus.OK) public HorseDetailDto update(@PathVariable long id, @RequestBody HorseDetailDto toUpdate) throws ValidationException, ConflictException { LOG.info("PUT " + BASE_PATH + "/{}", toUpdate); LOG.debug("Body of request:\n{}", toUpdate); try { return service.update(toUpdate.withId(id)); } catch (NotFoundException e) { HttpStatus status = HttpStatus.NOT_FOUND; logClientError(status, "Horse to update not found", e); throw new ResponseStatusException(status, e.getMessage(), e); } } @PostMapping @ResponseStatus(HttpStatus.CREATED) public HorseDetailDto post(@RequestBody HorseDetailDto horseDetailDto) { LOG.info("POST " + BASE_PATH + "/{}", horseDetailDto.id()); try { return service.create(horseDetailDto); } catch (ValidationException | ConflictException e) { throw new ResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY, "Error during creating new horse", e); } } @DeleteMapping("/{id}") @ResponseStatus(HttpStatus.NO_CONTENT) public void delete(@PathVariable long id) { LOG.info("DELETE " + BASE_PATH + "/{}", id); try { service.delete(id); } catch (ValidationException | NotFoundException e) { HttpStatus status = HttpStatus.NOT_FOUND; logClientError(status, "Horse to delete not found", e); throw new ResponseStatusException(status, e.getMessage(), e); } } private void logClientError(HttpStatus status, String message, Exception e) { LOG.warn("{} {}: {}: {}", status.value(), message, e.getClass().getSimpleName(), e.getMessage()); } }