Skip to content

Documentação Técnica

Mario Jorge Pereira edited this page Nov 10, 2024 · 1 revision

Documentação Técnica

Sumário


Arquitetura do Sistema

O Chronos adota uma arquitetura modular baseada nos princípios de Domain-Driven Design (DDD). A aplicação é dividida em diversos Bounded Contexts, cada um responsável por um domínio específico dentro do sistema.

Camadas Principais:

  • Apresentação (Frontend):
    • Interface com o usuário utilizando Thymeleaf para renderização de templates.
  • Aplicação (Backend):
    • Lógica de negócio implementada com Spring Boot.
  • Persistência (Banco de Dados):
    • Armazenamento de dados utilizando JPA/Hibernate.
  • Serviços Externos:
    • Integração com serviços de e-mail, pagamentos e outros.

Diagrama de Arquitetura Geral:

flowchart LR

subgraph Cliente
    Usuário
end

subgraph Servidor
    Controller[Controladores]
    Service[Serviços]
    Repository[Repositórios]
    Domain[Domínio]
    Database[(Banco de Dados)]
end

Usuário --> Controller
Controller --> Service
Service --> Domain
Domain --> Repository
Repository --> Database
Loading

Tecnologias Utilizadas

  • Linguagem de Programação:
    • Java 21 ou superior
  • Frameworks e Bibliotecas:
    • Spring Boot: Framework de integração para criação da aplicação.
    • Spring MVC: Para construção de aplicações web.
    • Thymeleaf: Motor de templates para renderização de páginas HTML.
    • Spring Data JPA: Para acesso e manipulação de dados.
    • Hibernate: Implementação JPA para mapeamento objeto-relacional.
    • Spring Security: Para autenticação e autorização.
    • JUnit 5 e Mockito: Para testes unitários e de integração.
  • Banco de Dados:
    • H2 ou PostgreSQL ou MySQL
  • Ferramentas e Outros:
    • Git e GitHub: Controle de versão e colaboração.
    • Maven: Gerenciamento de dependências e build.
    • GitHub Actions: Integração contínua e deploy.

Estrutura do Projeto

A estrutura do projeto segue as convenções padrão de projetos Spring Boot com Maven:

chronos/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── br/edu/ucsal/chronos/
│   │   │       ├── ChronosApplication.java
│   │   │       ├── usermanagement/            # Contexto de Gestão de Usuários
│   │   │       │   ├── domain/
│   │   │       │   ├── application/
│   │   │       │   ├── infrastructure/
│   │   │       │   └── interface/
│   │   │       ├── eventmanagement/           # Contexto de Gestão de Eventos
│   │   │       │   ├── domain/
│   │   │       │   ├── application/
│   │   │       │   ├── infrastructure/
│   │   │       │   └── interface/
│   │   │       ├── registration/              # Contexto de Inscrições
│   │   │       │   ├── domain/
│   │   │       │   ├── application/
│   │   │       │   ├── infrastructure/
│   │   │       │   └── interface/
│   │   │       ├── payment/                   # Contexto de Pagamentos
│   │   │       │   ├── domain/
│   │   │       │   ├── application/
│   │   │       │   ├── infrastructure/
│   │   │       │   └── interface/
│   │   │       ├── checkin/                   # Contexto de Check-in
│   │   │       ├── certification/             # Contexto de Certificação
│   │   │       ├── communication/             # Contexto de Comunicação
│   │   │       ├── reporting/                 # Contexto de Relatórios
│   │   │       └── shared/                    # Componentes Compartilhados
│   │   │           ├── exceptions/
│   │   │           └── utils/
│   │   └── resources/
│   │       ├── application.properties
│   │       └── templates/
│   │           ├── usermanagement/
│   │           ├── eventmanagement/
│   │           └── (outros templates)
│   └── test/
│       └── java/
│           └── br/edu/universidade/chronos/
│               └── (estrutura de testes espelhando a main)
├── pom.xml
├── README.md
└── (outros arquivos e diretórios)

Diagrama de Arquitetura com Controladores MVC:

flowchart TB

subgraph Aplicação Monolítica

    subgraph UserManagementContext
        direction TB
        UM_Interfaces[Interfaces]
        UM_Application[Application]
        UM_Domain[Domain]
        UM_Infrastructure[Infrastructure]
        UM_Interfaces --> UM_Application
        UM_Application --> UM_Domain
        UM_Domain --> UM_Infrastructure
    end

    subgraph EventManagementContext
        direction TB
        EM_Interfaces[Interfaces]
        EM_Application[Application]
        EM_Domain[Domain]
        EM_Infrastructure[Infrastructure]
        EM_Interfaces --> EM_Application
        EM_Application --> EM_Domain
        EM_Domain --> EM_Infrastructure
    end

    %% Outros Contextos...

end

Usuário --> UM_Interfaces
UM_Interfaces <---> EM_Interfaces
Loading