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
33 changes: 33 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
Binary file added.mvn/wrapper/maven-wrapper.jar
Binary file not shown.
2 changes: 2 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
65 changes: 37 additions & 28 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,51 @@
# Teste de seleção para vaga de Java

## Faça um fork desse projeto e siga as instruções a seguir utilizando esse projeto.
Api rest utilizando spring boot com postegresql, jpa hibernate, validation</br>
swagger e cobertura de testes e2e, integration

# Pré-requisitos
Tests passed: 41 of 41

Implementar apenas a API (Backend)
Versão Java +8 (caso seja Java 8, verificar compatibilidade da sua IDE)
Versão Spring Boot >= 2.4
Banco de dados fica a seu critério (Sql, NoSql)
Seu projeto deve obrigatoriamente ter as anotações: @Repository, @Entity e @Controller
Documentação mínima da API (Swagger ou documento PDF)
No repository usando o metodo findBy sem a necessidade de escrever manualmente a query e realizando todas as buscas.

# Objetivo
Implementar para empresa de transporte de cargas SigaBem o endpoint para o cálculo do preço do frete:
Mudei alguns valores de entrada que foram propostos

Você deve calcular o valor total do frete e a data prevista da entrega.
"weight" -> "peso",
"zipCodeOrigin" -> "cepOrigem",
"zipCodeDestination" -> "cepDestino",
"recipientName" -> "nomeDestinatario",
"costFreight" -> "vlTotalFrete",
"expectedDeliveryDate" -> "dataPrevistaEntrega",

Considerar regras para calcular o valor do frete:
* CEPs com DDDs iguais tem 50% de desconto no valor do frete e entrega prevista de 1 dia
* CEPs de estados iguais tem 75% de desconto no valor do frete e entrega prevista de 3 dias
* CEPs de estados diferentes não deve ser aplicado o desconto no valor do frete e entrega prevista de 10 dias
* O valor do frete é cobrado pelo peso da encomenda, o valor para cada KG é R$1,00

Seu input de entrada deve ser “peso”, “cepOrigem”, “cepDestino” e “nomeDestinatario“
Seguindo o principio da responsabilidade única, DispatchStoreController cuida da criação e DispatchFindController da busca, são os únicos controladores

Você utilizará a API gratuita de consulta de CEP abaixo:
Documentação da API: https://viacep.com.br/
Exemplo do GET: https://viacep.com.br/ws/<CEP_A_CONSULTAR>/json/
No DispatchStoreController tem a busca isolada dos ceps, com try catch, caso não encontre e desconto.

Endpoint pode ser público
Response/Output deve possuir: “vlTotalFrete” e “dataPrevistaEntrega”, “cepOrigem” e “cepDestino”
Deve ser persistido no banco os valores da cotação os valores consultados: “peso”, “cepOrigem”, “cepDestino”, “nomeDestinatario”, “vlTotalFrete”, “dataPrevistaEntrega” e “dataConsulta”
Implementação do desconto com ddd, localidade, peso da encomenda e dia previsto para entregar.

Todos os testes passaram com exceção do shouldFindRecipientName no DispatchFindControllerTest, que por algum motivo</br>
que não consegui resolver, fazia o registr no banco, mas não me retornava ele

Busca por nome, id, peso, data prevista para entregar, cep de origem, cep de destino, frete


http://localhost:3333/swagger-ui/#/

# Critérios de avaliação:
* Implementação das regras de negócios para o cálculo do frete
* Boas práticas de programação, arquitetura e padrões de projetos
Em src -> main -> resource -> aplication.properties, necessário colocar os dados do banco para rodar aplicação

