# ariludev/serviciosweb architecture

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

- Interactive diagram: https://gitdiagram.com/ariludev/serviciosweb
- Repository: https://github.com/ariludev/serviciosweb

## Overview

#### 1. System purpose and runtime shape
Restaurantito is a JHipster 9.1-generated full-stack application: an Angular single-page application (SPA) is served alongside a Java/Spring Boot backend. The implemented business surface is currently identity, account lifecycle, user administration, authority management, and operational administration; no restaurant-domain entities appear in the tree.

Backend entry points are `src/main/java/com/edosushi/RestaurantitoApp.java` (executable Spring Boot app) and `src/main/java/com/edosushi/ApplicationWebXml.java` (WAR deployment). Frontend boots from `src/main/webapp/main.ts` through `src/main/webapp/bootstrap.ts`.

#### 2. Angular SPA composition
Angular routing and dependency configuration form the client composition root:
- `src/main/webapp/app/app.config.ts`
- `src/main/webapp/app/app.routes.ts`
- `src/main/webapp/app/app.ts`

The SPA is structured around account flows, login, home/layout, admin operational pages, and generated user/authority management pages. Feature routes render within the main layout. Spanish UI translations are present under `src/main/webapp/i18n/es/`; backend messages also support default and Spanish bundles.

#### 3. Client authentication and HTTP boundary
The client authentication layer holds account state, acquires JWTs, and protects routes:
- `src/main/webapp/app/core/auth/account.service.ts`
- `src/main/webapp/app/core/auth/auth-jwt.service.ts`
- `src/main/webapp/app/core/auth/user-route-access.service.ts`

Global HTTP interceptors attach auth, react to expiry, normalize errors, and issue notifications:
- `src/main/webapp/app/core/interceptor/auth.interceptor.ts`
- `src/main/webapp/app/core/interceptor/auth-expired.interceptor.ts`
- `src/main/webapp/app/core/interceptor/error-handler.interceptor.ts`

Primary client flow: route guard → feature service HTTP call → interceptor adds JWT → Spring REST endpoint → response updates UI/account state. The backend’s SPA filter handles browser-side route fallback.

#### 4. REST, account, and administration layer
Spring MVC resources expose the API boundary for authentication, self-service account operations, public users, authorities, and administrator user management:
- `src/main/java/com/edosushi/web/rest/AuthenticateController.java`
- `src/main/java/com/edosushi/web/rest/AccountResource.java`
- `src/main/java/com/edosushi/web/rest/UserResource.java`

Request view models isolate login/managed-user payloads, while centralized exception translation maps failures to HTTP problem responses:
- `src/main/java/com/edosushi/web/rest/vm/LoginVM.java`
- `src/main/java/com/edosushi/web/rest/errors/ExceptionTranslator.java`
- `src/main/java/com/edosushi/web/filter/SpaWebFilter.java`

#### 5. Security and user-domain core
Security is Spring Security with JWT configuration, domain-backed user lookup, authorities, and audit identity:
- `src/main/java/com/edosushi/config/SecurityConfiguration.java`
- `src/main/java/com/edosushi/config/SecurityJwtConfiguration.java`
- `src/main/java/com/edosushi/security/DomainUserDetailsService.java`

The core persisted model is `User` plus `Authority`, with a shared audit base. `UserService` implements registration, activation, password reset/change, and admin user operations; mail delivery supports lifecycle emails:
- `src/main/java/com/edosushi/domain/User.java`
- `src/main/java/com/edosushi/service/UserService.java`
- `src/main/java/com/edosushi/service/MailService.java`

#### 6. Persistence, configuration, and lifecycle
Spring Data repositories persist users and roles. Database schema and seed users/authorities are managed through Liquibase:
- `src/main/java/com/edosushi/repository/UserRepository.java`
- `src/main/resources/config/liquibase/master.xml`
- `src/main/resources/config/liquibase/changelog/00000000000000_initial_schema.xml`

