Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitIgnore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
databaseEmpresa.db
22 changes: 11 additions & 11 deletions NFe-002-3103.xml → NFes/NFe-002-3103.xml

Large diffs are not rendered by default.

90 changes: 34 additions & 56 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,62 +1,40 @@
# Venha para Recomb

O desafio é desenvolver um programa que permita realizar as seguintes buscas:

1) Listar os valores e data de Vencimento dos boletos presentes em um nota fiscal conforme o CPF ou CNPJ de um fornecedor.
2) Apresentar o nome, identificador (CPF ou CNPJ), endereço dos clientes de um fornecedor.

**Escolha as tecnologias que você vai usar e tente montar uma solução completa para rodar a aplicação.**

Para enviar o resultado, basta realiazar um Fork deste repositório e abra um Pull Request, com seu nome.

É importante comentar que deve ser enviado apenas o código fonte. Não aceitaremos códigos compilados.

Por fim, o candidato deve atualizar o Readme.md com as seguintes informações:

1) Documentação da solução;
2) Lista dos diferenciais implementados

## Avaliação

O programa será avaliado levando em conta os seguintes critérios:
|Critério| Valor|
|-------|--------|
|Legibilidade do Código |10|
|Organização do Código|10|
|Documentação do código |10|
|Documentação da solução |10|
|Tratamento de Erros |10|
|Total| 50|

A pontuação do candidato será a soma dos valores obtidos nos critérios acima.

## Diferenciais

O candidato pode aumentar a sua pontuação na seleção implementando um ou mais dos itens abaixo:
|Item | Pontos Ganhos|
|-----|--------------|
|Criar um serviço com o problema |30|
|Utilizar banco de dados |30|
|Implementar Clean Code |20|
|Implementar o padrão de programação da tecnologia escolhida |20|
|Qualidade de Código com SonarQube| 15|
|Implementar testes unitários |15|
|Implementar testes comportamentais | 15|
|Implementar integração com Travis |10|
|Implementar integração com Travis + SonarQube |10|
|Implementar usando Docker |5|
|Total | 170|

A nota final do candidato será acrescido dos pontos referente ao item implementado corretamente.
# Solução
#### A solução implementada recebe 1 arquivo .xml por vez, envia para o banco de dados e apresenta o resultado logo a baixo.
#### Na pagina web o usuário consegue visualizar o arquivo que acabou de enviar e no 'Dados do Ciente' pode ver o que já está armazenado

# Como rodar
#### Existem outros 2 README dentro da pasta [api](#api) e [front_ler_xml](#front_ler_xml)
#### É necessario executar um START dentro de cada pasta, dentro dos outros 2 README contém as informaçõs

# Modulos
#### A implentação da solução foi dividida em módulos:

