@startuml
'https://plantuml.com/sequence-diagram
legend top
US017 - As Product Owner, I want to create User Story and add it to Product Backlog
end legend
skinparam sequenceMessageAlign center
title To create User Story and add it to Product Backlog


class "CreateUsController" {
- usService
+ createUs(projectCodeOfInterest, userStoryCreationDto)
-convertListOfStringsToAnAcceptanceCriteriaList(userStoryCreationDto)
}

class "UserStoryCreationDto"{
+userStoryNumber
+userStoryText
+actor
+acceptanceCriteria
+priority
}

class "UsService" {
- usRepository
- projectRepository
- factoryUserStory
+ createUs(userStoryNumber, userStoryText, actor,\n priority, acceptanceCriteria, projectCode)
+ deleteUs(usId)
+ addUsToProductBacklog(usId, projectCode, priority)
}

interface "IFactoryUserStory" {
+ createUserStory(userStoryNumber, userStoryText, actor,\n priority, acceptanceCriteria, projectCode)
}

class "FactoryUserStory"{
+ createUserStory(usNumber, usText, actor,\n priority, acceptanceCriteria, projectCode)
}

interface "IProjectRepository"{
+getProjectByCode(code)
}

class "ProjectRepository"{
+getProjectByCode(code)
}

interface "IUsRepository"{
+add(userStory)
+delete(usId)
}

class "UsRepository"{
+add(userStory)
+delete(usId)
}

class "Project"{
-projectCode
-productBacklog
+ addUserStory(priority, usId)
+ getProjectCode()
}

class "UserStory"{
- usId
- acceptanceCriteria
- usNumber
- actor
- usText
- status
+ getUsNumber()
}


"CreateUsController" .> "UserStoryCreationDto": accesses
"CreateUsController" "1"-->"1" "UsService": has

"UsService" "1" ..> "1" "IFactoryUserStory": has
"IFactoryUserStory" <|.. "FactoryUserStory": implements
"FactoryUserStory" "1"..>"*" "UserStory": creates


"UsService" "1" ..> "1" "IProjectRepository": has
"IProjectRepository" <|.. "ProjectRepository": implements
"ProjectRepository" "1"-->"*" "Project": has

"UsService" "1" ..> "1" "IUsRepository": has
"IUsRepository" <|.. "UsRepository": implements
"UsRepository" "1"-->"*" "UserStory": has

"UsService" ..> "UserStory": uses
"UsService" ..> "Project": uses



/'







"CreateUsController" "1"-->"1" "ProjectService": has
"CreateUsController" ..>"ProjectDto": uses
"ProjectService" ..> "Project": uses
"ProjectService" "1"-->"1" "IProjectRepository": contains

"Project" "1"-->"1" "ProductBacklog": has
"UsService" "1"-->"1" "IFactoryUserStory": has

"UsService" "1"-->"1" "IUsRepository": contains
"IUsRepository" "1"-->"*" "UserStory": has
"UserStoryCreationDto" <.. "IFactoryUserStory": uses'/
@enduml