# juansilv19/proyecto-final-poo architecture

> Architecture diagram of the GitHub repository juansilv19/proyecto-final-poo, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/juansilv19/proyecto-final-poo
- Repository: https://github.com/juansilv19/proyecto-final-poo

## Overview

EpicParqueadero PRO is a Swing parking-management application backed by PostgreSQL. The documented operator workflow starts with login, opens an administrative navigation panel, then manages users, vehicles, rates, and parking entry/exit records; the operational screen also presents active vehicles and daily totals. UI-to-DAO links and database access are grounded in sampled source where available. Navigation and several screens are represented from README claims and the file tree; their unsampled internal wiring is not inferred.

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop interface"]
  node_main["Application entry"]
  node_login["Login screen"]
  node_dashboard["Admin panel"]
  node_users["User management"]
  node_vehicles["Vehicle management"]
  node_rates["Rate management"]
end

subgraph group_parking["Parking operations"]
  node_operations["Operations screen"]
  node_daily_summary["Daily totals"]
end

subgraph group_data["Persistence layer"]
  node_userdao["User DAO"]
  node_vehicledao["Vehicle DAO"]
  node_ratedao["Rate DAO"]
  node_recorddao["Parking record DAO"]
  node_connection["Database connection"]
end

subgraph group_domain["Domain models"]
  node_user_model["User / person"]
  node_vehicle_model["Vehicle"]
  node_rate_model["Rate"]
  node_record_model["Parking record"]
end

node_operator(("Operator"))
node_postgres[("PostgreSQL")]

node_operator -->|"starts app"| node_main
node_main -->|"opens"| node_login
node_operator -->|"enters credentials"| node_login
node_login -->|"validates login"| node_userdao
node_userdao -->|"connects via"| node_connection
node_connection -->|"opens JDBC"| node_postgres
node_login -->|"grants access"| node_dashboard
node_dashboard -->|"opens module"| node_operations
node_dashboard -->|"opens module"| node_users
node_dashboard -->|"opens module"| node_vehicles
node_dashboard -->|"opens module"| node_rates
node_operations -->|"records parking"| node_recorddao
node_operations -->|"looks up vehicles"| node_vehicledao
node_operations -->|"gets rates"| node_ratedao
node_operations -->|"shows totals"| node_daily_summary
node_users -->|"manages users"| node_userdao
node_vehicles -->|"manages vehicles"| node_vehicledao
node_rates -->|"updates rates"| node_ratedao
node_recorddao -->|"connects via"| node_connection
node_vehicledao -->|"connects via"| node_connection
node_ratedao -->|"connects via"| node_connection
node_userdao -->|"reads/writes users"| node_postgres
node_vehicledao -->|"reads/writes vehicles"| node_postgres
node_ratedao -->|"reads/writes rates"| node_postgres
node_recorddao -->|"reads/writes records"| node_postgres
node_recorddao -->|"aggregates exits"| node_daily_summary

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_login,node_dashboard,node_users,node_vehicles,node_rates toneBlue
class node_operations,node_daily_summary,node_postgres toneAmber
class node_userdao,node_vehicledao,node_ratedao,node_recorddao,node_connection toneMint
class node_user_model,node_vehicle_model,node_rate_model,node_record_model toneRose
class node_operator toneIndigo
```

## Components

### Desktop interface

- **Application entry**
- **Login screen**
- **Admin panel**
- **User management**
- **Vehicle management**
- **Rate management**

### Parking operations

- **Operations screen**
- **Daily totals**

### Persistence layer

- **User DAO**
- **Vehicle DAO**
- **Rate DAO**
- **Parking record DAO**
- **Database connection**

### Domain models

- **User / person**
- **Vehicle**
- **Rate**
- **Parking record**

### Other components

- **Operator**
- **PostgreSQL**

## Connections

- Operator → Application entry: starts app
- Application entry → Login screen: opens
- Operator → Login screen: enters credentials
- Login screen → User DAO: validates login
- User DAO → Database connection: connects via
- Database connection → PostgreSQL: opens JDBC
- Login screen → Admin panel: grants access
- Admin panel → Operations screen: opens module
- Admin panel → User management: opens module
- Admin panel → Vehicle management: opens module
- Admin panel → Rate management: opens module
- Operations screen → Parking record DAO: records parking
- Operations screen → Vehicle DAO: looks up vehicles
- Operations screen → Rate DAO: gets rates
- Operations screen → Daily totals: shows totals
- User management → User DAO: manages users
- Vehicle management → Vehicle DAO: manages vehicles
- Rate management → Rate DAO: updates rates
- Parking record DAO → Database connection: connects via
- Vehicle DAO → Database connection: connects via
- Rate DAO → Database connection: connects via
- User DAO → PostgreSQL: reads/writes users
- Vehicle DAO → PostgreSQL: reads/writes vehicles
- Rate DAO → PostgreSQL: reads/writes rates
- Parking record DAO → PostgreSQL: reads/writes records
- Parking record DAO → Daily totals: aggregates exits
