-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontainer_diagram.puml
60 lines (47 loc) · 4.27 KB
/
container_diagram.puml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
@startuml Jarvis - Eduardo Guilarducci, XP Educação - Projeto de Arquitetura de Software
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
' uncomment the following line and comment the first to use locally
' !include C4_Container.puml
LAYOUT_TOP_DOWN()
' LAYOUT_AS_SKETCH()
LAYOUT_WITH_LEGEND()
title Diagrama de Container para o sistema Jarvis - Eduardo Guilarducci, XP Educação - Projeto de Arquitetura de Software
Person(contador, Contador, "Contador ou Analista Contábil - Efetua agendamentos de contas a pagar e receber, emissão de Notas Fiscais e Conciliação Bancária")
Person_Ext(cliente, Cliente, "Adminstrativo Financeiro ou Contábil - Recebe Notas Fiscais para procedimentos internos e usa informações via Analista Contábil")
System_Ext(bitrix, "Bitrix","Sistema de autenticação OAuth2 externo")
System_Ext(migrate, "Invooicy","Sistema de Emissão de Notas Fiscais")
System_Ext(pjbank, "PJBank","Sistema bancário digital")
System_Ext(s3,"AWS S3", "Armazena os arquivos binários (PDF) das Notas Fiscais e espelhos emitidos.")
System_Boundary(c1, "Jarvis - Sistema Contábil") {
Container(web_app, "Aplicação Web", "SPA - Aplicação React", "Entrega o conteúdo estático para gestão contábil incluindo todas as features.")
Container(mobile_app, "Aplicação Mobile", "React Native", "Entrega uma versão com features limitadas para gestão contábil.")
ContainerDb(database, "Banco de Dados", "NoSQL Database (MongoDB)", "Armazena informações de clientes, agendamentos de pagamentos e recebimentos, notas fiscais, extrato bancário e conciliação bancária")
Container(backend_api, "API", "NodeJS / NestJS, K8S", "Provê as funcionalidades de gestão de clientes, agendamentos de pagamentos e recebimentos, notas fiscais, extrato bancário e conciliação bancária via API")
Container(kafka, "Kafka", "Kafka Broker", "Gerencia os eventos de solicitação e emissão de Nota Fiscal")
Container(consumer, "NF Emmiter", "consumer:NodeJS App", "Processa as solicitações de Emissão ou cancelamento de Notas fiscais da fila")
Container(nf_comm_dispatcher, "NF Comm. Dispatcher", "consumer:NodeJS App", "Processa o envio das Notas fiscais e notificações de cancelamento.")
Container(nf_files_dispatcher, "NF Files Dispatcher", "consumer:NodeJS App", "Processa os arquivos originados de Emissão ou cancelamento de notas fiscais.")
}
System_Ext(email, "E-Mail", "Sistema interno de E-mail(GMail)")
Rel(web_app, bitrix, "Autentica / Autoriza via ", "async, OAuth2")
Rel(mobile_app, bitrix, "Autentica / Autoriza via ", "async, OAuth2")
Rel(contador, web_app, "Usa", "HTTPS")
Rel(contador, mobile_app, "Usa", "HTTPS")
Rel(backend_api, kafka, "Envia solicitação de emissão e cancelamento de notas para", "kafka topic: nf_emission_requested / nf_cancel_requested")
Rel(backend_api, pjbank, "Recupera informações de transações bancárias (extrato)", "async, JSON/HTTPS")
Rel(backend_api, kafka, "Envia resultados de NF's emitidas ou canceladas", "kafka topic: nf_emmited / nf_canceled")
Rel_Back(kafka, consumer, "Processa as solicitações de emissão e cancelamento de notas via", "async, JSON/HTTPS")
Rel_Back(kafka, nf_comm_dispatcher, "Processa as solicitações de emissão e cancelamento de notas via", "async, JSON/HTTPS")
Rel_Back(kafka, nf_files_dispatcher, "Processa as solicitações de emissão e cancelamento de notas via", "async, JSON/HTTPS")
Rel(consumer, migrate, "Processa as solicitações de emissão e cancelamento de notas via", "async, JSON/HTTPS")
Rel(nf_comm_dispatcher, email, "Processa as solicitações de emissão e cancelamento de notas via", "async, JSON/HTTPS")
Rel(nf_files_dispatcher, s3, "Envia arquivos para", "async, AWS SDK")
Rel(migrate, backend_api, "Envia retorno de processamento de NF's", "async, Webhook")
Rel(web_app, backend_api, "Consome", "async, JSON/HTTPS")
Rel(mobile_app, backend_api, "Consome", "async, JSON/HTTPS")
Rel_Back_Neighbor(database, backend_api, "Recupera e grava dados em", "Mongoose")
Rel_Back(database, nf_files_dispatcher, "Recupera e grava dados em", "Mongoose")
Rel_Back(database, nf_comm_dispatcher, "Recupera e grava dados em", "Mongoose")
Rel_Back(database, consumer, "Recupera e grava dados em", "Mongoose")
Rel_Back(cliente, email, "Envia comunicação para")
@enduml