package ungp.sampleng.backend.resource;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.TextCriteria;
import org.springframework.stereotype.Component;
import ungp.sampleng.backend.entity.Logradouro;
import ungp.sampleng.backend.exception.SampleNgException;
import ungp.sampleng.backend.repository.LogradouroRepository;
import ungp.sampleng.backend.util.pageable.PageData;
@Path("logradouro")
@Component
public class LogradouroResource {
@Autowired
private LogradouroRepository logradouroRepository;
@GET
@Path("/id/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Logradouro findById(@PathParam("id") String id) {
return logradouroRepository.findOne(id);
}
@GET
@Path("{termo}")
@Produces(MediaType.APPLICATION_JSON)
public List<Logradouro> findAllBy(@PathParam("termo") String termo) {
Sort sort = new Sort("score");
TextCriteria criteria = TextCriteria.forDefaultLanguage().matchingAny(termo);
return logradouroRepository.findAllBy(criteria, sort);
}
@GET
@Path("{page}/{size}")
@Produces(MediaType.APPLICATION_JSON)
public PageData findAllByPageable(@QueryParam("q") List<String> termos, @PathParam("page") Integer page, @PathParam("size") Integer size) {
if( termos == null || termos.isEmpty() ) {
throw new SampleNgException("Termos ausentes.");
}
Sort sort = new Sort("score");
TextCriteria criteria = TextCriteria.forDefaultLanguage().matchingAny(termos.toArray(new String[termos.size()]));
Page<Logradouro> pageInfo = logradouroRepository.findAllBy(criteria, new PageRequest(page, size, sort));
PageData pd = new PageData();
pd.setContent( pageInfo.getContent() );
pd.setNumber( pageInfo.getNumber() );
pd.setNumberOfElements( pageInfo.getNumberOfElements() );
pd.setSize( pageInfo.getSize() );
pd.setTotalElements( pageInfo.getTotalElements() );
pd.setTotalPages( pageInfo.getTotalPages() );
return pd;
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void insert(Logradouro logradouro) {
logradouroRepository.save(logradouro);
}
}