package ungp.sampleng.backend.resource;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ungp.sampleng.backend.entity.Veiculo;
import ungp.sampleng.backend.exception.SampleNgException;
import ungp.sampleng.backend.repository.CondutorRepository;
import ungp.sampleng.backend.repository.VeiculoRepository;
@Path("veiculo")
@Component
public class VeiculoResource {
@Autowired
private VeiculoRepository veiculoRepository;
@Autowired
private CondutorRepository condutorRepository;
@GET
@Produces("application/json")
public List<Veiculo> findAll() {
List<Veiculo> veiculos = veiculoRepository.findAll();
if( veiculos.isEmpty() ) {
throw new NotFoundException("Nenhum veículo cadastrado.");
}
return veiculos;
}
@DELETE
@Path("{placa}")
@Consumes("application/json")
public void delete(@PathParam("placa") String placa) {
veiculoRepository.delete(placa);
}
@PUT
@Consumes("application/json")
public void update(Veiculo veiculo) {
veiculoRepository.save(veiculo);
}
@GET
@Path("{placa}")
@Produces("application/json")
public Veiculo findById(@PathParam("placa") String placa) {
Veiculo veiculo = veiculoRepository.findOne(placa);
if( veiculo == null ) {
throw new NotFoundException("Veículo não encontrado.");
}
return veiculo;
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
public void insert(Veiculo veiculo) {
if( veiculo.getProprietario() == null ) {
throw new SampleNgException("Não é possível cadastrar um veículo sem proprietário.");
}
//FIXME avaliar questão realacionadas com a existência do proprietario nesse momento
condutorRepository.save(veiculo.getProprietario());
veiculoRepository.save(veiculo);
}
}