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

Luan #2

Open
wants to merge 19 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
193 changes: 79 additions & 114 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,114 +1,79 @@
# Por que trabalhar na Contabilizei

**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.

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 :)

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.

### O que fazem os Ninjas da Contabilizei? O que comem (e bebem)? Onde vivem?

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 :)

# O trabalho por aqui

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

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)

# O que preciso fazer?

Vamos ser práticos e diretos, se você quer trabalhar conosco siga os passos abaixo:

* 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.

# O desafio (CRUD de pedidos)

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 JavaEE
* RESTful API JAX-RS utilizando Servlets ou framework Jersey
* Banco de dados SQL (MySQL, PostgreSQL, HSQLDB) ou NOSQL(MongoDB, Cassandra)

#### Front-end

* Single Page Application utilizando apenas HTML5 e CSS3
* Javascript puro / JQuery (e plugins)
* Bootstrap (http://getbootstrap.com/)
* AngularJS 1.x e Angular Material Design (estes são opcionais e são diferenciais)

**Atenção:** não utilize frameworks ou tecnologias não mencionados acima.

### 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.

# StarStore
Teste para vaga de dev Fullstack na Contabilizei.

**StarStore** é o melhor gerenciador de pedidos de naves espaciais da galáxia.

## Serviços
1. Listagem de pedidos
2. Consulta de pedido
3. Atualização de pedido
4. Remoção de pedido

## Tecnologias
```
Java
Apache Tomcat 7
Mongodb 3.2.5
Angularjs 1.5
REST API Jersey
Bootstrap 4
HTML5
```

## Exemplo de documento de pedido armazenado no Mongodb
```
{
"_id" : ObjectId("579d66434795871de83aefc2"),
"numero" : 14,
"data_de_emissao" : ISODate("2016-07-30T23:45:23.869-03:00"),
"valor_total" : 50,
"cliente" : {
"cpf" : 123345,
"nome" : "Luan Andrade",
"email" : "[email protected]",
"telefone" : NumberLong(2433333333)
},
"produtos" : [
{
"codigo" : "ABC",
"descricao" : "Nave 1",
"quantidade" : 5,
"valor_unitario" : 10
}
]
}
```

## Diretórios
```
/contabilizei - Projeto em Java com a API REST
/starstore - Projeto em Angularjs da StarStore
/screens - imagens da aplicação
```

## Rodando
1. Abra o projeto **contabilizei** no Eclipse
2. Rode o projeto no servidor desejado
3. Abra a aplicação **starstore** no servidor e inicie
4. Navegue pelos menus

**Pode ser necessário definir credenciais de acesso ao seu banco de dados Mongodb!!**

## Comandos para testar a API (Pode ser feito via POSTMAN)
```
1. Retornar um pedido pelo número (GET)
curl "http://localhost:8080/contabilizei/rest/pedidos/2"

2. Retornar todos os pedidos (GET)
curl "http://localhost:8080/contabilizei/rest/pedidos/"

3. Salvando um pedido (POST)
curl -X POST -H "Accept: application/json" -H -d '{"valorTotal":100,"produtos":[{"codigo":"ABC","descricao":"DEF","quantidade":10,"valorUnitario":9},{"codigo":"ABCDEF","descricao":"GHI","quantidade":19,"valorUnitario":7}],"cliente":{"cpf":1234567890,"nome":"Joao","telefone":33333333,"email":"[email protected]"}}' "http://localhost:8080/contabilizei/rest/pedidos/"

3. Deletando pedido pelo numero (DELETE)
curl -X DELETE "http://localhost:8080/contabilizei/rest/pedidos/4"

4. Atualizando pedido (PUT)
curl -X POST -H "Accept: application/json" -H -d '{"numero": 3,"valorTotal":101,"produtos":[{"codigo":"ABC","descricao":"DEF","quantidade":10,"valorUnitario":9},{"codigo":"ABCDEF","descricao":"GHI","quantidade":19,"valorUnitario":7}],"cliente":{"cpf":1234567890,"nome":"Joao","telefone":33333333,"email":"[email protected]"}}' "http://localhost:8080/contabilizei/rest/pedidos/"

```
18 changes: 18 additions & 0 deletions contabilizei/.classpath
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry including="**/*.java" kind="src" path="src/main/java"/>
<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
<classpathentry kind="var" path="M2_REPO/asm/asm/3.1/asm-3.1.jar"/>
<classpathentry kind="var" path="M2_REPO/com/sun/jersey/jersey-core/1.8/jersey-core-1.8.jar" sourcepath="M2_REPO/com/sun/jersey/jersey-core/1.8/jersey-core-1.8-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/com/sun/jersey/jersey-server/1.8/jersey-server-1.8.jar" sourcepath="M2_REPO/com/sun/jersey/jersey-server/1.8/jersey-server-1.8-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/4.8.2/junit-4.8.2.jar" sourcepath="M2_REPO/junit/junit/4.8.2/junit-4.8.2-sources.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="src/main/java/com/luan/lib/mongo-java-driver-3.3.0.jar"/>
<classpathentry kind="output" path="target/classes"/>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
</attributes>
</classpathentry>
</classpath>
36 changes: 36 additions & 0 deletions contabilizei/.project
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>contabilizei</name>
<comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
</natures>
</projectDescription>
5 changes: 5 additions & 0 deletions contabilizei/.settings/org.eclipse.jdt.core.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.6
4 changes: 4 additions & 0 deletions contabilizei/.settings/org.eclipse.m2e.core.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
18 changes: 18 additions & 0 deletions contabilizei/.settings/org.eclipse.wst.common.component
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="contabilizei">
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<property name="java-output-path" value="/target/classes"/>
<property name="context-root" value="contabilizei"/>
<dependent-module archiveName="asm-3.1.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/asm/asm/3.1/asm-3.1.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
<dependent-module archiveName="jersey-core-1.8.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/com/sun/jersey/jersey-core/1.8/jersey-core-1.8.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
<dependent-module archiveName="jersey-server-1.8.jar" deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/com/sun/jersey/jersey-server/1.8/jersey-server-1.8.jar">
<dependency-type>uses</dependency-type>
</dependent-module>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
</wb-module>
</project-modules>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<faceted-project>
<fixed facet="jst.java"/>
<fixed facet="jst.web"/>
<installed facet="jst.web" version="2.4"/>
<installed facet="jst.java" version="6.0"/>
</faceted-project>
68 changes: 68 additions & 0 deletions contabilizei/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.luan.common</groupId>
<artifactId>Contabilizei</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Contabilzei Webapp</name>
<url>http://maven.apache.org</url>

<repositories>
<repository>
<id>maven2-repository.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2/</url>
<layout>default</layout>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>

<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.3.0</version>
</dependency>

<!-- For Jersey -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.8</version>
</dependency>

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.2</version>
</dependency>

</dependencies>

<build>
<finalName>Contabilizei</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>

</project>
Loading