ProjectsService.kt

package nl.marc.devops.projects

import nl.marc.devops.accounts.User

class ProjectsService(private val projectRepository: ProjectRepository) {
    fun createProject(productOwner: User, project: Project): Project {
        project.users += productOwner to Role.PRODUCT_OWNER
        return projectRepository.addProject(project)
    }

    fun addUserToProject(user: User, role: Role, project: Project): Project {
        if (role == Role.PRODUCT_OWNER) {
            throw IllegalStateException("Project already has product owner")
        } else if (role == Role.LEAD_DEVELOPER && project.isRoleUsed(role)) {
            throw IllegalStateException("Project already has lead developer")
        }

        project.users += user to role
        return projectRepository.updateProject(project)
    }
}