### Api Architecture

```plantuml

skinparam shadowing false

package "Infrastructure" {
    package "Database/Doctrine" {
        [Repositories]
    }
    package "Translations" {
        [Domains]
    }
    package "Web" {
        package "Controller" {
            HTTP - [ApiController]
        }
        package "Security" {
            [LoginFormAuthenticator]
            [ViewTrailService]
        }
    }
}

package "Application" {
    [InputBus]
    [OutputBus]
    [BicService]
    [PersmissionService]
    package "Input" {
        [Commands]
        [Services]
    }
    package "Output" {
        [ReadModels]
        [Getters]
    }
}

package "Domain" {
    package "Common" {
        [Traits]
    }
    package "Enum" {
        [GeneralEnums]
    }
    package "Model" {
        [Models]
        [RepoInterfaces]
        [Enums]
    }
}

[InputBus] --> [PersmissionService] : check permission
[OutputBus] --> [PersmissionService] : check permission
[InputBus] --> [Services] : typed commands

[ApiController] --> [InputBus] : untyped commands
[ApiController] --> [OutputBus]
[ApiController] --> [BicService]

[OutputBus] --> [Getters] : via readmodels

[Getters] --> [Models]
[Getters] --> [RepoInterfaces]
[Services] --> [Models]
[Services] --> [RepoInterfaces]

[Repositories] ..> [RepoInterfaces] : implementation

[Session] <-- [PersmissionService]
[Session] <.. [LoginFormAuthenticator]

```