# Entrega:
* Disponibilizar um link do repositório no GitHub e encaminhar para developer@cd2.com.br
```diff

+ POST /api/v1/dispatch/store
@@ GET /api/v1/dispatch/find_by_id @@
@@ GET /api/v1/dispatch/find_by_recipient_name @@
@@ GET /api/v1/dispatch/zip_code_origin @@
@@ GET /api/v1/dispatch/zip_code_destination @@
@@ GET /api/v1/dispatch/total_freight @@
@@ GET /api/v1/dispatch/find_by_weight @@
@@ GET /api/v1/dispatch/expected_delivery_date @@

...




1,090 changes: 1,090 additions & 0 deletions Test Results - com_testInstivo_demo_in_demo.html

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
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
33 changes: 33 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
Binary file added.mvn/wrapper/maven-wrapper.jar
Binary file not shown.
2 changes: 2 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
65 changes: 37 additions & 28 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,51 @@
# Teste de seleção para vaga de Java

## Faça um fork desse projeto e siga as instruções a seguir utilizando esse projeto.
Api rest utilizando spring boot com postegresql, jpa hibernate, validation</br>
swagger e cobertura de testes e2e, integration

# Pré-requisitos
Tests passed: 41 of 41

Implementar apenas a API (Backend)
Versão Java +8 (caso seja Java 8, verificar compatibilidade da sua IDE)
Versão Spring Boot >= 2.4
Banco de dados fica a seu critério (Sql, NoSql)
Seu projeto deve obrigatoriamente ter as anotações: @Repository, @Entity e @Controller
Documentação mínima da API (Swagger ou documento PDF)
No repository usando o metodo findBy sem a necessidade de escrever manualmente a query e realizando todas as buscas.

# Objetivo
Implementar para empresa de transporte de cargas SigaBem o endpoint para o cálculo do preço do frete:
Mudei alguns valores de entrada que foram propostos

Você deve calcular o valor total do frete e a data prevista da entrega.
"weight" -> "peso",
"zipCodeOrigin" -> "cepOrigem",
"zipCodeDestination" -> "cepDestino",
"recipientName" -> "nomeDestinatario",
"costFreight" -> "vlTotalFrete",
"expectedDeliveryDate" -> "dataPrevistaEntrega",

Considerar regras para calcular o valor do frete:
* CEPs com DDDs iguais tem 50% de desconto no valor do frete e entrega prevista de 1 dia
* CEPs de estados iguais tem 75% de desconto no valor do frete e entrega prevista de 3 dias
* CEPs de estados diferentes não deve ser aplicado o desconto no valor do frete e entrega prevista de 10 dias
* O valor do frete é cobrado pelo peso da encomenda, o valor para cada KG é R$1,00

Seu input de entrada deve ser “peso”, “cepOrigem”, “cepDestino” e “nomeDestinatario“
Seguindo o principio da responsabilidade única, DispatchStoreController cuida da criação e DispatchFindController da busca, são os únicos controladores

Você utilizará a API gratuita de consulta de CEP abaixo:
Documentação da API: https://viacep.com.br/
Exemplo do GET: https://viacep.com.br/ws/<CEP_A_CONSULTAR>/json/
No DispatchStoreController tem a busca isolada dos ceps, com try catch, caso não encontre e desconto.

Endpoint pode ser público
Response/Output deve possuir: “vlTotalFrete” e “dataPrevistaEntrega”, “cepOrigem” e “cepDestino”
Deve ser persistido no banco os valores da cotação os valores consultados: “peso”, “cepOrigem”, “cepDestino”, “nomeDestinatario”, “vlTotalFrete”, “dataPrevistaEntrega” e “dataConsulta”
Implementação do desconto com ddd, localidade, peso da encomenda e dia previsto para entregar.

Todos os testes passaram com exceção do shouldFindRecipientName no DispatchFindControllerTest, que por algum motivo</br>
que não consegui resolver, fazia o registr no banco, mas não me retornava ele

Busca por nome, id, peso, data prevista para entregar, cep de origem, cep de destino, frete


http://localhost:3333/swagger-ui/#/

# Critérios de avaliação:
* Implementação das regras de negócios para o cálculo do frete
* Boas práticas de programação, arquitetura e padrões de projetos
Em src -> main -> resource -> aplication.properties, necessário colocar os dados do banco para rodar aplicação

# Entrega:
* Disponibilizar um link do repositório no GitHub e encaminhar para developer@cd2.com.br
```diff

+ POST /api/v1/dispatch/store
@@ GET /api/v1/dispatch/find_by_id @@
@@ GET /api/v1/dispatch/find_by_recipient_name @@
@@ GET /api/v1/dispatch/zip_code_origin @@
@@ GET /api/v1/dispatch/zip_code_destination @@
@@ GET /api/v1/dispatch/total_freight @@
@@ GET /api/v1/dispatch/find_by_weight @@
@@ GET /api/v1/dispatch/expected_delivery_date @@

...




