# leandrosnazareth/pdv-app architecture

> Architecture diagram of the GitHub repository leandrosnazareth/pdv-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/leandrosnazareth/pdv-app
- Repository: https://github.com/leandrosnazareth/pdv-app

## Overview

PDV Web is an Angular point-of-sale application for small retailers, with a separate REST API documented as a companion project. Users authenticate, manage products, build a checkout from active products, confirm payment, and review sales; a dashboard summarizes sales and product counts. The graph shows the documented UI routes and sampled component-to-service calls. The API implementation is outside this repository, and unsampled login, payment, and authorization wiring is not inferred.

Main entry points: [`src/app/app-routing.module.ts`](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/app-routing.module.ts) (Route configuration), [`src/app/page/sale/sale.component.ts`](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/sale/sale.component.ts) (Point of sale), [`src/app/service/product.service.ts`](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/product.service.ts) (Product API client), [`src/app/service/sale.service.ts`](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/sale.service.ts) (Sale API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_shell["App shell"]
  node_app["Application shell<br/>[app.component.ts]"]
  node_routes["Route configuration"]
  node_sidebar["Dashboard navigation"]
  node_toggle["Sidebar toggle"]
end

subgraph group_auth["Authentication"]
  node_login["Login screen<br/>[login.component.ts]"]
  node_guard["Route guard<br/>[guardiao.guard.ts]"]
  node_loginservice["Login service<br/>[login.service.ts]"]
  node_interceptor["Token interceptor"]
end

subgraph group_catalog["Products"]
  node_productpage["Product management"]
  node_productmodel["Product model<br/>[product.ts]"]
  node_productservice["Product API client<br/>[product.service.ts]"]
end

subgraph group_sales["Sales and reporting"]
  node_home["Dashboard<br/>[home.component.ts]"]
  node_salepage["Point of sale<br/>[sale.component.ts]"]
  node_saledialog["Payment confirmation"]
  node_salemodel["Sale model<br/>[sale.ts]"]
  node_saleservice["Sale API client<br/>[sale.service.ts]"]
  node_saleslist["Sales history"]
  node_paymentservice["Payment service<br/>[payment.service.ts]"]
end

node_retailer(("Retail operator"))
node_backend["Companion REST API"]

node_retailer -->|"uses"| node_app
node_app -->|"navigates via"| node_routes
node_routes -->|"routes to"| node_home
node_routes -->|"routes to"| node_productpage
node_routes -->|"routes to"| node_salepage
node_routes -->|"routes to"| node_saleslist
node_routes -->|"routes to"| node_login
node_routes -->|"guards routes"| node_guard
node_app -->|"redirects unauthenticated"| node_login
node_sidebar -.->|"navigates"| node_routes
node_sidebar -.->|"uses"| node_toggle
node_home -->|"requests summaries"| node_saleservice
node_home -->|"requests counts"| node_productservice
node_productpage -->|"manages products"| node_productservice
node_productpage -->|"creates"| node_productmodel
node_productservice -->|"sends REST requests"| node_backend
node_salepage -->|"looks up active products"| node_productservice
node_salepage -->|"opens for payment"| node_saledialog
node_salepage -->|"constructs sale"| node_salemodel
node_salepage -->|"submits sale"| node_saleservice
node_saleslist -->|"lists and deletes"| node_saleservice
node_saleslist -->|"displays sales"| node_salemodel
node_saleservice -->|"sends REST requests"| node_backend
node_login -.->|"authenticates"| node_loginservice
node_loginservice -.->|"calls API"| node_backend
node_interceptor -.->|"adds bearer token"| node_backend

click node_app "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/app.component.ts"
click node_routes "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/app-routing.module.ts"
click node_sidebar "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/dashboard/sidebar/sidebar.component.ts"
click node_toggle "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/dashboard/sidebar/toggle.directive.ts"
click node_login "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/login/login.component.ts"
click node_guard "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/guardiao.guard.ts"
click node_loginservice "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/login.service.ts"
click node_interceptor "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/headerInterceptor.service.ts"
click node_home "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/home/home.component.ts"
click node_productpage "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/product/product.component.ts"
click node_productmodel "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/product/product.ts"
click node_productservice "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/product.service.ts"
click node_salepage "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/sale/sale.component.ts"
click node_saledialog "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/sale-dialog/sale-dialog.component.ts"
click node_salemodel "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/sale/sale.ts"
click node_saleservice "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/sale.service.ts"
click node_saleslist "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/sales-list/sales-list.component.ts"
click node_paymentservice "https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/payment.service.ts"

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_app,node_routes,node_sidebar,node_toggle toneBlue
class node_login,node_guard,node_loginservice,node_interceptor toneAmber
class node_productpage,node_productmodel,node_productservice,node_backend toneMint
class node_home,node_salepage,node_saledialog,node_salemodel,node_saleservice,node_saleslist,node_paymentservice toneRose
class node_retailer toneIndigo
```

## Components

### App shell

- [Application shell](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/app.component.ts): `src/app/app.component.ts`
- [Route configuration](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/app-routing.module.ts): `src/app/app-routing.module.ts`
- [Dashboard navigation](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/dashboard/sidebar/sidebar.component.ts): `src/app/dashboard/sidebar/sidebar.component.ts`
- [Sidebar toggle](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/dashboard/sidebar/toggle.directive.ts): `src/app/dashboard/sidebar/toggle.directive.ts`

### Authentication

- [Login screen](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/login/login.component.ts): `src/app/page/login/login.component.ts`
- [Route guard](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/guardiao.guard.ts): `src/app/service/guardiao.guard.ts`
- [Login service](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/login.service.ts): `src/app/service/login.service.ts`
- [Token interceptor](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/headerInterceptor.service.ts): `src/app/service/headerInterceptor.service.ts`

### Products

- [Product management](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/product/product.component.ts): `src/app/page/product/product.component.ts`
- [Product model](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/product/product.ts): `src/app/page/product/product.ts`
- [Product API client](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/product.service.ts): `src/app/service/product.service.ts`

### Sales and reporting

- [Dashboard](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/home/home.component.ts): `src/app/page/home/home.component.ts`
- [Point of sale](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/sale/sale.component.ts): `src/app/page/sale/sale.component.ts`
- [Payment confirmation](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/sale-dialog/sale-dialog.component.ts): `src/app/page/sale-dialog/sale-dialog.component.ts`
- [Sale model](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/sale/sale.ts): `src/app/page/sale/sale.ts`
- [Sale API client](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/sale.service.ts): `src/app/service/sale.service.ts`
- [Sales history](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/page/sales-list/sales-list.component.ts): `src/app/page/sales-list/sales-list.component.ts`
- [Payment service](https://github.com/leandrosnazareth/pdv-app/blob/master/src/app/service/payment.service.ts): `src/app/service/payment.service.ts`

### Other components

- **Retail operator**
- **Companion REST API**

## Connections

- Retail operator → Application shell: uses
- Application shell → Route configuration: navigates via (evidence: `src/app/app.component.ts`)
- Route configuration → Dashboard: routes to (evidence: `src/app/app-routing.module.ts`)
- Route configuration → Product management: routes to (evidence: `src/app/app-routing.module.ts`)
- Route configuration → Point of sale: routes to (evidence: `src/app/app-routing.module.ts`)
- Route configuration → Sales history: routes to (evidence: `src/app/app-routing.module.ts`)
- Route configuration → Login screen: routes to (evidence: `src/app/app-routing.module.ts`)
- Route configuration → Route guard: guards routes (evidence: `src/app/app-routing.module.ts`)
- Application shell → Login screen: redirects unauthenticated (evidence: `src/app/app.component.ts`)
- Dashboard navigation → Route configuration: navigates
- Dashboard navigation → Sidebar toggle: uses
- Dashboard → Sale API client: requests summaries (evidence: `src/app/page/home/home.component.ts`)
- Dashboard → Product API client: requests counts (evidence: `src/app/page/home/home.component.ts`)
- Product management → Product API client: manages products (evidence: `src/app/page/product/product.component.ts`)
- Product management → Product model: creates (evidence: `src/app/page/product/product.component.ts`)
- Product API client → Companion REST API: sends REST requests (evidence: `src/app/service/product.service.ts`)
- Point of sale → Product API client: looks up active products (evidence: `src/app/page/sale/sale.component.ts`)
- Point of sale → Payment confirmation: opens for payment (evidence: `src/app/page/sale/sale.component.ts`)
- Point of sale → Sale model: constructs sale (evidence: `src/app/page/sale/sale.component.ts`)
- Point of sale → Sale API client: submits sale (evidence: `src/app/page/sale/sale.component.ts`)
- Sales history → Sale API client: lists and deletes (evidence: `src/app/page/sales-list/sales-list.component.ts`)
- Sales history → Sale model: displays sales (evidence: `src/app/page/sales-list/sales-list.component.ts`)
- Sale API client → Companion REST API: sends REST requests (evidence: `src/app/service/sale.service.ts`)
- Login screen → Login service: authenticates
- Login service → Companion REST API: calls API
- Token interceptor → Companion REST API: adds bearer token
