Skip to content
This repository has been archived by the owner on Jul 1, 2021. It is now read-only.

Finalizado projeto para o teste seletivo #3

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
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
130 changes: 32 additions & 98 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,112 +1,46 @@
# Por que trabalhar na Contabilizei
# Minha solução para o Projeto de Pedidos

**Eleita a melhor startup B2B da América Latina em 2016, a Contabilizei** é um escritório de contabilidade online, líder de mercado, com sede em Curitiba (PR). Nosso propósito é resolver a dor e burocracia de micro e pequenas empresas ao se manterem regulares com o governo. Somos contadores, só que online, simples assim. Acreditamos no poder da tecnologia para melhorar continuamente a vida das pessoas.
Projeto desenvolvido para o processo seletivo da Contabilizei

Se você tem espírito e comportamento empreendedor, muita disposição e proatividade para trabalhar em uma empresa em franca expansão, você é um forte candidato :)
## Tecnologias utilizadas

Como Desenvolvedor Full-stack você irá atuar no desenvolvimento de soluções em arquitetura Java Web MVC com RestFul APis (JAX-RS), integrações com outros sistemas (SOAP, XML, JSON), banco de dados NoSQL e soluções escaláveis, participando de todo o processo de desenvolvimento, desde tomadas de decisões à codificação e testes.
- Back-End
* Java EE
* Jersey Framework
* Tomcat 8
* MySQL

### O que fazem os Ninjas da Contabilizei? O que comem (e bebem)? Onde vivem?
- Front-End
* HTML5
* Bootstrap ~3.3.7
* JavaScript
* AngularJS ~1.5.8

Somos um time de desenvolvimento ágil, focado em fazer as coisas acontecerem. Trabalhamos com Kanban, entregas contínuas, Git, Cloud, aplicações distribuídas e mais uma porrada de tecnologias novas... Queremos que nosso cliente tenha o produto e a experiência mais fodásticos do planeta. Gostamos de compartilhar ideias, testar tecnologias e de cerveja :)
## Estruturas de Pastas
- O projeto Back-End está localizado na pasta servico_rest
- A Single Page Application está localizada na pasta app_pedidoscontabilizei

# O trabalho por aqui
## Como executar o projeto

Que tal fazer parte de um time com atitude “get Fˆ%#ing things done”? Participar de uma das maiores disrupções no mercado? Ter a oportunidade de trabalhar com tecnologias e conceitos inovadores, como:
* Práticas ágeis como Kanban / Scrum
* Google Cloud Platform
* Escalabilidade
* Micro services e aplicações distribuídas
* Kubernetes
* Git
* AngularJs
* Material Design
* BDD
Foi desenvolvido um Maven Project no Eclipse utilizando Java 8 e como Server Runtime o Tomcat 8,
assim que você importar o projeto para a IDE, o adicione ao Tomcat e execute o comando Maven Update Project
para atualização das dependêcias.