1,090 changes: 1,090 additions & 0 deletions Test Results - com_testInstivo_demo_in_demo.html

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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
33 changes: 33 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
Binary file added.mvn/wrapper/maven-wrapper.jar
Binary file not shown.
2 changes: 2 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
65 changes: 37 additions & 28 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,51 @@
# Teste de seleção para vaga de Java

## Faça um fork desse projeto e siga as instruções a seguir utilizando esse projeto.
Api rest utilizando spring boot com postegresql, jpa hibernate, validation</br>
swagger e cobertura de testes e2e, integration

# Pré-requisitos
Tests passed: 41 of 41

Implementar apenas a API (Backend)
Versão Java +8 (caso seja Java 8, verificar compatibilidade da sua IDE)
Versão Spring Boot >= 2.4
Banco de dados fica a seu critério (Sql, NoSql)
Seu projeto deve obrigatoriamente ter as anotações: @Repository, @Entity e @Controller
Documentação mínima da API (Swagger ou documento PDF)
No repository usando o metodo findBy sem a necessidade de escrever manualmente a query e realizando todas as buscas.

# Objetivo
Implementar para empresa de transporte de cargas SigaBem o endpoint para o cálculo do preço do frete:
Mudei alguns valores de entrada que foram propostos

Você deve calcular o valor total do frete e a data prevista da entrega.
"weight" -> "peso",
"zipCodeOrigin" -> "cepOrigem",
"zipCodeDestination" -> "cepDestino",
"recipientName" -> "nomeDestinatario",
"costFreight" -> "vlTotalFrete",
"expectedDeliveryDate" -> "dataPrevistaEntrega",

Considerar regras para calcular o valor do frete:
* CEPs com DDDs iguais tem 50% de desconto no valor do frete e entrega prevista de 1 dia
* CEPs de estados iguais tem 75% de desconto no valor do frete e entrega prevista de 3 dias
* CEPs de estados diferentes não deve ser aplicado o desconto no valor do frete e entrega prevista de 10 dias
* O valor do frete é cobrado pelo peso da encomenda, o valor para cada KG é R$1,00

Seu input de entrada deve ser “peso”, “cepOrigem”, “cepDestino” e “nomeDestinatario“
Seguindo o principio da responsabilidade única, DispatchStoreController cuida da criação e DispatchFindController da busca, são os únicos controladores

Você utilizará a API gratuita de consulta de CEP abaixo:
Documentação da API: https://viacep.com.br/
Exemplo do GET: https://viacep.com.br/ws/<CEP_A_CONSULTAR>/json/
No DispatchStoreController tem a busca isolada dos ceps, com try catch, caso não encontre e desconto.

Endpoint pode ser público
Response/Output deve possuir: “vlTotalFrete” e “dataPrevistaEntrega”, “cepOrigem” e “cepDestino”
Deve ser persistido no banco os valores da cotação os valores consultados: “peso”, “cepOrigem”, “cepDestino”, “nomeDestinatario”, “vlTotalFrete”, “dataPrevistaEntrega” e “dataConsulta”
Implementação do desconto com ddd, localidade, peso da encomenda e dia previsto para entregar.

Todos os testes passaram com exceção do shouldFindRecipientName no DispatchFindControllerTest, que por algum motivo</br>
que não consegui resolver, fazia o registr no banco, mas não me retornava ele

Busca por nome, id, peso, data prevista para entregar, cep de origem, cep de destino, frete


http://localhost:3333/swagger-ui/#/

# Critérios de avaliação:
* Implementação das regras de negócios para o cálculo do frete
* Boas práticas de programação, arquitetura e padrões de projetos
Em src -> main -> resource -> aplication.properties, necessário colocar os dados do banco para rodar aplicação

