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 number Diff line number Diff 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/
19 changes: 19 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
wrapperVersion=3.3.2
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,23 +54,37 @@ Criar um cadastro de veículos com os seguintes campos:
- **Documentação:** Explique no README os benefícios de usar GraphQL no contexto do projeto, descrevendo também como configurar e rodar o BFF localmente.
- **Questões:** Além da implementação, responda às seguintes perguntas no README:
- **Pergunta 1**: Explique o que é o GraphQL e como ele se diferencia de uma API REST tradicional.
- O graphQL se trata de uma linguagem de consulta para sua API, ele permite que o cliente solicite apenas os dados que ele precisa, e nada mais, enquanto uma API REST tradicional retorna todos os dados de uma vez.
- **Pergunta 2**: Descreva como você implementaria o uso do GraphQL como BFF (Backend for Frontend) neste projeto de gerenciamento de estacionamento. Forneça exemplos práticos.
- Se tratando de um BFF eu faria uma api separada com o objetivo de ser meu gateway onde nela eu realizaria a chamada para as apis posteriores e retornaria o resultado atraves dela.
- **Pergunta 3**: Quais são os benefícios de utilizar GraphQL em relação à flexibilidade das consultas? Cite possíveis desafios ao utilizá-lo.
- Identifiquei que inicialmente teriamos que planejar bem a modelagem dos dados, para que a consulta seja eficiente, e alem disso a curva de aprendizado para quem nao conhece graphQL pode ser um desafio.

### 2. Banco de Dados (Nível Básico)
- **Pergunta 1**: Explique os principais conceitos de um banco de dados relacional, como tabelas, chaves primárias e estrangeiras.
- banco de dados reacinal possuem tabelas para criar uma representacao dos dados, as chaves primarias sao utilizadas para identificar unicamente um registro na tabela, as chaves estrangeiras sao utilizadas para relacionar tabela
- **Pergunta 2**: No contexto de uma aplicação de gerenciamento de estacionamento, como você organizaria a modelagem de dados para suportar as funcionalidades de controle de entrada e saída de veículos?
- Como se trata de uma aplicacao de gerenciamento de estacionamento, eu criaria uma tabela para cada entidade, estabelecimento, veiculos, controle de entrada e saida, e faria relacionamento entre elas atraves de chaves estrangeiras.
- **Pergunta 3**: Quais seriam as vantagens e desvantagens de utilizar um banco de dados NoSQL neste projeto?
- Acredito que usando nosql ficaria mais facil de escalar a aplicacao, porem a modelagem de dados seria mais complexa, e a performance poderia ser prejudicada.

### 3. Agilidade (Nível Básico)
- **Pergunta 1**: Explique o conceito de metodologias ágeis e como elas impactam o desenvolvimento de software.
- Metodologias ageis sao metodologias de desenvolvimento de software que visam entregar valor ao cliente de forma rapida e continua, atraves de iteracoes curtas e feedbacks constantes.
- elas ajudam a itentificar problemas mais cedo, e a entregar valor ao cliente de uma maneira mais satisfatoria.
- **Pergunta 2**: No desenvolvimento deste projeto, como você aplicaria princípios ágeis para garantir entregas contínuas e com qualidade?
- Posso realizar uma abordagem de desenvolvimento de software incremental, onde eu entregaria funcionalidades em pequenas partes, e com feedbacks constantes do cliente. Para garantir um pouco mais de qualidade, eu poderia utilizar a pratica de TDD.
- **Pergunta 3**: Qual a importância da comunicação entre as equipes em um ambiente ágil? Dê exemplos de boas práticas.

- Extremamente importante, pois ajuda tanto a alinhar expectativas, quanto a identificar problemas mais cedo. Daily seria um exemplo simples
### 4. DevOps (Nível Básico)
- **Pergunta 1**: O que é DevOps e qual a sua importância para o ciclo de vida de uma aplicação?
- DevOps tem como objetivo facilitar processos de desenvolvimento e operacao, atraves de automacao, colaboracao e monitoramento. A importancia dele e garantir que a aplicacao seja entregue de forma rapida e com qualidade.
- **Pergunta 2**: Descreva como você integraria práticas de DevOps no desenvolvimento desta aplicação de estacionamento. Inclua exemplos de CI/CD.
- Eu poderia utilizar uma ferramenta de CI/CD para automatizar o processo de deploy da aplicacao, e monitorar a aplicacao atraves de ferramentas de monitoramento.
- Nessa aplicacao por exemplo para facilitar o deploy eu poderia dockerizar a aplicacao, e utilizar o github para automatizar o processo de deploy.
- Daria para usar o ansible que ajudaria a organizar arquivos yaml segregando melhor os ambientes e criar comandos para facilitar geracao dessas profiles antes de dockerizar.
- **Pergunta 3**: Cite as ferramentas que você usaria para automatizar o processo de deploy e monitoramento da aplicação.
- Docker, Github, Ansible, monitoramento eu poderia usar o prometheus e grafana.

## Submissão
Crie um fork do teste para acompanharmos o seu desenvolvimento através dos seus commits.
Expand Down
52 changes: 52 additions & 0 deletions READMEAPPLICATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
### Tecnologias usadas

- [Spring Boot](https://spring.io/projects/spring-boot)
- [PostgreSQL](https://www.postgresql.org/)
- [Docker](https://www.docker.com/)
- [Spring Doc Open API](https://springdoc.org/)
- [Lombok](https://projectlombok.org/)
- [Maven](https://maven.apache.org/)
- [Java 17](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
- [Mockito](https://site.mockito.org/)
- [JUnit](https://junit.org/junit5/)


### Chamadas

- **Estabelecimento:** CRUD
- **GET** /estabelecimento/
- **GET** /estabelecimento/{id}
- **POST** /estabelecimento/
- **PUT** /estabelecimento/{id}
- **DELETE** /estabelecimento/{id}

- **Veículos:** CRUD
- **GET** /veiculos/
- **GET** /veiculos/{id}
- **POST** /veiculos/
- **PUT** /veiculos/{id}
- **DELETE** /veiculos/{id}

- **Controle de entrada e saída de veículos**
- **GET** /entrada-saida/vagas-disponiveis
- **POST** /entrada-saida/entrada
- **POST** /entrada-saida/saida

### Documentacao via Swagger

Adicionei um redirecinamento no endpoint padrao "/" que redireciona para o swagger diretamente

- **Swagger:** http://localhost:8080/v3/api-docs

### Como rodar o projeto

1. Clone o projeto
2. Entre na pasta do projeto
3. Execute o comando `docker-compose up --build` para que ele suba uma instancia do postgres
4. Execute o comando `mvn clean install` para que ele baixe as dependencias e gere o jar
5. Execute a aplicacao na IDE que desejar ou execute o comando `java -jar target/{nome-do-jar}.jar` para rodar o jar gerado

### Observações

- Criei uma pasta `postman` caso deseje ultizar o postman para testar as chamadas
- Criei uma pasta `sampledata` caso queria alimentar o banco com alguns scripts python [sim eu sei que poderia ser escrito na migration do flyway xD]
12 changes: 12 additions & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: '3'

services:
postgres:
image: postgres:17.0-alpine3.19
container_name: postgresdatasource
environment:
POSTGRES_USER: localuser
POSTGRES_PASSWORD: localpassword
POSTGRES_DB: fcamaradatabase
ports:
- 5432:5432
Loading