Event.java

package es.um.atica.shared.domain.events;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.UUID;

public abstract class Event {

    private UUID id;
    private LocalDateTime date;
    private String type;

    public Event() {
        this.id = UUID.randomUUID();
        this.date = LocalDateTime.now(ZoneId.of("UTC"));
        this.type = String.format(this.getTypeFormat(),this.getClass().getName());
    }

    public String getId() { return this.id.toString(); }

    public String getDate() { return this.date.toString(); }

    public String getType() { return this.type; }

    public String toString() {
        return String.format("[id:%s][date:%s][type:%s]",id,date,type);
    }

    public abstract String getTypeFormat();

    public abstract String getAggregateId();

}