# Entrega:
* Disponibilizar um link do repositório no GitHub e encaminhar para developer@cd2.com.br
```diff

+ POST /api/v1/dispatch/store
@@ GET /api/v1/dispatch/find_by_id @@
@@ GET /api/v1/dispatch/find_by_recipient_name @@
@@ GET /api/v1/dispatch/zip_code_origin @@
@@ GET /api/v1/dispatch/zip_code_destination @@
@@ GET /api/v1/dispatch/total_freight @@
@@ GET /api/v1/dispatch/find_by_weight @@
@@ GET /api/v1/dispatch/expected_delivery_date @@

...




1,090 changes: 1,090 additions & 0 deletions Test Results - com_testInstivo_demo_in_demo.html

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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
33 changes: 33 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
Binary file added.mvn/wrapper/maven-wrapper.jar
Binary file not shown.
2 changes: 2 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
65 changes: 37 additions & 28 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,51 @@
# Teste de seleção para vaga de Java

## Faça um fork desse projeto e siga as instruções a seguir utilizando esse projeto.
Api rest utilizando spring boot com postegresql, jpa hibernate, validation</br>
swagger e cobertura de testes e2e, integration

# Pré-requisitos
Tests passed: 41 of 41

Implementar apenas a API (Backend)
Versão Java +8 (caso seja Java 8, verificar compatibilidade da sua IDE)
Versão Spring Boot >= 2.4
Banco de dados fica a seu critério (Sql, NoSql)
Seu projeto deve obrigatoriamente ter as anotações: @Repository, @Entity e @Controller
Documentação mínima da API (Swagger ou documento PDF)
No repository usando o metodo findBy sem a necessidade de escrever manualmente a query e realizando todas as buscas.

# Objetivo
Implementar para empresa de transporte de cargas SigaBem o endpoint para o cálculo do preço do frete:
Mudei alguns valores de entrada que foram propostos

Você deve calcular o valor total do frete e a data prevista da entrega.
"weight" -> "peso",
"zipCodeOrigin" -> "cepOrigem",
"zipCodeDestination" -> "cepDestino",
"recipientName" -> "nomeDestinatario",
"costFreight" -> "vlTotalFrete",
"expectedDeliveryDate" -> "dataPrevistaEntrega",

Considerar regras para calcular o valor do frete:
* CEPs com DDDs iguais tem 50% de desconto no valor do frete e entrega prevista de 1 dia
* CEPs de estados iguais tem 75% de desconto no valor do frete e entrega prevista de 3 dias
* CEPs de estados diferentes não deve ser aplicado o desconto no valor do frete e entrega prevista de 10 dias
* O valor do frete é cobrado pelo peso da encomenda, o valor para cada KG é R$1,00

Seu input de entrada deve ser “peso”, “cepOrigem”, “cepDestino” e “nomeDestinatario“
Seguindo o principio da responsabilidade única, DispatchStoreController cuida da criação e DispatchFindController da busca, são os únicos controladores

Você utilizará a API gratuita de consulta de CEP abaixo:
Documentação da API: https://viacep.com.br/
Exemplo do GET: https://viacep.com.br/ws/<CEP_A_CONSULTAR>/json/
No DispatchStoreController tem a busca isolada dos ceps, com try catch, caso não encontre e desconto.

Endpoint pode ser público
Response/Output deve possuir: “vlTotalFrete” e “dataPrevistaEntrega”, “cepOrigem” e “cepDestino”
Deve ser persistido no banco os valores da cotação os valores consultados: “peso”, “cepOrigem”, “cepDestino”, “nomeDestinatario”, “vlTotalFrete”, “dataPrevistaEntrega” e “dataConsulta”
Implementação do desconto com ddd, localidade, peso da encomenda e dia previsto para entregar.

Todos os testes passaram com exceção do shouldFindRecipientName no DispatchFindControllerTest, que por algum motivo</br>
que não consegui resolver, fazia o registr no banco, mas não me retornava ele

Busca por nome, id, peso, data prevista para entregar, cep de origem, cep de destino, frete


http://localhost:3333/swagger-ui/#/

# Critérios de avaliação:
* Implementação das regras de negócios para o cálculo do frete
* Boas práticas de programação, arquitetura e padrões de projetos
Em src -> main -> resource -> aplication.properties, necessário colocar os dados do banco para rodar aplicação

# Entrega:
* Disponibilizar um link do repositório no GitHub e encaminhar para developer@cd2.com.br
```diff

+ POST /api/v1/dispatch/store
@@ GET /api/v1/dispatch/find_by_id @@
@@ GET /api/v1/dispatch/find_by_recipient_name @@
@@ GET /api/v1/dispatch/zip_code_origin @@
@@ GET /api/v1/dispatch/zip_code_destination @@
@@ GET /api/v1/dispatch/total_freight @@
@@ GET /api/v1/dispatch/find_by_weight @@
@@ GET /api/v1/dispatch/expected_delivery_date @@

...




