package lu.foyer import zio.* final case class Entity[T](entityId: String, data: T, version: Long) final case class Event[T](entityId: String, data: T, eventId: String) trait StateRepository[Data] extends Repository[Entity[Data], String] trait EventRepository[Data] extends Repository[Event[Data], String]: def fetchOne(entityId: String, eventId: String): Task[Option[Event[Data]]] def fetchMany(entityId: String, page: Page): Task[Paged[Event[Data]]]