package crmdna.interaction;
import com.googlecode.objectify.annotation.*;
import com.googlecode.objectify.condition.IfNotNull;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@Entity
@Cache
public class InteractionEntity {
@Id
long interactionId;
@Serialize(zip = true)
Map<Long, String> subInteractions = new HashMap<>();
// key is nano seconds, value is sub interaction content
// map is always descending sorted by key
@Index
long ms;
@Index
String interactionType;
@Index
long userId;
String user; // user name
@Index
long memberId;
@Index(IfNotNull.class)
Long campaignId;
public InteractionProp toProp() {
InteractionProp interactionProp = new InteractionProp();
interactionProp.interactionId = interactionId;
interactionProp.timestamp = ms;
for (Long subinteractionId : subInteractions.keySet()) {
SubInteractionProp subInteractionProp = new SubInteractionProp();
subInteractionProp.subInteractionId = subinteractionId;
subInteractionProp.content = subInteractions.get(subinteractionId);
subInteractionProp.timestamp = subinteractionId / 1000;
interactionProp.subInteractionProps.add(subInteractionProp);
}
Collections.sort(interactionProp.subInteractionProps);
interactionProp.interactionType = interactionType;
interactionProp.user = user;
interactionProp.memberId = memberId;
interactionProp.campaignId = campaignId;
return interactionProp;
}
}