1,090 changes: 1,090 additions & 0 deletions Test Results - com_testInstivo_demo_in_demo.html

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
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
33 changes: 33 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
Binary file added.mvn/wrapper/maven-wrapper.jar
Binary file not shown.
2 changes: 2 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
65 changes: 37 additions & 28 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,51 @@
# Teste de seleção para vaga de Java

## Faça um fork desse projeto e siga as instruções a seguir utilizando esse projeto.
Api rest utilizando spring boot com postegresql, jpa hibernate, validation</br>
swagger e cobertura de testes e2e, integration

# Pré-requisitos
Tests passed: 41 of 41

Implementar apenas a API (Backend)
Versão Java +8 (caso seja Java 8, verificar compatibilidade da sua IDE)
Versão Spring Boot >= 2.4
Banco de dados fica a seu critério (Sql, NoSql)
Seu projeto deve obrigatoriamente ter as anotações: @Repository, @Entity e @Controller
Documentação mínima da API (Swagger ou documento PDF)
No repository usando o metodo findBy sem a necessidade de escrever manualmente a query e realizando todas as buscas.

# Objetivo
Implementar para empresa de transporte de cargas SigaBem o endpoint para o cálculo do preço do frete:
Mudei alguns valores de entrada que foram propostos

Você deve calcular o valor total do frete e a data prevista da entrega.
"weight" -> "peso",
"zipCodeOrigin" -> "cepOrigem",
"zipCodeDestination" -> "cepDestino",
"recipientName" -> "nomeDestinatario",
"costFreight" -> "vlTotalFrete",
"expectedDeliveryDate" -> "dataPrevistaEntrega",

Considerar regras para calcular o valor do frete:
* CEPs com DDDs iguais tem 50% de desconto no valor do frete e entrega prevista de 1 dia
* CEPs de estados iguais tem 75% de desconto no valor do frete e entrega prevista de 3 dias
* CEPs de estados diferentes não deve ser aplicado o desconto no valor do frete e entrega prevista de 10 dias
* O valor do frete é cobrado pelo peso da encomenda, o valor para cada KG é R$1,00

Seu input de entrada deve ser “peso”, “cepOrigem”, “cepDestino” e “nomeDestinatario“
Seguindo o principio da responsabilidade única, DispatchStoreController cuida da criação e DispatchFindController da busca, são os únicos controladores

Você utilizará a API gratuita de consulta de CEP abaixo:
Documentação da API: https://viacep.com.br/
Exemplo do GET: https://viacep.com.br/ws/<CEP_A_CONSULTAR>/json/
No DispatchStoreController tem a busca isolada dos ceps, com try catch, caso não encontre e desconto.

Endpoint pode ser público
Response/Output deve possuir: “vlTotalFrete” e “dataPrevistaEntrega”, “cepOrigem” e “cepDestino”
Deve ser persistido no banco os valores da cotação os valores consultados: “peso”, “cepOrigem”, “cepDestino”, “nomeDestinatario”, “vlTotalFrete”, “dataPrevistaEntrega” e “dataConsulta”
Implementação do desconto com ddd, localidade, peso da encomenda e dia previsto para entregar.

Todos os testes passaram com exceção do shouldFindRecipientName no DispatchFindControllerTest, que por algum motivo</br>
que não consegui resolver, fazia o registr no banco, mas não me retornava ele

Busca por nome, id, peso, data prevista para entregar, cep de origem, cep de destino, frete


http://localhost:3333/swagger-ui/#/

# Critérios de avaliação:
* Implementação das regras de negócios para o cálculo do frete
* Boas práticas de programação, arquitetura e padrões de projetos
Em src -> main -> resource -> aplication.properties, necessário colocar os dados do banco para rodar aplicação

