From 0711497b4f9c30b3150f6647cf004746f5436c70 Mon Sep 17 00:00:00 2001 From: Joseph PACHOD Date: Tue, 30 Jan 2024 15:50:07 +0100 Subject: [PATCH] Scope -> Squad --- FUNCTIONAL_REQUIREMENTS.md | 14 +- .../kotlin/ports/inmemory/InMemoryScope.kt | 13 - .../kotlin/ports/inmemory/InMemorySquad.kt | 12 + .../ports/inmemory/InMemoryTaskRepository.kt | 192 ++++++------ .../ports/inmemory/InMemoryUserRepository.kt | 2 +- .../InstrumentedInMemoryUserRepository.kt | 1 - .../kotlin/ports/pgjooq/Heroesdeskschema.java | 16 +- .../heroesdesk/kotlin/ports/pgjooq/Keys.java | 18 +- .../kotlin/ports/pgjooq/Tables.java | 12 +- .../pgjooq/tables/{Scope.java => Squad.java} | 78 ++--- .../tables/{ScopeUser.java => SquadUser.java} | 90 +++--- .../kotlin/ports/pgjooq/tables/Task.java | 18 +- .../{ScopeRecord.java => SquadRecord.java} | 34 +- ...peUserRecord.java => SquadUserRecord.java} | 46 +-- .../pgjooq/tables/records/TaskRecord.java | 20 +- .../ports/pgjooq/PgJooqTaskRepository.kt | 136 ++++---- .../test/kotlin/GenerateJooqModelFromDb.kt | 62 ++-- .../kotlin/test/AbstractHeroesDeskTest.kt | 290 +++++++++--------- .../kotlin/test/HeroesDeskTestUtils.kt | 14 +- .../kotlin/test/InstrumentedUserRepository.kt | 1 + .../heroesdesk/kotlin/HeroesDesk.kt | 24 +- .../heroesdesk/kotlin/errors/Errors.kt | 48 +-- .../heroesdesk/kotlin/impl/HeroesDeskImpl.kt | 52 ++-- .../heroesdesk/kotlin/impl/scope/Scope.kt | 19 -- .../kotlin/impl/scope/ScopeMembers.kt | 9 - .../kotlin/impl/task/AbstractTaskId.kt | 6 +- .../heroesdesk/kotlin/impl/task/DoneTaskId.kt | 12 +- .../kotlin/impl/task/InProgressTaskId.kt | 8 +- .../kotlin/impl/task/PendingTaskId.kt | 10 +- .../heroesdesk/kotlin/impl/task/Task.kt | 6 +- .../heroesdesk/kotlin/impl/task/TaskId.kt | 5 +- .../heroesdesk/kotlin/ports/TaskRepository.kt | 34 +- .../kotlin/{impl/scope => squad}/Name.kt | 3 +- .../heroesdesk/kotlin/squad/Squad.kt | 16 + .../scope/ScopeKey.kt => squad/SquadKey.kt} | 20 +- .../heroesdesk/kotlin/squad/SquadMembers.kt | 8 + .../heroesdesk/kotlin/impl/TestUtils.kt | 14 +- .../kotlin/impl/scope/ScopeMembersTest.kt | 48 --- .../heroesdesk/kotlin/impl/scope/ScopeTest.kt | 51 --- .../kotlin/impl/{scope => squad}/NameTest.kt | 5 +- .../kotlin/impl/squad/SquadMembersTest.kt | 49 +++ .../heroesdesk/kotlin/impl/squad/SquadTest.kt | 48 +++ .../kotlin/impl/task/AbstractTaskIdTest.kt | 11 +- .../kotlin/impl/task/AbstractTaskTest.kt | 14 +- .../kotlin/impl/task/DoneTaskIdTest.kt | 7 +- .../kotlin/impl/task/DoneTaskTest.kt | 8 +- .../kotlin/impl/task/InProgressTaskIdTest.kt | 5 +- .../kotlin/impl/task/InProgressTaskTest.kt | 8 +- .../kotlin/impl/task/PendingTaskIdTest.kt | 7 +- .../kotlin/impl/task/PendingTaskTest.kt | 8 +- .../kotlin/impl/user/HeroIdsTest.kt | 8 +- 51 files changed, 802 insertions(+), 838 deletions(-) delete mode 100644 heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryScope.kt create mode 100644 heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemorySquad.kt rename heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/{Scope.java => Squad.java} (63%) rename heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/{ScopeUser.java => SquadUser.java} (56%) rename heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/{ScopeRecord.java => SquadRecord.java} (75%) rename heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/{ScopeUserRecord.java => SquadUserRecord.java} (67%) delete mode 100644 heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/Scope.kt delete mode 100644 heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeMembers.kt rename heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/{impl/scope => squad}/Name.kt (94%) create mode 100644 heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/Squad.kt rename heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/{impl/scope/ScopeKey.kt => squad/SquadKey.kt} (63%) create mode 100644 heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/SquadMembers.kt delete mode 100644 heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeMembersTest.kt delete mode 100644 heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeTest.kt rename heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/{scope => squad}/NameTest.kt (68%) create mode 100644 heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/squad/SquadMembersTest.kt create mode 100644 heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/squad/SquadTest.kt diff --git a/FUNCTIONAL_REQUIREMENTS.md b/FUNCTIONAL_REQUIREMENTS.md index 0b5ef02..ecc84ed 100644 --- a/FUNCTIONAL_REQUIREMENTS.md +++ b/FUNCTIONAL_REQUIREMENTS.md @@ -5,16 +5,16 @@ No time tracking, no endless workflow customizing, only tasks that need to be do There are the following user types: - users: able to see all and create tasks (title and description) -- heroes: as users plus ability to modify all in tasks in their scopes -- admin: define scopes, used for tasks, as well as heroes allowed to work on each scope +- heroes: as users plus ability to modify all in tasks in their squads +- admin: define squads, used for tasks, as well as heroes allowed to work on each squad A task is made of: -- scope: one among the scopes defined by the admin +- squad: one among the squads defined by the admin - title: mandatory, updatable, single line, 1 up to 255 chars - description: optional, updatable, multi line, up to 1024 chars - creator: mandatory, fixed at creation -- id: unique among all tasks, fixed at creation, made of the scope key, a dash and a unique number, 2 to 73 chars +- id: unique among all tasks, fixed at creation, made of the squad key, a dash and a unique number, 2 to 73 chars - assignees: can be empty, updatable. Always empty for done task. - a task can be pending, in progress or done: default to pending - each state can be moved to any of the 2 others @@ -23,9 +23,9 @@ A task is made of: Multiple tasks with same title or description can be created. -A scope has: -- a name, 1 up to 255 chars, unique among all scopes, updatable, must be unique -- a key, unique among all scopes, by default deduced from the name, 1 to 36 chars, must be unique +A squad has: +- a name, 1 up to 255 chars, unique among all squads, updatable, must be unique +- a key, unique among all squads, by default deduced from the name, 1 to 36 chars, must be unique - can't be changed - assignees: can be empty, updatable diff --git a/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryScope.kt b/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryScope.kt deleted file mode 100644 index f64ecb6..0000000 --- a/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryScope.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.hexastacks.heroesdesk.kotlin.ports.inmemory - -import org.hexastacks.heroesdesk.kotlin.impl.scope.Name -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeMembers -import org.hexastacks.heroesdesk.kotlin.impl.user.HeroId -import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds - -data class InMemoryScope(val name: Name, val key: ScopeKey, val members: HeroIds = HeroIds.empty) { - fun toScope(): Scope = Scope(name, key) - fun toScopeMembers(): ScopeMembers = ScopeMembers(key, members) -} diff --git a/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemorySquad.kt b/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemorySquad.kt new file mode 100644 index 0000000..0208217 --- /dev/null +++ b/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemorySquad.kt @@ -0,0 +1,12 @@ +package org.hexastacks.heroesdesk.kotlin.ports.inmemory + +import org.hexastacks.heroesdesk.kotlin.squad.Name +import org.hexastacks.heroesdesk.kotlin.squad.Squad +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadMembers +import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds + +data class InMemorySquad(val name: Name, val key: SquadKey, val members: HeroIds = HeroIds.empty) { + fun toSquad(): Squad = Squad(name, key) + fun toSquadMembers(): SquadMembers = SquadMembers(key, members) +} diff --git a/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryTaskRepository.kt b/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryTaskRepository.kt index 20e73cc..40d890e 100644 --- a/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryTaskRepository.kt +++ b/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryTaskRepository.kt @@ -5,10 +5,10 @@ import arrow.core.Either.Left import arrow.core.Either.Right import org.hexastacks.heroesdesk.kotlin.errors.* import org.hexastacks.heroesdesk.kotlin.impl.AbstractStringValue -import org.hexastacks.heroesdesk.kotlin.impl.scope.Name -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeMembers +import org.hexastacks.heroesdesk.kotlin.squad.Name +import org.hexastacks.heroesdesk.kotlin.squad.Squad +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadMembers import org.hexastacks.heroesdesk.kotlin.impl.task.* import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds import org.hexastacks.heroesdesk.kotlin.impl.user.Heroes @@ -19,34 +19,34 @@ import java.util.concurrent.atomic.AtomicReference class InMemoryTaskRepository : TaskRepository { - private val database = ConcurrentHashMap>>() + private val database = ConcurrentHashMap>>() override fun createTask( - scopeKey: ScopeKey, + squadKey: SquadKey, title: Title ): Either, PendingTask> { val createdTask = AtomicReference() - return database.computeIfPresent(scopeKey) { _, scopeAndTaskIdsToTask -> - val inMemoryScope = scopeAndTaskIdsToTask.first + return database.computeIfPresent(squadKey) { _, squadAndTaskIdsToTask -> + val inMemorySquad = squadAndTaskIdsToTask.first val uuid = UUID.randomUUID().toString() - val retrievedScope = inMemoryScope.toScope() - val taskId = PendingTaskId(scopeKey, uuid).getOrElse { + val retrievedSquad = inMemorySquad.toSquad() + val taskId = PendingTaskId(squadKey, uuid).getOrElse { throw RuntimeException("taskId $uuid should be valid") } val task = PendingTask(taskId, title) createdTask.set(task) - Pair(inMemoryScope, scopeAndTaskIdsToTask.second.plus(RawTaskId(taskId) to RawTask(task))) + Pair(inMemorySquad, squadAndTaskIdsToTask.second.plus(RawTaskId(taskId) to RawTask(task))) } ?.let { Right(createdTask.get()) } - ?: Left(nonEmptyListOf(ScopeNotExistingError(scopeKey))) + ?: Left(nonEmptyListOf(SquadNotExistingError(squadKey))) } override fun getTask(taskId: TaskId): Either, Task<*>> = - database[taskId.scope] - ?.let { scopeAndTaskIdsToTask -> + database[taskId.squadKey] + ?.let { squadAndTaskIdsToTask -> val rawTaskId = RawTaskId(taskId) - val task = scopeAndTaskIdsToTask.second[rawTaskId] - task?.let { buildTask(rawTaskId, it, scopeAndTaskIdsToTask.first.key) } + val task = squadAndTaskIdsToTask.second[rawTaskId] + task?.let { buildTask(rawTaskId, it, squadAndTaskIdsToTask.first.key) } } ?.let { Right(it) } ?: Left(nonEmptyListOf(TaskNotExistingError(taskId))) @@ -54,12 +54,12 @@ class InMemoryTaskRepository : TaskRepository { private fun buildTask( rawTaskId: RawTaskId, task: RawTask, - scope: ScopeKey + squad: SquadKey ): Task<*> = when (task.type) { TaskType.PENDING -> PendingTask( PendingTaskId( - scope, + squad, rawTaskId.value ).getOrElse { throw RuntimeException("taskId ${rawTaskId.value} should be valid") }, task.title, @@ -69,7 +69,7 @@ class InMemoryTaskRepository : TaskRepository { TaskType.DONE -> DoneTask( DoneTaskId( - scope, + squad, rawTaskId.value ).getOrElse { throw RuntimeException("taskId ${rawTaskId.value} should be valid") }, task.title, @@ -78,7 +78,7 @@ class InMemoryTaskRepository : TaskRepository { TaskType.IN_PROGRESS -> InProgressTask( InProgressTaskId( - scope, + squad, rawTaskId.value ).getOrElse { throw RuntimeException("taskId ${rawTaskId.value} should be valid") }, task.title, @@ -92,13 +92,13 @@ class InMemoryTaskRepository : TaskRepository { title: Title ): EitherNel> = database - .computeIfPresent(taskId.scope) { _, scopeAndTaskIdsToTask -> - val scope = scopeAndTaskIdsToTask.first + .computeIfPresent(taskId.squadKey) { _, squadAndTaskIdsToTask -> + val squad = squadAndTaskIdsToTask.first val rawTaskId = RawTaskId(taskId) - scopeAndTaskIdsToTask + squadAndTaskIdsToTask .second[rawTaskId] ?.copy(title = title) - ?.let { Pair(scope, scopeAndTaskIdsToTask.second.plus(rawTaskId to it)) } + ?.let { Pair(squad, squadAndTaskIdsToTask.second.plus(rawTaskId to it)) } } ?.let { Right(buildTask(it, taskId)) @@ -106,11 +106,11 @@ class InMemoryTaskRepository : TaskRepository { ?: Left(nonEmptyListOf(TaskNotExistingError(taskId))) private fun buildTask( - it: Pair>, + it: Pair>, taskId: TaskId ): Task<*> { val rawTask: RawTask = it.second[RawTaskId(taskId)]!! - val task = buildTask(RawTaskId(taskId), rawTask, taskId.scope) + val task = buildTask(RawTaskId(taskId), rawTask, taskId.squadKey) return task } @@ -119,13 +119,13 @@ class InMemoryTaskRepository : TaskRepository { description: Description ): Either, Task<*>> = database - .computeIfPresent(taskId.scope) { _, scopeAndTaskIdsToTask -> - val scope = scopeAndTaskIdsToTask.first + .computeIfPresent(taskId.squadKey) { _, squadAndTaskIdsToTask -> + val squad = squadAndTaskIdsToTask.first val rawTaskId = RawTaskId(taskId) - scopeAndTaskIdsToTask + squadAndTaskIdsToTask .second[rawTaskId] ?.copy(description = description) - ?.let { Pair(scope, scopeAndTaskIdsToTask.second.plus(rawTaskId to it)) } + ?.let { Pair(squad, squadAndTaskIdsToTask.second.plus(rawTaskId to it)) } } ?.let { Right(buildTask(it, taskId)) } ?: Left(nonEmptyListOf(TaskNotExistingError(taskId))) @@ -135,12 +135,12 @@ class InMemoryTaskRepository : TaskRepository { assignees: HeroIds ): EitherNel> = database - .computeIfPresent(taskId.scope) { _, scopeAndTaskIdsToTask -> - val scope = scopeAndTaskIdsToTask.first + .computeIfPresent(taskId.squadKey) { _, squadAndTaskIdsToTask -> + val squad = squadAndTaskIdsToTask.first val rawTaskId = RawTaskId(taskId) - val task: RawTask? = scopeAndTaskIdsToTask.second[rawTaskId] + val task: RawTask? = squadAndTaskIdsToTask.second[rawTaskId] val updatedTask = task?.copy(assignees = assignees) - updatedTask?.let { Pair(scope, scopeAndTaskIdsToTask.second.plus(rawTaskId to updatedTask)) } + updatedTask?.let { Pair(squad, squadAndTaskIdsToTask.second.plus(rawTaskId to updatedTask)) } } ?.let { Right(buildTask(it, taskId)) } ?: Left(nonEmptyListOf(TaskNotExistingError(taskId))) @@ -149,13 +149,13 @@ class InMemoryTaskRepository : TaskRepository { pendingTaskId: PendingTaskId ): EitherNel = database - .computeIfPresent(pendingTaskId.scope) { _, scopeAndTaskIdsToTask -> - val inMemoryScope = scopeAndTaskIdsToTask.first + .computeIfPresent(pendingTaskId.squadKey) { _, squadAndTaskIdsToTask -> + val inMemorySquad = squadAndTaskIdsToTask.first val rawTaskId = RawTaskId(pendingTaskId) - val task = scopeAndTaskIdsToTask.second[rawTaskId] + val task = squadAndTaskIdsToTask.second[rawTaskId] if (task?.type == TaskType.PENDING) { - val retrievedScope = inMemoryScope.toScope() - InProgressTaskId(retrievedScope.key, rawTaskId.value) + val retrievedSquad = inMemorySquad.toSquad() + InProgressTaskId(retrievedSquad.key, rawTaskId.value) .map { inProgressTaskId -> val inProgressTask = InProgressTask( @@ -165,8 +165,8 @@ class InMemoryTaskRepository : TaskRepository { task.assignees ) Pair( - inMemoryScope, - scopeAndTaskIdsToTask.second.plus(rawTaskId to RawTask(inProgressTask)) + inMemorySquad, + squadAndTaskIdsToTask.second.plus(rawTaskId to RawTask(inProgressTask)) ) } .getOrNull() @@ -176,77 +176,77 @@ class InMemoryTaskRepository : TaskRepository { ?.let { Right(buildTask(it, pendingTaskId) as InProgressTask) } ?: Left(nonEmptyListOf(TaskNotExistingError(pendingTaskId))) - override fun createScope(scopeKey: ScopeKey, name: Name): EitherNel { + override fun createSquad(squadKey: SquadKey, name: Name): EitherNel { return if (database.any { it.value.first.name == name }) { - Left(nonEmptyListOf(ScopeNameAlreadyExistingError(name))) - } else if (database.containsKey(scopeKey)) { - Left(nonEmptyListOf(ScopeKeyAlreadyExistingError(scopeKey))) + Left(nonEmptyListOf(SquadNameAlreadyExistingError(name))) + } else if (database.containsKey(squadKey)) { + Left(nonEmptyListOf(SquadKeyAlreadyExistingError(squadKey))) } else Right( database - .computeIfAbsent(scopeKey) { _ -> - Pair(InMemoryScope(name, scopeKey), ConcurrentHashMap()) - }.first.toScope() + .computeIfAbsent(squadKey) { _ -> + Pair(InMemorySquad(name, squadKey), ConcurrentHashMap()) + }.first.toSquad() ) } - override fun assignScope( - scopeKey: ScopeKey, + override fun assignSquad( + squadKey: SquadKey, assignees: Heroes - ): EitherNel = - database.computeIfPresent(scopeKey) { _, scopeAndTaskIdsToTask -> - val retrievedInMemoryScope = scopeAndTaskIdsToTask.first - val updatedInMemoryScope = retrievedInMemoryScope.copy(members = assignees.toHeroIds()) - Pair(updatedInMemoryScope, scopeAndTaskIdsToTask.second) + ): EitherNel = + database.computeIfPresent(squadKey) { _, squadAndTaskIdsToTask -> + val retrievedInMemorySquad = squadAndTaskIdsToTask.first + val updatedInMemorySquad = retrievedInMemorySquad.copy(members = assignees.toHeroIds()) + Pair(updatedInMemorySquad, squadAndTaskIdsToTask.second) } - ?.let { Right(it.first.toScopeMembers()) } - ?: Left(nonEmptyListOf(ScopeNotExistingError(scopeKey))) + ?.let { Right(it.first.toSquadMembers()) } + ?: Left(nonEmptyListOf(SquadNotExistingError(squadKey))) - override fun areHeroesInScope( + override fun areHeroesInSquad( heroIds: HeroIds, - scopeKey: ScopeKey - ): EitherNel = - database[scopeKey] + squadKey: SquadKey + ): EitherNel = + database[squadKey] ?.let { - val scopeMembers = it.first.toScopeMembers() - return if (scopeMembers.containsAll(heroIds)) - Right(scopeMembers) + val squadMembers = it.first.toSquadMembers() + return if (squadMembers.containsAll(heroIds)) + Right(squadMembers) else - Left(nonEmptyListOf(HeroesNotInScopeError(heroIds, scopeKey))) + Left(nonEmptyListOf(HeroesNotInSquadError(heroIds, squadKey))) } - ?: Left(nonEmptyListOf(ScopeNotExistingError(scopeKey))) + ?: Left(nonEmptyListOf(SquadNotExistingError(squadKey))) - override fun updateScopeName( - scopeKey: ScopeKey, + override fun updateSquadName( + squadKey: SquadKey, name: Name - ): EitherNel = - database.computeIfPresent(scopeKey) { _, scopeAndTaskIdsToTask -> - val inMemoryScope = scopeAndTaskIdsToTask.first - val updatedInMemoryScope = inMemoryScope.copy(name = name) - Pair(updatedInMemoryScope, scopeAndTaskIdsToTask.second) + ): EitherNel = + database.computeIfPresent(squadKey) { _, squadAndTaskIdsToTask -> + val inMemorySquad = squadAndTaskIdsToTask.first + val updatedInMemorySquad = inMemorySquad.copy(name = name) + Pair(updatedInMemorySquad, squadAndTaskIdsToTask.second) } - ?.let { Right(it.first.toScope()) } - ?: Left(nonEmptyListOf(ScopeNotExistingError(scopeKey))) + ?.let { Right(it.first.toSquad()) } + ?: Left(nonEmptyListOf(SquadNotExistingError(squadKey))) - override fun getScope(scopeKey: ScopeKey): EitherNel = - database[scopeKey] - ?.let { Right(it.first.toScope()) } - ?: Left(nonEmptyListOf(ScopeNotExistingError(scopeKey))) + override fun getSquad(squadKey: SquadKey): EitherNel = + database[squadKey] + ?.let { Right(it.first.toSquad()) } + ?: Left(nonEmptyListOf(SquadNotExistingError(squadKey))) - override fun getScopeMembers(scopeKey: ScopeKey): EitherNel = - database[scopeKey] - ?.let { Right(it.first.toScopeMembers()) } - ?: Left(nonEmptyListOf(ScopeNotExistingError(scopeKey))) + override fun getSquadMembers(squadKey: SquadKey): EitherNel = + database[squadKey] + ?.let { Right(it.first.toSquadMembers()) } + ?: Left(nonEmptyListOf(SquadNotExistingError(squadKey))) override fun pauseWork(inProgressTaskId: InProgressTaskId): EitherNel = database - .computeIfPresent(inProgressTaskId.scope) { _, scopeAndTaskIdsToTask -> - val inMemoryScope = scopeAndTaskIdsToTask.first + .computeIfPresent(inProgressTaskId.squadKey) { _, squadAndTaskIdsToTask -> + val inMemorySquad = squadAndTaskIdsToTask.first val rawTaskId = RawTaskId(inProgressTaskId) - val task = scopeAndTaskIdsToTask.second[rawTaskId] + val task = squadAndTaskIdsToTask.second[rawTaskId] if (task?.type == TaskType.IN_PROGRESS) { - PendingTaskId(inProgressTaskId.scope, rawTaskId.value) + PendingTaskId(inProgressTaskId.squadKey, rawTaskId.value) .map { inProgressTaskId -> val pendingTask = PendingTask( @@ -256,8 +256,8 @@ class InMemoryTaskRepository : TaskRepository { task.assignees ) Pair( - inMemoryScope, - scopeAndTaskIdsToTask.second.plus(rawTaskId to RawTask(pendingTask)) + inMemorySquad, + squadAndTaskIdsToTask.second.plus(rawTaskId to RawTask(pendingTask)) ) } .getOrNull() @@ -269,13 +269,13 @@ class InMemoryTaskRepository : TaskRepository { override fun endWork(inProgressTaskId: InProgressTaskId): EitherNel = database - .computeIfPresent(inProgressTaskId.scope) { _, scopeAndTaskIdsToTask -> - val inMemoryScope = scopeAndTaskIdsToTask.first + .computeIfPresent(inProgressTaskId.squadKey) { _, squadAndTaskIdsToTask -> + val inMemorySquad = squadAndTaskIdsToTask.first val rawTaskId = RawTaskId(inProgressTaskId) - val task = scopeAndTaskIdsToTask.second[rawTaskId] + val task = squadAndTaskIdsToTask.second[rawTaskId] if (task?.type == TaskType.IN_PROGRESS) { - val scope = inMemoryScope.toScope() - DoneTaskId(inProgressTaskId.scope, rawTaskId.value) + val squad = inMemorySquad.toSquad() + DoneTaskId(inProgressTaskId.squadKey, rawTaskId.value) .map { doneTaskId -> val doneTask = DoneTask( @@ -284,8 +284,8 @@ class InMemoryTaskRepository : TaskRepository { task.description ) Pair( - inMemoryScope, - scopeAndTaskIdsToTask.second.plus(rawTaskId to RawTask(doneTask)) + inMemorySquad, + squadAndTaskIdsToTask.second.plus(rawTaskId to RawTask(doneTask)) ) } .getOrNull() diff --git a/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryUserRepository.kt b/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryUserRepository.kt index dec2e22..0544988 100644 --- a/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryUserRepository.kt +++ b/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InMemoryUserRepository.kt @@ -1,4 +1,4 @@ -package org.hexastacks.heroesdesk.kotlin.adapters.inmemory +package org.hexastacks.heroesdesk.kotlin.ports.inmemory import arrow.core.Either.Left import arrow.core.Either.Right diff --git a/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InstrumentedInMemoryUserRepository.kt b/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InstrumentedInMemoryUserRepository.kt index cc26913..95c0be3 100644 --- a/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InstrumentedInMemoryUserRepository.kt +++ b/heroesdesk-inmemory-adapters/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/inmemory/InstrumentedInMemoryUserRepository.kt @@ -1,6 +1,5 @@ package org.hexastacks.heroesdesk.kotlin.ports.inmemory -import org.hexastacks.heroesdesk.kotlin.adapters.inmemory.InMemoryUserRepository import org.hexastacks.heroesdesk.kotlin.impl.user.Admin import org.hexastacks.heroesdesk.kotlin.impl.user.Hero import org.hexastacks.heroesdesk.kotlin.test.InstrumentedUserRepository diff --git a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Heroesdeskschema.java b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Heroesdeskschema.java index acc32c0..6d159ed 100644 --- a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Heroesdeskschema.java +++ b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Heroesdeskschema.java @@ -7,8 +7,8 @@ import java.util.Arrays; import java.util.List; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.Scope; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.ScopeUser; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.Squad; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.SquadUser; import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.Task; import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.TaskUser; import org.jooq.Catalog; @@ -30,14 +30,14 @@ public class Heroesdeskschema extends SchemaImpl { public static final Heroesdeskschema HEROESDESKSCHEMA = new Heroesdeskschema(); /** - * The table heroesdeskschema.Scope. + * The table heroesdeskschema.Squad. */ - public final Scope SCOPE = Scope.SCOPE; + public final Squad SQUAD = Squad.SQUAD; /** - * The table heroesdeskschema.Scope_User. + * The table heroesdeskschema.Squad_User. */ - public final ScopeUser SCOPE_USER = ScopeUser.SCOPE_USER; + public final SquadUser SQUAD_USER = SquadUser.SQUAD_USER; /** * The table heroesdeskschema.Task. @@ -65,8 +65,8 @@ public Catalog getCatalog() { @Override public final List> getTables() { return Arrays.asList( - Scope.SCOPE, - ScopeUser.SCOPE_USER, + Squad.SQUAD, + SquadUser.SQUAD_USER, Task.TASK, TaskUser.TASK_USER ); diff --git a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Keys.java b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Keys.java index 933124b..941c10e 100644 --- a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Keys.java +++ b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Keys.java @@ -4,12 +4,12 @@ package org.hexastacks.heroesdesk.kotlin.ports.pgjooq; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.Scope; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.ScopeUser; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.Squad; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.SquadUser; import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.Task; import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.TaskUser; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.ScopeRecord; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.ScopeUserRecord; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.SquadRecord; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.SquadUserRecord; import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.TaskRecord; import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.TaskUserRecord; import org.jooq.ForeignKey; @@ -30,9 +30,9 @@ public class Keys { // UNIQUE and PRIMARY KEY definitions // ------------------------------------------------------------------------- - public static final UniqueKey CHK_NAME_UNIQUE = Internal.createUniqueKey(Scope.SCOPE, DSL.name("CHK_name_UNIQUE"), new TableField[] { Scope.SCOPE.NAME }, true); - public static final UniqueKey PK_SCOPE = Internal.createUniqueKey(Scope.SCOPE, DSL.name("PK_SCOPE"), new TableField[] { Scope.SCOPE.KEY }, true); - public static final UniqueKey PK_SCOPE_USER = Internal.createUniqueKey(ScopeUser.SCOPE_USER, DSL.name("PK_Scope_User"), new TableField[] { ScopeUser.SCOPE_USER.SCOPE_KEY, ScopeUser.SCOPE_USER.USER_ID }, true); + public static final UniqueKey CHK_NAME_UNIQUE = Internal.createUniqueKey(Squad.SQUAD, DSL.name("CHK_name_UNIQUE"), new TableField[] { Squad.SQUAD.NAME }, true); + public static final UniqueKey PK_SQUAD = Internal.createUniqueKey(Squad.SQUAD, DSL.name("PK_SQUAD"), new TableField[] { Squad.SQUAD.KEY }, true); + public static final UniqueKey PK_SQUAD_USER = Internal.createUniqueKey(SquadUser.SQUAD_USER, DSL.name("PK_Squad_User"), new TableField[] { SquadUser.SQUAD_USER.SQUAD_KEY, SquadUser.SQUAD_USER.USER_ID }, true); public static final UniqueKey PK_TASK = Internal.createUniqueKey(Task.TASK, DSL.name("PK_Task"), new TableField[] { Task.TASK.ID }, true); public static final UniqueKey PK_TASK_USER = Internal.createUniqueKey(TaskUser.TASK_USER, DSL.name("PK_Task_User"), new TableField[] { TaskUser.TASK_USER.TASK_ID, TaskUser.TASK_USER.USER_ID }, true); @@ -40,7 +40,7 @@ public class Keys { // FOREIGN KEY definitions // ------------------------------------------------------------------------- - public static final ForeignKey SCOPE_USER__FK_SCOPE = Internal.createForeignKey(ScopeUser.SCOPE_USER, DSL.name("FK_Scope"), new TableField[] { ScopeUser.SCOPE_USER.SCOPE_KEY }, Keys.PK_SCOPE, new TableField[] { Scope.SCOPE.KEY }, true); - public static final ForeignKey TASK__FK_SCOPE_KEY = Internal.createForeignKey(Task.TASK, DSL.name("FK_scope_key"), new TableField[] { Task.TASK.SCOPE_KEY }, Keys.PK_SCOPE, new TableField[] { Scope.SCOPE.KEY }, true); + public static final ForeignKey SQUAD_USER__FK_SQUAD = Internal.createForeignKey(SquadUser.SQUAD_USER, DSL.name("FK_Squad"), new TableField[] { SquadUser.SQUAD_USER.SQUAD_KEY }, Keys.PK_SQUAD, new TableField[] { Squad.SQUAD.KEY }, true); + public static final ForeignKey TASK__FK_SQUAD_KEY = Internal.createForeignKey(Task.TASK, DSL.name("FK_squad_key"), new TableField[] { Task.TASK.SQUAD_KEY }, Keys.PK_SQUAD, new TableField[] { Squad.SQUAD.KEY }, true); public static final ForeignKey TASK_USER__FK_TASK = Internal.createForeignKey(TaskUser.TASK_USER, DSL.name("FK_Task"), new TableField[] { TaskUser.TASK_USER.TASK_ID }, Keys.PK_TASK, new TableField[] { Task.TASK.ID }, true); } diff --git a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Tables.java b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Tables.java index 126bfb6..07c6924 100644 --- a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Tables.java +++ b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/Tables.java @@ -4,8 +4,8 @@ package org.hexastacks.heroesdesk.kotlin.ports.pgjooq; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.Scope; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.ScopeUser; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.Squad; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.SquadUser; import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.Task; import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.TaskUser; @@ -17,14 +17,14 @@ public class Tables { /** - * The table heroesdeskschema.Scope. + * The table heroesdeskschema.Squad. */ - public static final Scope SCOPE = Scope.SCOPE; + public static final Squad SQUAD = Squad.SQUAD; /** - * The table heroesdeskschema.Scope_User. + * The table heroesdeskschema.Squad_User. */ - public static final ScopeUser SCOPE_USER = ScopeUser.SCOPE_USER; + public static final SquadUser SQUAD_USER = SquadUser.SQUAD_USER; /** * The table heroesdeskschema.Task. diff --git a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/Scope.java b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/Squad.java similarity index 63% rename from heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/Scope.java rename to heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/Squad.java index a320cc4..3bafdb4 100644 --- a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/Scope.java +++ b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/Squad.java @@ -10,7 +10,7 @@ import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.Heroesdeskschema; import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.Keys; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.ScopeRecord; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.SquadRecord; import org.jooq.Check; import org.jooq.Field; import org.jooq.ForeignKey; @@ -35,64 +35,64 @@ * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Scope extends TableImpl { +public class Squad extends TableImpl { private static final long serialVersionUID = 1L; /** - * The reference instance of heroesdeskschema.Scope + * The reference instance of heroesdeskschema.Squad */ - public static final Scope SCOPE = new Scope(); + public static final Squad SQUAD = new Squad(); /** * The class holding records for this type */ @Override - public Class getRecordType() { - return ScopeRecord.class; + public Class getRecordType() { + return SquadRecord.class; } /** - * The column heroesdeskschema.Scope.key. + * The column heroesdeskschema.Squad.key. */ - public final TableField KEY = createField(DSL.name("key"), SQLDataType.VARCHAR(36).nullable(false), this, ""); + public final TableField KEY = createField(DSL.name("key"), SQLDataType.VARCHAR(36).nullable(false), this, ""); /** - * The column heroesdeskschema.Scope.name. + * The column heroesdeskschema.Squad.name. */ - public final TableField NAME = createField(DSL.name("name"), SQLDataType.VARCHAR(255).nullable(false), this, ""); + public final TableField NAME = createField(DSL.name("name"), SQLDataType.VARCHAR(255).nullable(false), this, ""); - private Scope(Name alias, Table aliased) { + private Squad(Name alias, Table aliased) { this(alias, aliased, null); } - private Scope(Name alias, Table aliased, Field[] parameters) { + private Squad(Name alias, Table aliased, Field[] parameters) { super(alias, null, aliased, parameters, DSL.comment(""), TableOptions.table()); } /** - * Create an aliased heroesdeskschema.Scope table reference + * Create an aliased heroesdeskschema.Squad table reference */ - public Scope(String alias) { - this(DSL.name(alias), SCOPE); + public Squad(String alias) { + this(DSL.name(alias), SQUAD); } /** - * Create an aliased heroesdeskschema.Scope table reference + * Create an aliased heroesdeskschema.Squad table reference */ - public Scope(Name alias) { - this(alias, SCOPE); + public Squad(Name alias) { + this(alias, SQUAD); } /** - * Create a heroesdeskschema.Scope table reference + * Create a heroesdeskschema.Squad table reference */ - public Scope() { - this(DSL.name("Scope"), null); + public Squad() { + this(DSL.name("Squad"), null); } - public Scope(Table child, ForeignKey key) { - super(child, key, SCOPE); + public Squad(Table child, ForeignKey key) { + super(child, key, SQUAD); } @Override @@ -101,17 +101,17 @@ public Schema getSchema() { } @Override - public UniqueKey getPrimaryKey() { - return Keys.PK_SCOPE; + public UniqueKey getPrimaryKey() { + return Keys.PK_SQUAD; } @Override - public List> getUniqueKeys() { + public List> getUniqueKeys() { return Arrays.asList(Keys.CHK_NAME_UNIQUE); } @Override - public List> getChecks() { + public List> getChecks() { return Arrays.asList( Internal.createCheck(this, DSL.name("CHK_key_LENGTH"), "((char_length('key'::text) >= 1))", true), Internal.createCheck(this, DSL.name("CHK_name_MIN_LENGTH"), "((char_length('name'::text) >= 1))", true) @@ -119,42 +119,42 @@ public List> getChecks() { } @Override - public Scope as(String alias) { - return new Scope(DSL.name(alias), this); + public Squad as(String alias) { + return new Squad(DSL.name(alias), this); } @Override - public Scope as(Name alias) { - return new Scope(alias, this); + public Squad as(Name alias) { + return new Squad(alias, this); } @Override - public Scope as(Table alias) { - return new Scope(alias.getQualifiedName(), this); + public Squad as(Table alias) { + return new Squad(alias.getQualifiedName(), this); } /** * Rename this table */ @Override - public Scope rename(String name) { - return new Scope(DSL.name(name), null); + public Squad rename(String name) { + return new Squad(DSL.name(name), null); } /** * Rename this table */ @Override - public Scope rename(Name name) { - return new Scope(name, null); + public Squad rename(Name name) { + return new Squad(name, null); } /** * Rename this table */ @Override - public Scope rename(Table name) { - return new Scope(name.getQualifiedName(), null); + public Squad rename(Table name) { + return new Squad(name.getQualifiedName(), null); } // ------------------------------------------------------------------------- diff --git a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/ScopeUser.java b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/SquadUser.java similarity index 56% rename from heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/ScopeUser.java rename to heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/SquadUser.java index 1fe18d9..42113c0 100644 --- a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/ScopeUser.java +++ b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/SquadUser.java @@ -10,7 +10,7 @@ import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.Heroesdeskschema; import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.Keys; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.ScopeUserRecord; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.SquadUserRecord; import org.jooq.Field; import org.jooq.ForeignKey; import org.jooq.Function2; @@ -33,66 +33,66 @@ * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class ScopeUser extends TableImpl { +public class SquadUser extends TableImpl { private static final long serialVersionUID = 1L; /** - * The reference instance of heroesdeskschema.Scope_User + * The reference instance of heroesdeskschema.Squad_User */ - public static final ScopeUser SCOPE_USER = new ScopeUser(); + public static final SquadUser SQUAD_USER = new SquadUser(); /** * The class holding records for this type */ @Override - public Class getRecordType() { - return ScopeUserRecord.class; + public Class getRecordType() { + return SquadUserRecord.class; } /** - * The column heroesdeskschema.Scope_User.scope_key. + * The column heroesdeskschema.Squad_User.squad_key. */ - public final TableField SCOPE_KEY = createField(DSL.name("scope_key"), SQLDataType.VARCHAR(36).nullable(false), this, ""); + public final TableField SQUAD_KEY = createField(DSL.name("squad_key"), SQLDataType.VARCHAR(36).nullable(false), this, ""); /** - * The column heroesdeskschema.Scope_User.user_id. + * The column heroesdeskschema.Squad_User.user_id. */ - public final TableField USER_ID = createField(DSL.name("user_id"), SQLDataType.VARCHAR(36).nullable(false), this, ""); + public final TableField USER_ID = createField(DSL.name("user_id"), SQLDataType.VARCHAR(36).nullable(false), this, ""); - private ScopeUser(Name alias, Table aliased) { + private SquadUser(Name alias, Table aliased) { this(alias, aliased, null); } - private ScopeUser(Name alias, Table aliased, Field[] parameters) { + private SquadUser(Name alias, Table aliased, Field[] parameters) { super(alias, null, aliased, parameters, DSL.comment(""), TableOptions.table()); } /** - * Create an aliased heroesdeskschema.Scope_User table + * Create an aliased heroesdeskschema.Squad_User table * reference */ - public ScopeUser(String alias) { - this(DSL.name(alias), SCOPE_USER); + public SquadUser(String alias) { + this(DSL.name(alias), SQUAD_USER); } /** - * Create an aliased heroesdeskschema.Scope_User table + * Create an aliased heroesdeskschema.Squad_User table * reference */ - public ScopeUser(Name alias) { - this(alias, SCOPE_USER); + public SquadUser(Name alias) { + this(alias, SQUAD_USER); } /** - * Create a heroesdeskschema.Scope_User table reference + * Create a heroesdeskschema.Squad_User table reference */ - public ScopeUser() { - this(DSL.name("Scope_User"), null); + public SquadUser() { + this(DSL.name("Squad_User"), null); } - public ScopeUser(Table child, ForeignKey key) { - super(child, key, SCOPE_USER); + public SquadUser(Table child, ForeignKey key) { + super(child, key, SQUAD_USER); } @Override @@ -101,65 +101,65 @@ public Schema getSchema() { } @Override - public UniqueKey getPrimaryKey() { - return Keys.PK_SCOPE_USER; + public UniqueKey getPrimaryKey() { + return Keys.PK_SQUAD_USER; } @Override - public List> getReferences() { - return Arrays.asList(Keys.SCOPE_USER__FK_SCOPE); + public List> getReferences() { + return Arrays.asList(Keys.SQUAD_USER__FK_SQUAD); } - private transient Scope _scope; + private transient Squad _squad; /** - * Get the implicit join path to the heroesdeskschema.Scope + * Get the implicit join path to the heroesdeskschema.Squad * table. */ - public Scope scope() { - if (_scope == null) - _scope = new Scope(this, Keys.SCOPE_USER__FK_SCOPE); + public Squad squad() { + if (_squad == null) + _squad = new Squad(this, Keys.SQUAD_USER__FK_SQUAD); - return _scope; + return _squad; } @Override - public ScopeUser as(String alias) { - return new ScopeUser(DSL.name(alias), this); + public SquadUser as(String alias) { + return new SquadUser(DSL.name(alias), this); } @Override - public ScopeUser as(Name alias) { - return new ScopeUser(alias, this); + public SquadUser as(Name alias) { + return new SquadUser(alias, this); } @Override - public ScopeUser as(Table alias) { - return new ScopeUser(alias.getQualifiedName(), this); + public SquadUser as(Table alias) { + return new SquadUser(alias.getQualifiedName(), this); } /** * Rename this table */ @Override - public ScopeUser rename(String name) { - return new ScopeUser(DSL.name(name), null); + public SquadUser rename(String name) { + return new SquadUser(DSL.name(name), null); } /** * Rename this table */ @Override - public ScopeUser rename(Name name) { - return new ScopeUser(name, null); + public SquadUser rename(Name name) { + return new SquadUser(name, null); } /** * Rename this table */ @Override - public ScopeUser rename(Table name) { - return new ScopeUser(name.getQualifiedName(), null); + public SquadUser rename(Table name) { + return new SquadUser(name.getQualifiedName(), null); } // ------------------------------------------------------------------------- diff --git a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/Task.java b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/Task.java index 804eca2..94a550a 100644 --- a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/Task.java +++ b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/Task.java @@ -59,9 +59,9 @@ public Class getRecordType() { public final TableField ID = createField(DSL.name("id"), SQLDataType.VARCHAR(36).nullable(false), this, ""); /** - * The column heroesdeskschema.Task.scope_key. + * The column heroesdeskschema.Task.squad_key. */ - public final TableField SCOPE_KEY = createField(DSL.name("scope_key"), SQLDataType.VARCHAR(36).nullable(false), this, ""); + public final TableField SQUAD_KEY = createField(DSL.name("squad_key"), SQLDataType.VARCHAR(36).nullable(false), this, ""); /** * The column heroesdeskschema.Task.title. @@ -123,20 +123,20 @@ public UniqueKey getPrimaryKey() { @Override public List> getReferences() { - return Arrays.asList(Keys.TASK__FK_SCOPE_KEY); + return Arrays.asList(Keys.TASK__FK_SQUAD_KEY); } - private transient Scope _scope; + private transient Squad _squad; /** - * Get the implicit join path to the heroesdeskschema.Scope + * Get the implicit join path to the heroesdeskschema.Squad * table. */ - public Scope scope() { - if (_scope == null) - _scope = new Scope(this, Keys.TASK__FK_SCOPE_KEY); + public Squad squad() { + if (_squad == null) + _squad = new Squad(this, Keys.TASK__FK_SQUAD_KEY); - return _scope; + return _squad; } @Override diff --git a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/ScopeRecord.java b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/SquadRecord.java similarity index 75% rename from heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/ScopeRecord.java rename to heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/SquadRecord.java index f0ab537..4a010ec 100644 --- a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/ScopeRecord.java +++ b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/SquadRecord.java @@ -4,7 +4,7 @@ package org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.Scope; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.Squad; import org.jooq.Field; import org.jooq.Record1; import org.jooq.Record2; @@ -16,33 +16,33 @@ * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class ScopeRecord extends UpdatableRecordImpl implements Record2 { +public class SquadRecord extends UpdatableRecordImpl implements Record2 { private static final long serialVersionUID = 1L; /** - * Setter for heroesdeskschema.Scope.key. + * Setter for heroesdeskschema.Squad.key. */ public void setKey(String value) { set(0, value); } /** - * Getter for heroesdeskschema.Scope.key. + * Getter for heroesdeskschema.Squad.key. */ public String getKey() { return (String) get(0); } /** - * Setter for heroesdeskschema.Scope.name. + * Setter for heroesdeskschema.Squad.name. */ public void setName(String value) { set(1, value); } /** - * Getter for heroesdeskschema.Scope.name. + * Getter for heroesdeskschema.Squad.name. */ public String getName() { return (String) get(1); @@ -73,12 +73,12 @@ public Row2 valuesRow() { @Override public Field field1() { - return Scope.SCOPE.KEY; + return Squad.SQUAD.KEY; } @Override public Field field2() { - return Scope.SCOPE.NAME; + return Squad.SQUAD.NAME; } @Override @@ -102,19 +102,19 @@ public String value2() { } @Override - public ScopeRecord value1(String value) { + public SquadRecord value1(String value) { setKey(value); return this; } @Override - public ScopeRecord value2(String value) { + public SquadRecord value2(String value) { setName(value); return this; } @Override - public ScopeRecord values(String value1, String value2) { + public SquadRecord values(String value1, String value2) { value1(value1); value2(value2); return this; @@ -125,17 +125,17 @@ public ScopeRecord values(String value1, String value2) { // ------------------------------------------------------------------------- /** - * Create a detached ScopeRecord + * Create a detached SquadRecord */ - public ScopeRecord() { - super(Scope.SCOPE); + public SquadRecord() { + super(Squad.SQUAD); } /** - * Create a detached, initialised ScopeRecord + * Create a detached, initialised SquadRecord */ - public ScopeRecord(String key, String name) { - super(Scope.SCOPE); + public SquadRecord(String key, String name) { + super(Squad.SQUAD); setKey(key); setName(name); diff --git a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/ScopeUserRecord.java b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/SquadUserRecord.java similarity index 67% rename from heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/ScopeUserRecord.java rename to heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/SquadUserRecord.java index 4c5b1b9..552c898 100644 --- a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/ScopeUserRecord.java +++ b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/SquadUserRecord.java @@ -4,7 +4,7 @@ package org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records; -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.ScopeUser; +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.SquadUser; import org.jooq.Field; import org.jooq.Record2; import org.jooq.Row2; @@ -15,33 +15,33 @@ * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class ScopeUserRecord extends UpdatableRecordImpl implements Record2 { +public class SquadUserRecord extends UpdatableRecordImpl implements Record2 { private static final long serialVersionUID = 1L; /** - * Setter for heroesdeskschema.Scope_User.scope_key. + * Setter for heroesdeskschema.Squad_User.squad_key. */ - public void setScopeKey(String value) { + public void setSquadKey(String value) { set(0, value); } /** - * Getter for heroesdeskschema.Scope_User.scope_key. + * Getter for heroesdeskschema.Squad_User.squad_key. */ - public String getScopeKey() { + public String getSquadKey() { return (String) get(0); } /** - * Setter for heroesdeskschema.Scope_User.user_id. + * Setter for heroesdeskschema.Squad_User.user_id. */ public void setUserId(String value) { set(1, value); } /** - * Getter for heroesdeskschema.Scope_User.user_id. + * Getter for heroesdeskschema.Squad_User.user_id. */ public String getUserId() { return (String) get(1); @@ -72,17 +72,17 @@ public Row2 valuesRow() { @Override public Field field1() { - return ScopeUser.SCOPE_USER.SCOPE_KEY; + return SquadUser.SQUAD_USER.SQUAD_KEY; } @Override public Field field2() { - return ScopeUser.SCOPE_USER.USER_ID; + return SquadUser.SQUAD_USER.USER_ID; } @Override public String component1() { - return getScopeKey(); + return getSquadKey(); } @Override @@ -92,7 +92,7 @@ public String component2() { @Override public String value1() { - return getScopeKey(); + return getSquadKey(); } @Override @@ -101,19 +101,19 @@ public String value2() { } @Override - public ScopeUserRecord value1(String value) { - setScopeKey(value); + public SquadUserRecord value1(String value) { + setSquadKey(value); return this; } @Override - public ScopeUserRecord value2(String value) { + public SquadUserRecord value2(String value) { setUserId(value); return this; } @Override - public ScopeUserRecord values(String value1, String value2) { + public SquadUserRecord values(String value1, String value2) { value1(value1); value2(value2); return this; @@ -124,19 +124,19 @@ public ScopeUserRecord values(String value1, String value2) { // ------------------------------------------------------------------------- /** - * Create a detached ScopeUserRecord + * Create a detached SquadUserRecord */ - public ScopeUserRecord() { - super(ScopeUser.SCOPE_USER); + public SquadUserRecord() { + super(SquadUser.SQUAD_USER); } /** - * Create a detached, initialised ScopeUserRecord + * Create a detached, initialised SquadUserRecord */ - public ScopeUserRecord(String scopeKey, String userId) { - super(ScopeUser.SCOPE_USER); + public SquadUserRecord(String squadKey, String userId) { + super(SquadUser.SQUAD_USER); - setScopeKey(scopeKey); + setSquadKey(squadKey); setUserId(userId); resetChangedOnNotNull(); } diff --git a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/TaskRecord.java b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/TaskRecord.java index 6430bfc..e0a231b 100644 --- a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/TaskRecord.java +++ b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/generated/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/tables/records/TaskRecord.java @@ -36,16 +36,16 @@ public String getId() { } /** - * Setter for heroesdeskschema.Task.scope_key. + * Setter for heroesdeskschema.Task.squad_key. */ - public void setScopeKey(String value) { + public void setSquadKey(String value) { set(1, value); } /** - * Getter for heroesdeskschema.Task.scope_key. + * Getter for heroesdeskschema.Task.squad_key. */ - public String getScopeKey() { + public String getSquadKey() { return (String) get(1); } @@ -121,7 +121,7 @@ public Field field1() { @Override public Field field2() { - return Task.TASK.SCOPE_KEY; + return Task.TASK.SQUAD_KEY; } @Override @@ -146,7 +146,7 @@ public String component1() { @Override public String component2() { - return getScopeKey(); + return getSquadKey(); } @Override @@ -171,7 +171,7 @@ public String value1() { @Override public String value2() { - return getScopeKey(); + return getSquadKey(); } @Override @@ -197,7 +197,7 @@ public TaskRecord value1(String value) { @Override public TaskRecord value2(String value) { - setScopeKey(value); + setSquadKey(value); return this; } @@ -243,11 +243,11 @@ public TaskRecord() { /** * Create a detached, initialised TaskRecord */ - public TaskRecord(String id, String scopeKey, String title, String description, Taskstatus status) { + public TaskRecord(String id, String squadKey, String title, String description, Taskstatus status) { super(Task.TASK); setId(id); - setScopeKey(scopeKey); + setSquadKey(squadKey); setTitle(title); setDescription(description); setStatus(status); diff --git a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/PgJooqTaskRepository.kt b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/PgJooqTaskRepository.kt index 0b39906..6e8bd24 100644 --- a/heroesdesk-taskrepo-jooq-pg-adapter/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/PgJooqTaskRepository.kt +++ b/heroesdesk-taskrepo-jooq-pg-adapter/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/pgjooq/PgJooqTaskRepository.kt @@ -5,10 +5,10 @@ import arrow.core.Either.Left import arrow.core.Either.Right import arrow.core.raise.either import org.hexastacks.heroesdesk.kotlin.errors.* -import org.hexastacks.heroesdesk.kotlin.impl.scope.Name -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeMembers +import org.hexastacks.heroesdesk.kotlin.squad.Name +import org.hexastacks.heroesdesk.kotlin.squad.Squad +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadMembers import org.hexastacks.heroesdesk.kotlin.impl.task.* import org.hexastacks.heroesdesk.kotlin.impl.user.HeroId import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds @@ -16,7 +16,7 @@ import org.hexastacks.heroesdesk.kotlin.impl.user.Heroes import org.hexastacks.heroesdesk.kotlin.ports.TaskRepository import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.Tables.* import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.enums.Taskstatus -import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.ScopeRecord +import org.hexastacks.heroesdesk.kotlin.ports.pgjooq.tables.records.SquadRecord import org.jooq.DSLContext import org.jooq.Record6 import org.jooq.Result @@ -25,119 +25,119 @@ import org.jooq.exception.IntegrityConstraintViolationException import java.util.* class PgJooqTaskRepository(private val dslContext: DSLContext) : TaskRepository { - override fun createScope(scopeKey: ScopeKey, name: Name): EitherNel = + override fun createSquad(squadKey: SquadKey, name: Name): EitherNel = try { - val execute = dslContext.insertInto(SCOPE) - .set(SCOPE.KEY, scopeKey.value) - .set(SCOPE.NAME, name.value) + val execute = dslContext.insertInto(SQUAD) + .set(SQUAD.KEY, squadKey.value) + .set(SQUAD.NAME, name.value) .execute() if (execute != 1) Left(nonEmptyListOf(TaskRepositoryError("Insert failed"))) else - Right(Scope(name, scopeKey)) + Right(Squad(name, squadKey)) } catch (e: DataAccessException) { if (e is IntegrityConstraintViolationException && e.message?.contains("""ERROR: duplicate key value violates unique constraint "${Keys.CHK_NAME_UNIQUE.name}"""") ?: false) - Left(nonEmptyListOf(ScopeNameAlreadyExistingError(name))) - else if (e is IntegrityConstraintViolationException && e.message?.contains("""ERROR: duplicate key value violates unique constraint "${Keys.PK_SCOPE.name}"""") ?: false) - Left(nonEmptyListOf(ScopeKeyAlreadyExistingError(scopeKey))) + Left(nonEmptyListOf(SquadNameAlreadyExistingError(name))) + else if (e is IntegrityConstraintViolationException && e.message?.contains("""ERROR: duplicate key value violates unique constraint "${Keys.PK_SQUAD.name}"""") ?: false) + Left(nonEmptyListOf(SquadKeyAlreadyExistingError(squadKey))) else Left(nonEmptyListOf(TaskRepositoryError(e))) } - override fun getScope(scopeKey: ScopeKey): EitherNel = + override fun getSquad(squadKey: SquadKey): EitherNel = try { - dslContext.selectFrom(SCOPE) - .where(SCOPE.KEY.eq(scopeKey.value)) - .fetchOneInto(ScopeRecord::class.java) + dslContext.selectFrom(SQUAD) + .where(SQUAD.KEY.eq(squadKey.value)) + .fetchOneInto(SquadRecord::class.java) ?.let { Name(it.name) .mapLeft { errors -> errors.map { error -> TaskRepositoryError(error) } } - .map { name -> Scope(name, scopeKey) } + .map { name -> Squad(name, squadKey) } } - ?: Left(nonEmptyListOf(ScopeNotExistingError(scopeKey))) + ?: Left(nonEmptyListOf(SquadNotExistingError(squadKey))) } catch (e: DataAccessException) { Left(nonEmptyListOf(TaskRepositoryError(e))) } - override fun getScopeMembers(scopeKey: ScopeKey): EitherNel = + override fun getSquadMembers(squadKey: SquadKey): EitherNel = try { - (if (isScopeNotExisting(scopeKey) - ) Left(nonEmptyListOf(ScopeNotExistingError(scopeKey))) - else dslContext.select(SCOPE_USER.USER_ID) - .from(SCOPE_USER) - .where(SCOPE_USER.SCOPE_KEY.eq(scopeKey.value)) + (if (isSquadNotExisting(squadKey) + ) Left(nonEmptyListOf(SquadNotExistingError(squadKey))) + else dslContext.select(SQUAD_USER.USER_ID) + .from(SQUAD_USER) + .where(SQUAD_USER.SQUAD_KEY.eq(squadKey.value)) .map { HeroId(it.value1()) } .toList() .let { either { it.bindAll() } } .mapLeft { errors -> errors.map { error -> TaskRepositoryError(error) } - }.map { heroIds -> ScopeMembers(scopeKey, HeroIds(heroIds)) }) + }.map { heroIds -> SquadMembers(squadKey, HeroIds(heroIds)) }) } catch (e: DataAccessException) { Left(nonEmptyListOf(TaskRepositoryError(e))) } - override fun updateScopeName(scopeKey: ScopeKey, name: Name): EitherNel = + override fun updateSquadName(squadKey: SquadKey, name: Name): EitherNel = try { - dslContext.update(SCOPE) - .set(SCOPE.NAME, name.value) - .where(SCOPE.KEY.eq(scopeKey.value)) + dslContext.update(SQUAD) + .set(SQUAD.NAME, name.value) + .where(SQUAD.KEY.eq(squadKey.value)) .returning() - .fetchOneInto(Scope::class.java) + .fetchOneInto(Squad::class.java) ?.let { Right(it) } - ?: Left(nonEmptyListOf(ScopeNotExistingError(scopeKey))) + ?: Left(nonEmptyListOf(SquadNotExistingError(squadKey))) } catch (e: DataAccessException) { Left(nonEmptyListOf(TaskRepositoryError(e))) } - override fun assignScope( - scopeKey: ScopeKey, + override fun assignSquad( + squadKey: SquadKey, assignees: Heroes - ): EitherNel = + ): EitherNel = try { - if (isScopeNotExisting(scopeKey) // FIXME: if scope not existing then FK should make insert fail and thus no need for extra query - ) Left(nonEmptyListOf(ScopeNotExistingError(scopeKey))) + if (isSquadNotExisting(squadKey) // FIXME: if squad not existing then FK should make insert fail and thus no need for extra query + ) Left(nonEmptyListOf(SquadNotExistingError(squadKey))) else { - dslContext.deleteFrom(SCOPE_USER) - .where(SCOPE_USER.SCOPE_KEY.eq(scopeKey.value)) + dslContext.deleteFrom(SQUAD_USER) + .where(SQUAD_USER.SQUAD_KEY.eq(squadKey.value)) .execute() - val nbUpdate = dslContext.insertInto(SCOPE_USER) - .columns(SCOPE_USER.SCOPE_KEY, SCOPE_USER.USER_ID) + val nbUpdate = dslContext.insertInto(SQUAD_USER) + .columns(SQUAD_USER.SQUAD_KEY, SQUAD_USER.USER_ID) .apply { assignees.forEach { hero -> - values(scopeKey.value, hero.id.value) + values(squadKey.value, hero.id.value) } } .execute() if (nbUpdate != assignees.size) Left(nonEmptyListOf(TaskRepositoryError("Only $nbUpdate updated on ${assignees.size}"))) else - Right(ScopeMembers(scopeKey, HeroIds(assignees.map { it.id }))) + Right(SquadMembers(squadKey, HeroIds(assignees.map { it.id }))) } } catch (e: DataAccessException) { Left(nonEmptyListOf(TaskRepositoryError(e))) } - private fun isScopeNotExisting(scopeKey: ScopeKey) = !dslContext.fetchExists( + private fun isSquadNotExisting(squadKey: SquadKey) = !dslContext.fetchExists( dslContext.selectOne() - .from(SCOPE) - .where(SCOPE.KEY.eq(scopeKey.value)) + .from(SQUAD) + .where(SQUAD.KEY.eq(squadKey.value)) ) - override fun areHeroesInScope( + override fun areHeroesInSquad( heroIds: HeroIds, - scopeKey: ScopeKey - ): EitherNel = + squadKey: SquadKey + ): EitherNel = try { - if (isScopeNotExisting(scopeKey) - ) Left(nonEmptyListOf(ScopeNotExistingError(scopeKey))) + if (isSquadNotExisting(squadKey) + ) Left(nonEmptyListOf(SquadNotExistingError(squadKey))) else { - dslContext.select(SCOPE_USER.USER_ID) - .from(SCOPE_USER) + dslContext.select(SQUAD_USER.USER_ID) + .from(SQUAD_USER) .where( - SCOPE_USER.SCOPE_KEY.eq(scopeKey.value) - .and(SCOPE_USER.USER_ID.`in`(heroIds.value.map { it.value })) + SQUAD_USER.SQUAD_KEY.eq(squadKey.value) + .and(SQUAD_USER.USER_ID.`in`(heroIds.value.map { it.value })) ) .map { HeroId(it.value1()) } .toList() @@ -147,14 +147,14 @@ class PgJooqTaskRepository(private val dslContext: DSLContext) : TaskRepository } .flatMap { fetchedHeroIds: List -> if (fetchedHeroIds.size == heroIds.size) - Right(ScopeMembers(scopeKey, HeroIds(fetchedHeroIds))) + Right(SquadMembers(squadKey, HeroIds(fetchedHeroIds))) else Left( nonEmptyListOf( - HeroesNotInScopeError( + HeroesNotInSquadError( HeroIds( heroIds.value.filterNot { fetchedHeroIds.contains(it) }), - scopeKey + squadKey ) ) ) @@ -162,27 +162,27 @@ class PgJooqTaskRepository(private val dslContext: DSLContext) : TaskRepository } } catch (e: DataAccessException) { if (e is IntegrityConstraintViolationException && e.message?.contains("ERROR: insert or update on table \"$TASK_USER.name\" violates foreign key constraint \"${Keys.TASK_USER__FK_TASK}\"") ?: false) - Left(nonEmptyListOf(HeroesNotInScopeError(heroIds, scopeKey))) + Left(nonEmptyListOf(HeroesNotInSquadError(heroIds, squadKey))) else Left(nonEmptyListOf(TaskRepositoryError(e))) } override fun createTask( - scopeKey: ScopeKey, + squadKey: SquadKey, title: Title ): EitherNel = try { val id = UUID.randomUUID().toString() dslContext.insertInto(TASK) .set(TASK.ID, id) - .set(TASK.SCOPE_KEY, scopeKey.value) + .set(TASK.SQUAD_KEY, squadKey.value) .set(TASK.TITLE, title.value) .set(TASK.STATUS, Taskstatus.Pending) .returning() .fetchOneInto(TASK) ?.let { task -> - ScopeKey(task.scopeKey) - .flatMap { dbScopeKey -> PendingTaskId(dbScopeKey, task.id) } + SquadKey(task.squadKey) + .flatMap { dbSquadKey -> PendingTaskId(dbSquadKey, task.id) } .mapLeft { errors -> errors.map { error -> TaskRepositoryError(error) } } @@ -197,7 +197,7 @@ class PgJooqTaskRepository(private val dslContext: DSLContext) : TaskRepository override fun getTask(taskId: TaskId): EitherNel> = try { - dslContext.select(TASK.ID, TASK.SCOPE_KEY, TASK.TITLE, TASK.DESCRIPTION, TASK.STATUS, TASK_USER.USER_ID) + dslContext.select(TASK.ID, TASK.SQUAD_KEY, TASK.TITLE, TASK.DESCRIPTION, TASK.STATUS, TASK_USER.USER_ID) .from(TASK) .leftJoin(TASK_USER).on(TASK.ID.eq(TASK_USER.TASK_ID)) .where(TASK.ID.eq(taskId.value)) @@ -213,7 +213,7 @@ class PgJooqTaskRepository(private val dslContext: DSLContext) : TaskRepository private fun buildTask(rawTaskAndUsers: Result>): Either, Task> { val task = rawTaskAndUsers.first() - val rawScopeKey = task[TASK.SCOPE_KEY] + val rawSquadKey = task[TASK.SQUAD_KEY] val rawTaskId = task[TASK.ID] val rawTitle = task[TASK.TITLE] val rawDescription = task[TASK.DESCRIPTION] @@ -229,7 +229,7 @@ class PgJooqTaskRepository(private val dslContext: DSLContext) : TaskRepository return when (taskStatus) { Taskstatus.Pending -> either { - val key = ScopeKey(rawScopeKey).bind() + val key = SquadKey(rawSquadKey).bind() val id = PendingTaskId(key, rawTaskId).bind() val title = Title(rawTitle).bind() val description = Description(rawDescription).bind() @@ -240,7 +240,7 @@ class PgJooqTaskRepository(private val dslContext: DSLContext) : TaskRepository } Taskstatus.InProgress -> either { - val key = ScopeKey(rawScopeKey).bind() + val key = SquadKey(rawSquadKey).bind() val id = InProgressTaskId(key, rawTaskId).bind() val title = Title(rawTitle).bind() val description = Description(rawDescription).bind() @@ -251,7 +251,7 @@ class PgJooqTaskRepository(private val dslContext: DSLContext) : TaskRepository } Taskstatus.Done -> either { - val key = ScopeKey(rawScopeKey).bind() + val key = SquadKey(rawSquadKey).bind() val id = DoneTaskId(key, rawTaskId).bind() val title = Title(rawTitle).bind() val description = Description(rawDescription).bind() diff --git a/heroesdesk-taskrepo-jooq-pg-adapter/src/test/kotlin/GenerateJooqModelFromDb.kt b/heroesdesk-taskrepo-jooq-pg-adapter/src/test/kotlin/GenerateJooqModelFromDb.kt index 625ddef..11af0ab 100644 --- a/heroesdesk-taskrepo-jooq-pg-adapter/src/test/kotlin/GenerateJooqModelFromDb.kt +++ b/heroesdesk-taskrepo-jooq-pg-adapter/src/test/kotlin/GenerateJooqModelFromDb.kt @@ -1,7 +1,7 @@ import DbAccess.createDslContext import DbAccess.dbSchema -import org.hexastacks.heroesdesk.kotlin.impl.scope.Name -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.Name +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.task.Description import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId import org.hexastacks.heroesdesk.kotlin.impl.task.Title @@ -62,17 +62,17 @@ fun main() { } fun dbDropAndInit(dslContext: DSLContext) { - val SCOPE_TABLE = "Scope" - val SCOPE_KEY_COLUMN = "key" - val SCOPE_NAME_COLUMN = "name" + val SQUAD_TABLE = "Squad" + val SQUAD_KEY_COLUMN = "key" + val SQUAD_NAME_COLUMN = "name" - val SCOPE_TO_USER_TABLE = "${SCOPE_TABLE}_User" - val SCOPE_TO_USER_SCOPE_KEY_COLUMN = "scope_key" - val SCOPE_TO_USER_USER_ID_COLUMN = "user_id" + val SQUAD_TO_USER_TABLE = "${SQUAD_TABLE}_User" + val SQUAD_TO_USER_SQUAD_KEY_COLUMN = "squad_key" + val SQUAD_TO_USER_USER_ID_COLUMN = "user_id" val TASK_TABLE = "Task" val TASK_ID_COLUMN = "id" - val TASK_SCOPE_COLUMN = "scope_key" + val TASK_SQUAD_COLUMN = "squad_key" val TASK_TITLE_COLUMN = "title" val TASK_DESCRIPTION_COLUMN = "description" val TASK_STATUS_COLUMN = "status" @@ -85,39 +85,39 @@ fun dbDropAndInit(dslContext: DSLContext) { val TASK_TO_USER_USER_ID_COLUMN = "user_id" - dslContext.dropTableIfExists(SCOPE_TO_USER_TABLE).execute() + dslContext.dropTableIfExists(SQUAD_TO_USER_TABLE).execute() dslContext.dropTableIfExists(TASK_TO_USER_TABLE).execute() dslContext.dropTableIfExists(TASK_TABLE).execute() dslContext.dropTypeIfExists(TASK_STATUS_ENUM_TYPE).execute() - dslContext.dropTableIfExists(SCOPE_TABLE).execute() + dslContext.dropTableIfExists(SQUAD_TABLE).execute() dslContext.dropSchemaIfExists(dbSchema).execute() dslContext.createSchema(dbSchema).execute() - val scopeKeyColumnDefinition = SQLDataType.VARCHAR(ScopeKey.MAX_LENGTH).nullable(false) - dslContext.createTable(SCOPE_TABLE) - .column(SCOPE_KEY_COLUMN, scopeKeyColumnDefinition) - .column(SCOPE_NAME_COLUMN, SQLDataType.VARCHAR(Name.MAX_LENGTH).nullable(false)) + val squadKeyColumnDefinition = SQLDataType.VARCHAR(SquadKey.MAX_LENGTH).nullable(false) + dslContext.createTable(SQUAD_TABLE) + .column(SQUAD_KEY_COLUMN, squadKeyColumnDefinition) + .column(SQUAD_NAME_COLUMN, SQLDataType.VARCHAR(Name.MAX_LENGTH).nullable(false)) .constraints( - DSL.constraint("PK_SCOPE").primaryKey(SCOPE_KEY_COLUMN), - DSL.constraint("CHK_${SCOPE_KEY_COLUMN}_LENGTH").check( - DSL.length(SCOPE_KEY_COLUMN).ge(ScopeKey.MIN_LENGTH) + DSL.constraint("PK_SQUAD").primaryKey(SQUAD_KEY_COLUMN), + DSL.constraint("CHK_${SQUAD_KEY_COLUMN}_LENGTH").check( + DSL.length(SQUAD_KEY_COLUMN).ge(SquadKey.MIN_LENGTH) ), - DSL.constraint("CHK_${SCOPE_NAME_COLUMN}_MIN_LENGTH").check( - DSL.length(SCOPE_NAME_COLUMN).ge(Name.MIN_LENGTH) + DSL.constraint("CHK_${SQUAD_NAME_COLUMN}_MIN_LENGTH").check( + DSL.length(SQUAD_NAME_COLUMN).ge(Name.MIN_LENGTH) ), - DSL.constraint("CHK_${SCOPE_NAME_COLUMN}_UNIQUE").unique(SCOPE_NAME_COLUMN) + DSL.constraint("CHK_${SQUAD_NAME_COLUMN}_UNIQUE").unique(SQUAD_NAME_COLUMN) ) .execute() val userIdColumnDefinition = SQLDataType.VARCHAR(UserId.MAX_LENGTH).nullable(false) - dslContext.createTable(SCOPE_TO_USER_TABLE) - .column(SCOPE_TO_USER_SCOPE_KEY_COLUMN, scopeKeyColumnDefinition) - .column(SCOPE_TO_USER_USER_ID_COLUMN, userIdColumnDefinition) + dslContext.createTable(SQUAD_TO_USER_TABLE) + .column(SQUAD_TO_USER_SQUAD_KEY_COLUMN, squadKeyColumnDefinition) + .column(SQUAD_TO_USER_USER_ID_COLUMN, userIdColumnDefinition) .constraints( - DSL.constraint("PK_$SCOPE_TO_USER_TABLE") - .primaryKey(SCOPE_TO_USER_SCOPE_KEY_COLUMN, SCOPE_TO_USER_USER_ID_COLUMN), - DSL.constraint("FK_$SCOPE_TABLE").foreignKey(SCOPE_TO_USER_SCOPE_KEY_COLUMN) - .references(SCOPE_TABLE, SCOPE_KEY_COLUMN), + DSL.constraint("PK_$SQUAD_TO_USER_TABLE") + .primaryKey(SQUAD_TO_USER_SQUAD_KEY_COLUMN, SQUAD_TO_USER_USER_ID_COLUMN), + DSL.constraint("FK_$SQUAD_TABLE").foreignKey(SQUAD_TO_USER_SQUAD_KEY_COLUMN) + .references(SQUAD_TABLE, SQUAD_KEY_COLUMN), ) .execute() @@ -129,7 +129,7 @@ fun dbDropAndInit(dslContext: DSLContext) { val taskIdColumnDefinition = SQLDataType.VARCHAR(TaskId.MAX_LENGTH).nullable(false) dslContext.createTable(TASK_TABLE) .column(TASK_ID_COLUMN, taskIdColumnDefinition) - .column(TASK_SCOPE_COLUMN, SQLDataType.VARCHAR(ScopeKey.MAX_LENGTH).nullable(false)) + .column(TASK_SQUAD_COLUMN, SQLDataType.VARCHAR(SquadKey.MAX_LENGTH).nullable(false)) .column(TASK_TITLE_COLUMN, SQLDataType.VARCHAR(Title.MAX_LENGTH).nullable(false)) .column(TASK_DESCRIPTION_COLUMN, SQLDataType.VARCHAR(Description.MAX_LENGTH).nullable(false).defaultValue("")) .constraints( @@ -140,8 +140,8 @@ fun dbDropAndInit(dslContext: DSLContext) { DSL.constraint("CHK_${TASK_TITLE_COLUMN}_MIN_LENGTH").check( DSL.length(TASK_TITLE_COLUMN).ge(Title.MIN_LENGTH) ), - DSL.constraint("FK_$TASK_SCOPE_COLUMN").foreignKey(TASK_SCOPE_COLUMN) - .references(SCOPE_TABLE, SCOPE_KEY_COLUMN), + DSL.constraint("FK_$TASK_SQUAD_COLUMN").foreignKey(TASK_SQUAD_COLUMN) + .references(SQUAD_TABLE, SQUAD_KEY_COLUMN), DSL.constraint("CHK_${TASK_DESCRIPTION_COLUMN}_MIN_LENGTH").check( DSL.length(TASK_TITLE_COLUMN).ge(Description.MIN_LENGTH) ), diff --git a/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/AbstractHeroesDeskTest.kt b/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/AbstractHeroesDeskTest.kt index 542b385..e7b279e 100644 --- a/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/AbstractHeroesDeskTest.kt +++ b/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/AbstractHeroesDeskTest.kt @@ -9,9 +9,9 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import org.hexastacks.heroesdesk.kotlin.HeroesDesk import org.hexastacks.heroesdesk.kotlin.errors.* -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeMembers +import org.hexastacks.heroesdesk.kotlin.squad.Squad +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadMembers import org.hexastacks.heroesdesk.kotlin.impl.task.* import org.hexastacks.heroesdesk.kotlin.impl.user.Hero import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds @@ -24,7 +24,7 @@ import org.hexastacks.heroesdesk.kotlin.test.HeroesDeskTestUtils.createHeroOrThr import org.hexastacks.heroesdesk.kotlin.test.HeroesDeskTestUtils.createInProgressTaskIdOrThrow import org.hexastacks.heroesdesk.kotlin.test.HeroesDeskTestUtils.createNameOrThrow import org.hexastacks.heroesdesk.kotlin.test.HeroesDeskTestUtils.createPendingTaskIdOrThrow -import org.hexastacks.heroesdesk.kotlin.test.HeroesDeskTestUtils.createScopeKeyOrThrow +import org.hexastacks.heroesdesk.kotlin.test.HeroesDeskTestUtils.createSquadKeyOrThrow import org.hexastacks.heroesdesk.kotlin.test.HeroesDeskTestUtils.createTitleOrThrow import org.hexastacks.heroesdesk.kotlin.test.HeroesDeskTestUtils.getTaskOrThrow import org.junit.jupiter.api.Assertions.assertEquals @@ -40,25 +40,25 @@ abstract class AbstractHeroesDeskTest { private lateinit var userRepo: InstrumentedUserRepository @Test - fun `createScope returns a scope`() { - val id = createScopeKeyOrThrow("id") + fun `createSquad returns a squad`() { + val id = createSquadKeyOrThrow("id") val name = createNameOrThrow("name") val creator = userRepo.ensureAdminExistingOrThrow("adminId") - val scope = heroesDesk.createScope( + val squad = heroesDesk.createSquad( id, name, creator.id ).getOrElse { throw AssertionError("$it") } - assertEquals(name, scope.name) + assertEquals(name, squad.name) } @Test - fun `createScope fails on non existing admin`() { + fun `createSquad fails on non existing admin`() { val creationFailure = - heroesDesk.createScope( - createScopeKeyOrThrow("id2"), + heroesDesk.createSquad( + createSquadKeyOrThrow("id2"), createNameOrThrow("name"), createAdminIdOrThrow("adminId2") ) @@ -70,39 +70,39 @@ abstract class AbstractHeroesDeskTest { } @Test - fun `createScope fails on pre existing scope with same name`() { + fun `createSquad fails on pre existing squad with same name`() { val name = createNameOrThrow("name") - heroesDesk.createScope( - createScopeKeyOrThrow("id1"), + heroesDesk.createSquad( + createSquadKeyOrThrow("id1"), name, userRepo.ensureAdminExistingOrThrow("adminId1").id ) val creationFailure = - heroesDesk.createScope( - createScopeKeyOrThrow("id2"), + heroesDesk.createSquad( + createSquadKeyOrThrow("id2"), name, userRepo.ensureAdminExistingOrThrow("adminId2").id ) assertTrue(creationFailure.isLeft()) creationFailure.onLeft { - assertTrue(it.head is ScopeNameAlreadyExistingError, "$it") + assertTrue(it.head is SquadNameAlreadyExistingError, "$it") } } @Test - fun `createScope fails on pre existing scope with same id`() { + fun `createSquad fails on pre existing squad with same id`() { val nameCommonStart = "startEnding" - val id = createScopeKeyOrThrow("id") - heroesDesk.createScope( + val id = createSquadKeyOrThrow("id") + heroesDesk.createSquad( id, createNameOrThrow("${nameCommonStart}1"), userRepo.ensureAdminExistingOrThrow("adminId1").id ) val creationFailure = - heroesDesk.createScope( + heroesDesk.createSquad( id, createNameOrThrow("${nameCommonStart}2"), userRepo.ensureAdminExistingOrThrow("adminId2").id @@ -110,16 +110,16 @@ abstract class AbstractHeroesDeskTest { assertTrue(creationFailure.isLeft()) creationFailure.onLeft { - assertTrue(it.head is ScopeKeyAlreadyExistingError, "$it") + assertTrue(it.head is SquadKeyAlreadyExistingError, "$it") } } @Test - fun `createScope works on many parallel creations`() { + fun `createSquad works on many parallel creations`() { if (Runtime.getRuntime().availableProcessors() < 4) return // not running on github actions - val results = ConcurrentHashMap>() + val results = ConcurrentHashMap>() val executor = Executors.newFixedThreadPool(10) val dispatcher = executor.asCoroutineDispatcher() val runNb = 1000 @@ -131,8 +131,8 @@ abstract class AbstractHeroesDeskTest { launch(dispatcher) { val suffix = it % createdTaskTarget results[it] = heroesDesk - .createScope( - createScopeKeyOrThrow("id$suffix"), + .createSquad( + createSquadKeyOrThrow("id$suffix"), createNameOrThrow("${suffix}name"), admin.id ) @@ -154,175 +154,175 @@ abstract class AbstractHeroesDeskTest { } @Test - fun `assignScope works`() { - val scopeId = createScopeKeyOrThrow("scopeId") + fun `assignSquad works`() { + val squadId = createSquadKeyOrThrow("squadId") val heroes = Heroes(ensureHeroExisting("heroId")) val admin = userRepo.ensureAdminExistingOrThrow("adminId") - val scope = - heroesDesk.createScope(scopeId, createNameOrThrow("name"), admin.id) + val squad = + heroesDesk.createSquad(squadId, createNameOrThrow("name"), admin.id) .getOrElse { throw AssertionError("$it") } - val scopeMembers = - heroesDesk.assignScope(scopeId, HeroIds(heroes), admin.id).getOrElse { throw AssertionError(it.toString()) } + val squadMembers = + heroesDesk.assignSquad(squadId, HeroIds(heroes), admin.id).getOrElse { throw AssertionError(it.toString()) } - assertEquals(scope.key, scopeMembers.scopeKey) - val storedScope = heroesDesk.getScope(scopeId).getOrElse { throw AssertionError("$it") } - assertEquals(scope, storedScope) + assertEquals(squad.key, squadMembers.squadKey) + val storedSquad = heroesDesk.getSquad(squadId).getOrElse { throw AssertionError("$it") } + assertEquals(squad, storedSquad) } @Test - fun `assignScope fails on inexisting scope`() { - val scopeId = createScopeKeyOrThrow("scopeId") + fun `assignSquad fails on inexisting squad`() { + val squadId = createSquadKeyOrThrow("squadId") val heroIds = HeroIds(ensureHeroExisting("heroId")) val admin = userRepo.ensureAdminExistingOrThrow("adminId") - val assignedScope = heroesDesk.assignScope(scopeId, heroIds, admin.id) + val assignedSquad = heroesDesk.assignSquad(squadId, heroIds, admin.id) - assertTrue(assignedScope.isLeft()) - assignedScope.onLeft { - assertTrue(it.head is ScopeNotExistingError) + assertTrue(assignedSquad.isLeft()) + assignedSquad.onLeft { + assertTrue(it.head is SquadNotExistingError) } } @Test - fun `assignScope fails on inexisting heroIds`() { - val scopeId = createScopeKeyOrThrow("scopeId") + fun `assignSquad fails on inexisting heroIds`() { + val squadId = createSquadKeyOrThrow("squadId") val heroIds = HeroIds(createHeroIdOrThrow("heroId")) val admin = userRepo.ensureAdminExistingOrThrow("adminId") - heroesDesk.createScope(scopeId, createNameOrThrow("name"), admin.id).getOrElse { throw AssertionError("$it") } + heroesDesk.createSquad(squadId, createNameOrThrow("name"), admin.id).getOrElse { throw AssertionError("$it") } - val assignedScope = heroesDesk.assignScope(scopeId, heroIds, admin.id) + val assignedSquad = heroesDesk.assignSquad(squadId, heroIds, admin.id) - assertTrue(assignedScope.isLeft()) - assignedScope.onLeft { + assertTrue(assignedSquad.isLeft()) + assignedSquad.onLeft { assertTrue(it.head is HeroesNotExistingError, "$it") } } @Test - fun `assignScope fails on inexisting admin`() { - val scopeId = createScopeKeyOrThrow("scopeId") + fun `assignSquad fails on inexisting admin`() { + val squadId = createSquadKeyOrThrow("squadId") val heroIds = HeroIds(ensureHeroExisting("heroId")) val admin = userRepo.ensureAdminExistingOrThrow("adminId") - heroesDesk.createScope(scopeId, createNameOrThrow("name"), admin.id).getOrElse { throw AssertionError("$it") } + heroesDesk.createSquad(squadId, createNameOrThrow("name"), admin.id).getOrElse { throw AssertionError("$it") } - val assignedScope = heroesDesk.assignScope(scopeId, heroIds, createAdminIdOrThrow("anotherAdminId")) + val assignedSquad = heroesDesk.assignSquad(squadId, heroIds, createAdminIdOrThrow("anotherAdminId")) - assertTrue(assignedScope.isLeft()) - assignedScope.onLeft { + assertTrue(assignedSquad.isLeft()) + assignedSquad.onLeft { assertTrue(it.head is AdminNotExistingError) } } @Test - fun `updateScopeName fails on inexisting admin`() { - val scopeId = createScopeKeyOrThrow("scopeKey") + fun `updateSquadName fails on inexisting admin`() { + val squadId = createSquadKeyOrThrow("squadKey") val admin = userRepo.ensureAdminExistingOrThrow("adminId") - heroesDesk.createScope(scopeId, createNameOrThrow("name"), admin.id).getOrElse { throw AssertionError("$it") } + heroesDesk.createSquad(squadId, createNameOrThrow("name"), admin.id).getOrElse { throw AssertionError("$it") } - val assignedScope = - heroesDesk.updateScopeName(scopeId, createNameOrThrow("new name"), createAdminIdOrThrow("anotherAdminId")) + val assignedSquad = + heroesDesk.updateSquadName(squadId, createNameOrThrow("new name"), createAdminIdOrThrow("anotherAdminId")) - assertTrue(assignedScope.isLeft()) - assignedScope.onLeft { + assertTrue(assignedSquad.isLeft()) + assignedSquad.onLeft { assertTrue(it.head is AdminNotExistingError) } } @Test - fun `updateScopeName fails on inexisting scope`() { - val scopeId = createScopeKeyOrThrow("scopeKey") + fun `updateSquadName fails on inexisting squad`() { + val squadId = createSquadKeyOrThrow("squadKey") val admin = userRepo.ensureAdminExistingOrThrow("adminId") - val assignedScope = heroesDesk.updateScopeName(scopeId, createNameOrThrow("new name"), admin.id) + val assignedSquad = heroesDesk.updateSquadName(squadId, createNameOrThrow("new name"), admin.id) - assertTrue(assignedScope.isLeft()) - assignedScope.onLeft { - assertTrue(it.head is ScopeNotExistingError) + assertTrue(assignedSquad.isLeft()) + assignedSquad.onLeft { + assertTrue(it.head is SquadNotExistingError) } } @Test - fun `updateScopeName works`() { - val scopeId = createScopeKeyOrThrow("scopeKey") + fun `updateSquadName works`() { + val squadId = createSquadKeyOrThrow("squadKey") val admin = userRepo.ensureAdminExistingOrThrow("adminId") - heroesDesk.createScope(scopeId, createNameOrThrow("name"), admin.id).getOrElse { throw AssertionError("$it") } + heroesDesk.createSquad(squadId, createNameOrThrow("name"), admin.id).getOrElse { throw AssertionError("$it") } val newName = createNameOrThrow("new name") - val assignedScope = - heroesDesk.updateScopeName(scopeId, newName, admin.id).getOrElse { throw AssertionError("$it") } + val assignedSquad = + heroesDesk.updateSquadName(squadId, newName, admin.id).getOrElse { throw AssertionError("$it") } - assertEquals(newName, assignedScope.name) + assertEquals(newName, assignedSquad.name) } @Test - fun `getScope fails on inexisting scope`() { - val scopeId = createScopeKeyOrThrow("scopeKey") + fun `getSquad fails on inexisting squad`() { + val squadId = createSquadKeyOrThrow("squadKey") - val scope = heroesDesk.getScope(scopeId) + val squad = heroesDesk.getSquad(squadId) - assertTrue(scope.isLeft()) - scope.onLeft { - assertTrue(it.head is ScopeNotExistingError, "$it") + assertTrue(squad.isLeft()) + squad.onLeft { + assertTrue(it.head is SquadNotExistingError, "$it") } } @Test - fun `getScopeMembers works on scope without assignee`() { - val scopeId = createScopeKeyOrThrow("scopeKey") + fun `getSquadMembers works on squad without assignee`() { + val squadId = createSquadKeyOrThrow("squadKey") val admin = userRepo.ensureAdminExistingOrThrow("adminId") val name = createNameOrThrow("name") - val scope = heroesDesk.createScope(scopeId, name, admin.id).getOrElse { throw AssertionError("$it") } + val squad = heroesDesk.createSquad(squadId, name, admin.id).getOrElse { throw AssertionError("$it") } - val scopeMembers = - heroesDesk.getScopeMembers(scopeId) + val squadMembers = + heroesDesk.getSquadMembers(squadId) .getOrElse { throw AssertionError("$it") } - assertEquals(scopeId, scopeMembers.scopeKey) - assertEquals(HeroIds.empty, scopeMembers.heroes) + assertEquals(squadId, squadMembers.squadKey) + assertEquals(HeroIds.empty, squadMembers.heroes) } @Test - fun `getScopeMembers works on scope with assignee`() { - val scopeId = createScopeKeyOrThrow("scopeKey") + fun `getSquadMembers works on squad with assignee`() { + val squadId = createSquadKeyOrThrow("squadKey") val admin = userRepo.ensureAdminExistingOrThrow("adminId") val name = createNameOrThrow("name") - heroesDesk.createScope(scopeId, name, admin.id).getOrElse { throw AssertionError("$it") } + heroesDesk.createSquad(squadId, name, admin.id).getOrElse { throw AssertionError("$it") } val assignees = HeroIds(ensureHeroExisting("heroId")) - heroesDesk.assignScope(scopeId, assignees, admin.id) + heroesDesk.assignSquad(squadId, assignees, admin.id) .getOrElse { throw AssertionError("$it") } - val scopeMembers = heroesDesk.getScopeMembers(scopeId).getOrElse { throw AssertionError("$it") } + val squadMembers = heroesDesk.getSquadMembers(squadId).getOrElse { throw AssertionError("$it") } - assertEquals(scopeId, scopeMembers.scopeKey) - assertEquals(assignees, scopeMembers.heroes) + assertEquals(squadId, squadMembers.squadKey) + assertEquals(assignees, squadMembers.heroes) } @Test fun `createTask returns a task`() { val currentHero = ensureHeroExisting("heroId") - val scope = ensureScopeExisting("scopeKey") + val squad = ensureSquadExisting("squadKey") val title = createTitleOrThrow("title") - assignScope(scope.key, Heroes(currentHero)) + assignSquad(squad.key, Heroes(currentHero)) - val task = heroesDesk.createTask(scope.key, title, currentHero.id).getOrElse { throw AssertionError("$it") } + val task = heroesDesk.createTask(squad.key, title, currentHero.id).getOrElse { throw AssertionError("$it") } assertEquals(title, task.title) - assertEquals(scope.key, task.scopeKey()) + assertEquals(squad.key, task.squadKey()) } @Test fun `2 tasks creation with same title and creator returns 2 distinct tasks`() { val currentHero = ensureHeroExisting("heroId") - val scope = ensureScopeExisting("scopeKey") + val squad = ensureSquadExisting("squadKey") val rawTitle = "title" - assignScope(scope.key, Heroes(currentHero)) + assignSquad(squad.key, Heroes(currentHero)) - val task1 = heroesDesk.createTask(scope.key, createTitleOrThrow(rawTitle), currentHero.id) - val task2 = heroesDesk.createTask(scope.key, createTitleOrThrow(rawTitle), currentHero.id) + val task1 = heroesDesk.createTask(squad.key, createTitleOrThrow(rawTitle), currentHero.id) + val task2 = heroesDesk.createTask(squad.key, createTitleOrThrow(rawTitle), currentHero.id) assertTrue(task1.isRight(), "$task1") assertTrue(task2.isRight(), "$task2") @@ -339,39 +339,39 @@ abstract class AbstractHeroesDeskTest { val rawTitle = "title" val task = - heroesDesk.createTask(ensureScopeExisting("scopeKey").key, createTitleOrThrow(rawTitle), currentHero.id) + heroesDesk.createTask(ensureSquadExisting("squadKey").key, createTitleOrThrow(rawTitle), currentHero.id) assertTrue(task.isLeft()) task.onLeft { - assertTrue(it.head is HeroesNotInScopeError, "$it") + assertTrue(it.head is HeroesNotInSquadError, "$it") } } @Test - fun `createTask with a non existing scope fails`() { + fun `createTask with a non existing squad fails`() { val currentHero = ensureHeroExisting("heroId") val rawTitle = "title" val task = - heroesDesk.createTask(createScopeKeyOrThrow("scopeKey"), createTitleOrThrow(rawTitle), currentHero.id) + heroesDesk.createTask(createSquadKeyOrThrow("squadKey"), createTitleOrThrow(rawTitle), currentHero.id) assertTrue(task.isLeft()) task.onLeft { - assertTrue(it.head is ScopeNotExistingError, "$it") + assertTrue(it.head is SquadNotExistingError, "$it") } } @Test - fun `createTask with a creator not assigned to scope fails`() { + fun `createTask with a creator not assigned to squad fails`() { val currentHero = ensureHeroExisting("heroId") val rawTitle = "title" val task = - heroesDesk.createTask(ensureScopeExisting("scopeKey").key, createTitleOrThrow(rawTitle), currentHero.id) + heroesDesk.createTask(ensureSquadExisting("squadKey").key, createTitleOrThrow(rawTitle), currentHero.id) assertTrue(task.isLeft()) task.onLeft { - assertTrue(it.head is HeroesNotInScopeError, "$it") + assertTrue(it.head is HeroesNotInSquadError, "$it") } } @@ -432,7 +432,7 @@ abstract class AbstractHeroesDeskTest { assertTrue(updatedTaskId.isLeft()) updatedTaskId.onLeft { - assertTrue(it.head is HeroesNotInScopeError, "$it") + assertTrue(it.head is HeroesNotInSquadError, "$it") } } @@ -549,38 +549,38 @@ abstract class AbstractHeroesDeskTest { assertTrue(assignedTask.isLeft()) assignedTask.onLeft { - assertTrue(it.head is ScopeNotExistingError, "$it") + assertTrue(it.head is SquadNotExistingError, "$it") } } @Test - fun `assign task on pending task id fails when assigned hero not assigned to scope`() { - assertAssignTaskFailsWhenAssignedHeroNotAssignedToScope(createAssignedPendingTask().first) + fun `assign task on pending task id fails when assigned hero not assigned to squad`() { + assertAssignTaskFailsWhenAssignedHeroNotAssignedToSquad(createAssignedPendingTask().first) } @Test - fun `assign task on in progress task id fails when assigned hero not assigned to scope`() { - assertAssignTaskFailsWhenAssignedHeroNotAssignedToScope(createAssignedInProgressTask().first) + fun `assign task on in progress task id fails when assigned hero not assigned to squad`() { + assertAssignTaskFailsWhenAssignedHeroNotAssignedToSquad(createAssignedInProgressTask().first) } - private fun assertAssignTaskFailsWhenAssignedHeroNotAssignedToScope( + private fun assertAssignTaskFailsWhenAssignedHeroNotAssignedToSquad( taskId: TaskId ) { - val nonScopeAssignedHeroes = ensureHeroExisting("nonScopeAssignedHero") + val nonSquadAssignedHeroes = ensureHeroExisting("nonSquadAssignedHero") val assignmentAuthor = ensureHeroExisting("assignmentAuthor").id val assignedTask = when (taskId) { is PendingTaskId -> heroesDesk.assignTask( taskId, - HeroIds(nonScopeAssignedHeroes), + HeroIds(nonSquadAssignedHeroes), assignmentAuthor ) is InProgressTaskId -> heroesDesk.assignTask( taskId, - HeroIds(nonScopeAssignedHeroes), + HeroIds(nonSquadAssignedHeroes), assignmentAuthor ) @@ -589,7 +589,7 @@ abstract class AbstractHeroesDeskTest { assertTrue(assignedTask.isLeft()) assignedTask.onLeft { - assertTrue(it.head is HeroesNotInScopeError, "$it") + assertTrue(it.head is HeroesNotInSquadError, "$it") } } @@ -610,7 +610,7 @@ abstract class AbstractHeroesDeskTest { val taskId = createdTask.taskId val hero = ensureHeroExisting("heroId1") val heroes = Heroes(hero) - assignScope(createdTask, heroes) + assignSquad(createdTask, heroes) val updatedTaskId = heroesDesk.startWork(taskId, hero.id).getOrElse { throw AssertionError("$it") } @@ -636,19 +636,19 @@ abstract class AbstractHeroesDeskTest { @Test fun `start work fails with non existing hero`() { val createdTask = ensureTaskExisting("title", "heroId") - assignScope(createdTask, empty) + assignSquad(createdTask, empty) val updatedTaskId = heroesDesk.startWork(createdTask.taskId, createHeroOrThrow("nonExistingHero").id) assertTrue(updatedTaskId.isLeft()) updatedTaskId.onLeft { - assertTrue(it.head is HeroesNotInScopeError, "$it") + assertTrue(it.head is HeroesNotInSquadError, "$it") } } @Test - fun `start work fails when hero not in the scope`() { + fun `start work fails when hero not in the squad`() { val createdTask = ensureTaskExisting("title", "heroId") val updatedTaskId = @@ -656,7 +656,7 @@ abstract class AbstractHeroesDeskTest { assertTrue(updatedTaskId.isLeft()) updatedTaskId.onLeft { - assertTrue(it.head is HeroesNotInScopeError, "$it") + assertTrue(it.head is HeroesNotInSquadError, "$it") } } @@ -695,12 +695,12 @@ abstract class AbstractHeroesDeskTest { assertTrue(pauseWorkResult.isLeft()) pauseWorkResult.onLeft { - assertTrue(it.head is HeroesNotInScopeError, "$it") + assertTrue(it.head is HeroesNotInSquadError, "$it") } } @Test - fun `pause work fails when hero not in the scope`() { + fun `pause work fails when hero not in the squad`() { val (pendingTaskId, hero) = createAssignedPendingTask() val updatedTask = heroesDesk.startWork(pendingTaskId, hero.id).getOrElse { throw AssertionError("$it") } @@ -710,7 +710,7 @@ abstract class AbstractHeroesDeskTest { assertTrue(pauseWorkResult.isLeft()) pauseWorkResult.onLeft { - assertTrue(it.head is HeroesNotInScopeError, "$it") + assertTrue(it.head is HeroesNotInSquadError, "$it") } } @@ -748,12 +748,12 @@ abstract class AbstractHeroesDeskTest { assertTrue(updatedTaskId.isLeft()) updatedTaskId.onLeft { - assertTrue(it.head is HeroesNotInScopeError, "$it") + assertTrue(it.head is HeroesNotInSquadError, "$it") } } @Test - fun `end work fails when hero not in the scope`() { + fun `end work fails when hero not in the squad`() { val (inProgressTaskId, hero) = createAssignedInProgressTask() val updatedTaskId = @@ -761,7 +761,7 @@ abstract class AbstractHeroesDeskTest { assertTrue(updatedTaskId.isLeft()) updatedTaskId.onLeft { - assertTrue(it.head is HeroesNotInScopeError, "$it") + assertTrue(it.head is HeroesNotInSquadError, "$it") } } @@ -778,23 +778,23 @@ abstract class AbstractHeroesDeskTest { val taskId = createdTask.taskId val hero = ensureHeroExisting("heroId1") val heroes = Heroes(hero) - assignScope(createdTask, heroes) + assignSquad(createdTask, heroes) heroesDesk.assignTask(taskId, HeroIds(hero), hero.id).getOrElse { throw AssertionError("$it") } return Pair(taskId, hero) } - private fun assignScope(task: Task<*>, heroes: Heroes): ScopeMembers { - return assignScope(task.scopeKey(), heroes) + private fun assignSquad(task: Task<*>, heroes: Heroes): SquadMembers { + return assignSquad(task.squadKey(), heroes) } - private fun assignScope( - scopeKey: ScopeKey, + private fun assignSquad( + squadKey: SquadKey, heroes: Heroes - ): ScopeMembers { - return heroesDesk.assignScope( - scopeKey, + ): SquadMembers { + return heroesDesk.assignSquad( + squadKey, HeroIds(heroes), - userRepo.ensureAdminExistingOrThrow("scopeAdminId").id + userRepo.ensureAdminExistingOrThrow("squadAdminId").id ) .getOrElse { throw AssertionError("$it") } } @@ -803,22 +803,22 @@ abstract class AbstractHeroesDeskTest { ensureTaskExisting(title, ensureHeroExisting(hero)) private fun ensureTaskExisting(title: String, hero: Hero): PendingTask { - val scope = ensureScopeExisting("scopeKey") - assignScope(scope.key, Heroes(hero)) + val squad = ensureSquadExisting("squadKey") + assignSquad(squad.key, Heroes(hero)) return heroesDesk .createTask( - scope.key, createTitleOrThrow(title), hero.id + squad.key, createTitleOrThrow(title), hero.id ) .getOrElse { throw AssertionError("$it") } } private fun ensureHeroExisting(rawHeroId: String) = userRepo.ensureHeroExistingOrThrow(rawHeroId) - private fun ensureScopeExisting(scopeKey: String): Scope { - val scopeId = createScopeKeyOrThrow(scopeKey) + private fun ensureSquadExisting(squadKey: String): Squad { + val squadId = createSquadKeyOrThrow(squadKey) val admin = userRepo.ensureAdminExistingOrThrow("adminId") val name = createNameOrThrow("name") - return heroesDesk.createScope(scopeId, name, admin.id).getOrElse { throw AssertionError("$it") } + return heroesDesk.createSquad(squadId, name, admin.id).getOrElse { throw AssertionError("$it") } } diff --git a/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/HeroesDeskTestUtils.kt b/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/HeroesDeskTestUtils.kt index 699f67f..ed945f2 100644 --- a/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/HeroesDeskTestUtils.kt +++ b/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/HeroesDeskTestUtils.kt @@ -2,8 +2,8 @@ package org.hexastacks.heroesdesk.kotlin.test import arrow.core.getOrElse import org.hexastacks.heroesdesk.kotlin.HeroesDesk -import org.hexastacks.heroesdesk.kotlin.impl.scope.Name -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.Name +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.task.* import org.hexastacks.heroesdesk.kotlin.impl.user.* @@ -19,11 +19,11 @@ object HeroesDeskTestUtils { fun createHeroOrThrow(id: String) = Hero(createUserNameOrThrow(id), createHeroIdOrThrow(id)) - fun createPendingTaskIdOrThrow(scopeKey: String, id: String) = - PendingTaskId(createScopeKeyOrThrow(scopeKey), id).getOrElse { throw AssertionError() } + fun createPendingTaskIdOrThrow(squadKey: String, id: String) = + PendingTaskId(createSquadKeyOrThrow(squadKey), id).getOrElse { throw AssertionError() } - fun createInProgressTaskIdOrThrow(scopeKey: String, id: String): InProgressTaskId = - InProgressTaskId(createScopeKeyOrThrow(scopeKey), id).getOrElse { throw AssertionError() } + fun createInProgressTaskIdOrThrow(squadKey: String, id: String): InProgressTaskId = + InProgressTaskId(createSquadKeyOrThrow(squadKey), id).getOrElse { throw AssertionError() } fun HeroesDesk.getTaskOrThrow(id: TaskId): Task<*> = this.getTask(id).getOrElse { throw AssertionError() } fun createAdminIdOrThrow(adminId: String): AdminId = AdminId(adminId).getOrElse { throw AssertionError() } @@ -32,6 +32,6 @@ object HeroesDeskTestUtils { fun createNameOrThrow(name: String): Name = Name(name).getOrElse { throw AssertionError() } - fun createScopeKeyOrThrow(scopeKey: String): ScopeKey = ScopeKey(scopeKey).getOrElse { throw AssertionError() } + fun createSquadKeyOrThrow(squadKey: String): SquadKey = SquadKey(squadKey).getOrElse { throw AssertionError() } } \ No newline at end of file diff --git a/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/InstrumentedUserRepository.kt b/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/InstrumentedUserRepository.kt index f8913ca..c07949b 100644 --- a/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/InstrumentedUserRepository.kt +++ b/heroesdesk-test/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/test/InstrumentedUserRepository.kt @@ -9,6 +9,7 @@ import org.hexastacks.heroesdesk.kotlin.ports.UserRepository interface InstrumentedUserRepository : UserRepository { fun ensureExisting(hero: Hero): Hero + fun ensureAdminExistingOrThrow(adminId: String): Admin = ensureExisting(createAdminOrThrow(adminId)) fun ensureExisting(admin: Admin): Admin diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/HeroesDesk.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/HeroesDesk.kt index 8493e04..6d52d84 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/HeroesDesk.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/HeroesDesk.kt @@ -2,10 +2,10 @@ package org.hexastacks.heroesdesk.kotlin import arrow.core.EitherNel import org.hexastacks.heroesdesk.kotlin.errors.* -import org.hexastacks.heroesdesk.kotlin.impl.scope.Name -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeMembers +import org.hexastacks.heroesdesk.kotlin.squad.Name +import org.hexastacks.heroesdesk.kotlin.squad.Squad +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadMembers import org.hexastacks.heroesdesk.kotlin.impl.task.* import org.hexastacks.heroesdesk.kotlin.impl.user.AdminId import org.hexastacks.heroesdesk.kotlin.impl.user.HeroId @@ -13,18 +13,18 @@ import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds interface HeroesDesk { - fun createScope(scopeKey: ScopeKey, name: Name, creator: AdminId): EitherNel - fun assignScope( - scopeKey: ScopeKey, + fun createSquad(squadKey: SquadKey, name: Name, creator: AdminId): EitherNel + fun assignSquad( + squadKey: SquadKey, assignees: HeroIds, changeAuthor: AdminId - ): EitherNel + ): EitherNel - fun updateScopeName(scopeKey: ScopeKey, name: Name, changeAuthor: AdminId): EitherNel - fun getScope(scopeKey: ScopeKey): EitherNel - fun getScopeMembers(scopeKey: ScopeKey): EitherNel + fun updateSquadName(squadKey: SquadKey, name: Name, changeAuthor: AdminId): EitherNel + fun getSquad(squadKey: SquadKey): EitherNel + fun getSquadMembers(squadKey: SquadKey): EitherNel - fun createTask(scopeKey: ScopeKey, title: Title, creator: HeroId): EitherNel + fun createTask(squadKey: SquadKey, title: Title, creator: HeroId): EitherNel fun getTask(id: TaskId): EitherNel> fun updateTitle(id: TaskId, title: Title, author: HeroId): EitherNel> diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/errors/Errors.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/errors/Errors.kt index fff466f..236657c 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/errors/Errors.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/errors/Errors.kt @@ -1,8 +1,8 @@ package org.hexastacks.heroesdesk.kotlin.errors import org.hexastacks.heroesdesk.kotlin.impl.ErrorMessage -import org.hexastacks.heroesdesk.kotlin.impl.scope.Name -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.Name +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.task.InProgressTaskId import org.hexastacks.heroesdesk.kotlin.impl.task.PendingTaskId import org.hexastacks.heroesdesk.kotlin.impl.task.Task @@ -14,42 +14,42 @@ import org.hexastacks.heroesdesk.kotlin.impl.user.Heroes sealed interface HeroesDeskError : ErrorMessage -sealed interface CreateScopeError : HeroesDeskError -sealed interface AreHeroesInScopeError : HeroesDeskError, CreateTaskError, AssignTaskError, PauseWorkError, EndWorkError,UpdateTitleError +sealed interface CreateSquadError : HeroesDeskError +sealed interface AreHeroesInSquadError : HeroesDeskError, CreateTaskError, AssignTaskError, PauseWorkError, EndWorkError,UpdateTitleError -data class ScopeNameAlreadyExistingError(val name: Name) : CreateScopeError { - override val message = "Scope $name already exists" +data class SquadNameAlreadyExistingError(val name: Name) : CreateSquadError { + override val message = "Squad $name already exists" } -data class ScopeKeyAlreadyExistingError(val id: ScopeKey) : CreateScopeError { - override val message = "Scope $id already exists" +data class SquadKeyAlreadyExistingError(val id: SquadKey) : CreateSquadError { + override val message = "Squad $id already exists" } -sealed interface AssignHeroesOnScopeError : HeroesDeskError +sealed interface AssignHeroesOnSquadError : HeroesDeskError -data class ScopeNotExistingError(val scopeKey: ScopeKey) : GetScopeError, GetScopeMembersError { - override val message = "Scope $scopeKey does not exist" +data class SquadNotExistingError(val squadKey: SquadKey) : GetSquadError, GetSquadMembersError { + override val message = "Squad $squadKey does not exist" } -sealed interface UpdateScopeNameError : HeroesDeskError +sealed interface UpdateSquadNameError : HeroesDeskError -sealed interface GetScopeError : HeroesDeskError, AssignHeroesOnScopeError, UpdateScopeNameError, CreateTaskError, - AreHeroesInScopeError +sealed interface GetSquadError : HeroesDeskError, AssignHeroesOnSquadError, UpdateSquadNameError, CreateTaskError, + AreHeroesInSquadError -sealed interface GetScopeMembersError : HeroesDeskError +sealed interface GetSquadMembersError : HeroesDeskError sealed interface CreateTaskError : HeroesDeskError -data class HeroesNotInScopeError(val heroIds: HeroIds, val scopeKey: ScopeKey) : CreateTaskError, EndWorkError, - PauseWorkError, StartWorkError, AssignTaskError, AreHeroesInScopeError { - constructor(heroId: HeroId, scopeKey: ScopeKey) : this(HeroIds(heroId), scopeKey) - constructor(heroes: Heroes, scopeKey: ScopeKey) : this(HeroIds(heroes), scopeKey) +data class HeroesNotInSquadError(val heroIds: HeroIds, val squadKey: SquadKey) : CreateTaskError, EndWorkError, + PauseWorkError, StartWorkError, AssignTaskError, AreHeroesInSquadError { + constructor(heroId: HeroId, squadKey: SquadKey) : this(HeroIds(heroId), squadKey) + constructor(heroes: Heroes, squadKey: SquadKey) : this(HeroIds(heroes), squadKey) - override val message = "${heroIds} not in $scopeKey scope" + override val message = "${heroIds} not in $squadKey squad" } sealed interface GetTaskError : HeroesDeskError, AssignTaskError, PauseWorkError, EndWorkError, UpdateTitleError, - UpdateDescriptionError, AreHeroesInScopeError, StartWorkError + UpdateDescriptionError, AreHeroesInSquadError, StartWorkError data class TaskNotExistingError(val taskId: TaskId) : GetTaskError { override val message = "Task $taskId does not exist" @@ -76,14 +76,14 @@ data class TaskNotPendingError(val task: Task<*>, val taskId: PendingTaskId) : S sealed interface AssignTaskError : HeroesDeskError, StartWorkError sealed interface UserRepositoryError : HeroesDeskError -sealed interface GetHeroError : UserRepositoryError, AssignHeroesOnScopeError, CreateTaskError, UpdateTitleError, +sealed interface GetHeroError : UserRepositoryError, AssignHeroesOnSquadError, CreateTaskError, UpdateTitleError, UpdateDescriptionError, AssignTaskError, PauseWorkError, EndWorkError data class HeroesNotExistingError(val heroIds: HeroIds) : GetHeroError { override val message = "Heroes $heroIds do not exist" } -sealed interface GetAdminError : UserRepositoryError, UpdateScopeNameError, CreateScopeError, AssignHeroesOnScopeError +sealed interface GetAdminError : UserRepositoryError, UpdateSquadNameError, CreateSquadError, AssignHeroesOnSquadError data class AdminNotExistingError(val adminId: AdminId) : GetAdminError { override val message = "Admin $adminId does not exist" @@ -94,7 +94,7 @@ data class TaskRepositoryError( val exception: Exception? = null, val error: ErrorMessage? = null ) : HeroesDeskError, - CreateScopeError, GetScopeError, UpdateScopeNameError, GetScopeMembersError, CreateTaskError, GetTaskError { + CreateSquadError, GetSquadError, UpdateSquadNameError, GetSquadMembersError, CreateTaskError, GetTaskError { constructor(exception: Exception) : this(exception.message ?: "Unknown error", exception) constructor(error: ErrorMessage) : this(error.message, error = error) } \ No newline at end of file diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/HeroesDeskImpl.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/HeroesDeskImpl.kt index 3fe13fd..bb7cbfa 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/HeroesDeskImpl.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/HeroesDeskImpl.kt @@ -7,10 +7,10 @@ import arrow.core.nonEmptyListOf import arrow.core.raise.either import org.hexastacks.heroesdesk.kotlin.HeroesDesk import org.hexastacks.heroesdesk.kotlin.errors.* -import org.hexastacks.heroesdesk.kotlin.impl.scope.Name -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeMembers +import org.hexastacks.heroesdesk.kotlin.squad.Name +import org.hexastacks.heroesdesk.kotlin.squad.Squad +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadMembers import org.hexastacks.heroesdesk.kotlin.impl.task.* import org.hexastacks.heroesdesk.kotlin.impl.user.AdminId import org.hexastacks.heroesdesk.kotlin.impl.user.HeroId @@ -21,47 +21,47 @@ import org.hexastacks.heroesdesk.kotlin.ports.UserRepository class HeroesDeskImpl(private val userRepository: UserRepository, private val taskRepository: TaskRepository) : HeroesDesk { - override fun createScope(scopeKey: ScopeKey, name: Name, creator: AdminId): EitherNel = + override fun createSquad(squadKey: SquadKey, name: Name, creator: AdminId): EitherNel = either { userRepository.getAdmin(creator).bind() - taskRepository.createScope(scopeKey, name).bind() + taskRepository.createSquad(squadKey, name).bind() } - override fun assignScope( - scopeKey: ScopeKey, + override fun assignSquad( + squadKey: SquadKey, assignees: HeroIds, changeAuthor: AdminId - ): EitherNel = + ): EitherNel = either { val heroes = userRepository.getHeroes(assignees).bind() userRepository.getAdmin(changeAuthor).bind() - taskRepository.assignScope(scopeKey, heroes).bind() + taskRepository.assignSquad(squadKey, heroes).bind() } - override fun updateScopeName( - scopeKey: ScopeKey, + override fun updateSquadName( + squadKey: SquadKey, name: Name, changeAuthor: AdminId - ): EitherNel = + ): EitherNel = either { userRepository.getAdmin(changeAuthor).bind() - taskRepository.updateScopeName(scopeKey, name).bind() + taskRepository.updateSquadName(squadKey, name).bind() } - override fun getScope(scopeKey: ScopeKey): EitherNel = - taskRepository.getScope(scopeKey) + override fun getSquad(squadKey: SquadKey): EitherNel = + taskRepository.getSquad(squadKey) - override fun getScopeMembers(scopeKey: ScopeKey): EitherNel = - taskRepository.getScopeMembers(scopeKey) + override fun getSquadMembers(squadKey: SquadKey): EitherNel = + taskRepository.getSquadMembers(squadKey) override fun createTask( - scopeKey: ScopeKey, + squadKey: SquadKey, title: Title, creator: HeroId ): EitherNel = either { - taskRepository.areHeroesInScope(HeroIds(creator), scopeKey).bind() - taskRepository.createTask(scopeKey, title).bind() + taskRepository.areHeroesInSquad(HeroIds(creator), squadKey).bind() + taskRepository.createTask(squadKey, title).bind() } override fun getTask(id: TaskId): EitherNel> = taskRepository.getTask(id) @@ -72,7 +72,7 @@ class HeroesDeskImpl(private val userRepository: UserRepository, private val tas author: HeroId ): EitherNel> = either { - taskRepository.areHeroesInScope(HeroIds(author), id).bind() + taskRepository.areHeroesInSquad(HeroIds(author), id).bind() taskRepository.updateTitle(id, title).bind() } @@ -106,7 +106,7 @@ class HeroesDeskImpl(private val userRepository: UserRepository, private val tas author: HeroId ): EitherNel> = either { - taskRepository.areHeroesInScope(assignees + author, id.scope).bind() + taskRepository.areHeroesInSquad(assignees + author, id.squadKey).bind() taskRepository.assignTask(id, assignees).bind() } @@ -115,7 +115,7 @@ class HeroesDeskImpl(private val userRepository: UserRepository, private val tas author: HeroId ): EitherNel = either { - val task = taskRepository.areHeroesInScope(HeroIds(author), id).bind() + val task = taskRepository.areHeroesInSquad(HeroIds(author), id).bind() val verifiedTask = when (task) { is PendingTask -> Right(task) else -> Left(nonEmptyListOf(TaskNotPendingError(task, id))) @@ -154,7 +154,7 @@ class HeroesDeskImpl(private val userRepository: UserRepository, private val tas is InProgressTask -> Right(task) else -> Left(nonEmptyListOf(TaskNotInProgressError(task, id))) }.bind() - taskRepository.areHeroesInScope(HeroIds(author), verifiedTask.scopeKey()).bind() + taskRepository.areHeroesInSquad(HeroIds(author), verifiedTask.squadKey()).bind() taskRepository.pauseWork(id).bind() } @@ -179,7 +179,7 @@ class HeroesDeskImpl(private val userRepository: UserRepository, private val tas is InProgressTask -> Right(task) else -> Left(nonEmptyListOf(TaskNotInProgressError(task, id))) }.bind() - taskRepository.areHeroesInScope(HeroIds(author), verifiedTask.scopeKey()).bind() + taskRepository.areHeroesInSquad(HeroIds(author), verifiedTask.squadKey()).bind() taskRepository.endWork(id).bind() } } \ No newline at end of file diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/Scope.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/Scope.kt deleted file mode 100644 index 8d609bd..0000000 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/Scope.kt +++ /dev/null @@ -1,19 +0,0 @@ -package org.hexastacks.heroesdesk.kotlin.impl.scope - -import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds -import org.hexastacks.heroesdesk.kotlin.impl.user.Heroes - -data class Scope(val name: Name, val key: ScopeKey) { - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other !is Scope) return false - - if (key != other.key) return false - - return true - } - - override fun hashCode(): Int { - return key.hashCode() - } -} diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeMembers.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeMembers.kt deleted file mode 100644 index 45ff18b..0000000 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeMembers.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.hexastacks.heroesdesk.kotlin.impl.scope - -import org.hexastacks.heroesdesk.kotlin.impl.user.HeroId -import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds - -data class ScopeMembers(val scopeKey:ScopeKey, val heroes: HeroIds = HeroIds.empty) { - fun containsAll(heroIds: HeroIds): Boolean = heroes.containsAll(heroIds) - -} \ No newline at end of file diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskId.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskId.kt index 8e2dd1b..4be5038 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskId.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskId.kt @@ -6,19 +6,19 @@ abstract class AbstractTaskId() : TaskId { if (this === other) return true if (other !is AbstractTaskId) return false - if (scope != other.scope) return false + if (squadKey != other.squadKey) return false if (value != other.value) return false return true } override fun hashCode(): Int { - var result = scope.hashCode() + var result = squadKey.hashCode() result = 31 * result + value.hashCode() return result } override fun toString(): String = - "${javaClass.simpleName}(scope=$scope, value='$value')" + "${javaClass.simpleName}(squadKey=$squadKey, value='$value')" } diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskId.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskId.kt index e2a2d16..d6a6107 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskId.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskId.kt @@ -1,23 +1,19 @@ package org.hexastacks.heroesdesk.kotlin.impl.task -import arrow.core.Either import arrow.core.EitherNel -import arrow.core.NonEmptyList import arrow.core.raise.either import arrow.core.raise.ensure import arrow.core.raise.zipOrAccumulate -import org.hexastacks.heroesdesk.kotlin.impl.AbstractStringValue -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId.* import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId.Companion.MAX_LENGTH import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId.Companion.MIN_LENGTH -class DoneTaskId private constructor(override val scope: ScopeKey, override val value: String) : AbstractTaskId() { +class DoneTaskId private constructor(override val squadKey: SquadKey, override val value: String) : AbstractTaskId() { companion object { operator fun invoke( - scope: ScopeKey, + squadKey: SquadKey, stringBetween1And36Chars: String ): EitherNel = either { @@ -37,7 +33,7 @@ class DoneTaskId private constructor(override val scope: ScopeKey, override val } }, ) { _, _ -> - DoneTaskId(scope, stringBetween1And36Chars) + DoneTaskId(squadKey, stringBetween1And36Chars) } } } diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskId.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskId.kt index 58d120f..f97e0cf 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskId.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskId.kt @@ -5,17 +5,17 @@ import arrow.core.NonEmptyList import arrow.core.raise.either import arrow.core.raise.ensure import arrow.core.raise.zipOrAccumulate -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId.* import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId.Companion.MAX_LENGTH import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId.Companion.MIN_LENGTH +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey -class InProgressTaskId private constructor(override val scope: ScopeKey, override val value: String) : +class InProgressTaskId private constructor(override val squadKey: SquadKey, override val value: String) : AbstractTaskId() { companion object { operator fun invoke( - scope: ScopeKey, + squadKey: SquadKey, stringBetween1And36Chars: String ): Either, InProgressTaskId> = either { @@ -35,7 +35,7 @@ class InProgressTaskId private constructor(override val scope: ScopeKey, overrid } }, ) { _, _ -> - InProgressTaskId(scope, stringBetween1And36Chars) + InProgressTaskId(squadKey, stringBetween1And36Chars) } } } diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskId.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskId.kt index ee6ec4d..808e63e 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskId.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskId.kt @@ -5,19 +5,17 @@ import arrow.core.NonEmptyList import arrow.core.raise.either import arrow.core.raise.ensure import arrow.core.raise.zipOrAccumulate -import org.hexastacks.heroesdesk.kotlin.impl.AbstractStringValue -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId.* import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId.Companion.MAX_LENGTH import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId.Companion.MIN_LENGTH -class PendingTaskId private constructor(override val scope: ScopeKey, override val value: String) : AbstractTaskId() { +class PendingTaskId private constructor(override val squadKey: SquadKey, override val value: String) : AbstractTaskId() { companion object { operator fun invoke( - scope: ScopeKey, + squadKey: SquadKey, stringBetween1And36Chars: String ): Either, PendingTaskId> = either { @@ -37,7 +35,7 @@ class PendingTaskId private constructor(override val scope: ScopeKey, override v } }, ) { _, _ -> - PendingTaskId(scope, stringBetween1And36Chars) + PendingTaskId(squadKey, stringBetween1And36Chars) } } } diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/Task.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/Task.kt index f944d25..76fa1a6 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/Task.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/Task.kt @@ -1,9 +1,7 @@ package org.hexastacks.heroesdesk.kotlin.impl.task -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds -import org.hexastacks.heroesdesk.kotlin.impl.user.Heroes sealed interface Task { fun updateTitle(title: Title): Task = when (this) { @@ -29,5 +27,5 @@ sealed interface Task { val description: Description val assignees: HeroIds - fun scopeKey(): ScopeKey = taskId.scope + fun squadKey(): SquadKey = taskId.squadKey } \ No newline at end of file diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/TaskId.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/TaskId.kt index 70f42bb..c6fe250 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/TaskId.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/TaskId.kt @@ -1,8 +1,7 @@ package org.hexastacks.heroesdesk.kotlin.impl.task import org.hexastacks.heroesdesk.kotlin.impl.ErrorMessage -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey sealed interface TaskId { @@ -11,7 +10,7 @@ sealed interface TaskId { const val MAX_LENGTH = 36 } - val scope: ScopeKey + val squadKey: SquadKey val value: String sealed interface TaskIdError : ErrorMessage diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/TaskRepository.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/TaskRepository.kt index 59d0aa5..929f898 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/TaskRepository.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/ports/TaskRepository.kt @@ -3,39 +3,39 @@ package org.hexastacks.heroesdesk.kotlin.ports import arrow.core.EitherNel import arrow.core.raise.either import org.hexastacks.heroesdesk.kotlin.errors.* -import org.hexastacks.heroesdesk.kotlin.impl.scope.Name -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeMembers +import org.hexastacks.heroesdesk.kotlin.squad.Name +import org.hexastacks.heroesdesk.kotlin.squad.Squad +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadMembers import org.hexastacks.heroesdesk.kotlin.impl.task.* import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds import org.hexastacks.heroesdesk.kotlin.impl.user.Heroes interface TaskRepository { - fun createScope(scopeKey: ScopeKey, name: Name): EitherNel + fun createSquad(squadKey: SquadKey, name: Name): EitherNel - fun getScope(scopeKey: ScopeKey): EitherNel - fun getScopeMembers(scopeKey: ScopeKey): EitherNel + fun getSquad(squadKey: SquadKey): EitherNel + fun getSquadMembers(squadKey: SquadKey): EitherNel - fun updateScopeName( - scopeKey: ScopeKey, + fun updateSquadName( + squadKey: SquadKey, name: Name - ): EitherNel + ): EitherNel - fun assignScope( - scopeKey: ScopeKey, + fun assignSquad( + squadKey: SquadKey, assignees: Heroes - ): EitherNel + ): EitherNel - fun areHeroesInScope(heroIds: HeroIds, scopeKey: ScopeKey): EitherNel - fun areHeroesInScope(heroIds: HeroIds, taskId: TaskId): EitherNel> = + fun areHeroesInSquad(heroIds: HeroIds, squadKey: SquadKey): EitherNel + fun areHeroesInSquad(heroIds: HeroIds, taskId: TaskId): EitherNel> = either { val task = getTask(taskId).bind() - areHeroesInScope(heroIds, task.scopeKey()).bind() + areHeroesInSquad(heroIds, task.squadKey()).bind() task } - fun createTask(scopeKey: ScopeKey, title: Title): EitherNel + fun createTask(squadKey: SquadKey, title: Title): EitherNel fun getTask(taskId: TaskId): EitherNel> diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/Name.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/Name.kt similarity index 94% rename from heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/Name.kt rename to heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/Name.kt index fad68b3..4fd5466 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/Name.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/Name.kt @@ -1,4 +1,4 @@ -package org.hexastacks.heroesdesk.kotlin.impl.scope +package org.hexastacks.heroesdesk.kotlin.squad import arrow.core.Either import arrow.core.NonEmptyList @@ -7,7 +7,6 @@ import arrow.core.raise.ensure import arrow.core.raise.zipOrAccumulate import org.hexastacks.heroesdesk.kotlin.impl.AbstractStringValue import org.hexastacks.heroesdesk.kotlin.impl.StringValueError -import org.hexastacks.heroesdesk.kotlin.impl.user.HeroId class Name private constructor(value: String) : AbstractStringValue(value) { diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/Squad.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/Squad.kt new file mode 100644 index 0000000..f97c2e4 --- /dev/null +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/Squad.kt @@ -0,0 +1,16 @@ +package org.hexastacks.heroesdesk.kotlin.squad + +data class Squad(val name: Name, val key: SquadKey) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is Squad) return false + + if (key != other.key) return false + + return true + } + + override fun hashCode(): Int { + return key.hashCode() + } +} diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeKey.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/SquadKey.kt similarity index 63% rename from heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeKey.kt rename to heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/SquadKey.kt index f85c27e..c3a5bf2 100644 --- a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeKey.kt +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/SquadKey.kt @@ -1,21 +1,19 @@ -package org.hexastacks.heroesdesk.kotlin.impl.scope +package org.hexastacks.heroesdesk.kotlin.squad -import arrow.core.Either import arrow.core.EitherNel -import arrow.core.NonEmptyList import arrow.core.raise.either import arrow.core.raise.ensure import arrow.core.raise.zipOrAccumulate import org.hexastacks.heroesdesk.kotlin.impl.AbstractStringValue import org.hexastacks.heroesdesk.kotlin.impl.StringValueError -class ScopeKey private constructor(value: String) : AbstractStringValue(value) { +class SquadKey private constructor(value: String) : AbstractStringValue(value) { companion object { const val MIN_LENGTH = 1 const val MAX_LENGTH = 36 - operator fun invoke(stringBetween1And36Chars: String): EitherNel = + operator fun invoke(stringBetween1And36Chars: String): EitherNel = either { zipOrAccumulate( // TODO: see how to consolidate @@ -34,17 +32,17 @@ class ScopeKey private constructor(value: String) : AbstractStringValue(value) { } }, ) { _, _ -> - ScopeKey(stringBetween1And36Chars) + SquadKey(stringBetween1And36Chars) } } } - sealed interface ScopeIdError : StringValueError - data class BelowMinLengthError(val string: String) : ScopeIdError { - override val message: String = "ScopeId must be above $MIN_LENGTH characters, got ${string.length} in $string" + sealed interface SquadKeyError : StringValueError + data class BelowMinLengthError(val string: String) : SquadKeyError { + override val message: String = "SquadKey must be above $MIN_LENGTH characters, got ${string.length} in $string" } - data class AboveMaxLengthError(val string: String) : ScopeIdError { - override val message: String = "ScopeId must be below $MAX_LENGTH characters, got ${string.length} in $string" + data class AboveMaxLengthError(val string: String) : SquadKeyError { + override val message: String = "SquadKey must be below $MAX_LENGTH characters, got ${string.length} in $string" } } \ No newline at end of file diff --git a/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/SquadMembers.kt b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/SquadMembers.kt new file mode 100644 index 0000000..ab56e2b --- /dev/null +++ b/heroesdesk/src/main/kotlin/org/hexastacks/heroesdesk/kotlin/squad/SquadMembers.kt @@ -0,0 +1,8 @@ +package org.hexastacks.heroesdesk.kotlin.squad + +import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds + +data class SquadMembers(val squadKey: SquadKey, val heroes: HeroIds = HeroIds.empty) { + fun containsAll(heroIds: HeroIds): Boolean = heroes.containsAll(heroIds) + +} \ No newline at end of file diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/TestUtils.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/TestUtils.kt index 484d250..b31c56e 100644 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/TestUtils.kt +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/TestUtils.kt @@ -1,9 +1,7 @@ package org.hexastacks.heroesdesk.kotlin.impl import arrow.core.getOrElse -import org.hexastacks.heroesdesk.kotlin.impl.scope.Name -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.task.Description import org.hexastacks.heroesdesk.kotlin.impl.task.Title import org.hexastacks.heroesdesk.kotlin.impl.user.Hero @@ -12,14 +10,8 @@ import org.hexastacks.heroesdesk.kotlin.impl.user.UserName object TestUtils { - fun createScopeOrThrow(scopeKey: String): Scope = - Scope( - Name(scopeKey).getOrElse { throw RuntimeException("scope should be valid: $it") }, - createScopeKeyOrThrow(scopeKey) - ) - - fun createScopeKeyOrThrow(scopeKey: String): ScopeKey = - ScopeKey(scopeKey).getOrElse { throw RuntimeException("scope should be valid: $it") } + fun createSquadKeyOrThrow(squadKey: String): SquadKey = + SquadKey(squadKey).getOrElse { throw RuntimeException("squad key should be valid: $it") } fun createTitleOrThrow(title: String): Title = diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeMembersTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeMembersTest.kt deleted file mode 100644 index 2d32018..0000000 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeMembersTest.kt +++ /dev/null @@ -1,48 +0,0 @@ -package org.hexastacks.heroesdesk.kotlin.impl.scope - -import org.hexastacks.heroesdesk.kotlin.impl.TestUtils.createHeroIdOrThrow -import org.hexastacks.heroesdesk.kotlin.impl.TestUtils.createScopeKeyOrThrow -import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds -import kotlin.test.Test -import kotlin.test.assertFalse -import kotlin.test.assertTrue - -class ScopeMembersTest{ - - @Test - fun `containsAll(empty) returns true on empty scope members`(){ - val scopeMembers = ScopeMembers(createScopeKeyOrThrow("scopeKey")) - - assertTrue(scopeMembers.containsAll(HeroIds(setOf()))) - } - - @Test - fun `containsAll(element) returns false on empty scope members`(){ - val scopeMembers = ScopeMembers(createScopeKeyOrThrow("scopeKey")) - - val containsAll = scopeMembers.containsAll(HeroIds(createHeroIdOrThrow("heroId"))) - - assertFalse(containsAll) - } - - @Test - fun `containsAll(element) returns true on scope members with element`(){ - val heroId = createHeroIdOrThrow("heroId") - val scopeMembers = ScopeMembers(createScopeKeyOrThrow("scopeKey"), HeroIds(heroId)) - - val containsAll = scopeMembers.containsAll(HeroIds(heroId)) - - assertTrue(containsAll) - } - - @Test - fun `containsAll(elements) returns true on scope members all elements`(){ - val heroId1 = createHeroIdOrThrow("heroId1") - val heroId2 = createHeroIdOrThrow("heroId2") - val scopeMembers = ScopeMembers(createScopeKeyOrThrow("scopeKey"), HeroIds(heroId1, heroId2)) - - val containsAll = scopeMembers.containsAll(HeroIds(heroId1, heroId2)) - - assertTrue(containsAll) - } -} \ No newline at end of file diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeTest.kt deleted file mode 100644 index 86021f6..0000000 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/ScopeTest.kt +++ /dev/null @@ -1,51 +0,0 @@ -package org.hexastacks.heroesdesk.kotlin.impl.scope - -import arrow.core.getOrElse -import org.hexastacks.heroesdesk.kotlin.impl.user.* -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Assertions.assertNotEquals -import kotlin.test.Test - -class ScopeTest { - @Test - fun `scopes with same keys and different content are equals`() { - val scopeKey = scopeKey("COD") - val scope1 = Scope(name("Write code"), scopeKey) - val scope2 = Scope(name("Read coode"), scopeKey) - - assertEquals(scope1, scope2) - } - - @Test - fun `scopes with different ids and same content aren't equals`() { - val name = name("Write code") - val assignees = Heroes.empty - val scope1 = Scope(name, scopeKey("COD")) - val scope2 = Scope(name, scopeKey("WRI")) - - assertNotEquals(scope1, scope2) - } - - @Test - fun `scopes with same ids and different content have same hashcode`() { - val scopeKey = scopeKey("COD") - val scope1 = Scope(name("Write code"), scopeKey).hashCode() - val scope2 = Scope(name("Read coode"), scopeKey).hashCode() - - assertEquals(scope1, scope2) - } - - private fun hero() = - Hero( - UserName("heroName").getOrElse { throw RuntimeException("HeroName should be valid") }, - HeroId("id").getOrElse { throw RuntimeException("HeroId should be valid") }) - - - private fun scopeKey(scopeKey: String): ScopeKey = - ScopeKey(scopeKey).getOrElse { throw RuntimeException("ScopeKey should be valid") } - - private fun name(scopeName: String): Name = - Name(scopeName).getOrElse { throw RuntimeException("ScopeName should be valid") } - - -} \ No newline at end of file diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/NameTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/squad/NameTest.kt similarity index 68% rename from heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/NameTest.kt rename to heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/squad/NameTest.kt index a7fa81b..0bf37dc 100644 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/scope/NameTest.kt +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/squad/NameTest.kt @@ -1,8 +1,9 @@ -package org.hexastacks.heroesdesk.kotlin.impl.scope +package org.hexastacks.heroesdesk.kotlin.impl.squad import arrow.core.EitherNel import org.hexastacks.heroesdesk.kotlin.impl.AbstractStringValueTest -import org.hexastacks.heroesdesk.kotlin.impl.scope.Name.NameError +import org.hexastacks.heroesdesk.kotlin.squad.Name +import org.hexastacks.heroesdesk.kotlin.squad.Name.NameError class NameTest : AbstractStringValueTest() { override fun createStringValue(value: String): EitherNel = Name(value) diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/squad/SquadMembersTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/squad/SquadMembersTest.kt new file mode 100644 index 0000000..781fddc --- /dev/null +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/squad/SquadMembersTest.kt @@ -0,0 +1,49 @@ +package org.hexastacks.heroesdesk.kotlin.impl.squad + +import org.hexastacks.heroesdesk.kotlin.impl.TestUtils.createHeroIdOrThrow +import org.hexastacks.heroesdesk.kotlin.impl.TestUtils.createSquadKeyOrThrow +import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds +import org.hexastacks.heroesdesk.kotlin.squad.SquadMembers +import kotlin.test.Test +import kotlin.test.assertFalse +import kotlin.test.assertTrue + +class SquadMembersTest{ + + @Test + fun `containsAll(empty) returns true on empty squad members`(){ + val squadMembers = SquadMembers(createSquadKeyOrThrow("squadKey")) + + assertTrue(squadMembers.containsAll(HeroIds(setOf()))) + } + + @Test + fun `containsAll(element) returns false on empty squad members`(){ + val squadMembers = SquadMembers(createSquadKeyOrThrow("squadKey")) + + val containsAll = squadMembers.containsAll(HeroIds(createHeroIdOrThrow("heroId"))) + + assertFalse(containsAll) + } + + @Test + fun `containsAll(element) returns true on squad members with element`(){ + val heroId = createHeroIdOrThrow("heroId") + val squadMembers = SquadMembers(createSquadKeyOrThrow("squadKey"), HeroIds(heroId)) + + val containsAll = squadMembers.containsAll(HeroIds(heroId)) + + assertTrue(containsAll) + } + + @Test + fun `containsAll(elements) returns true on squad members all elements`(){ + val heroId1 = createHeroIdOrThrow("heroId1") + val heroId2 = createHeroIdOrThrow("heroId2") + val squadMembers = SquadMembers(createSquadKeyOrThrow("squadKey"), HeroIds(heroId1, heroId2)) + + val containsAll = squadMembers.containsAll(HeroIds(heroId1, heroId2)) + + assertTrue(containsAll) + } +} \ No newline at end of file diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/squad/SquadTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/squad/SquadTest.kt new file mode 100644 index 0000000..8fecd30 --- /dev/null +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/squad/SquadTest.kt @@ -0,0 +1,48 @@ +package org.hexastacks.heroesdesk.kotlin.impl.squad + +import arrow.core.getOrElse +import org.hexastacks.heroesdesk.kotlin.impl.user.* +import org.hexastacks.heroesdesk.kotlin.squad.Name +import org.hexastacks.heroesdesk.kotlin.squad.Squad +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNotEquals +import kotlin.test.Test + +class SquadTest { + + @Test + fun `squads with same keys and different content are equals`() { + val squadKey = squadKey("COD") + val squad1 = Squad(name("Write code"), squadKey) + val squad2 = Squad(name("Read coode"), squadKey) + + assertEquals(squad1, squad2) + } + + @Test + fun `squads with different ids and same content aren't equals`() { + val name = name("Write code") + val assignees = Heroes.empty + val squad1 = Squad(name, squadKey("COD")) + val squad2 = Squad(name, squadKey("WRI")) + + assertNotEquals(squad1, squad2) + } + + @Test + fun `squads with same ids and different content have same hashcode`() { + val squadKey = squadKey("COD") + val squad1 = Squad(name("Write code"), squadKey).hashCode() + val squad2 = Squad(name("Read coode"), squadKey).hashCode() + + assertEquals(squad1, squad2) + } + + private fun squadKey(squadKey: String): SquadKey = + SquadKey(squadKey).getOrElse { throw RuntimeException("SquadKey should be valid") } + + private fun name(squadName: String): Name = + Name(squadName).getOrElse { throw RuntimeException("SquadName should be valid") } + +} \ No newline at end of file diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskIdTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskIdTest.kt index 6e96d54..5321a36 100644 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskIdTest.kt +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskIdTest.kt @@ -2,9 +2,8 @@ package org.hexastacks.heroesdesk.kotlin.impl.task import arrow.core.EitherNel import arrow.core.getOrElse -import org.hexastacks.heroesdesk.kotlin.impl.TestUtils.createScopeKeyOrThrow -import org.hexastacks.heroesdesk.kotlin.impl.TestUtils.createScopeOrThrow -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.impl.TestUtils.createSquadKeyOrThrow +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId.TaskIdError import kotlin.test.Test import kotlin.test.assertEquals @@ -102,13 +101,13 @@ abstract class AbstractTaskIdTest { assertEquals(description1.hashCode(), description2.hashCode()) } - abstract fun createTaskId(scope: ScopeKey, value: String): EitherNel + abstract fun createTaskId(squad: SquadKey, value: String): EitherNel private fun createTaskId(value: String) = - createTaskId(createScopeKeyOrThrow("randomScope"), value) + createTaskId(createSquadKeyOrThrow("randomSquad"), value) private fun createTaskIdOrThrow(value: String) = - createTaskId(createScopeKeyOrThrow("randomScope"), value).getOrElse { throw IllegalStateException() } + createTaskId(createSquadKeyOrThrow("randomSquad"), value).getOrElse { throw IllegalStateException() } private val minLength: Int = TaskId.MIN_LENGTH private val maxLength: Int = TaskId.MAX_LENGTH diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskTest.kt index bae67b2..5a71299 100644 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskTest.kt +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/AbstractTaskTest.kt @@ -2,9 +2,9 @@ package org.hexastacks.heroesdesk.kotlin.impl.task import arrow.core.getOrElse import org.hexastacks.heroesdesk.kotlin.impl.TestUtils.createDescriptionOrThrow -import org.hexastacks.heroesdesk.kotlin.impl.TestUtils.createScopeKeyOrThrow +import org.hexastacks.heroesdesk.kotlin.impl.TestUtils.createSquadKeyOrThrow import org.hexastacks.heroesdesk.kotlin.impl.TestUtils.createTitleOrThrow -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds import kotlin.test.Test import kotlin.test.assertEquals @@ -13,7 +13,7 @@ abstract class AbstractTaskTest> { @Test fun `updateTitle should return a new task with the updated title`() { - val task = createTaskOrThrow("scopeKey", "taskId", "title", "description") + val task = createTaskOrThrow("squadKey", "taskId", "title", "description") val newTitle = Title("new title").getOrElse { throw RuntimeException("new title should be valid") } val updatedTask = task.updateTitle(newTitle) @@ -22,20 +22,20 @@ abstract class AbstractTaskTest> { } private fun createTaskOrThrow( - scopeKey: String, + squadKey: String, taskId: String, title: String, description: String ): T { - val scope = createScopeKeyOrThrow(scopeKey) + val squad = createSquadKeyOrThrow(squadKey) return createTaskOrThrow( - createTaskIdOrThrow(scope, taskId), + createTaskIdOrThrow(squad, taskId), createTitleOrThrow(title), createDescriptionOrThrow(description) ) } - abstract fun createTaskIdOrThrow(scope: ScopeKey, taskId: String): Id + abstract fun createTaskIdOrThrow(squad: SquadKey, taskId: String): Id abstract fun createTaskOrThrow( id: Id, diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskIdTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskIdTest.kt index 11f4b0d..f2aa629 100644 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskIdTest.kt +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskIdTest.kt @@ -1,12 +1,11 @@ package org.hexastacks.heroesdesk.kotlin.impl.task import arrow.core.EitherNel -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.task.TaskId.TaskIdError class DoneTaskIdTest : AbstractTaskIdTest() { - override fun createTaskId(scope: ScopeKey, value: String): EitherNel = - DoneTaskId(scope, value) + override fun createTaskId(squadKey: SquadKey, value: String): EitherNel = + DoneTaskId(squadKey, value) } \ No newline at end of file diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskTest.kt index 9cf446b..d1b7c4d 100644 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskTest.kt +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/DoneTaskTest.kt @@ -1,10 +1,8 @@ package org.hexastacks.heroesdesk.kotlin.impl.task import arrow.core.getOrElse -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds -import org.hexastacks.heroesdesk.kotlin.impl.user.Heroes class DoneTaskTest : AbstractTaskTest() { override fun createTaskOrThrow( @@ -16,7 +14,7 @@ class DoneTaskTest : AbstractTaskTest() { DoneTask(id, title, description) - override fun createTaskIdOrThrow(scope: ScopeKey, taskId: String): DoneTaskId = - DoneTaskId(scope, taskId).getOrElse { throw RuntimeException("$taskId should be valid") } + override fun createTaskIdOrThrow(squadKey: SquadKey, taskId: String): DoneTaskId = + DoneTaskId(squadKey, taskId).getOrElse { throw RuntimeException("$taskId should be valid") } } \ No newline at end of file diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskIdTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskIdTest.kt index 0064b4f..802e15d 100644 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskIdTest.kt +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskIdTest.kt @@ -1,11 +1,10 @@ package org.hexastacks.heroesdesk.kotlin.impl.task import arrow.core.EitherNel -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey class InProgressTaskIdTest : AbstractTaskIdTest() { - override fun createTaskId(scope: ScopeKey, value: String): EitherNel = InProgressTaskId(scope, value) + override fun createTaskId(squadKey: SquadKey, value: String): EitherNel = InProgressTaskId(squadKey, value) } \ No newline at end of file diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskTest.kt index e068623..55f0394 100644 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskTest.kt +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/InProgressTaskTest.kt @@ -1,10 +1,8 @@ package org.hexastacks.heroesdesk.kotlin.impl.task import arrow.core.getOrElse -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds -import org.hexastacks.heroesdesk.kotlin.impl.user.Heroes class InProgressTaskTest : AbstractTaskTest() { override fun createTaskOrThrow( @@ -15,7 +13,7 @@ class InProgressTaskTest : AbstractTaskTest() ) = InProgressTask(id, title, description, assignees) - override fun createTaskIdOrThrow(scope: ScopeKey, taskId: String): InProgressTaskId = - InProgressTaskId(scope, taskId).getOrElse { throw RuntimeException("$taskId should be valid") } + override fun createTaskIdOrThrow(squadKey: SquadKey, taskId: String): InProgressTaskId = + InProgressTaskId(squadKey, taskId).getOrElse { throw RuntimeException("$taskId should be valid") } } \ No newline at end of file diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskIdTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskIdTest.kt index c3141b6..3a36c16 100644 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskIdTest.kt +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskIdTest.kt @@ -1,11 +1,10 @@ package org.hexastacks.heroesdesk.kotlin.impl.task import arrow.core.EitherNel -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey class PendingTaskIdTest : AbstractTaskIdTest() { - override fun createTaskId(scope: ScopeKey, value: String): EitherNel = - PendingTaskId(scope, value) + override fun createTaskId(squadKey: SquadKey, value: String): EitherNel = + PendingTaskId(squadKey, value) } \ No newline at end of file diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskTest.kt index d1bd22c..cac9748 100644 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskTest.kt +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/task/PendingTaskTest.kt @@ -1,10 +1,8 @@ package org.hexastacks.heroesdesk.kotlin.impl.task import arrow.core.getOrElse -import org.hexastacks.heroesdesk.kotlin.impl.scope.Scope -import org.hexastacks.heroesdesk.kotlin.impl.scope.ScopeKey +import org.hexastacks.heroesdesk.kotlin.squad.SquadKey import org.hexastacks.heroesdesk.kotlin.impl.user.HeroIds -import org.hexastacks.heroesdesk.kotlin.impl.user.Heroes class PendingTaskTest : AbstractTaskTest() { override fun createTaskOrThrow( @@ -15,7 +13,7 @@ class PendingTaskTest : AbstractTaskTest() { ) = PendingTask(id, title, description, assignees) - override fun createTaskIdOrThrow(scope: ScopeKey, taskId: String): PendingTaskId = - PendingTaskId(scope, taskId).getOrElse { throw RuntimeException("$taskId should be valid") } + override fun createTaskIdOrThrow(squadKey: SquadKey, taskId: String): PendingTaskId = + PendingTaskId(squadKey, taskId).getOrElse { throw RuntimeException("$taskId should be valid") } } \ No newline at end of file diff --git a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/user/HeroIdsTest.kt b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/user/HeroIdsTest.kt index 1e4c6d9..35f148f 100644 --- a/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/user/HeroIdsTest.kt +++ b/heroesdesk/src/test/kotlin/org/hexastacks/heroesdesk/kotlin/impl/user/HeroIdsTest.kt @@ -147,14 +147,14 @@ class HeroIdsTest { @Test - fun `containsAll(empty) returns true on empty scope members`(){ + fun `containsAll(empty) returns true on empty squad members`(){ val ids = HeroIds.empty assertTrue(ids.containsAll(HeroIds.empty)) } @Test - fun `containsAll(element) returns false on empty scope members`(){ + fun `containsAll(element) returns false on empty squad members`(){ val ids = HeroIds.empty val containsAll = ids.containsAll(HeroIds(createHeroIdOrThrow("heroId"))) @@ -163,7 +163,7 @@ class HeroIdsTest { } @Test - fun `containsAll(element) returns true on scope members with element`(){ + fun `containsAll(element) returns true on squad members with element`(){ val heroId = createHeroIdOrThrow("heroId") val ids = HeroIds(heroId) @@ -173,7 +173,7 @@ class HeroIdsTest { } @Test - fun `containsAll(elements) returns true on scope members all elements`(){ + fun `containsAll(elements) returns true on squad members all elements`(){ val heroId1 = createHeroIdOrThrow("heroId1") val heroId2 = createHeroIdOrThrow("heroId2") val ids = HeroIds(heroId1, heroId2)