@startuml "Notifications admin module"
!theme toy
'''Часть сервиса уведомлений, отвечающая за создание и администрирование нотификаций'''


'''Хранилища и внешние сервисы'''
cloud "notifications: Storage" {
    database "notifications: postgres" {
        [Notifications config]
    }
}


'''Компоненты бизнес-логики'''
component "frontend: Service" {
    'Внешние интерфейсы службы'
    portin frontend.http

    'Компоненты службы'
    [Nginx]
    [FastAPI]

    'Внутренние каналы службы'
    [Nginx] <--> "FastAPI": Proxy

    'Обслуживание внешних интерфейсы'
    frontend.http <--> Nginx: GET,POST
}

component "admin: Service" {
    'Внешние интерфейсы службы'
    port generator.http
    port admin.http
    port sender.http
    port sender.websocket

    'Компоненты службы'
    [Django]

    'Хранилища\кэши службы'
    database "admin: postgres" {
        [Django config]
        [User info]
        [Jinja templates]
    }

    'Внутренние каналы службы'
    [Django] ..> [Django config]: postgres.rw
    [Django] ..> [User info]: postgres.rw


    'Обслуживание внешних интерфейсов'
    admin.http -> [Django]
    sender.http <-- [Django]: Request
    sender.websocket <-- [Django]: Session
    generator.http  <--> [Django]
}

component "generator: Service" {
    [Templates engine]
    [URL shortener]

    [Templates engine] ..> [Jinja templates]: postgres.rw
    [Templates engine] --> [URL shortener]

}


'''Обслуживание внешних и облачных сервисов'''
[FastAPI]   ..>  [Notifications config]: postgres.rw
[Django]    ..>  [Notifications config]: postgres.rw

[FastAPI] --> admin.http:GET,POST
[Templates engine] <--> generator.http 
@enduml
