package com.social.media.domain.shared;

import java.time.LocalDateTime;
import java.util.UUID;

/**
 * Marker interface for all Domain Events
 * 
 * Domain events represent something that happened in the domain
 * that domain experts care about.
 * 
 * @author Social Media Manager Team
 * @since 2.0.0
 */
public interface DomainEvent {
    
    /**
     * Unique identifier for this event
     */
    UUID getEventId();
    
    /**
     * When this event occurred
     */
    LocalDateTime getOccurredOn();
    
    /**
     * The aggregate ID that raised this event
     */
    String getAggregateId();
    
    /**
     * The type of aggregate that raised this event
     */
    String getAggregateType();
    
    /**
     * Version of the event schema
     */
    default int getEventVersion() {
        return 1;
    }
}
