package com.srh.api.controller; import com.srh.api.dto.resource.ItemRatingDto; import com.srh.api.dto.resource.ItemRatingForm; import com.srh.api.hypermedia.ItemRatingModelAssembler; import com.srh.api.model.ItemRating; import com.srh.api.service.ItemRatingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.data.web.PagedResourcesAssembler; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.PagedModel; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.util.UriComponentsBuilder; import javax.transaction.Transactional; import javax.validation.Valid; import java.net.URI; import static com.srh.api.dto.resource.ItemRatingDto.convert; @RestController @RequestMapping("/itemratings") public class ItemRatingController { @Autowired private ItemRatingService itemRatingService; @Autowired private ItemRatingModelAssembler itemRatingModelAssembler; @Autowired PagedResourcesAssembler pagedResourcesAssembler; @GetMapping public PagedModel> listAll(@PageableDefault(page = 0, size = 5) Pageable pageInfo) { Page itemRatings = itemRatingService.findAll(pageInfo); return pagedResourcesAssembler.toModel(convert(itemRatings)); } @GetMapping("/{id}") public EntityModel find(@PathVariable Integer id) { ItemRating itemRating = itemRatingService.find(id); return itemRatingModelAssembler.toModel(new ItemRatingDto(itemRating)); } @PostMapping public ResponseEntity> create(@RequestBody @Valid ItemRatingForm itemRatingForm, UriComponentsBuilder uriBuilder) { ItemRating itemRating = itemRatingForm.build(); itemRatingService.save(itemRating); URI uri = uriBuilder.path("/itemratings/{id}").buildAndExpand(itemRating.getId()).toUri(); return ResponseEntity.created(uri) .body(itemRatingModelAssembler.toModel(new ItemRatingDto(itemRating))); } @PutMapping("/{id}") @Transactional public EntityModel update(@RequestBody @Valid ItemRatingForm itemRatingForm, @PathVariable Integer id) { ItemRating itemRating = itemRatingForm.build(); itemRating.setId(id); itemRating = itemRatingService.update(itemRating); return itemRatingModelAssembler.toModel(new ItemRatingDto(itemRating)); } @DeleteMapping("/{id}") public ResponseEntity delete(@PathVariable Integer id) { itemRatingService.delete(id); return ResponseEntity.noContent().build(); } }