@startuml Subscribe course

title Reference: [UC] Subscribe to course

participant ":CourseSubscriptionController" as controller
participant ":CourseSubscription" as subscription
participant ":UserManager" as userManager
participant ":CourseSubscriptionRepository" as courseSubsciptionRepository

-> controller: CreateCourseSubscription(dto.courseId)
activate controller

alt Valid user
    controller -> userManager: FindByEmailAsync(userEmail)
    activate userManager
    controller <-- userManager: User
    ' TO-ASK: User|null of gewoon User?
    deactivate userManager

    controller -> courseSubsciptionRepository: GetAsync(dto.courseId)
    activate courseSubsciptionRepository
    courseSubsciptionRepository --> controller: subscibedItem
    deactivate courseSubsciptionRepository
    
    controller -> subscription **: create(DateTime.UtcNow, user.id, subscribedItem)

    controller -> courseSubsciptionRepository: CreateAsync(subscription)
    activate courseSubsciptionRepository
    courseSubsciptionRepository --> controller: void
    deactivate courseSubsciptionRepository

    <-- controller: ok
else Invalid user
    <-- controller: unauthorized
end

deactivate controller

@enduml