{"id":22100622,"url":"https://github.com/pereirar3/teste-nuti","last_synced_at":"2025-03-24T02:15:31.999Z","repository":{"id":256293327,"uuid":"850293752","full_name":"pereiraR3/Teste-NUTI","owner":"pereiraR3","description":"Desafio de FrontEnd + BackEnd da NUTI (Núcleo de Tecnologia da Informação )","archived":false,"fork":false,"pushed_at":"2024-09-10T17:12:42.000Z","size":2747,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-05T08:51:43.108Z","etag":null,"topics":["backend","frontend","java","javascript","react","render","spring-boot","vercel-deployment"],"latest_commit_sha":null,"homepage":"https://teste-nuti.vercel.app","language":"JavaScript","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/pereiraR3.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}},"created_at":"2024-08-31T11:37:43.000Z","updated_at":"2024-09-09T23:08:10.000Z","dependencies_parsed_at":"2024-09-10T03:08:25.552Z","dependency_job_id":"8b3de656-bcc8-4bde-9161-2f7dc769f9bc","html_url":"https://github.com/pereiraR3/Teste-NUTI","commit_stats":null,"previous_names":["pereirar3/teste-nuti"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pereiraR3%2FTeste-NUTI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pereiraR3%2FTeste-NUTI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pereiraR3%2FTeste-NUTI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pereiraR3%2FTeste-NUTI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pereiraR3","download_url":"https://codeload.github.com/pereiraR3/Teste-NUTI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245195965,"owners_count":20575937,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["backend","frontend","java","javascript","react","render","spring-boot","vercel-deployment"],"created_at":"2024-12-01T05:15:11.013Z","updated_at":"2025-03-24T02:15:31.976Z","avatar_url":"https://github.com/pereiraR3.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Deploy da Aplicação\n\n## Ferramentas Utilizadas\n\n- **Render**:\n  - **Banco de Dados PostgreSQL**: Configuração e gerenciamento de uma instância do PostgreSQL, oferecendo um banco de dados robusto e escalável para armazenar e gerenciar dados da aplicação.\n  - **WebService para API**: Criação de uma instância dedicada para hospedar e executar a API, garantindo alta disponibilidade e performance para as requisições do backend.\n\n- **Vercel**:\n  - **Deploy do Frontend**: Implementação do projeto frontend desenvolvido com Vite e React, utilizando o ambiente de hospedagem da Vercel, que é otimizado para projetos JavaScript modernos. Com suporte integrado para CI/CD, a Vercel automatiza o processo de deploy, facilitando a entrega contínua e atualizações rápidas da aplicação.\n\n## Links\n\n- **Frontend:**\n  - [https://teste-nuti.vercel.app/](https://teste-nuti.vercel.app/)\n\n- **Backend:**\n  - [https://backend-nuti.onrender.com/](https://backend-nuti.onrender.com/)\n\n\n# Requisitos Funcionais - Obrigatórios\n\n1. **Consumo da API do PNCP**:\n   - Implementar a funcionalidade que consome a API REST do Portal Nacional de Contratações Públicas (PNCP) para obter informações sobre contratos.\n   - A busca deve ser realizada utilizando o CNPJ de um órgão público e um intervalo de datas (data inicial e final).\n\n2. **Exibição das Informações do Órgão**:\n   - Exibir na página web as informações detalhadas do órgão público associado ao CNPJ fornecido.\n   \n3. **Listagem de Contratos**:\n   - Listar todos os contratos do órgão que possuem a data de início de vigência dentro do período especificado.\n   - Para cada contrato listado, devem ser exibidos os seguintes detalhes:\n     - Data de vigência inicial.\n     - Data de vigência final.\n     - Razão social do fornecedor.\n     - Objeto do contrato.\n     - Valor inicial do contrato.\n\n4. **Cálculo e Exibição do Valor Total**:\n   - Calcular e exibir o valor total somado de todos os contratos obtidos dentro do período especificado.\n\n5. **Armazenamento em Banco de Dados**:\n   - Inserir todas as informações coletadas dos contratos e do órgão em um banco de dados para posterior consulta.\n\n6. **Documentação e Comentários**:\n   - Comentar o código-fonte de forma a garantir uma fácil compreensão por parte dos avaliadores.\n\n7. **Entrega e Envio**:\n   - Enviar o código desenvolvido junto com screenshots da aplicação para o e-mail especificado até a data limite de 02/09/2024.\n\n# Requisitos Não Funcionais\n\nEste projeto foi desenvolvido utilizando tecnologias modernas e ferramentas robustas, tanto no Front-End quanto no Back-End, visando garantir desempenho, escalabilidade e facilidade de manutenção.\n\n## Front-End\n\nPara o desenvolvimento do Front-End, foram utilizadas as seguintes tecnologias:\n\n- **Linguagem de Programação**:\n  - **JavaScript**: A linguagem principal para o desenvolvimento das funcionalidades dinâmicas da interface.\n\n- **Linguagens de Marcação e Estilo**:\n  - **HTML5**: Para a estruturação semântica do conteúdo das páginas.\n  - **CSS3**: Para a estilização visual e responsividade da interface.\n\n- **Frameworks**:\n  - **Vite + ReactJS**: Utilizado para construir uma aplicação modular, rápida e eficiente. Vite oferece um ambiente de desenvolvimento ágil, enquanto ReactJS possibilita a criação de componentes reutilizáveis e a construção de interfaces de usuário interativas.\n\n## Back-End\n\nO Back-End foi desenvolvido utilizando tecnologias robustas que permitem a construção de uma API segura e escalável:\n\n- **Linguagem de Programação**:\n  - **Java**: Linguagem amplamente utilizada para o desenvolvimento de aplicações corporativas, conhecida por sua robustez e capacidade de escalabilidade.\n\n- **Frameworks**:\n  - **Spring Boot**: Framework que facilita o desenvolvimento de aplicações Java, proporcionando um ambiente simplificado para a configuração e implementação de APIs RESTful, além de oferecer suporte a diversas funcionalidades, como segurança e persistência de dados.\n\n## Banco de Dados\n\nA estrutura do banco de dados foi cuidadosamente planejada e implementada utilizando ferramentas e tecnologias amplamente reconhecidas na indústria. O processo de desenvolvimento envolveu várias etapas, desde a concepção inicial até a implementação final, garantindo uma modelagem consistente e eficiente.\n\n- **Miro**:\n  - Ferramenta colaborativa utilizada para criar o DER (Diagrama Entidade-Relacionamento). Essa etapa visual foi fundamental para entender e planejar as interações entre as diferentes entidades do sistema.\n  \n- **Dbdiagram.io**:\n  - Plataforma especializada na criação de diagramas de banco de dados, usada para desenvolver a modelagem lógica. Através dessa ferramenta, foi possível transformar o DER em um esquema lógico detalhado, representando tabelas, colunas, tipos de dados e chaves.\n\n- **PostgreSQL**:\n  - SGBD (Sistema Gerenciador de Banco de Dados) escolhido para a modelagem física. A escolha pelo PostgreSQL se deve à sua robustez, escalabilidade e suporte a recursos avançados, que garantem uma execução eficiente e segura do banco de dados em ambientes de produção.\n\n# Sobre o Projeto Front-End\n\n\n## Funcionalidades Principais\n\n- **Consulta de Contratos Públicos:** Permite ao usuário visualizar e gerenciar contratos públicos com base no CNPJ do órgão e um período específico.\n- **Pesquisa Eficiente:** Possui uma seção dedicada explicando como realizar pesquisas de forma eficiente, incluindo validações de período e CNPJ.\n- **Responsividade Completa:** Layout adaptado para diferentes tamanhos de tela, garantindo uma navegação suave em dispositivos móveis e desktops.\n- **Navegação Simples e Intuitiva:** Menus de navegação tanto para desktop quanto para mobile, com suporte a rolagem suave para seções específicas da página.\n- **Modal de Avisos:** Modais dinâmicos para exibir avisos e informações adicionais importantes aos usuários.\n\n## Tecnologias Utilizadas\n\n- **React:** Biblioteca JavaScript para construção da interface de usuário.\n- **Tailwind CSS:** Framework CSS utilitário para estilização rápida e responsiva.\n- **React Router:** Para navegação entre as páginas do aplicativo.\n- **React Icons:** Para inclusão de ícones modernos e personalizáveis.\n- **Vite:** Ferramenta de build que proporciona um ambiente de desenvolvimento rápido e eficiente.\n\n## Instruções para Executar o Projeto\n\n1. **Clone o repositório:**\n  ```bash\n   git clone https://github.com/seu-usuario/web-react-pncp.git\n  ```\n\n2. **Instale as dependências:**\n  ```bash\n    npm install\n  ```\n\n3. **Execute o projeto:**\n  ```bash\n    npm run dev\n  ```\n\n4. **Acesse o aplicativo no navegador:**\n  ```bash\n    http://localhost:5173\n  ```\n\n## Funcionalidades Principais\n\n- **Consulta de Contratos Públicos:** Permite ao usuário visualizar e gerenciar contratos públicos com base no CNPJ do órgão e um período específico.\n- **Pesquisa Eficiente:** Possui uma seção dedicada explicando como realizar pesquisas de forma eficiente, incluindo validações de período e CNPJ.\n- **Responsividade Completa:** Layout adaptado para diferentes tamanhos de tela, garantindo uma navegação suave em dispositivos móveis e desktops.\n- **Navegação Simples e Intuitiva:** Menus de navegação tanto para desktop quanto para mobile, com suporte a rolagem suave para seções específicas da página.\n- **Modal de Avisos:** Modais dinâmicos para exibir avisos e informações adicionais importantes aos usuários.\n\n## Tecnologias Utilizadas\n\n- **React:** Biblioteca JavaScript para construção da interface de usuário.\n- **Tailwind CSS:** Framework CSS utilitário para estilização rápida e responsiva.\n- **React Router:** Para navegação entre as páginas do aplicativo.\n- **React Icons:** Para inclusão de ícones modernos e personalizáveis.\n- **Vite:** Ferramenta de build que proporciona um ambiente de desenvolvimento rápido e eficiente.\n\n## Instruções para Executar o Projeto\n\n1. **Clone o repositório:**\n  ```bash\n  git clone https://github.com/seu-usuario/web-react-pncp.git\n  ```\n\n2. **Instale as dependências:**\n\n  ```bash\n  npm install\n  ```\n\n3. **Execute o projeto:**\n\n  ```bash\n  npm run dev\n  ```\n\n4. **Acesse o aplicativo no navegador:**\n\n  ```bash\n  http://localhost:5173 \n  ```\n\n## Visual do Website\n\n### Visual Desktop\n\nAqui estão algumas capturas de tela do website:\n\n#### Parte 1:\n![Página 1](fotos_app/desktop/web01.png)\n\n#### Parte 2:\n![Página 2](fotos_app/desktop/web02.png)\n\n#### Parte 3:\n![Página 3](fotos_app/desktop/web03.png)\n\n#### Parte 4:\n![Página 4](fotos_app/desktop/web04.png)\n\n#### Parte 5:\n![Página 5](fotos_app/desktop/web05.png)\n\n#### Parte 6:\n![Página 6](fotos_app/desktop/web06.png)\n\n### Visual Mobile\n\nAqui estão algumas capturas de tela do website:\n\n#### Parte 1:\n![Página 1](fotos_app/mobile/mobile01.png)\n\n#### Parte 2:\n![Página 2](fotos_app/mobile/mobile02.png)\n\n#### Parte 3:\n![Página 3](fotos_app/mobile/mobile03.png)\n\n#### Parte 4:\n![Página 4](fotos_app/mobile/mobile04.png)\n\n#### Parte 5:\n![Página 5](fotos_app/mobile/mobile05.png)\n\n# Sobre o Projeto Back-End\nAbaixo está tudo relativo ao Back-End da aplicação, que foi feito para implementar a parte de persistência de dados do teste prático.\n\n# Sobre Banco de Dados\n\n## Modelagem Conceitual\n\n### DER (Diagrama Entidade-Relacionamento)\n![Diagrama de Entidade-Relacionamento](./info_db/der/der.jpg)\n\n#### Dicionário de Entidades e Relacionamentos\n\nAbaixo estão detalhadas as informações sobre as entidades do sistema e seus relacionamentos, facilitando o entendimento da modelagem de dados.\n\n- **Órgão**: Representa os órgãos cadastrados no sistema, cada um identificado por um CNPJ único, além de possuir outros atributos como razão social, nome da unidade, entre outros.\n- **Contrato**: Armazena as informações dos contratos vinculados a cada órgão. Cada contrato inclui detalhes como datas de vigência, valor inicial, razão social do fornecedor, e descrição do objeto do contrato.\n\n#### Dicionário de Tabelas e Atributos\n\nA seguir, são descritas as tabelas do banco de dados e seus respectivos atributos. Esta seção visa auxiliar no entendimento da modelagem e no cálculo do espaço de armazenamento necessário.\n\n- **Órgão**\n  - `id` (BIGSERIAL, PRIMARY KEY): Identificador único do órgão.\n  - `cnpj` (VARCHAR(14), UNIQUE, NOT NULL): CNPJ do órgão, com 14 caracteres.\n  - `razao_social` (VARCHAR(255), NOT NULL): Razão social do órgão, com até 255 caracteres.\n  - `uf_nome` (VARCHAR(100), NOT NULL): Nome da unidade federativa (estado), com até 100 caracteres.\n  - `nome_unidade` (VARCHAR(255), NOT NULL): Nome da unidade do órgão, com até 255 caracteres.\n  - `codigo_unidade` (VARCHAR(20), NOT NULL): Código da unidade do órgão, com até 20 caracteres.\n  - `uf_sigla` (VARCHAR(2), NOT NULL): Sigla da unidade federativa (estado), com 2 caracteres.\n  - `municipio_nome` (VARCHAR(100), NOT NULL): Nome do município do órgão, com até 100 caracteres.\n  - `codigo_ibge` (VARCHAR(7), NOT NULL): Código IBGE do município, com até 7 caracteres.\n\n  **Estimativa de tamanho por registro:**\n  - `id`: 8 bytes.\n  - `cnpj`: 14 bytes.\n  - `razao_social`: ~255 bytes.\n  - `uf_nome`: ~100 bytes.\n  - `nome_unidade`: ~255 bytes.\n  - `codigo_unidade`: ~20 bytes.\n  - `uf_sigla`: 2 bytes.\n  - `municipio_nome`: ~100 bytes.\n  - `codigo_ibge`: 7 bytes.\n  - **Tamanho total estimado por registro:** ~800 bytes.\n  - **Tamanho total estimado da tabela para 1.000.000 registros:** ~800 MB.\n\n- **Contrato**\n  - `id` (BIGSERIAL, PRIMARY KEY): Identificador único do contrato.\n  - `id_orgao` (BIGINT, NOT NULL): Chave estrangeira que referencia a tabela `orgao`.\n  - `data_vigencia_ini` (DATE, NOT NULL): Data de início da vigência do contrato.\n  - `data_vigencia_fim` (DATE, NOT NULL): Data de término da vigência do contrato.\n  - `razao_social_fornecedor` (TEXT, NOT NULL): Razão social do fornecedor.\n  - `objeto_contrato` (TEXT, NOT NULL): Descrição do objeto do contrato.\n  - `valor_inicial` (MONEY, NOT NULL): Valor inicial do contrato.\n\n  **Estimativa de tamanho por registro:**\n  - `id`: 8 bytes.\n  - `id_orgao`: 8 bytes.\n  - `data_vigencia_ini`: 4 bytes.\n  - `data_vigencia_fim`: 4 bytes.\n  - `razao_social_fornecedor`: Variável (dependendo do texto armazenado).\n  - `objeto_contrato`: Variável (dependendo do texto armazenado).\n  - `valor_inicial`: 8 bytes.\n  - **Tamanho total estimado por registro:** ~44 bytes (excluindo o campo `objeto_contrato`).\n  - **Tamanho total estimado da tabela para 1.000.  000 registros:** ~44 MB (excluindo o campo `objeto_contrato`).\n\n## Modelagem Lógica\n\n![Modelo Lógico](./info_db/logic/model_logic.png)\n\n## Modelagem Física \n\n### SQL\n\n```sql\n\nCREATE SCHEMA IF NOT EXISTS web;\n\n---------\n-- Tabela Órgãos\nCREATE TABLE IF NOT EXISTS orgao (\n    id BIGSERIAL NOT NULL,                -- Chave primária com autoincremento\n                                          -- Tamanho: 8 bytes por registro\n\n    cnpj VARCHAR(14) UNIQUE NOT NULL,     -- CNPJ, campo único, até 14 caracteres\n                                          -- Tamanho fixo: 14 bytes por registro (CNPJ possui 14 caracteres)\n                                          -- Índice UNIQUE no CNPJ: ~14 bytes adicionais por registro\n\n    razao_social VARCHAR(255) NOT NULL,   -- Razão social do órgão\n                                          -- Tamanho máximo: 255 bytes por registro\n\n    uf_nome VARCHAR(100) NOT NULL,        -- Nome da unidade federativa (estado), até 100 caracteres\n                                          -- Tamanho máximo: 100 bytes por registro\n\n    nome_unidade VARCHAR(255) NOT NULL,        -- Nome da unidade do órgão\n                                          -- Tamanho máximo: variável (Varchar)\n\n    codigo_unidade VARCHAR(20) NOT NULL,     -- Código da unidade do órgão\n                                          -- Tamanho máximo: variável (Varchar)\n\n    uf_sigla VARCHAR(2) NOT NULL,         -- Sigla da unidade federativa (estado), 2 caracteres\n                                          -- Tamanho fixo: 2 bytes por registro\n\n    municipio_nome VARCHAR(150) NOT NULL, -- Nome do município do órgão, até 150 caracteres\n                                          -- Tamanho máximo: 150 bytes por registro\n\n    codigo_ibge VARCHAR(7) NOT NULL,      -- Código IBGE do município, até 7 caracteres\n                                          -- Tamanho máximo: 7 bytes por registro\n\n    CONSTRAINT pk_id_in_orgao PRIMARY KEY (id)\n);\n\n-- Estimativa de tamanho total por registro: ~800 bytes\n-- Considerando 1.000.000 registros:\n-- Tamanho total estimado da tabela: ~800 MB\n\n---------\n\n-- Tabela Contrato\nCREATE TABLE IF NOT EXISTS contrato (\n    id BIGSERIAL NOT NULL,               -- Chave primária com autoincremento\n                                         -- Tamanho: 8 bytes por registro\n\n    id_orgao BIGINT NOT NULL,         -- Chave estrangeira referenciando a tabela orgao\n                                         -- Tamanho: 8 bytes por registro (BIGINT)\n\n    data_vigencia_ini DATE NOT NULL,     -- Data de início de vigência do contrato\n                                         -- Tamanho: 4 bytes por registro (DATE)\n\n    data_vigencia_fim DATE NOT NULL,     -- Data de fim de vigência do contrato\n                                         -- Tamanho: 4 bytes por registro (DATE)\n\n    razao_social_fornecedor TEXT NOT NULL,  -- Razão social do fornecedor\n                                            -- Tamanho: variável (TEXT)\n\n    objeto_contrato TEXT NOT NULL,       -- Descrição do objeto do contrato\n                                         -- Tamanho: variável (TEXT)\n\n    valor_inicial MONEY NOT NULL,        -- Valor inicial do contrato\n                                         -- Tamanho: 8 bytes por registro (MONEY)\n\n    CONSTRAINT pk_id_contrato PRIMARY KEY (id),\n    CONSTRAINT fk_id_orgao_contrato FOREIGN KEY (id_orgao) REFERENCES orgao (id) ON CASCADE DELETE\n);\n\n-- Estimativa de tamanho total por registro: ~44 bytes\n-- Considerando 1.000.000 registros:\n-- Tamanho total estimado da tabela: ~44 MB\n\n---------\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpereirar3%2Fteste-nuti","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpereirar3%2Fteste-nuti","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpereirar3%2Fteste-nuti/lists"}