refactoring: Masive refactor to build the V2
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package eventDemo.contexts.auth.domain
|
||||
|
||||
import eventDemo.contexts.auth.domain.events.NewUserCreatedEvent
|
||||
import eventDemo.contexts.auth.domain.events.UserEvent
|
||||
import eventDemo.sharedKernel.UserId
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class User(
|
||||
val id: UserId,
|
||||
val username: String,
|
||||
val password: String,
|
||||
val version: Int,
|
||||
) {
|
||||
val recordedEvents: Set<UserEvent> = emptySet()
|
||||
|
||||
companion object {
|
||||
fun createNewUser(
|
||||
username: String,
|
||||
password: String,
|
||||
): User =
|
||||
apply(NewUserCreatedEvent(username, password, version = 1))
|
||||
|
||||
fun apply(event: NewUserCreatedEvent): User =
|
||||
User(
|
||||
id = event.aggregateId,
|
||||
username = event.username,
|
||||
password = event.password,
|
||||
version = event.version,
|
||||
)
|
||||
|
||||
fun loadFromHistory(events: Set<UserEvent>): User? =
|
||||
events.fold(null as User?) { acc, event ->
|
||||
when (event) {
|
||||
is NewUserCreatedEvent -> apply(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package eventDemo.contexts.auth.domain.events
|
||||
|
||||
import eventDemo.libs.eventSource.EventId
|
||||
import eventDemo.sharedKernel.UserId
|
||||
import kotlinx.datetime.Clock
|
||||
import kotlinx.datetime.Instant
|
||||
|
||||
class NewUserCreatedEvent(
|
||||
val username: String,
|
||||
val password: String,
|
||||
override val version: Int,
|
||||
override val createdAt: Instant = Clock.System.now(),
|
||||
override val aggregateId: UserId = UserId(),
|
||||
) : UserEvent {
|
||||
override val eventId: EventId = EventId()
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package eventDemo.contexts.auth.domain.events
|
||||
|
||||
import eventDemo.libs.eventSource.Event
|
||||
import eventDemo.sharedKernel.UserId
|
||||
|
||||
sealed interface UserEvent : Event<UserId>
|
||||
Reference in New Issue
Block a user