package org.rakam.automation.action; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import org.rakam.automation.AutomationAction; import org.rakam.plugin.user.User; import org.rakam.plugin.user.UserActionService; import javax.inject.Inject; import java.util.Map; import java.util.Set; import java.util.function.Supplier; import java.util.stream.Collectors; @JsonTypeName("user_action") public class UserActionAutomationAction implements AutomationAction<UserActionAutomationAction.UserAction> { private final Map<String, UserActionService> userActionServiceMap; @Inject public UserActionAutomationAction(Set<UserActionService> userActionServices) { userActionServiceMap = userActionServices.stream() .collect(Collectors.toMap(UserActionService::getName, a -> a)); } public String process(String project, Supplier<User> user, UserAction actionData) { userActionServiceMap.get(actionData.actionName).send(project, user.get(), actionData.actionData); return null; } public static class UserAction { public final String actionName; public final Object actionData; @JsonCreator public UserAction(@JsonProperty("action_name") String actionName, @JsonProperty("data") Object actionData) { this.actionName = actionName; this.actionData = actionData; } } }