migrated spr stuff
This commit is contained in:
184
atlas/books/amar-arch/01-backend-architecture.dot
Normal file
184
atlas/books/amar-arch/01-backend-architecture.dot
Normal file
@@ -0,0 +1,184 @@
|
||||
digraph BackendArchitecture {
|
||||
// Graph settings
|
||||
rankdir=TB
|
||||
compound=true
|
||||
splines=ortho
|
||||
node [shape=box, style="rounded,filled", fontname="Helvetica", fontsize=11]
|
||||
edge [fontname="Helvetica", fontsize=9]
|
||||
|
||||
// Color scheme
|
||||
// Django Core: #092E20 (dark green)
|
||||
// Mascotas: #4A90D9 (blue)
|
||||
// Productos: #50C878 (green)
|
||||
// Solicitudes: #FF6B6B (coral)
|
||||
// Common: #9B59B6 (purple)
|
||||
// External: #F39C12 (orange)
|
||||
// Payments: #E74C3C (red)
|
||||
|
||||
label="AMAR Mascotas - Backend Architecture (Django)\n\n"
|
||||
labelloc="t"
|
||||
fontsize=16
|
||||
fontname="Helvetica-Bold"
|
||||
|
||||
// Django Core Cluster
|
||||
subgraph cluster_django_core {
|
||||
label="Django Core"
|
||||
style="rounded,filled"
|
||||
fillcolor="#E8F5E9"
|
||||
color="#2E7D32"
|
||||
|
||||
auth_user [label="auth.User\n(Django Auth)", fillcolor="#C8E6C9"]
|
||||
django_admin [label="Django Admin\nInterface", fillcolor="#C8E6C9"]
|
||||
drf [label="Django REST\nFramework", fillcolor="#C8E6C9"]
|
||||
jwt_auth [label="JWT Authentication\n(SimpleJWT)", fillcolor="#C8E6C9"]
|
||||
}
|
||||
|
||||
// Mascotas App Cluster
|
||||
subgraph cluster_mascotas {
|
||||
label="mascotas (Pets & Veterinarians)"
|
||||
style="rounded,filled"
|
||||
fillcolor="#E3F2FD"
|
||||
color="#1565C0"
|
||||
|
||||
petowner [label="PetOwner\n(Cliente/Tutor)", fillcolor="#BBDEFB"]
|
||||
pet [label="Pet\n(Mascota)", fillcolor="#BBDEFB"]
|
||||
veterinarian [label="Veterinarian\n(Profesional)", fillcolor="#BBDEFB"]
|
||||
vetvisit [label="VetVisit\n(Consulta)", fillcolor="#BBDEFB"]
|
||||
vetvisitreport [label="VetVisitReport\n(Informe Clinico)", fillcolor="#BBDEFB"]
|
||||
availability [label="Availability /\nUnavailability", fillcolor="#BBDEFB"]
|
||||
pet_health [label="PetVaccine /\nPetStudy", fillcolor="#BBDEFB"]
|
||||
}
|
||||
|
||||
// Productos App Cluster
|
||||
subgraph cluster_productos {
|
||||
label="productos (Services & Pricing)"
|
||||
style="rounded,filled"
|
||||
fillcolor="#E8F5E9"
|
||||
color="#2E7D32"
|
||||
|
||||
service [label="Service\n(Servicio)", fillcolor="#C8E6C9"]
|
||||
category [label="Category / Group\n(Categorias)", fillcolor="#C8E6C9"]
|
||||
prices [label="Prices\n(Precios)", fillcolor="#C8E6C9"]
|
||||
discounts [label="Discounts\n(Descuentos)", fillcolor="#C8E6C9"]
|
||||
cart [label="Cart / CartItem\n(Carrito)", fillcolor="#C8E6C9"]
|
||||
combo [label="ServiceCombo\n(Paquetes)", fillcolor="#C8E6C9"]
|
||||
}
|
||||
|
||||
// Solicitudes App Cluster
|
||||
subgraph cluster_solicitudes {
|
||||
label="solicitudes (Service Requests)"
|
||||
style="rounded,filled"
|
||||
fillcolor="#FFEBEE"
|
||||
color="#C62828"
|
||||
|
||||
servicerequest [label="ServiceRequest\n(Solicitud)", fillcolor="#FFCDD2"]
|
||||
statehistory [label="StateHistory\n(Historial)", fillcolor="#FFCDD2"]
|
||||
vetasked [label="VeterinarianAsked\n(Vet Consultado)", fillcolor="#FFCDD2"]
|
||||
reminders [label="Reminders\n(Recordatorios)", fillcolor="#FFCDD2"]
|
||||
}
|
||||
|
||||
// Common App Cluster
|
||||
subgraph cluster_common {
|
||||
label="common (Shared Models)"
|
||||
style="rounded,filled"
|
||||
fillcolor="#F3E5F5"
|
||||
color="#7B1FA2"
|
||||
|
||||
campaign [label="Campaign\n(Marketing)", fillcolor="#E1BEE7"]
|
||||
tag [label="Tag\n(Etiquetas)", fillcolor="#E1BEE7"]
|
||||
specialty [label="Specialty\n(Especialidades)", fillcolor="#E1BEE7"]
|
||||
medication [label="Medication\n(Medicamentos)", fillcolor="#E1BEE7"]
|
||||
breed [label="PetBreed / Vaccine\n/ Study", fillcolor="#E1BEE7"]
|
||||
neighborhood [label="Neighborhood /\nProvince / Locality", fillcolor="#E1BEE7"]
|
||||
turnfee [label="IndividualTurnFee\nGroup", fillcolor="#E1BEE7"]
|
||||
}
|
||||
|
||||
// Payments App Cluster
|
||||
subgraph cluster_payments {
|
||||
label="payments (Payment Processing)"
|
||||
style="rounded,filled"
|
||||
fillcolor="#FCE4EC"
|
||||
color="#AD1457"
|
||||
|
||||
mercadopago [label="MercadoPago\nAccount", fillcolor="#F8BBD9"]
|
||||
mpnotification [label="MP Notification\n(Webhooks)", fillcolor="#F8BBD9"]
|
||||
}
|
||||
|
||||
// External Integrations Cluster
|
||||
subgraph cluster_external {
|
||||
label="External Integrations"
|
||||
style="rounded,filled"
|
||||
fillcolor="#FFF3E0"
|
||||
color="#E65100"
|
||||
|
||||
google_cal [label="Google Calendar\n(Agenda)", fillcolor="#FFE0B2"]
|
||||
google_sheets [label="Google Sheets\n(Exports)", fillcolor="#FFE0B2"]
|
||||
mercately [label="Mercately\n(WhatsApp)", fillcolor="#FFE0B2"]
|
||||
afip [label="AFIP\n(Facturacion)", fillcolor="#FFE0B2"]
|
||||
celery [label="Celery\n(Async Tasks)", fillcolor="#FFE0B2"]
|
||||
}
|
||||
|
||||
// AFIP Integration
|
||||
subgraph cluster_afip {
|
||||
label="django_afip (Invoicing)"
|
||||
style="rounded,filled"
|
||||
fillcolor="#FFFDE7"
|
||||
color="#F9A825"
|
||||
|
||||
receipt [label="Receipt\n(Comprobante)", fillcolor="#FFF9C4"]
|
||||
taxpayer [label="TaxPayer\n(Contribuyente)", fillcolor="#FFF9C4"]
|
||||
pos [label="PointOfSales\n(Punto de Venta)", fillcolor="#FFF9C4"]
|
||||
}
|
||||
|
||||
// Relationships - Core
|
||||
auth_user -> petowner [label="1:1 optional", color="#666"]
|
||||
auth_user -> veterinarian [label="1:1", color="#666"]
|
||||
drf -> jwt_auth [style=dashed, color="#999"]
|
||||
|
||||
// Relationships - Mascotas
|
||||
petowner -> pet [label="1:N", color="#1565C0"]
|
||||
petowner -> servicerequest [label="1:N", color="#1565C0"]
|
||||
pet -> vetvisit [label="N:M", color="#1565C0"]
|
||||
pet -> pet_health [label="1:N", color="#1565C0"]
|
||||
veterinarian -> vetvisit [label="1:N", color="#1565C0"]
|
||||
veterinarian -> availability [label="1:N", color="#1565C0"]
|
||||
vetvisit -> vetvisitreport [label="1:N", color="#1565C0"]
|
||||
vetvisit -> servicerequest [label="1:1", style=dashed, color="#1565C0"]
|
||||
|
||||
// Relationships - Productos
|
||||
service -> category [label="N:1", color="#2E7D32"]
|
||||
service -> prices [label="1:N", color="#2E7D32"]
|
||||
service -> discounts [label="1:N", color="#2E7D32"]
|
||||
cart -> petowner [label="N:1", color="#2E7D32"]
|
||||
cart -> veterinarian [label="N:1 optional", color="#2E7D32", style=dashed]
|
||||
service -> cart [label="via CartItem", color="#2E7D32"]
|
||||
combo -> service [label="contains", color="#2E7D32"]
|
||||
|
||||
// Relationships - Solicitudes
|
||||
servicerequest -> cart [label="1:1", color="#C62828"]
|
||||
servicerequest -> statehistory [label="1:N", color="#C62828"]
|
||||
servicerequest -> vetasked [label="1:N", color="#C62828"]
|
||||
vetasked -> reminders [label="1:N", color="#C62828"]
|
||||
veterinarian -> vetasked [label="N:1", color="#C62828"]
|
||||
|
||||
// Relationships - Common
|
||||
petowner -> neighborhood [label="N:1", color="#7B1FA2"]
|
||||
veterinarian -> specialty [label="N:M", color="#7B1FA2"]
|
||||
veterinarian -> neighborhood [label="N:M coverage", color="#7B1FA2"]
|
||||
servicerequest -> campaign [label="N:1 optional", color="#7B1FA2", style=dashed]
|
||||
servicerequest -> tag [label="N:M", color="#7B1FA2"]
|
||||
vetvisitreport -> medication [label="references", color="#7B1FA2", style=dashed]
|
||||
veterinarian -> turnfee [label="N:M", color="#7B1FA2"]
|
||||
|
||||
// Relationships - Payments & External
|
||||
servicerequest -> mercadopago [label="payment", color="#AD1457"]
|
||||
mpnotification -> servicerequest [label="confirms", color="#AD1457"]
|
||||
vetvisit -> google_cal [label="sync", color="#E65100", style=dashed]
|
||||
servicerequest -> mercately [label="notify", color="#E65100", style=dashed]
|
||||
reminders -> celery [label="scheduled", color="#E65100", style=dashed]
|
||||
|
||||
// AFIP relationships
|
||||
vetvisit -> receipt [label="1:1 optional", color="#F9A825", style=dashed]
|
||||
receipt -> taxpayer [label="N:1", color="#F9A825"]
|
||||
receipt -> pos [label="N:1", color="#F9A825"]
|
||||
}
|
||||
Reference in New Issue
Block a user