CertificateManagement is a full-stack web application designed for dynamic certificate generation and management. The system allows users to create personalized certificates, list them, and download the final image. A key feature is the session management system that provides a personalized experience without requiring user authentication, associating generated certificates with a unique browser session.
-
Backend:
- .NET 8 / C# 💻 — Core platform for the API
- ASP.NET Core 🌐 — Framework for building the REST API
- MongoDB 🍃 — NoSQL database for storing certificate data
- MassTransit 🚌 — Abstraction for message-based communication
- RabbitMQ 🐇 — Message broker for asynchronous tasks
- AutoMapper 🔄 — For object-to-object mapping (Entities to DTOs)
-
Frontend:
- Angular
🅰️ — Framework for building the client-side user interface - TypeScript ⌨️ — Main language for the frontend
- HTML & SCSS 🎨 — For structuring and styling the application
- PrimeNG ✨ — UI component library for Angular
- Angular
The project is structured following modern software design principles, separating backend and frontend responsibilities.
The API follows the Clean Architecture principles, separating concerns into distinct layers:
- Domain: Contains the core business logic and entities (e.g.,
CertificateEntity), with no external dependencies. - Application: Orchestrates the data flow and implements use cases (services), depending only on the Domain layer.
- Infrastructure: Handles external concerns like database access (MongoDB repository implementation), messaging, and file storage.
- API: The entry point of the application, responsible for exposing the REST endpoints and handling HTTP requests/responses. It connects all other layers through Dependency Injection.
The frontend is built with Angular, following its standard architecture:
- Components: Reusable UI blocks with their own logic and templates (e.g., certificate list, creation form).
- Services: Encapsulate business logic, such as API communication (
CertificateService) and session management (SessionService). localStorage: Used to persist a unique session ID, allowing for a "login-less" user experience.
-
Prerequisites:
- .NET 8 SDK
- A running instance of MongoDB
- A running instance of RabbitMQ (can be run with Docker)
-
Clone the repository:
git clone https://github.com/IagoAntunes/CertificateManagement.git
-
Configure the backend:
- Navigate to the
src/CertificateManagement.APIdirectory. - Update the
appsettings.jsonfile with your connection strings for MongoDB and RabbitMQ.
- Navigate to the
-
Run the API:
cd src/CertificateManagement.API dotnet restore dotnet runThe API will be available at
https://localhost:7015.
-
Prerequisites:
- Node.js and npm (LTS version recommended)
- Angular CLI:
npm install -g @angular/cli
-
Navigate to the frontend folder:
cd src/CertificateManagement.Web -
Install dependencies:
npm install
-
Run the application:
ng serve
The application will be available at
http://localhost:4200.
CertificateManagement é uma aplicação web full-stack para geração e gestão dinâmica de certificados. O sistema permite que os usuários criem certificados personalizados, listem-nos e façam o download da imagem final. Uma funcionalidade chave é o sistema de sessão que oferece uma experiência personalizada sem exigir autenticação do usuário, associando os certificados gerados a uma sessão única do navegador.
-
Backend:
- .NET 8 / C# 💻 — Plataforma principal da API
- ASP.NET Core 🌐 — Framework para construção da REST API
- MongoDB 🍃 — Banco de dados NoSQL para armazenar os dados dos certificados
- MassTransit 🚌 — Abstração para comunicação baseada em mensagens
- RabbitMQ 🐇 — Message broker para tarefas assíncronas
- AutoMapper 🔄 — Para mapeamento de objetos (Entidades para DTOs)
-
Frontend:
- Angular
🅰️ — Framework para construção da interface do cliente - TypeScript ⌨️ — Linguagem principal do frontend
- HTML & SCSS 🎨 — Para estruturação e estilização da aplicação
- PrimeNG ✨ — Biblioteca de componentes de UI para Angular
- Angular
O projeto é estruturado seguindo princípios modernos de design de software, separando as responsabilidades de backend e frontend.
A API segue os princípios da Clean Architecture, dividindo as responsabilidades em camadas distintas:
- Domain: Contém a lógica de negócio principal e as entidades (ex:
CertificateEntity), sem dependências externas. - Application: Orquestra o fluxo de dados e implementa os casos de uso (serviços), dependendo apenas da camada de Domínio.
- Infrastructure: Lida com preocupações externas, como acesso ao banco de dados (implementação do repositório MongoDB), mensageria e armazenamento de arquivos.
- API: Ponto de entrada da aplicação, responsável por expor os endpoints REST e lidar com requisições/respostas HTTP. Conecta todas as outras camadas através de Injeção de Dependência.
O frontend é construído com Angular, seguindo sua arquitetura padrão:
- Components: Blocos de UI reutilizáveis com sua própria lógica e templates (ex: lista de certificados, formulário de criação).
- Services: Encapsulam a lógica de negócio, como a comunicação com a API (
CertificateService) e o gerenciamento de sessão (SessionService). localStorage: Utilizado para persistir um ID de sessão único, permitindo uma experiência de usuário "sem login".
-
Pré-requisitos:
- .NET 8 SDK
- Uma instância do MongoDB em execução
- Uma instância do RabbitMQ em execução (pode ser via Docker)
-
Clone o repositório:
git clone https://github.com/IagoAntunes/CertificateManagement.git
-
Configure o backend:
- Navegue até o diretório
src/CertificateManagement.API. - Atualize o arquivo
appsettings.jsoncom suas connection strings para o MongoDB e RabbitMQ.
- Navegue até o diretório
-
Execute a API:
cd src/CertificateManagement.API dotnet restore dotnet runA API estará disponível em
https://localhost:7015.
-
Pré-requisitos:
- Node.js e npm (versão LTS recomendada)
- Angular CLI:
npm install -g @angular/cli
-
Navegue até a pasta do frontend:
cd src/CertificateManagement.Web -
Instale as dependências:
npm install
-
Execute a aplicação:
ng serve
A aplicação estará disponível em
http://localhost:4200.