πŸ“ Camadas - ecosif-angular

πŸ“‹ VisΓ£o Geral

Este documento detalha a arquitetura em camadas do ecosif-angular, explicando responsabilidades e interaΓ§Γ΅es entre as camadas.


πŸ—οΈ Camadas da AplicaΓ§Γ£o

1. Camada de ApresentaΓ§Γ£o (Presentation Layer)

Responsabilidades

Componentes

src/app/
β”œβ”€β”€ pages/                    # ~87 componentes de pΓ‘ginas
β”‚   β”œβ”€β”€ login/
β”‚   β”œβ”€β”€ dashboard/
β”‚   β”œβ”€β”€ companydetails/
β”‚   └── ...
β”œβ”€β”€ views/                    # Views lazy-loaded
β”‚   β”œβ”€β”€ dashboard/
β”‚   β”œβ”€β”€ base/
β”‚   └── notifications/
β”œβ”€β”€ containers/               # Layout containers
β”‚   └── default-layout/
└── shared/components/        # Componentes reutilizΓ‘veis

PadrΓ΅es


2. Camada de AplicaΓ§Γ£o (Application Layer)

Responsabilidades

Services

src/app/service/
β”œβ”€β”€ auth.service.ts           # AutenticaΓ§Γ£o
β”œβ”€β”€ company.service.ts        # Empresas
β”œβ”€β”€ chartofaccount.service.ts # Planos de contas
β”œβ”€β”€ entries.service.ts        # LanΓ§amentos
β”œβ”€β”€ balanceinquiry.service.ts # Consultas
β”œβ”€β”€ relatorios.service.ts     # RelatΓ³rios
└── ... (41 services)

PadrΓ΅es


3. Camada de Infraestrutura (Infrastructure Layer)

Responsabilidades

Componentes

src/app/
β”œβ”€β”€ core/
β”‚   β”œβ”€β”€ config/               # AppConfigService
β”‚   β”œβ”€β”€ services/             # Core services
β”‚   └── validators/           # Validadores customizados
β”œβ”€β”€ guard/
β”‚   └── auth.guard.ts         # Route guard
β”œβ”€β”€ interceptor/
β”‚   └── auth.interceptor.ts   # HTTP interceptor
└── custom_exception/         # Exception handling

4. Camada de Dados (Data Layer)

Responsabilidades

Models

src/app/model/
β”œβ”€β”€ user.ts
β”œβ”€β”€ company.detail.ts
β”œβ”€β”€ chartofaccount.ts
β”œβ”€β”€ entries.ts
└── ... (27 models)

πŸ”„ Fluxo de Dados entre Camadas

Exemplo: Buscar Empresas

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  1. Presentation Layer                  β”‚
β”‚     CompanydetailsComponent             β”‚
β”‚     β€’ ngOnInit()                        β”‚
β”‚     β€’ Template chama service            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β”‚ this.companyService.getCompanies()
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  2. Application Layer                   β”‚
β”‚     CompanyService                      β”‚
β”‚     β€’ getCompanies(): Observable        β”‚
β”‚     β€’ Faz requisiΓ§Γ£o HTTP               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β”‚ this.http.get<Company[]>(url)
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  3. Infrastructure Layer                β”‚
β”‚     AuthInterceptor                     β”‚
β”‚     β€’ Adiciona token JWT                β”‚
β”‚     β€’ Adiciona headers                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β”‚ HTTP Request
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  4. Backend Service                     β”‚
β”‚     ecosif-masterdata                   β”‚
β”‚     β€’ Processa requisiΓ§Γ£o               β”‚
β”‚     β€’ Retorna dados                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β”‚ HTTP Response
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  3. Infrastructure Layer (retorno)      β”‚
β”‚     β€’ Interceptor processa response     β”‚
β”‚     β€’ Error handling se necessΓ‘rio      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β”‚ Observable<Company[]>
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  2. Application Layer (retorno)         β”‚
β”‚     CompanyService                      β”‚
β”‚     β€’ Transforma dados se necessΓ‘rio    β”‚
β”‚     β€’ Retorna Observable                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β”‚ Observable<Company[]>
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  1. Presentation Layer (retorno)        β”‚
β”‚     CompanydetailsComponent             β”‚
β”‚     β€’ Atualiza propriedades             β”‚
β”‚     β€’ UI atualiza via bindings          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🎯 Princípios de Separação

Single Responsibility

Cada camada tem uma responsabilidade ΓΊnica:

Dependency Inversion

Camadas superiores dependem de abstraΓ§Γ΅es:

// Component depende de Service (abstraΓ§Γ£o)
constructor(private service: CompanyService) {}

// Service depende de HttpClient (abstraΓ§Γ£o)
constructor(private http: HttpClient) {}

πŸ“Š Resumo de Camadas

Camada Arquivos Responsabilidade Principal
Presentation ~200 componentes UI e interaΓ§Γ£o
Application 41 services LΓ³gica de negΓ³cio
Infrastructure Core + Guards + Interceptors ConfiguraΓ§Γ£o e infraestrutura
Data 27 models Estruturas de dados

Última Atualização: 2025-12-01