# Entrega:
* Disponibilizar um link do repositório no GitHub e encaminhar para developer@cd2.com.br
```diff

+ POST /api/v1/dispatch/store
@@ GET /api/v1/dispatch/find_by_id @@
@@ GET /api/v1/dispatch/find_by_recipient_name @@
@@ GET /api/v1/dispatch/zip_code_origin @@
@@ GET /api/v1/dispatch/zip_code_destination @@
@@ GET /api/v1/dispatch/total_freight @@
@@ GET /api/v1/dispatch/find_by_weight @@
@@ GET /api/v1/dispatch/expected_delivery_date @@

...




1,090 changes: 1,090 additions & 0 deletions Test Results - com_testInstivo_demo_in_demo.html

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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
33 changes: 33 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
Binary file added.mvn/wrapper/maven-wrapper.jar
Binary file not shown.
2 changes: 2 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
65 changes: 37 additions & 28 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,51 @@
# Teste de seleção para vaga de Java

## Faça um fork desse projeto e siga as instruções a seguir utilizando esse projeto.
Api rest utilizando spring boot com postegresql, jpa hibernate, validation</br>
swagger e cobertura de testes e2e, integration

# Pré-requisitos
Tests passed: 41 of 41

Implementar apenas a API (Backend)
Versão Java +8 (caso seja Java 8, verificar compatibilidade da sua IDE)
Versão Spring Boot >= 2.4
Banco de dados fica a seu critério (Sql, NoSql)
Seu projeto deve obrigatoriamente ter as anotações: @Repository, @Entity e @Controller
Documentação mínima da API (Swagger ou documento PDF)
No repository usando o metodo findBy sem a necessidade de escrever manualmente a query e realizando todas as buscas.

# Objetivo
Implementar para empresa de transporte de cargas SigaBem o endpoint para o cálculo do preço do frete:
Mudei alguns valores de entrada que foram propostos

Você deve calcular o valor total do frete e a data prevista da entrega.
"weight" -> "peso",
"zipCodeOrigin" -> "cepOrigem",
"zipCodeDestination" -> "cepDestino",
"recipientName" -> "nomeDestinatario",
"costFreight" -> "vlTotalFrete",
"expectedDeliveryDate" -> "dataPrevistaEntrega",

Considerar regras para calcular o valor do frete:
* CEPs com DDDs iguais tem 50% de desconto no valor do frete e entrega prevista de 1 dia
* CEPs de estados iguais tem 75% de desconto no valor do frete e entrega prevista de 3 dias
* CEPs de estados diferentes não deve ser aplicado o desconto no valor do frete e entrega prevista de 10 dias
* O valor do frete é cobrado pelo peso da encomenda, o valor para cada KG é R$1,00

Seu input de entrada deve ser “peso”, “cepOrigem”, “cepDestino” e “nomeDestinatario“
Seguindo o principio da responsabilidade única, DispatchStoreController cuida da criação e DispatchFindController da busca, são os únicos controladores

Você utilizará a API gratuita de consulta de CEP abaixo:
Documentação da API: https://viacep.com.br/
Exemplo do GET: https://viacep.com.br/ws/<CEP_A_CONSULTAR>/json/
No DispatchStoreController tem a busca isolada dos ceps, com try catch, caso não encontre e desconto.

Endpoint pode ser público
Response/Output deve possuir: “vlTotalFrete” e “dataPrevistaEntrega”, “cepOrigem” e “cepDestino”
Deve ser persistido no banco os valores da cotação os valores consultados: “peso”, “cepOrigem”, “cepDestino”, “nomeDestinatario”, “vlTotalFrete”, “dataPrevistaEntrega” e “dataConsulta”
Implementação do desconto com ddd, localidade, peso da encomenda e dia previsto para entregar.

Todos os testes passaram com exceção do shouldFindRecipientName no DispatchFindControllerTest, que por algum motivo</br>
que não consegui resolver, fazia o registr no banco, mas não me retornava ele

Busca por nome, id, peso, data prevista para entregar, cep de origem, cep de destino, frete


http://localhost:3333/swagger-ui/#/

# Critérios de avaliação:
* Implementação das regras de negócios para o cálculo do frete
* Boas práticas de programação, arquitetura e padrões de projetos
Em src -> main -> resource -> aplication.properties, necessário colocar os dados do banco para rodar aplicação

# Entrega:
* Disponibilizar um link do repositório no GitHub e encaminhar para developer@cd2.com.br
```diff

+ POST /api/v1/dispatch/store
@@ GET /api/v1/dispatch/find_by_id @@
@@ GET /api/v1/dispatch/find_by_recipient_name @@
@@ GET /api/v1/dispatch/zip_code_origin @@
@@ GET /api/v1/dispatch/zip_code_destination @@
@@ GET /api/v1/dispatch/total_freight @@
@@ GET /api/v1/dispatch/find_by_weight @@
@@ GET /api/v1/dispatch/expected_delivery_date @@

...




1,090 changes: 1,090 additions & 0 deletions Test Results - com_testInstivo_demo_in_demo.html

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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
33 changes: 33 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
Binary file added.mvn/wrapper/maven-wrapper.jar
Binary file not shown.
2 changes: 2 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
65 changes: 37 additions & 28 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,51 @@
# Teste de seleção para vaga de Java