Profile-specific application behavior resides in:
- `src/main/resources/config/application.yml`
- `src/main/resources/config/application-dev.yml`
- `src/main/resources/config/application-prod.yml`

Configuration covers database connectivity, caching, async execution, JSON/Hibernate behavior, logging, static resources, TLS, and security. Mail templates are a backend-to-email-provider boundary under `src/main/resources/templates/mail/`.

#### 7. Build, deployment, and observability
Maven packages the Java service and integrates the Angular build; Angular CLI/esbuild builds the browser bundle. Production can be executable JAR or WAR (`pom.xml`, `angular.json`).

Docker Compose provides PostgreSQL and complete app/service orchestration:
- `src/main/docker/postgresql.yml`
- `src/main/docker/services.yml`
- `src/main/docker/app.yml`

Operational monitoring is provisioned with Prometheus and Grafana, while JHipster Control Center and SonarQube are optional external services:
- `src/main/docker/monitoring.yml`
- `src/main/docker/prometheus/prometheus.yml`
- `src/main/docker/jhipster-control-center.yml`

Main entry points: [`src/main/java/com/edosushi/web/rest/AccountResource.java`](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/web/rest/AccountResource.java) (Auth, account & user API), [`src/main/java/com/edosushi/RestaurantitoApp.java`](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/RestaurantitoApp.java) (Spring Boot application), [`src/main/java/com/edosushi/repository/UserRepository.java`](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/repository/UserRepository.java) (Users & authorities persistence), [`src/main/webapp/app/app.routes.ts`](https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/app/app.routes.ts) (Account, login & admin pages)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Angular SPA"]
  node_spa_boot["SPA bootstrap<br/>Angular entry<br/>[main.ts]"]
  node_spa_composition["App routes &amp; providers<br/>Angular composition<br/>[app.config.ts]"]
  node_spa_features["Account, login &amp; admin pages<br/>Angular features<br/>[app.routes.ts]"]
  node_client_auth["Client auth state<br/>Angular auth<br/>[account.service.ts]"]
  node_route_guard["Route access guard<br/>Angular guard"]
  node_http_interceptors["JWT &amp; error interceptors<br/>HTTP middleware"]
end

subgraph group_api["Spring API"]
  node_spring_app{{"Spring Boot application<br/>Java runtime"}}
  node_spa_fallback["SPA route fallback<br/>Web filter<br/>[SpaWebFilter.java]"]
  node_rest_api["Auth, account &amp; user API<br/>Spring MVC resources"]
  node_api_errors["Problem response translation<br/>Exception handler"]
end

subgraph group_core["Security &amp; Domain"]
  node_security["JWT security configuration<br/>Spring Security"]
  node_user_details["Domain user lookup<br/>UserDetailsService"]
  node_user_service["User lifecycle service<br/>Domain service<br/>[UserService.java]"]
  node_mail_service["Lifecycle mail delivery<br/>Mail service<br/>[MailService.java]"]
  node_user_model["User &amp; authority model<br/>JPA domain<br/>[User.java]"]
end

subgraph group_ops["Data &amp; Operations"]
  node_user_repository["Users &amp; authorities persistence<br/>Spring Data repository"]
  node_liquibase["Schema &amp; seed data<br/>Liquibase migrations<br/>[master.xml]"]
  node_postgres[("PostgreSQL<br/>Database<br/>[postgresql.yml]")]
  node_runtime_config["Profile configuration<br/>Spring configuration<br/>[application.yml]"]
  node_build["Maven + Angular build<br/>Build pipeline<br/>[pom.xml]"]
  node_monitoring["Prometheus &amp; Grafana<br/>Observability stack<br/>[monitoring.yml]"]
end

