Este é o repositório do frontend para a aplicação de gerenciamento de frotas. Esta é uma Single Page Application (SPA) construída com Angular 17+ (usando componentes Standalone) e estilizada com MDBootstrap e NG-Bootstrap.
Este projeto foi projetado para consumir o Backend Spring Boot de Gerenciamento de Frotas e implementa um fluxo de e-commerce completo.
- Fluxo de Autenticação Completo:
- Registro de Usuário (
/register): Permite que novos usuários criem uma conta. - Login (
/login): Consome o endpoint/api/logine armazena o token JWT nolocalStorage.
- Registro de Usuário (
- Interceptor HTTP (
http-interceptor): Anexa automaticamente o token (Authorization: Bearer ...) a todas as requisições HTTP, exceto para login/registro. - Guarda de Rotas (
loginGuard): Utiliza umCanActivateFn(Guarda de Rota) para proteger rotas (como/admine/cart) e redirecionar usuários não autenticados para o login. - Decodificação de Token: O
LoginServicedecodifica o payload do token JWT no login para obterid,usernameeroledo usuário, disponibilizando-os para o resto da aplicação. - Renderização Condicional (RBAC): A interface (especialmente o
MenuComponent) se adapta com base naroledo usuário (ex: "ADMIN" vs "USER"), mostrando ou escondendo links.
- Gerenciamento de Carrinho (
/cart):- Um
CartServicededicado gerencia o estado do carrinho do usuário. - O usuário pode adicionar carros com uma seleção específica de acessórios ao carrinho.
- A tela do carrinho (
CartslistComponent) permite ao usuário revisar, atualizar ou remover itens antes de prosseguir.
- Um
- Fluxo de Checkout (
/checkout):- Componente dedicado (
CheckoutsdetailsComponent) para finalizar o pedido. - Coleta de dados de pagamento (simulados) através do
PaymentRequestDTO. - O
OrderServiceé chamado para orquestrar o checkout no backend (que por sua vez cria oOrder, processa oPaymente limpa oCart).
- Componente dedicado (
- Interface CRUD com Modais: Todos os CRUDs de gerenciamento (Carros, Marcas, Acessórios) são gerenciados em uma única página. As listas (
...list) abrem os componentes de detalhes (...details) dentro de um modal MDBootstrap para criar ou editar registros. - Seleção de Relacionamento (Modal-em-Modal): O formulário
carsdetails(para criar/editar um carro) abre seus próprios modais para carregar as listas de marcas e acessórios, permitindo que o usuário "selecione" um relacionamento. - Busca "As-you-type": Barras de busca nas listas disparam eventos
(keyup)para filtrar os resultados em tempo real. - Paginação: A lista de acessórios (
AcessorieslistComponent) usangb-paginationpara paginar os resultados do backend. - Notificações: Utiliza
SweetAlert2para notificações amigáveis de sucesso e erro.
- Angular 17+ (Componentes Standalone)
- TypeScript
- MDBootstrap para Angular: Componentes de UI (Modais, Formulários, Botões).
- NG-Bootstrap: Usado especificamente para o componente de Paginação.
- SweetAlert2: Para notificações (Alerts).
- jwt-decode: Para extrair o payload do token JWT no frontend.
Este frontend não funciona sozinho. Ele foi construído para se comunicar com a API Spring Boot em http://localhost:8080.
- Serviços: Cada entidade/fluxo tem seu próprio
ServiceAngular que usaHttpClientpara as chamadas de API (ex:CarService,BrandService,AcessoryService,CartService,OrderService,UserService). - Modelos e DTOs: O frontend possui
models(ex:car.ts,cart.ts) edto(ex:cart-item-request.dto.ts) que espelham as entidades do backend. - Tratamento de Erros: O
http-interceptorcentraliza o tratamento de erros HTTP, como401(Não Autorizado) e403(Proibido), redirecionando o usuário para o login caso seu token expire ou seja inválido.
- Clone o repositório.
- Instale as dependências:
npm install
- Execute o servidor de desenvolvimento:
ng s
- Acesse
http://localhost:4200no seu navegador.
A aplicação é modularizada da seguinte forma:
app/auth: Lógica de autenticação (Service, Guard, Interceptor) e modelos de dados (Login, Usuario).app/models: Interfaces que espelham as entidades do backend (ex:car.ts,cart.ts,order.ts).app/services: Injeção deHttpClientpara comunicação com a API (ex:car.service.ts,cart.service.ts).app/components/layout:LoginComponent: A tela de login.RegisterComponent: A tela de registro de usuário.PrincipalComponent: O layout principal da aplicação (pós-login) que contém oMenuComponente o<router-outlet>.
app/components/admin(ou similar, contendo os CRUDs):CarslistComponent/CarsdetailsComponentBrandslistComponent/BrandsdetailsComponentAcessorieslistComponent/AcessoriesdetailsComponent
app/components/shop(ou similar, contendo o fluxo de compra):CartslistComponent/CartsdetailsComponent: O carrinho de compras.CheckoutsdetailsComponent: O formulário de pagamento e finalização do pedido.