185 lines
7.4 KiB
Plaintext
185 lines
7.4 KiB
Plaintext
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"]
|
|
}
|