package com.codecademy.eventhub.web.commands;
import com.google.common.collect.Lists;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.codecademy.eventhub.EventHub;
import com.codecademy.eventhub.base.DateHelper;
import com.codecademy.eventhub.model.Event;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
@Path("/events/batch_track")
public class BatchTrackEvent extends Command {
private final Gson gson;
private final DateHelper dateHelper;
private final EventHub eventHub;
@Inject
public BatchTrackEvent(Gson gson, DateHelper dateHelper, EventHub eventHub) {
this.gson = gson;
this.dateHelper = dateHelper;
this.eventHub = eventHub;
}
@Override
public synchronized void execute(final HttpServletRequest request,
final HttpServletResponse response) throws IOException {
List<Map<String, String>> events = gson.fromJson(
request.getParameter("events"), new TypeToken<List<Map<String, String>>>() {}.getType());
List<Long> eventIds = Lists.newArrayList();
PrintWriter writer = response.getWriter();
for (Map<String, String> eventMap : events) {
String date = eventMap.get("date");
if (date == null) {
date = dateHelper.getDate();
}
Event event = new Event.Builder(
eventMap.get("event_type"),
eventMap.get("external_user_id"),
date,
eventMap).build();
eventIds.add(eventHub.addEvent(event));
}
writer.println(gson.toJson(eventIds));
}
}