@startuml linkedevents-container
!includeurl https://raw.githubusercontent.com/RicardoNiepel/C4-PlantUML/master/C4_Container.puml

Person(citizen, "Citizen\n(not authenticated)")
Person(citizen_auth, "Citizen\n(authenticated)")
Person(admin, "Creator")

System_Boundary(linkedevents, "linkedevents") {
  Container(linkedevents_ui, "linkedevents-ui", "React, JavaScript", "SPA running on browser, served from <b>Ui Server</b>")

  Container(ui_server, "Ui Server", "???", "Serve frontend SPA bundle, forward <b>/auth</b> to <b>Auth Proxy</b>")
  Container(auth_proxy, "Auth Proxy", "Express, JavaScript", "Interact with <b>Tunnistamo</b> using\n<b>passport-helsinki</b>")

  Container(api_proxy, "Api Proxy", "???", "Serve <b>/static</b> and <b>/media</b> from <b>Backend Server</b>\n\nForward <b>/api</b>\nto <b>linkedevents-api</b>")
  Container(backend_server, "Backend Server", "???", "Serve <b>/static</b> and <b>/media</b>")

  Container(linkedevents_api, "linkedevents-api", "Django, Python", "Aggregator, creator and publisher of event information")
}

System_Ext(data_sources, "Data Sources", "YSO\nHelmet\nEspoo\n...")
System_Ext(tunnistamo, "Tunnistamo", "City of Helsinki single sign-on service\n(api.hel.fi/sso)")

Rel(citizen, linkedevents_ui, "Uses\n[HTTPS]")
Rel(citizen_auth, linkedevents_ui, "Uses\n[HTTPS]")

Rel(admin, linkedevents_ui, "Uses\n[HTTPS]")

Rel(linkedevents_ui, ui_server, "Auth and SPA resources\n[HTTPS]")
Rel(ui_server, auth_proxy, "/auth\n[HTTPS]")
Rel(auth_proxy, tunnistamo, "Authentication\n[OAuth2]")

Rel(linkedevents_ui, api_proxy, "Backend resources\n[HTTPS]")
Rel(api_proxy, linkedevents_api, "/api\n[HTTPS]")
Rel(api_proxy, backend_server, "/media and /static\n[HTTPS]")

Rel(linkedevents_api, data_sources, "Imports data")

@enduml