@startuml

Actor Customer
participant AuthController
participant UserService
participant UserRepository
participant UserMapper
participant MySQL

group GlobalExceptionHandler
    autonumber 1.0

    Customer -> AuthController: provide register information
    activate Customer
    activate AuthController

    AuthController -> UserService: register new user
    activate UserService

    break email already existed
        UserService --> Customer: throw BadRequestException
    end

    UserService -> UserRepository: save
    activate UserRepository

    UserRepository -> MySQL: query
    activate MySQL

    MySQL --> UserRepository: return response
    deactivate MySQL

    UserRepository --> UserService: return user

    autonumber 2.0
    UserService -> UserMapper: map to userDTO
    activate UserMapper

    UserMapper --> UserService: return userDTO
    deactivate UserMapper

    UserService --> AuthController: return userDTO
    deactivate UserService

    AuthController --> Customer: return userDTO
    deactivate AuthController
    deactivate Customer
end
@enduml