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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.idea

blog-parent.iml
183 changes: 140 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,59 +1,156 @@
# Quer fazer parte da Superbid Webservices?
# blog

Obrigado por se interessar em fazer parte do nosso time!
This is a simple blog application that uses Spring Boot, H2, Spring Data JPA and Spring Rest. This application provides the services of creating, editing, searching and deleting a post.

Esse teste faz parte de uma das etapas do nosso processo de seleção e o objetivo é avaliarmos o seu nível de conhecimento nas tecnologias que usamos. Nesse teste você terá 2 tarefas:
## Requirements
* Maven
* Java 8 and up

* responder um questionário sobre tecnologia e metodologia de desenvolvimento
* construir uma aplicação simples para termos ideia de como é o seu código e o que você considera importante em um projeto
## Usage

O questionário e a especificação da aplicação estão logo abaixo.
Application is using Maven as a dependency management system, so all required libraries should be downloaded automatically. The project use Spring Boot and H2 running in in-memory mode is used as a database. All these services are configured automatically and no action from user is required to set them up.

**A sua entrega será feita através de um Pull Request nesse repositório**. Faça um fork do repositório, implemente o seu código, responda as questões no `README.md` e faça um pull request. Sinta-se a vontade para colocar quaisquer outras informações que você considere pertinente no `README`.
```
$ git clone git://github.com/igotavares/blog.git
$ cd blog/
$ mvn compile
$ cd blog-war/
$ mvn spring-boot:run
```

# Questionário
## Tests

* Você já trabalhou com Spring Boot?
* O que você conhece sobre micro-serviços?
Following the order of the commands below it will be possible to test the services obtaining the respective results

Testing the create post service

```
curl -H "Content-Type: application/json" --request POST -d "{\"title\":\"Welcome\",\"description\":\"to the new world\",\"publicationDate\":\"2018-01-01 00:00:00\"}" localhost:8080/blog/posts
```

Result

```
{"id":1}
```

Testing post search service

```
curl localhost:8080/blog/posts
```

Result

```
[{"id":1,"title":"Welcome","description":"to the new world","publicationDate":"2018-01-01 00:00:00"}]
```

Testing the post search service by id

```
curl localhost:8080/blog/posts/1
```

Result

```
{"id":1,"title":"Welcome","description":"to the new world","publicationDate":"2018-01-01 00:00:00"}
```

Testing the post change service

```
curl -H "Content-Type: application/json" --request PUT -d "{\"id\":1,\"title\":\"Title\",\"description\":\"Description\",\"publicationDate\":\"2019-01-01 00:00:00\"}" localhost:8080/blog/posts/1
```

Testing the post delete service

```
curl --request DELETE localhost:8080/blog/posts/1
```

### Postman

```
https://www.getpostman.com/collections/b3680b4f92c7ef093a57
```

## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

## Release History

* 1.0-SNAPSHOT
* Work in progress


## Question�rio


* Voc� j� trabalhou com Spring Boot?

Sim, a maorias dos projetos na empresa na qual estou trabalhando utiliza Spring Boot.

* O que voc� conhece sobre micro-servi�os?

Tenho conhecimento sobre os conceitos, alguns padr�es adotados na arquitetura de micro-servi�os e tive a oportunidade de trabalhar em um processo de implanta��o de micro-servi�os na empresa que trabalho.


* Cite algumas vantagens e desvantagens de usar esse modelo arquitetural
* Qual a sua experiência na construção de APIs?
* Alguma vez já teve que construir uma API pública?
* Como você controla o acesso à API?
* Como você trata questões da evolução das APIs?
* Você acha válido fazer testes automatizados?
* Imagine que você precisa construir uma API que vai ter um grande número de acessos. Como você garante que ela terá um tempo de resposta acessível durante um pico de acesso?
* Você conhece ou já trabalhou com containers?
* E orquestradores tipo Kubernetes ou Docker Swarm?
* Fale um pouco sobre o processo de versionamento de aplicações. Conhece Git?
* Como você usa branches, tags, etc. Tem algo no Github ou Gitlab?
* Você conhece CI/CD? Já chegou a fazer algum pipeline de CI/CD completo?
* Você já trabalhou com SCRUM ou Kanban?
* Conte um pouco sobre como foi fazer parte de um time ágil, quais dificuldades tiveram e como conseguiram superar.
As vantagens s�o que as aplica��es ficam mais flex�veis, escal�veis e com manuten��o mais simples.
A desvantagem � o aumento da complexidade das aplica��es.

* Qual a sua experi�ncia na constru��o de APIs?

Foram poucas empresas na qual trabalhei que n�o tinham APIs. Ent�o j� criei APIs e dei manuten��es em algumas APIs,

# Teste prático (prazo 3 dias)
* Alguma vez j� teve que construir uma API p�blica?

N�o at� o presente momento.

* Como voc� controla o acesso � API?

Utilizando Token.

* Como voc� trata quest�es da evolu��o das APIs?

A evolu��o de uma API deve ser algo meticulosamente analisado para poder mensurar os seus impactos nas solu��es que elas afetam. Em alguns casos � recomendado trabalhar com um processo de versionamento dos servi�os, caso a API contenha uma grande quantidade de consumidores.

