All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.rtr.alchemy.service.resources.TreatmentOverridesResource Maven / Gradle / Ivy

package io.rtr.alchemy.service.resources;

import com.google.inject.Inject;
import io.rtr.alchemy.dto.models.TreatmentOverrideDto;
import io.rtr.alchemy.dto.requests.TreatmentOverrideRequest;
import io.rtr.alchemy.mapping.Mappers;
import io.rtr.alchemy.models.Experiment;
import io.rtr.alchemy.models.Experiments;

import javax.validation.Valid;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
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 javax.ws.rs.core.Response;

/**
 * Resource for interacting with treatment overrides
 */
@Path("/experiments/{experimentName}/overrides")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class TreatmentOverridesResource extends BaseResource {
    private final Experiments experiments;
    private final Mappers mapper;

    @Inject
    public TreatmentOverridesResource(Experiments experiments, Mappers mapper) {
        this.experiments = experiments;
        this.mapper = mapper;
    }

    @GET
    @Path("/{overrideName}")
    public TreatmentOverrideDto getOverride(@PathParam("experimentName") String experimentName,
                                            @PathParam("overrideName") String overrideName) {
        return mapper.toDto(
            ensureExists(
                ensureExists(
                    experiments.get(experimentName)
                ).getOverride(overrideName)
            ),
            TreatmentOverrideDto.class
        );
    }

    @GET
    public Iterable getOverrides(@PathParam("experimentName") String experimentName) {
        return mapper.toDto(
            ensureExists(experiments.get(experimentName)).getOverrides(),
            TreatmentOverrideDto.class
        );
    }

    @PUT
    public Response addOverride(@PathParam("experimentName") String experimentName,
                                @Valid TreatmentOverrideRequest request) {
        ensureExists(experiments.get(experimentName))
            .addOverride(
                request.getName(),
                request.getTreatment(),
                request.getFilter()
            )
            .save();

        return created();
    }

    @DELETE
    public void clearOverrides(@PathParam("experimentName") String experimentName) {
        ensureExists(experiments.get(experimentName))
            .clearOverrides()
            .save();
    }

    @DELETE
    @Path("/{overrideName}")
    public void removeOverride(@PathParam("experimentName") String experimentName,
                               @PathParam("overrideName") String overrideName) {
        final Experiment experiment = ensureExists(experiments.get(experimentName));
        ensureExists(experiment.getOverride(overrideName));
        experiment
            .removeOverride(overrideName)
            .save();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy