package it.demo.twitterlike.server.web.api; import it.demo.twitterlike.server.domain.Message; import it.demo.twitterlike.server.domain.User; import it.demo.twitterlike.server.web.api.domain.MessageResource; import it.demo.twitterlike.server.web.api.domain.UserResource; import it.demo.twitterlike.server.web.api.support.MessageResourceAssembler; import it.demo.twitterlike.server.web.api.support.UserResourceAssembler; import java.io.Serializable; import org.springframework.data.domain.Page; import org.springframework.data.repository.CrudRepository; import org.springframework.data.rest.webmvc.ResourceNotFoundException; import org.springframework.data.web.PagedResourcesAssembler; import org.springframework.hateoas.PagedResources; import org.springframework.http.HttpEntity; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; public abstract class AbstractApiController { public static final String ME_PREFIX = "/me"; protected final MessageResourceAssembler messageResourceAssembler; protected final UserResourceAssembler userResourceAssembler; protected AbstractApiController(MessageResourceAssembler messageResourceAssembler, UserResourceAssembler userResourceAssembler) { this.messageResourceAssembler = messageResourceAssembler; this.userResourceAssembler = userResourceAssembler; } protected HttpEntity<PagedResources<MessageResource>> doReturnMessagePagedResult( PagedResourcesAssembler<Message> assembler, Page<Message> pages) { return new ResponseEntity<>(assembler.toResource(pages, messageResourceAssembler), HttpStatus.OK); } protected HttpEntity<PagedResources<UserResource>> doReturnUserPagedResult( PagedResourcesAssembler<User> assembler, Page<User> pages) { return new ResponseEntity<>(assembler.toResource(pages, userResourceAssembler), HttpStatus.OK); } protected <T extends Serializable> T existEntity(CrudRepository<?, T> repository, T id) throws ResourceNotFoundException { if (!repository.exists(id)) { throw new ResourceNotFoundException(); } return id; } }