node_spa_boot -->|"boots"| node_spa_composition
node_spa_composition -->|"configures"| node_spa_features
node_spa_features -->|"protects routes with"| node_route_guard
node_route_guard -->|"checks"| node_client_auth
node_spa_features -->|"API calls pass through"| node_http_interceptors
node_client_auth -->|"supplies JWT"| node_http_interceptors
node_http_interceptors -->|"HTTP / REST"| node_rest_api
node_spring_app -->|"hosts"| node_rest_api
node_spring_app -->|"installs"| node_spa_fallback
node_spa_fallback -.->|"serves SPA fallback"| node_spa_boot
node_rest_api -->|"secured by"| node_security
node_rest_api -->|"account and admin operations"| node_user_service
node_rest_api -->|"failures mapped by"| node_api_errors
node_security -->|"authenticates via"| node_user_details
node_user_details -->|"loads users from"| node_user_repository
node_user_service -->|"persists through"| node_user_repository
node_user_repository -->|"maps"| node_user_model
node_user_repository -->|"reads and writes"| node_postgres
node_user_service -->|"sends lifecycle mail"| node_mail_service
node_liquibase -->|"migrates and seeds"| node_postgres
node_runtime_config -->|"configures"| node_spring_app
node_build -->|"packages"| node_spring_app
node_build -->|"bundles"| node_spa_boot
node_monitoring -.->|"monitors"| node_spring_app

