{"id":48694523,"url":"https://github.com/josivantarcio/api-portfolio","last_synced_at":"2026-04-11T07:04:27.673Z","repository":{"id":326381774,"uuid":"1103831986","full_name":"josivantarcio/api-portfolio","owner":"josivantarcio","description":"Sistema de Gestao de Portifolio","archived":false,"fork":false,"pushed_at":"2025-11-27T18:45:11.000Z","size":1518,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-30T05:29:22.705Z","etag":null,"topics":["java","maven","postgresql","postman","springboot","swagger"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/in/josevanoliveira/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/josivantarcio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-25T11:50:30.000Z","updated_at":"2025-11-27T18:46:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/josivantarcio/api-portfolio","commit_stats":null,"previous_names":["josivantarcio/api-portfolio"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/josivantarcio/api-portfolio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josivantarcio%2Fapi-portfolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josivantarcio%2Fapi-portfolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josivantarcio%2Fapi-portfolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josivantarcio%2Fapi-portfolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/josivantarcio","download_url":"https://codeload.github.com/josivantarcio/api-portfolio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/josivantarcio%2Fapi-portfolio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31671630,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","maven","postgresql","postman","springboot","swagger"],"created_at":"2026-04-11T07:04:26.929Z","updated_at":"2026-04-11T07:04:27.668Z","avatar_url":"https://github.com/josivantarcio.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sistema de Gestão de Portfólio de Projetos\n\n![Java](https://img.shields.io/badge/Java-21-red)\n![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.5.7-brightgreen)\n![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-blue)\n![Coverage](https://img.shields.io/badge/coverage-42%25-orange)\n![Tests](https://img.shields.io/badge/tests-33%2F35%20passing-green)\n\nAPI REST para gerenciamento de portfólio de projetos desenvolvida com Spring Boot 3.5.7, incluindo controle de membros, status, orçamentos e classificação de risco automatizada.\n\n## Índice\n\n- [Sobre o Projeto](#sobre-o-projeto)\n- [Tecnologias Utilizadas](#tecnologias-utilizadas)\n- [Funcionalidades](#funcionalidades)\n- [Arquitetura](#arquitetura)\n- [Pré-requisitos](#pré-requisitos)\n- [Instalação](#instalação)\n- [Configuração](#configuração)\n- [Executando a Aplicação](#executando-a-aplicação)\n- [Executando os Testes](#executando-os-testes)\n- [Documentação da API](#documentação-da-api)\n- [Endpoints](#endpoints)\n- [Regras de Negócio](#regras-de-negócio)\n- [Segurança](#segurança)\n- [Cobertura de Testes](#cobertura-de-testes)\n- [Melhorias Futuras](#melhorias-futuras)\n- [Autor](#autor)\n- [Licença](#licença)\n\n## Sobre o Projeto\n\nSistema backend desenvolvido para gerenciar portfólios de projetos empresariais, permitindo controle completo sobre projetos, membros de equipe, classificação de riscos e transições de status através de máquina de estados.\n\nO projeto implementa princípios de Clean Architecture, segregando responsabilidades em camadas (Controller, Service, Repository), utilizando DTOs para comunicação externa e tratamento global de exceções.\n\n## Tecnologias Utilizadas\n\n- Java 21\n- Spring Boot 3.5.7\n- Spring Data JPA\n- Spring Security (Basic Authentication)\n- PostgreSQL 16\n- H2 Database (ambiente de testes)\n- Lombok\n- Swagger/OpenAPI 3\n- JaCoCo (análise de cobertura)\n- JUnit 5\n- Mockito\n- Maven 3.8+\n\n## Funcionalidades\n\n### Gestão de Projetos\n\n- CRUD completo de projetos\n- Cálculo automático de classificação de risco baseado em orçamento e duração\n- Máquina de estados para controle de status do projeto\n- Validação de transições sequenciais de status\n- Restrições de exclusão baseadas em status\n- Gerenciamento de alocação de membros (1 a 10 membros por projeto)\n- Paginação de resultados\n- Geração de relatório consolidado do portfólio\n\n### Gestão de Membros\n\n- CRUD completo de membros da equipe\n- Tipos de atribuição: FUNCIONARIO, TERCERIZADO, ACIONISTA\n- Validação de limite de 3 projetos ativos simultâneos por membro\n- Integração com API externa para busca de membros\n\n### Recursos Adicionais\n\n- Autenticação via Basic Auth\n- Documentação interativa com Swagger UI\n- Tratamento global de exceções\n- Validação de entrada com Bean Validation\n\n## Arquitetura\n\nO projeto segue uma arquitetura em camadas baseada nos princípios de Clean Architecture:\n\n### Estrutura de Pacotes\n\n**Camada de Apresentação (Controller)**\n- `controller/` - Endpoints REST da API\n- `controller/mock/` - Mock para integração externa\n\n**Camada de Aplicação**\n- `dto/request/` - DTOs de entrada (requisições)\n- `dto/response/` - DTOs de saída (respostas)\n- `mapper/` - Conversores entre Entity e DTO\n\n**Camada de Domínio (Model)**\n- `model/entity/` - Entidades JPA (Projeto, Membro)\n- `model/entity/enums/` - Enumerações do domínio\n\n**Camada de Negócio (Service)**\n- `service/` - Lógica de negócio e validações\n\n**Camada de Persistência (Repository)**\n- `repository/` - Interfaces JPA Repository\n\n**Infraestrutura**\n- `config/` - Configurações (Security, OpenAPI)\n- `exception/` - Exceções customizadas e handlers globais\n\n### Fluxo de Requisição\n\nCliente → Controller → Service → Repository → Database\n↓ ↓\nDTO Entity\n\n### Responsabilidades por Camada\n\n| Camada | Responsabilidade |\n|--------|------------------|\n| **Controller** | Recebe requisições HTTP, valida entrada, retorna respostas |\n| **DTO** | Transferência de dados entre cliente e API |\n| **Mapper** | Conversão bidirecional entre DTO e Entity |\n| **Service** | Regras de negócio, validações, orquestração |\n| **Repository** | Acesso e persistência de dados |\n| **Entity** | Representação do modelo de domínio |\n\n## Pré-requisitos\n\n- Java Development Kit (JDK) 21 ou superior\n- PostgreSQL 16 ou superior\n- Maven 3.8 ou superior\n- Git\n\n## Instalação\n\n### 1. Clone o repositório\n\ngit clone https://github.com/josivantarcio/api-portfolio.git\ncd api-portfolio\n\n### 2. Configure o banco de dados\n\nCrie o banco de dados no PostgreSQL:\n\nCREATE DATABASE db_portfolio;\n\n## Configuração\n\nEdite o arquivo `src/main/resources/application.yml`:\n\nspring:\ndatasource:\nurl: jdbc:postgresql://localhost:5432/db_portfolio\nusername: seu_usuario\npassword: sua_senha\n\njpa:\nhibernate:\nddl-auto: update\nshow-sql: true\n\n## Executando a Aplicação\n\n### Utilizando Maven Wrapper\n\n./mvnw spring-boot:run\n\n### Gerando e executando o JAR\n\n./mvnw clean package\njava -jar target/portfolioApi-0.0.1-SNAPSHOT.jar\n\nA aplicação estará disponível em `http://localhost:8080`\n\n## Executando os Testes\n\n### Executar suite completa de testes\n\n./mvnw test\n\n### Gerar relatório de cobertura JaCoCo\n\n./mvnw jacoco:report\n\nO relatório será gerado em `target/site/jacoco/index.html`\n\n## Documentação da API\n\nA documentação interativa da API está disponível através do Swagger UI:\n\n- **Swagger UI:** http://localhost:8080/swagger-ui.html\n- **OpenAPI JSON:** http://localhost:8080/v3/api-docs\n\nUtilize as credenciais de autenticação para testar os endpoints:\n- Username: `admin`\n- Password: `admin123`\n\n## Endpoints\n\n### Projetos\n\n| Método HTTP | Endpoint | Descrição |\n|-------------|----------|-----------|\n| GET | `/api/projetos` | Lista todos os projetos (paginado) |\n| GET | `/api/projetos/all` | Lista todos os projetos sem paginação |\n| GET | `/api/projetos/{id}` | Busca projeto por ID |\n| POST | `/api/projetos` | Cria novo projeto |\n| PUT | `/api/projetos/{id}` | Atualiza projeto existente |\n| DELETE | `/api/projetos/{id}` | Remove projeto (com validação de status) |\n| PATCH | `/api/projetos/{id}/status` | Altera status do projeto |\n| PATCH | `/api/projetos/{id}/avancar-status` | Avança para próximo status |\n| POST | `/api/projetos/{id}/membros/{membroId}` | Adiciona membro ao projeto |\n| DELETE | `/api/projetos/{id}/membros/{membroId}` | Remove membro do projeto |\n| GET | `/api/projetos/relatorio` | Gera relatório consolidado do portfólio |\n\n### Membros\n\n| Método HTTP | Endpoint | Descrição |\n|-------------|----------|-----------|\n| GET | `/api/membros` | Lista todos os membros |\n| GET | `/api/membros/{id}` | Busca membro por ID |\n| POST | `/api/membros` | Cria novo membro |\n| PUT | `/api/membros/{id}` | Atualiza membro existente |\n| DELETE | `/api/membros/{id}` | Remove membro |\n| GET | `/api/membros/mock` | Busca membros da API externa (mock) |\n\n## Regras de Negócio\n\n### Classificação Automática de Risco\n\nA classificação de risco é calculada automaticamente com base no orçamento total e duração do projeto:\n\n| Classificação | Critério |\n|---------------|----------|\n| BAIXO_RISCO | Orçamento ≤ R$ 100.000,00 E duração ≤ 3 meses |\n| ALTO_RISCO | Orçamento \u003e R$ 500.000,00 OU duração \u003e 6 meses |\n| MEDIO_RISCO | Casos intermediários |\n\n### Máquina de Estados\n\nOs projetos seguem transições sequenciais obrigatórias:\n\nEM_ANALISE → ANALISE_REALIZADA → ANALISE_APROVADA →\nINICIADO → PLANEJADO → EM_ANDAMENTO → ENCERRADO\n└→ CANCELADO\n\n### Restrições de Exclusão\n\nProjetos nos seguintes status não podem ser excluídos:\n- INICIADO\n- EM_ANDAMENTO\n- ENCERRADO\n\n### Alocação de Membros\n\n- Mínimo de 1 membro por projeto\n- Máximo de 10 membros por projeto\n- Cada membro pode estar alocado em no máximo 3 projetos ativos simultaneamente\n- O gerente responsável deve estar entre os membros do projeto\n\n## Segurança\n\nA API utiliza Spring Security com autenticação Basic Auth. Todas as requisições devem incluir credenciais:\n\n**Credenciais padrão:**\n- Username: `admin`\n- Password: `admin123`\n\n**Exemplo de requisição com autenticação:**\n\ncurl -X GET http://localhost:8080/api/projetos\n-u admin:admin123\n-H \"Content-Type: application/json\"\n\n## Cobertura de Testes\n\nA aplicação possui 35 testes automatizados:\n\n- Testes de unidade (Services): 21 testes\n- Testes de integração (Controllers): 13 testes\n- Teste de inicialização (Application): 1 teste\n\n**Cobertura atual:** 42% de cobertura de código\n\n**Distribuição por pacote:**\n- controller: 83%\n- service: 39%\n- model.entity.enums: 68%\n- config: 100%\n\n## Melhorias Futuras\n\n- Implementar autenticação JWT\n- Adicionar cache com Redis\n- Implementar auditoria de alterações\n- Criar endpoints de relatórios avançados\n- Adicionar testes de carga\n- Implementar rate limiting\n- Dockerizar a aplicação\n- Configurar CI/CD pipeline\n- Aumentar cobertura de testes para 70%+\n\n## Autor\n\n**Josevan Oliveira**\n- GitHub: [@josivantarcio](https://github.com/josivantarcio)\n- LinkedIn: [josevanoliveira](https://www.linkedin.com/in/josevanoliveira/)\n\n## Licença\n\nEste projeto foi desenvolvido como parte de um desafio técnico para avaliação de competências em desenvolvimento backend com Spring Boot.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosivantarcio%2Fapi-portfolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjosivantarcio%2Fapi-portfolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjosivantarcio%2Fapi-portfolio/lists"}