workspace "Events-WebApi" "Structurizr model za rješenje Events-WebApi" { model { auth0 = softwareSystem "Auth0" "Vanjski identity provider za prijavu i JWT tokene." { tags "External", "Auth" } postgres = softwareSystem "PostgreSQL" "Relacijska baza podataka za domenu događaja." { tags "External", "Database" } rabbitmq = softwareSystem "RabbitMQ" "Sabirnica poruka za asinkronu razmjenu događaja." { tags "External", "MessageBus" } eventsSystem = softwareSystem "Events-WebApi" "Rješenje za upravljanje događajima, prijavama i generiranim datotekama." { clientApp = container "ClientApp" "" "Vue 3 + Vite" { tags "Frontend" } webApi = container "WebAPI" "CRUD servisi" "ASP.NET Core Web API" { tags "API", "WebAPI" } filesApi = container "FilesAPI" "API za sinkronizaciju i isporuku PDF/XLSX datoteka." "ASP.NET Core Web API" { tags "API", "FilesAPI" } clientApp -> auth0 "Prijava i dohvat pristupnog tokena" clientApp -> webApi "CRUD operacije i registracija za događaj" "JSON/HTTPS" clientApp -> filesApi "Preuzimanje certifikata i Excel izvoza" "HTTPS" webApi -> auth0 "Validira JWT tokene" "OAuth2/JWT" webApi -> postgres "Čita i zapisuje događaje, osobe, sportove i prijave" "EF Core/Npgsql" webApi -> rabbitmq "Objavljuje RegistrationCreated/Updated/Deleted" "MassTransit/AMQP" rabbitmq -> filesApi "Isporučuje registration događaje consumerima" "MassTransit/AMQP" filesApi -> postgres "Čita podatke za generiranje datoteka" "EF Core/Npgsql" } } views { container eventsSystem "Containers" { include clientApp include webApi include filesApi include auth0 include postgres include rabbitmq animation { clientApp webApi postgres auth0 rabbitmq filesApi } } dynamic eventsSystem "RegistrationFlow" "Tok registracije za događaj" { clientApp -> webApi "Korisnik u ClientApp šalje prijavu za događaj" webApi -> auth0 "Validacija pristupnog tokena" webApi -> postgres "Spremanje registracije u bazu" webApi -> rabbitmq "Objava događaja RegistrationCreated" rabbitmq -> filesApi "Isporuka događaja RegistrationCreated" filesApi -> postgres "Dohvat podataka za certifikat i Excel" } theme default styles { element "Container" { background #ffffff color #222222 stroke #444444 fontSize 34 } element "Frontend" { shape WebBrowser background #ffffff color #1565c0 stroke #42a5f5 strokeWidth 3 fontSize 36 } element "API" { shape Hexagon background #ffffff strokeWidth 3 fontSize 36 } element "WebAPI" { color #1565c0 stroke #42a5f5 } element "FilesAPI" { color #2e7d32 stroke #66bb6a } element "Database" { shape Cylinder background #ffffff color #1565c0 stroke #42a5f5 strokeWidth 3 fontSize 34 description false } element "MessageBus" { shape Pipe background #fff8e1 color #8d6e63 stroke #ff9800 strokeWidth 3 width 760 height 140 fontSize 34 description false } element "External" { opacity 85 } element "Auth" { background #ffffff color #c62828 stroke #e53935 strokeWidth 3 fontSize 34 } relationship "Relationship" { color #666666 thickness 2 fontSize 34 } } } }