-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathc4-container.puml
67 lines (50 loc) · 3.3 KB
/
c4-container.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
61
62
63
64
65
66
67
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
AddRelTag("async", $textColor=$ARROW_FONT_COLOR, $lineColor=$ARROW_COLOR, $lineStyle=DashedLine())
AddRelTag("sync/async", $textColor=$ARROW_FONT_COLOR, $lineColor=$ARROW_COLOR, $lineStyle=DashedLine())
LAYOUT_WITH_LEGEND()
title Diagrama de Container (C4)
Boundary(users, "Usuários") {
Person(doctor, "Médico", "Gerencia disponibilidade, confirma agendamentos, realiza consultas, solicita, acessa e adiciona dados em prontuários eletrônicos")
Person(patient, "Paciente", "Busca por médicos, solicita agendamentos, participa de consultas, gerencia seu próprio prontuário eletrônico")
}
System_Boundary(self_order_system, "Health&Med") {
Container(frontend, "Frontend", "Web/Mobile", "Aplicação web e/ou mobile de interface do usuário")
Container(api_gateway, "API Gateway", "AWS API Gateway", "BFF como ponto de entrada para requisições no sistema")
System_Boundary(user_service, "Usuário Service") {
Container(user_app, "Usuário API", "Spring Boot", "API para cadastro e busca de médicos e pacientes")
ContainerDb(user_db, "Usuário DB", "Postgres")
}
System_Boundary(booking_service, "Agendamento Service") {
Container(booking_app, "Agendamento API", "Spring Boot", "API para realização, confirmação e recusa de agendamentos")
ContainerDb(booking_db, "Agendamento DB", "Postgres")
}
System_Boundary(medical_record_service, "Prontuário Service") {
Container(medical_record_app, "Prontuário API", "Spring Boot", "API para gerenciamento de prontuários eletrônicos, documentos, e controle de acesso")
ContainerDb(medical_record_db, "Prontuário BD", "DynamoDB")
Container(medical_record_store, "Prontuário Store", "S3", "Cloud store, encriptografado, com ACL, e replicação para HA")
}
}
System_Ext(crm_system, "Serviço de CRM", "Expõe lista de médicos no CRM (de todos os estados)")
System_Ext(kyc_system, "Serviço de Identidade", "Verifica identidade dos usuários")
System_Ext(email_system, "Serviço de e-mail", "Envia e-mails para usuários do sistema (ex.: cadastro de médico verificado, consulta confirmada, acesso de prontuário concedido, etc")
System_Ext(video_system, "Serviço de videoconferência", "Disponibiliza funcionalidade de video chamadas para realização de consultas online")
Rel(users, frontend, "usam")
Rel(email_system, users, "envia para", $tags="async")
Rel(video_system, frontend, "disponibiliza serviço")
Rel(frontend, api_gateway, "requests")
Rel(frontend, medical_record_store, "baixa/sobe arquivos")
Rel(api_gateway, user_app, "requests")
Rel(api_gateway, booking_app, "requests")
Rel(api_gateway, medical_record_app, "requests")
Rel(user_app, user_db, "read/write", "JDBC")
Rel(user_app, crm_system, "verifica CRM", "HTTP")
Rel(user_app, kyc_system, "verifica identidade", "HTTP")
Rel(user_app, email_system, "requests", "HTTP", $tags="async")
Rel(booking_app, user_app, "requests", "HTTP")
Rel(booking_app, booking_db, "read/write", "JDBC")
Rel(booking_app, email_system, "requests", "HTTP", $tags="async")
Rel(booking_app, video_system, "requests", "HTTP")
Rel(medical_record_app, medical_record_db, "read/write", "JDBC")
Rel(medical_record_app, medical_record_store, "read/write")
@enduml