// Path: examples/javaee/src/main/java/grooves/example/javaee/domain/Patient.java
// @Data
// @Aggregate // <1>
// public class Patient implements Serializable {
//     private Long id;
//     private final String uniqueId;
// }
// 
// Path: examples/javaee/src/main/java/grooves/example/javaee/domain/PatientEvent.java
// @Data
// public abstract class PatientEvent implements BaseEvent<Patient, Long, PatientEvent> { // <1>
//     private Patient aggregate;
//     private Long id;
//     private RevertEvent<Patient, Long, PatientEvent> revertedBy;  // <2>
//     private Date timestamp; // <3>
//     private long position; // <4>
// 
//     // end::documented[]
//     @XmlTransient
//     // tag::documented[]
//     @Override
//     @NotNull
//     public Publisher<Patient> getAggregateObservable() { // <5>
//         return toPublisher(aggregate != null ? just(aggregate) : empty());
//     }
// }


import com.github.rahulsom.grooves.api.snapshots.Snapshot;
import grooves.example.javaee.domain.Patient;
import grooves.example.javaee.domain.PatientEvent;
import org.jetbrains.annotations.NotNull;
import javax.ejb.Singleton;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Stream;
package grooves.example.javaee;



@Singleton
public class Database {

// Path: examples/javaee/src/main/java/grooves/example/javaee/domain/Patient.java
// @Data
// @Aggregate // <1>
// public class Patient implements Serializable {
//     private Long id;
//     private final String uniqueId;
// }
// 
// Path: examples/javaee/src/main/java/grooves/example/javaee/domain/PatientEvent.java
// @Data
// public abstract class PatientEvent implements BaseEvent<Patient, Long, PatientEvent> { // <1>
//     private Patient aggregate;
//     private Long id;
//     private RevertEvent<Patient, Long, PatientEvent> revertedBy;  // <2>
//     private Date timestamp; // <3>
//     private long position; // <4>
// 
//     // end::documented[]
//     @XmlTransient
//     // tag::documented[]
//     @Override
//     @NotNull
//     public Publisher<Patient> getAggregateObservable() { // <5>
//         return toPublisher(aggregate != null ? just(aggregate) : empty());
//     }
// }


// Path: examples/javaee/src/main/java/grooves/example/javaee/Database.java
import com.github.rahulsom.grooves.api.snapshots.Snapshot;
import grooves.example.javaee.domain.Patient;
import grooves.example.javaee.domain.PatientEvent;
import org.jetbrains.annotations.NotNull;
import javax.ejb.Singleton;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Stream;

package grooves.example.javaee;



@Singleton
public class Database {

    private final List<PatientEvent> eventList = new ArrayList<>();