@startuml
skinparam nodesep 5
scale 3840*2160

circle    api   as "WebSocket API"

component ss    as "socket-service"

card "business logic" {
  component reqs  as "request-service"
  component resps as "response-service"
  
  queue     q3    as "complex-requests"

  component nots  as "notification-service"
  database  cache as "Cache"
  
  card antispam {
    queue     q1    as "new-messages"
    component mid   as "antispam-service"
    queue     q2    as "validated-messages"
  }
}

card "persistent storage" {
  database  db    as "Database"
}

api -[#blue]- ss

reqs  <-- ss  : HTTP
nots  <--> ss : HTTP
resps --> nots

reqs -[dashed]-> q1
reqs -[dashed]-> q3

q1 -[dashed]-> mid
mid -[dashed]-> q2

resps <-[dashed]- q2
resps <-[dashed]- q3
resps -[#green]- db

nots -[#green]- cache

@enduml
