@startuml

note "US010 - As Authenticated User, I want to update its own data (e.g., photo, function)." as N1

class "US010US011UpdateUserDataUI" as A {
}

class "US010US011UpdateUserDataController" as B {
+updatesUserPhoto (String email, String newPhotoPath)
}

class "Company" as C {
+getUserStore()
}

class "UserStore" as D {
+userUpdatesItsPhoto(String userToUpdateEmail, String newPhotoPath)
+getUserByEmail(String email)
}

class "User" as E {
-String email
-String photo
+hasUserEmail(String email)
+updateUserPhoto(String newPhoto)
+validatePhoto(String photo)
}

A ..> B
B ..> C
B..> E
C o--> "1 " D
D *--> "1..*   " E

@enduml

@startuml
skinparam sequenceArrowThickness 2
skinparam roundcorner 20
skinparam maxmessagesize 60
skinparam sequenceParticipant underline

actor "Authenticated User" as Actor
participant ": US010US011UpdateUserDataUI" as A
participant ": US010US011UpdateUserDataController" as B
participant ": Company" as C
participant "users : UserStore" as D
participant "user : User" as E

Actor -> A: 1. Types requested data
activate Actor
activate A

A -> B: 2. updatesUserPhoto (String email, String newPhotoPath)
activate B

B -> C: 3. getUserStore()
activate C

C --> B: 4. users
deactivate C

B -> D: 5. userUpdatesItsPhoto(String userToUpdateEmail, String newPhotoPath)
activate D

D -> E: 6. getUserByEmail(String email)
activate E

E --> D: 7. user
deactivate E

D -> E: 8. updateUserPhoto(String newPhoto)
activate E

E --> D: 9. true
deactivate E

D --> B: 10. true
deactivate D

B --> A: 11. true
deactivate B

A --> Actor : 12. Informs operation success
deactivate A
deactivate Actor

@enduml