package com.codecademy.eventhub.web.commands;
import com.codecademy.eventhub.EventHub;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.codecademy.eventhub.storage.filter.Filter;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@Path("/events/funnel")
public class EventFunnel extends Command {
private final Gson gson;
private final EventHub eventHub;
@Inject
public EventFunnel(Gson gson, EventHub eventHub) {
this.gson = gson;
this.eventHub = eventHub;
}
@Override
public synchronized void execute(final HttpServletRequest request,
final HttpServletResponse response) throws IOException {
String[] funnelSteps = request.getParameterValues("funnel_steps[]");
List<Filter> eventFilters = Lists.newArrayList();
for (int i = 0; i < funnelSteps.length; i++) {
Filter filter = getFilter(
merge(request.getParameterValues("efk[]"), request.getParameterValues("efk" + i + "[]")),
merge(request.getParameterValues("efk[]"), request.getParameterValues("efv" + i + "[]")));
eventFilters.add(filter);
}
Filter userFilter = getFilter(request.getParameterValues("ufk[]"),
request.getParameterValues("ufv[]"));
int[] funnelCounts = eventHub.getFunnelCounts(
request.getParameter("start_date"),
request.getParameter("end_date"),
funnelSteps,
Integer.parseInt(request.getParameter("num_days_to_complete_funnel")),
eventFilters,
userFilter);
response.getWriter().println(gson.toJson(funnelCounts));
}
}