package org.bitionaire.elbombillo.registry.resources;
import io.dropwizard.auth.Auth;
import lombok.extern.slf4j.Slf4j;
import org.bitionaire.elbombillo.registry.api.model.Service;
import org.bitionaire.elbombillo.registry.core.auth.ServiceRegistryCaller;
import org.bitionaire.elbombillo.registry.jdbi.ServiceDAO;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.List;
@Path("/services")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Slf4j
public class ServiceResource {
private final ServiceDAO serviceDAO;
public ServiceResource(final ServiceDAO serviceDAO) {
this.serviceDAO = serviceDAO;
}
@GET
public List<Service> services(@Auth final ServiceRegistryCaller caller, @QueryParam("name") final String serviceName) {
return serviceDAO.findByName(serviceName);
}
@POST
public void register(@Auth final ServiceRegistryCaller caller, final Service service) {
log.debug("registry called with service {}", service);
final Service foundService = serviceDAO.findByBaseUrl(service.getBaseUrl());
if (foundService == null) {
serviceDAO.insert(service);
log.info("added new service {}", service);
} else {
if (!service.getName().equals(foundService.getName()) || !service.getCredentials().equals(foundService.getCredentials())) {
serviceDAO.update(service);
log.info("updated service {}", service);
}
}
}
}