@startuml seq


User -> User: Start to reservate
activate User
User -> "Application": requestClassroomData()
activate "Application"
"Application" -> "Server/DB": checkClassroom()
activate "Server/DB"
"Server/DB" -> "University Homepage": crawlTimetableData()
activate "University Homepage"
"University Homepage" -->> "Server/DB": resultData()
deactivate "University Homepage"
activate "Server/DB"
"Server/DB" -> "Server/DB": convertDataToDB()
deactivate "Server/DB"
"Server/DB" -->> "Application": sendClassroomInfo()

deactivate "Server/DB"
"Application" -->> User: classroomInfoView()
deactivate "Application"

User -> "Application": requestReservation()
activate "Application"
"Application" -> "Server/DB": insert(reservationInfo)
activate "Server/DB"
"Server/DB" -->> "Application": [true]
"Application" -->> "User": successView()
deactivate "Application"

"Server/DB" -> "Server/DB": countStart()
activate "Server/DB"

User -> User: Start to use classroom
activate User



alt Checkout
    User -> "Application": checkout()
    activate "Application"
    "Application" -> "Server/DB": requestCheckout()
    activate "Server/DB"
    
    "Server/DB" -> "Server/DB": delete(reservationInfo)
    deactivate "Server/DB"
    "Server/DB" -->> "Application": [true]
    deactivate "Server/DB"
    "Application" -->> "User": resultView()
else Timeout
    "Server/DB" -->> "Application": timeout()
    deactivate "Server/DB"
    "Application" -->> "User": notification("Timeout")
    deactivate "Application"
end

User -> User: End to use classroom
deactivate User


@enduml