## Faça um fork desse projeto e siga as instruções a seguir utilizando esse projeto.
Api rest utilizando spring boot com postegresql, jpa hibernate, validation</br>
swagger e cobertura de testes e2e, integration

# Pré-requisitos
Tests passed: 41 of 41

Implementar apenas a API (Backend)
Versão Java +8 (caso seja Java 8, verificar compatibilidade da sua IDE)
Versão Spring Boot >= 2.4
Banco de dados fica a seu critério (Sql, NoSql)
Seu projeto deve obrigatoriamente ter as anotações: @Repository, @Entity e @Controller
Documentação mínima da API (Swagger ou documento PDF)
No repository usando o metodo findBy sem a necessidade de escrever manualmente a query e realizando todas as buscas.

# Objetivo
Implementar para empresa de transporte de cargas SigaBem o endpoint para o cálculo do preço do frete:
Mudei alguns valores de entrada que foram propostos

Você deve calcular o valor total do frete e a data prevista da entrega.
"weight" -> "peso",
"zipCodeOrigin" -> "cepOrigem",
"zipCodeDestination" -> "cepDestino",
"recipientName" -> "nomeDestinatario",
"costFreight" -> "vlTotalFrete",
"expectedDeliveryDate" -> "dataPrevistaEntrega",

Considerar regras para calcular o valor do frete:
* CEPs com DDDs iguais tem 50% de desconto no valor do frete e entrega prevista de 1 dia
* CEPs de estados iguais tem 75% de desconto no valor do frete e entrega prevista de 3 dias
* CEPs de estados diferentes não deve ser aplicado o desconto no valor do frete e entrega prevista de 10 dias
* O valor do frete é cobrado pelo peso da encomenda, o valor para cada KG é R$1,00

Seu input de entrada deve ser “peso”, “cepOrigem”, “cepDestino” e “nomeDestinatario“
Seguindo o principio da responsabilidade única, DispatchStoreController cuida da criação e DispatchFindController da busca, são os únicos controladores

Você utilizará a API gratuita de consulta de CEP abaixo:
Documentação da API: https://viacep.com.br/
Exemplo do GET: https://viacep.com.br/ws/<CEP_A_CONSULTAR>/json/
No DispatchStoreController tem a busca isolada dos ceps, com try catch, caso não encontre e desconto.

Endpoint pode ser público
Response/Output deve possuir: “vlTotalFrete” e “dataPrevistaEntrega”, “cepOrigem” e “cepDestino”
Deve ser persistido no banco os valores da cotação os valores consultados: “peso”, “cepOrigem”, “cepDestino”, “nomeDestinatario”, “vlTotalFrete”, “dataPrevistaEntrega” e “dataConsulta”
Implementação do desconto com ddd, localidade, peso da encomenda e dia previsto para entregar.

Todos os testes passaram com exceção do shouldFindRecipientName no DispatchFindControllerTest, que por algum motivo</br>
que não consegui resolver, fazia o registr no banco, mas não me retornava ele

Busca por nome, id, peso, data prevista para entregar, cep de origem, cep de destino, frete


http://localhost:3333/swagger-ui/#/

# Critérios de avaliação:
* Implementação das regras de negócios para o cálculo do frete
* Boas práticas de programação, arquitetura e padrões de projetos
Em src -> main -> resource -> aplication.properties, necessário colocar os dados do banco para rodar aplicação