click node_spa_boot "https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/main.ts"
click node_spa_composition "https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/app/app.config.ts"
click node_spa_features "https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/app/app.routes.ts"
click node_client_auth "https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/app/core/auth/account.service.ts"
click node_route_guard "https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/app/core/auth/user-route-access.service.ts"
click node_http_interceptors "https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/app/core/interceptor/auth.interceptor.ts"
click node_spring_app "https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/RestaurantitoApp.java"
click node_spa_fallback "https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/web/filter/SpaWebFilter.java"
click node_rest_api "https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/web/rest/AccountResource.java"
click node_api_errors "https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/web/rest/errors/ExceptionTranslator.java"
click node_security "https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/config/SecurityJwtConfiguration.java"
click node_user_details "https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/security/DomainUserDetailsService.java"
click node_user_service "https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/service/UserService.java"
click node_mail_service "https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/service/MailService.java"
click node_user_repository "https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/repository/UserRepository.java"
click node_user_model "https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/domain/User.java"
click node_liquibase "https://github.com/ariludev/serviciosweb/blob/main/src/main/resources/config/liquibase/master.xml"
click node_postgres "https://github.com/ariludev/serviciosweb/blob/main/src/main/docker/postgresql.yml"
click node_runtime_config "https://github.com/ariludev/serviciosweb/blob/main/src/main/resources/config/application.yml"
click node_build "https://github.com/ariludev/serviciosweb/blob/main/pom.xml"
click node_monitoring "https://github.com/ariludev/serviciosweb/blob/main/src/main/docker/monitoring.yml"

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_spa_boot,node_spa_composition,node_spa_features,node_client_auth,node_route_guard,node_http_interceptors toneBlue
class node_spring_app,node_spa_fallback,node_rest_api,node_api_errors toneAmber
class node_security,node_user_details,node_user_service,node_mail_service,node_user_model toneMint
class node_user_repository,node_liquibase,node_postgres,node_runtime_config,node_build,node_monitoring toneRose
```

## Components

### Angular SPA

- [SPA bootstrap](https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/main.ts): Angular entry · `src/main/webapp/main.ts`
- [App routes & providers](https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/app/app.config.ts): Angular composition · `src/main/webapp/app/app.config.ts`
- [Account, login & admin pages](https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/app/app.routes.ts): Angular features · `src/main/webapp/app/app.routes.ts`
- [Client auth state](https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/app/core/auth/account.service.ts): Angular auth · `src/main/webapp/app/core/auth/account.service.ts`
- [Route access guard](https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/app/core/auth/user-route-access.service.ts): Angular guard · `src/main/webapp/app/core/auth/user-route-access.service.ts`
- [JWT & error interceptors](https://github.com/ariludev/serviciosweb/blob/main/src/main/webapp/app/core/interceptor/auth.interceptor.ts): HTTP middleware · Adds tokens and handles expired or failed API calls. · `src/main/webapp/app/core/interceptor/auth.interceptor.ts`

### Spring API

- [Spring Boot application](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/RestaurantitoApp.java): Java runtime · `src/main/java/com/edosushi/RestaurantitoApp.java`
- [SPA route fallback](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/web/filter/SpaWebFilter.java): Web filter · `src/main/java/com/edosushi/web/filter/SpaWebFilter.java`
- [Auth, account & user API](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/web/rest/AccountResource.java): Spring MVC resources · `src/main/java/com/edosushi/web/rest/AccountResource.java`
- [Problem response translation](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/web/rest/errors/ExceptionTranslator.java): Exception handler · `src/main/java/com/edosushi/web/rest/errors/ExceptionTranslator.java`

### Security & Domain

- [JWT security configuration](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/config/SecurityJwtConfiguration.java): Spring Security · `src/main/java/com/edosushi/config/SecurityJwtConfiguration.java`
- [Domain user lookup](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/security/DomainUserDetailsService.java): UserDetailsService · `src/main/java/com/edosushi/security/DomainUserDetailsService.java`
- [User lifecycle service](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/service/UserService.java): Domain service · Registration, activation, password lifecycle, and admin user operations. · `src/main/java/com/edosushi/service/UserService.java`
- [Lifecycle mail delivery](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/service/MailService.java): Mail service · `src/main/java/com/edosushi/service/MailService.java`
- [User & authority model](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/domain/User.java): JPA domain · `src/main/java/com/edosushi/domain/User.java`

### Data & Operations

- [Users & authorities persistence](https://github.com/ariludev/serviciosweb/blob/main/src/main/java/com/edosushi/repository/UserRepository.java): Spring Data repository · `src/main/java/com/edosushi/repository/UserRepository.java`
- [Schema & seed data](https://github.com/ariludev/serviciosweb/blob/main/src/main/resources/config/liquibase/master.xml): Liquibase migrations · `src/main/resources/config/liquibase/master.xml`
- [PostgreSQL](https://github.com/ariludev/serviciosweb/blob/main/src/main/docker/postgresql.yml): Database · `src/main/docker/postgresql.yml`
- [Profile configuration](https://github.com/ariludev/serviciosweb/blob/main/src/main/resources/config/application.yml): Spring configuration · `src/main/resources/config/application.yml`
- [Maven + Angular build](https://github.com/ariludev/serviciosweb/blob/main/pom.xml): Build pipeline · Packages the backend and browser bundle as JAR or WAR. · `pom.xml`
- [Prometheus & Grafana](https://github.com/ariludev/serviciosweb/blob/main/src/main/docker/monitoring.yml): Observability stack · `src/main/docker/monitoring.yml`

## Connections

- SPA bootstrap → App routes & providers: boots
- App routes & providers → Account, login & admin pages: configures
- Account, login & admin pages → Route access guard: protects routes with
- Route access guard → Client auth state: checks
- Account, login & admin pages → JWT & error interceptors: API calls pass through
- Client auth state → JWT & error interceptors: supplies JWT
- JWT & error interceptors → Auth, account & user API: HTTP / REST
- Spring Boot application → Auth, account & user API: hosts
- Spring Boot application → SPA route fallback: installs
- SPA route fallback → SPA bootstrap: serves SPA fallback
- Auth, account & user API → JWT security configuration: secured by
- Auth, account & user API → User lifecycle service: account and admin operations
- Auth, account & user API → Problem response translation: failures mapped by
- JWT security configuration → Domain user lookup: authenticates via
- Domain user lookup → Users & authorities persistence: loads users from
- User lifecycle service → Users & authorities persistence: persists through
- Users & authorities persistence → User & authority model: maps
- Users & authorities persistence → PostgreSQL: reads and writes
- User lifecycle service → Lifecycle mail delivery: sends lifecycle mail
- Schema & seed data → PostgreSQL: migrates and seeds
- Profile configuration → Spring Boot application: configures
- Maven + Angular build → Spring Boot application: packages
- Maven + Angular build → SPA bootstrap: bundles
- Prometheus & Grafana → Spring Boot application: monitors