Mais informações sobre a vaga você encontra aqui: [Desenvolvedor Full Stack Java na Contabilizei](https://jobs.lever.co/contabilizei/826c32bd-d800-475a-9f05-531e86dc4ea3)
Crie uma banco de dados no MySQL com o nome "pedidoscontabilizei" e altere os dados de acesso ao MySQL no arquivo
META-INF/persistence.xml dentro da pasta resources do projeto.

# O que preciso fazer?
Certifique que o Tomcat esteja sendo executado na porta padrão 8080, pois todos as requisições da Single Page
estão sendo executadas nessa porta.

Vamos ser práticos e diretos, se você quer trabalhar conosco siga os passos abaixo:
No desenvolvimento da Single Page Application, foi utilizado o NPM como gerenciador de pacotes após clonar o
projeto execute ```npm install [opcional --save]``` para baixar suas dependências.

* Faça um "fork" desse projeto para sua conta GitHub.
* Implemente o desafio descrito no tópico abaixo.
* Faça um push para seu repositório com o desafio implementado.
* Envie um email para ([email protected]) avisando que finalizou o desafio com a url do seu fork.
* Cruze os dedos e aguarde nosso contato.
Para evitar problemas com Access-Control-Allow-Origin dos Browsers, o projeto deve ser executado em cima de um
simples servidor HTTP local, pode ser o do ```node http-server``` que é instalado através
```npm install http-server -g``` ou o do Python caso tenha instalado na máquina.

# O desafio (CRUD de pedidos)
Exemplos de como executar a SPA, dentro da pasta app_pedidoscontabilizei execute:

Você deverá criar 2 aplicações para cadastramento de pedidos de venda:

**Back-end:** aplicação JavaEE baseada em Web Services no padrão RESTful JAX-RS.

**Front-end:** Single Page Application que se comunique com estes serviços.

A aplicação Back-end dever ter, ao menos, serviços para: inclusão, alteração, exclusão e listagem dos pedidos.

Pedidos deverão conter:
* número
* data de emissão
* cliente
* lista de produtos
* valor total

Cada produto do pedido deve ter:
* código
* descrição
* quantidade
* valor unitário

No pedido, deve constar as seguintes informações do cliente:
* cpf ou cnpj
* nome ou razão social
* telefone
* e-mail

### Tecnologias

Escolha umas das opções abaixo para implementar sua solução. A modelagem dos dados fica a seu critério. Não se preocupe com autenticação ou multitenancy.

#### Back-end

**Opção 1**

* Aplicação JavaEE utilizando framework [**Google App Engine para Java**](https://cloud.google.com/appengine/)
* Banco de dados NOSQL [Datastore](https://cloud.google.com/datastore/)
* RESTFul API com [Google Endpoints](https://cloud.google.com/appengine/docs/java/endpoints/) ou Jersey JAX-RS

**Opção 2**

* Aplicação pura Java EE (não utilize Spring, Struts, EJB, etc)
* RESTful API JAX-RS utilizando Servlets ou framework Jersey
* Banco de dados SQL (MySQL, PostgreSQL, HSQLDB) com JPA ou NOSQL(MongoDB, Cassandra)

#### Front-end

* Single Page Application utilizando apenas HTML5 e CSS3
* Javascript puro / JQuery (e plugins)
* AngularJS 1.x (será diferencial)
* Bootstrap (http://getbootstrap.com/) ou Angular Material Design (será diferencial)

### Arquitetura e documentação

No arquivo README do projeto explique o funcionamento e a arquitetura da solução adotada na sua implementação. Descreva também os passos para executar corretamente seu projeto.

### Avaliação

Entre os critérios de avaliação estão:

* Facilidade de configuração do projeto
* Performance
* Código limpo e organização
* Documentação de código
* Documentação do projeto (readme)
* Arquitetura
* Boas práticas de desenvolvimento
* Design Patterns

# Sobre você

Queremos saber um pouco mais sobre você também :) Por favor, responda o questionário do arquivo [questions.md](questions.md) e envie junto com seu projeto.
- Utilizando Python: ```python -m http.server 8888```
- Utilizando node: ```http-server -p 8888```

5 changes: 5 additions & 0 deletions app_pedidoscontabilizei/app/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(function () {
'use strict';

angular.module('pedidos_app', []);
})();
84 changes: 84 additions & 0 deletions app_pedidoscontabilizei/app/controllers/clientes_controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
(function () {
'use strict';

angular.module('pedidos_app').controller('clientesController', clientesController);

clientesController.$inject = ['clienteAPI', '$scope'];

function clientesController(clienteAPI, $scope, $uibModal) {
$scope.clientes = [];
$scope.cliente;
$scope.escondeAdicionar = false;

$scope.buscaTodos = function () {
buscarTodos();
}

$scope.carregarFormulario = function (documento) {
clienteAPI.buscaPorCPF(documento).success(function (data) {
$scope.cliente = data;
$scope.escondeAdicionar = true;

$('#documentoCliente').attr('readonly', 'documentoCliente');
});
}

$scope.inserir = function (cliente) {
clienteAPI.inserir(cliente).success(function (data) {
limparDados();
})
.error(function (data) {
mostraErro(data);
});
}

$scope.alterar = function (cliente) {
clienteAPI.alterar(cliente).success(function (data) {
limparDados();
})
.error(function (data) {
mostraErro(data);
});
}

$scope.excluir = function (cpf) {
clienteAPI.excluir(cpf).success(function (data) {
limparDados();
})
.error(function (data) {
mostraErro(data);
});
}

$scope.cancelar = function () {
limparDados();
}

function buscarTodos() {
clienteAPI.buscaTodos().success(function (result) {
$scope.clientes = result;
});
}

function limparDados() {
$scope.cliente = null;
$scope.escondeAdicionar = false;

resetCliente();
buscarTodos();
}

function resetCliente() {
$('#nomRazaoSocial').val('');
$('#cpfCnpj').val('');
$('#telefone').val('');
$('#telefone').val('');
$('#documentoCliente').removeAttr('readonly', 'documentoCliente');
}

function mostraErro(data) {
alert("Infelizmente ocorreu um erro. Verifique seus dados e tente novamente mais tarde");
}
}

})();
Loading