@startuml

actor User

participant AuthController as "<<Service>>\nAuthController"
participant JavaSpringSecurity as "<<Backend>>\nJavaSpringSecurity"
participant Database as "<<Database>>\nDatabase"
participant JavaUtils as "<<Utils>>\nJavaUtils"

User -> AuthController: AuthenticateUser(email, password)
activate AuthController

AuthController -> JavaSpringSecurity: authenticate(email, password)
activate JavaSpringSecurity

JavaSpringSecurity -> Database: Query user by email
activate Database

Database --> JavaSpringSecurity: User details
deactivate Database

JavaSpringSecurity --> AuthController: User authenticated
deactivate JavaSpringSecurity

AuthController -> JavaUtils: generateToken(userId, username)
activate JavaUtils

JavaUtils --> AuthController: Token generated
deactivate JavaUtils

AuthController --> User: Return generated token
deactivate AuthController

@enduml