* [User:](#User) define um modelo de dados utilizando o Sequelize.
* [db:](#db)configura uma instância do Sequelize para se conectar ao banco de dados.
* [app:](#app) entrada principal para aplicação Node.js usando o framework Express.
* [globals:](#globals) gerado automaticamente pelo next é um arquivo de estilo escrito em CSS, que define variáveis de cor, esquemas de cores, estilos e outras configurações globais para serem usadas em uma aplicação web.
* [layout:](#layout) um componente React que define o layout padrão para a aplicação.
* [page:](#page) componente React funcional que representa a página principal da aplicação.
* [styles:](#styles) todo componente css dos dados dos clientes.

# Pastas

## Penalizações
* [api:](#api) pasta onde esta concentrado o backend que contém:
* [modules:](#modules) contém os módulos relacionados a aplicação.
* [routes:](#routes) nela contém as rotas da aplicação Express.js
* [front_ler_xml:](#front_ler_xml) pasta onde esta concentrado o frontend que contém:
* [public:](#public) gerado automaticamente pelo next.
* [src/app:](#src/app) contém toda logica do lado do frontend.

O candidato será desclassifiado nas seguintes situações:

1) Submeter um solução que não funcione;
2) Não cumprir os critérios presentes no seção Avaliação;
3) Plágio;
# Execução
##### Para executar, por favor, olhe os dois README dentro da pasta /api e /front_ler_xml
###### Decidi divir essa parte para não gerar confusão



# Diferenciais implementados

| Itens | Pontos |
|--------------------------------|---------|
| Criar um serviço com o problema| 30 |
| Utilizar banco de dados | 30 |
40 changes: 40 additions & 0 deletions api/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Node.js
node_modules/
node_modules/*

# Logs
logs
*.log

# Dependency directories
pnp/
pnp.js

# Testing
coverage/

# Build output
build/
dist/

# Environment variables
.env.local
.env.development.local
.env.test.local
.env.production.local

# Editor directories and files
.vscode/
.idea/
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

# Yarn
yarn-error.log
yarn.lock
.pnp.*
.pnp.js
.yarn
1 change: 1 addition & 0 deletions api/.yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodeLinker: node-modules
22 changes: 22 additions & 0 deletions api/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# COMO RODAR

```bash
yarn install
yarn start
```

# Sequelize: biblioteca javascript que facilita gerenciamento com o SQl

```bash
yarn add --save sequelize
```

# Baixar sqLite

https://sqlitestudio.pl/

# acessar o banco de dados no navegador

```bash
http://localhost:8080
```
51 changes: 51 additions & 0 deletions api/models/User.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
const Sequelize = require('sequelize');
const db = require('./db');

const User = db.define('users', {
CNPJ: {
type: Sequelize.STRING,
allowNull: false,
primaryKey: true
},
xNome: {
type: Sequelize.STRING,
allowNull: false,
},
vNF: {
type: Sequelize.FLOAT,
allowNull: false,
},
dVenc: {
type: Sequelize.STRING,
allowNull: false,
},
xLgr: {
type: Sequelize.STRING,
allowNull: false,
},
nro: {
type: Sequelize.STRING,
allowNull: false,
},
xBairro: {
type: Sequelize.STRING,
allowNull: false,
},
xMun: {
type: Sequelize.STRING,
allowNull: false,
},
UF: {
type: Sequelize.STRING,
allowNull: false,
},
CEP: {
type: Sequelize.STRING,
allowNull: false,
},
});

//Criar a tabela
User.sync();

module.exports = User;
8 changes: 8 additions & 0 deletions api/models/db.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const Sequelize = require('sequelize');

const sequelize = new Sequelize( {
dialect: 'sqlite',
storage: '../databaseEmpresa.db'
});

module.exports = sequelize;
20 changes: 20 additions & 0 deletions api/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "api",
"version": "1.0.0",
"description": "",
"main": "jquery.min.js",
"scripts": {
"start": "nodemon routes/app.js localhost 8080 ",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"express": "^4.18.2",
"mysql2": "^3.6.5",
"nodemon": "^3.0.1",
"sequelize": "^6.35.1",
"sqlite3": "^5.1.6"
}
}
45 changes: 45 additions & 0 deletions api/routes/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const User = require('../models/User');
var cors = require('cors')
app.use(cors())

app.use(bodyParser.json());

app.post("/", async (req, res) => {
try {
await User.create(req.body);
res.json({
mensagem: "Cliente cadastrado com sucesso"
});
} catch (error) {
console.error(error);
res.status(400).json({
mensagem: "Erro: Cliente não cadastrado"
});
}
});


app.get('/databaseEmpresa', async (_, res) => {
try {
const databaseEmpresa = await User.findAll({
attributes: ['CNPJ', 'xNome', 'vNF', 'dVenc', 'xLgr', 'nro', 'xBairro', 'xMun', 'UF', 'CEP'],
});

if (databaseEmpresa) {
res.json(databaseEmpresa);
} else {
res.status(404).json({ error: 'Nenhum dado encontrado' });
}
} catch (error) {
console.error('Erro ao obter dados do banco de dados:', error);
res.status(500).json({ error: 'Erro ao obter dados do banco de dados' });
}
});


app.listen(8080, () => {
console.log("Iniciando na porta 8080: http://localhost:8080");
});
3 changes: 3 additions & 0 deletions front_ler_xml/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"extends": "next/core-web-vitals"
}
47 changes: 47 additions & 0 deletions front_ler_xml/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env*.local

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts

# ignore yarn
.yarn/
.yarn/*
yarn.lock
!.yarn/cache
!.yarn/releases
!.yarn/plugins
!.yarn/sdks
!.yarn/versions

1 change: 1 addition & 0 deletions front_ler_xml/.yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodeLinker: node-modules
31 changes: 31 additions & 0 deletions front_ler_xml/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).

# COMO RODAR

```bash
yarn install
yarn dev
```

Abra [http://localhost:3000](http://localhost:3000) com seu navegador para ver o resultado.

Você pode começar a editar a página modificando `app/page.js`. A página é atualizada automaticamente conforme você edita o arquivo.

Este projeto usa [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) para otimizar e carregar automaticamente o Inter, uma fonte personalizada do Google.

## Saber mais
-----------------------------------------------------------------------------------
##### Resolvi deixar essa parte que foi gerada pelo next para melhores informações
-----------------------------------------------------------------------------------
Para saber mais sobre Next.js, dê uma olhada nos seguintes recursos:

- [Documentação do Next.js](https://nextjs.org/docs) - aprenda sobre os recursos e a API do Next.js.
- [Aprenda Next.js](https://nextjs.org/learn) - um tutorial interativo de Next.js.

Você pode conferir [o repositório Next.js GitHub](https://github.com/vercel/next.js/) - seus comentários e contribuições são bem-vindos!

## Implantar no Vercel

A maneira mais fácil de implantar seu aplicativo Next.js é usar a [Plataforma Vercel](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app -readme) dos criadores do Next.js.

Confira nossa [documentação de implantação do Next.js](https://nextjs.org/docs/deployment) para mais detalhes.
7 changes: 7 additions & 0 deletions front_ler_xml/jsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}
4 changes: 4 additions & 0 deletions front_ler_xml/next.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/** @type {import('next').NextConfig} */
const nextConfig = {}

module.exports = nextConfig
Loading