* Voc� acha v�lido fazer testes automatizados?

Sim, trabalho no processo de implata��o de testes automatizados na fase de desenvolvimento. Atuo como Coaching de testes.

Considerando a funcionalidade de um blog, construa uma API Rest contendo as operações de básicas de CRUD: inclusão, atualização, exclusão e consulta. O recurso em questão deve ter a seguinte estrutura:
* Imagine que voc� precisa construir uma API que vai ter um grande n�mero de acessos. Como voc� garante que ela ter� um tempo de resposta acess�vel durante um pico de acesso?

Escalando a aplica��o utilizando cluster e load balance.

* Post
* ID
* Data de Publicação
* Título
* Descrição
* Voc� conhece ou j� trabalhou com containers?

## Tecnologias utilizadas
Tenho conhecimento. No momento n�o tenho experi�ncia na utiliza��o do docker em uma empresa, mas estou estudando, experimentando e adotando o docker nos projetos pessoais.

* Spring Boot
* Java 8
* Hibernate
* Banco de dados em memória
* Postman Collection (para testes da api)
* E orquestradores tipo Kubernetes ou Docker Swarm?

## Critérios a serem avaliados:
Tenho conhecimento, mas n�o trabalhei com os orquestradores.

* Fale um pouco sobre o processo de versionamento de aplica��es. Conhece Git?

Conhe�o o git. O versionamento de aplica��es � extremamente importante no desenvolvimento de software pois ele armazena o seu c�digo fonte mantendo o hist�rico. O versionamento facilita no desenvolvimento em equipes, pois a equipe consegue trabalhar em uma determinada vers�o do software sem impactar outras equipes ou uma derminada entrega.

* Qualidade de Código
* Cobertura de Testes
* Definição dos Serviços Rest
* Documentação
* Qualquer critério que vocês considere pertinente
* Como voc� usa branches, tags, etc. Tem algo no Github ou Gitlab?
Utilizo as branches da seguinte forma: utilizo a master como Tag e nela cont�m a �ltima vers�o da aplica��o que est� em produ��o. Develop � a �ltima vers�o da aplica��o que est� em desenvolvimento, as feature branches s�o criadas para conter as novas demandas, hotfixes s�o as branches criadas para corre��es de bug de produ��o e a release branches s�o criadas para manter o c�digo que ser� disponibilizado em outro ambiente que n�o � o de produ��o.
Tenho projeto no Github e no Bitbucket.

Uma dica: pense no teste prático como sendo um algo real que você faria ou gostaria de fazer no seu trabalho, pois esse será o seu cartão de visitas.
* Voc� conhece CI/CD? J� chegou a fazer algum pipeline de CI/CD completo?
Conhe�o, a empresa na qual trabalho j� tinha um processo CD. Na empresa atuei na arquitetura, desenvolvimento e implata��o dos testes de aceita��o seguindo a metodologia do BDD, configurei o jenkins e o servidor para a execu��o dos testes automatizados. Automatizei as execu��es dos scripts de banco de dados nos ambientes.
Sim, j� criei um pipeline completo.

* Voc� j� trabalhou com SCRUM ou Kanban?
Sim, trabalhei com os dois.

* Conte um pouco sobre como foi fazer parte de um time �gil, quais dificuldades tiveram e como conseguiram superar.
Participei de um processo de implata��o do Scrum na empresa que trabalho. Foram alguns meses de trabalho �rduo para conseguir a unifica��o da equipe, manter os rituais do SCRUM e manter as scripts sem altera��o de escopo. O Processo funcionou por alguns meses mas foi desfeito com a entrada da nova ger�ncia.


3 changes: 3 additions & 0 deletions blog-common/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
target

blog-common.iml
30 changes: 30 additions & 0 deletions blog-common/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<artifactId>blog-parent</artifactId>
<groupId>com.ibeans</groupId>
<version>1.0-SNAPSHOT</version>
</parent>

<artifactId>blog-common</artifactId>

<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
</dependencies>

</project>
37 changes: 37 additions & 0 deletions blog-common/src/main/java/com/ibeans/blog/dta/PostDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.ibeans.blog.dta;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
* Created by igotavares on 07/08/2018.
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PostDTO implements Serializable {

private Long id;

private String title;

private String description;

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime publicationDate;

public PostDTO(Long id) {
this(id, null, null, null);
}

public PostDTO(String title, String description, LocalDateTime publicationDate) {
this(null, title, description, publicationDate);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.ibeans.blog.exception;

/**
* Created by igotavares on 07/08/2018.
*/
public class BlogException extends RuntimeException {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.ibeans.blog.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

/**
* Created by igotavares on 07/08/2018.
*/
@ResponseStatus(value= HttpStatus.NOT_FOUND, reason="No such Post")
public class PostNotFoundException extends BlogException {
}
3 changes: 3 additions & 0 deletions blog-war/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
target

blog-war.iml
5 changes: 5 additions & 0 deletions blog-war/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
Loading