# Entrega:
* Disponibilizar um link do repositório no GitHub e encaminhar para developer@cd2.com.br
```diff

+ POST /api/v1/dispatch/store
@@ GET /api/v1/dispatch/find_by_id @@
@@ GET /api/v1/dispatch/find_by_recipient_name @@
@@ GET /api/v1/dispatch/zip_code_origin @@
@@ GET /api/v1/dispatch/zip_code_destination @@
@@ GET /api/v1/dispatch/total_freight @@
@@ GET /api/v1/dispatch/find_by_weight @@
@@ GET /api/v1/dispatch/expected_delivery_date @@

...




1,090 changes: 1,090 additions & 0 deletions Test Results - com_testInstivo_demo_in_demo.html

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
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
33 changes: 33 additions & 0 deletions .gitignore
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
Binary file added.mvn/wrapper/maven-wrapper.jar
Binary file not shown.
2 changes: 2 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
65 changes: 37 additions & 28 deletions README.md
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,51 @@
# Teste de seleção para vaga de Java

## Faça um fork desse projeto e siga as instruções a seguir utilizando esse projeto.
Api rest utilizando spring boot com postegresql, jpa hibernate, validation</br>
swagger e cobertura de testes e2e, integration

# Pré-requisitos
Tests passed: 41 of 41

Implementar apenas a API (Backend)
Versão Java +8 (caso seja Java 8, verificar compatibilidade da sua IDE)
Versão Spring Boot >= 2.4
Banco de dados fica a seu critério (Sql, NoSql)
Seu projeto deve obrigatoriamente ter as anotações: @Repository, @Entity e @Controller
Documentação mínima da API (Swagger ou documento PDF)
No repository usando o metodo findBy sem a necessidade de escrever manualmente a query e realizando todas as buscas.

# Objetivo
Implementar para empresa de transporte de cargas SigaBem o endpoint para o cálculo do preço do frete:
Mudei alguns valores de entrada que foram propostos

Você deve calcular o valor total do frete e a data prevista da entrega.
"weight" -> "peso",
"zipCodeOrigin" -> "cepOrigem",
"zipCodeDestination" -> "cepDestino",
"recipientName" -> "nomeDestinatario",
"costFreight" -> "vlTotalFrete",
"expectedDeliveryDate" -> "dataPrevistaEntrega",

Considerar regras para calcular o valor do frete:
* CEPs com DDDs iguais tem 50% de desconto no valor do frete e entrega prevista de 1 dia
* CEPs de estados iguais tem 75% de desconto no valor do frete e entrega prevista de 3 dias
* CEPs de estados diferentes não deve ser aplicado o desconto no valor do frete e entrega prevista de 10 dias
* O valor do frete é cobrado pelo peso da encomenda, o valor para cada KG é R$1,00

Seu input de entrada deve ser “peso”, “cepOrigem”, “cepDestino” e “nomeDestinatario“
Seguindo o principio da responsabilidade única, DispatchStoreController cuida da criação e DispatchFindController da busca, são os únicos controladores

Você utilizará a API gratuita de consulta de CEP abaixo:
Documentação da API: https://viacep.com.br/
Exemplo do GET: https://viacep.com.br/ws/<CEP_A_CONSULTAR>/json/
No DispatchStoreController tem a busca isolada dos ceps, com try catch, caso não encontre e desconto.

Endpoint pode ser público
Response/Output deve possuir: “vlTotalFrete” e “dataPrevistaEntrega”, “cepOrigem” e “cepDestino”
Deve ser persistido no banco os valores da cotação os valores consultados: “peso”, “cepOrigem”, “cepDestino”, “nomeDestinatario”, “vlTotalFrete”, “dataPrevistaEntrega” e “dataConsulta”
Implementação do desconto com ddd, localidade, peso da encomenda e dia previsto para entregar.

Todos os testes passaram com exceção do shouldFindRecipientName no DispatchFindControllerTest, que por algum motivo</br>
que não consegui resolver, fazia o registr no banco, mas não me retornava ele

Busca por nome, id, peso, data prevista para entregar, cep de origem, cep de destino, frete


http://localhost:3333/swagger-ui/#/

# Critérios de avaliação:
* Implementação das regras de negócios para o cálculo do frete
* Boas práticas de programação, arquitetura e padrões de projetos
Em src -> main -> resource -> aplication.properties, necessário colocar os dados do banco para rodar aplicação

# Entrega:
* Disponibilizar um link do repositório no GitHub e encaminhar para developer@cd2.com.br
```diff

+ POST /api/v1/dispatch/store
@@ GET /api/v1/dispatch/find_by_id @@
@@ GET /api/v1/dispatch/find_by_recipient_name @@
@@ GET /api/v1/dispatch/zip_code_origin @@
@@ GET /api/v1/dispatch/zip_code_destination @@
@@ GET /api/v1/dispatch/total_freight @@
@@ GET /api/v1/dispatch/find_by_weight @@
@@ GET /api/v1/dispatch/expected_delivery_date @@

...




1,090 changes: 1,090 additions & 0 deletions Test Results - com_testInstivo_demo_in_demo.html

Large diffs are not rendered by default.

Loading