Giter Club home page Giter Club logo

mobiauto-backend-interview's Introduction

Mobiauto Backend Interview

Teste técnico com a proposta de desenvolvimento de um negócio que envolvem questões práticas e teóricas relacionadas à arquitetura de sistemas e desenvolvimento backend em Java

Status do projeto: Em Desenvolvimento

Tópicos

🔹Descrição do projeto

🔹Funcionalidades

🔹Imagens da Aplicação

🔹Pré-requisitos

🔹Libs

🔹Rodando o Back End (servidor)

🔹Como rodas os testes

🔹Banco de Dados

🔹Motivação de arquitetura

🔹Testes

🔹Proposta das Pastas

🔹Documentação Técnica

🔹Issues

🔹Contato

🔹Desenvolvedores

Descrição

O sistema Mobiauto tem como objetivo fornecer uma poderosa ferramenta de gestão de Revendas de veículos, incluindo ferramentas como:

  • Cadastro de Revenda
  • Gestão de funcionários de cada revenda, com suas respectivas permissões
  • Gestão de oportunidade

Funcionalidades

O projeto ainda está em desenvolvimento e as próximas atualizações serão voltadas nas seguintes tarefas:

  • Gestão de revenda(Cadastro)
    • Criação de Revenda
    • Atribuição de usuário para revenda
  • Usuários
    • Gerenciamento de niveis de acessos
    • Criação de usuários e clientes
  • Gestão de Oportunidades
    • Overview de oportunides
    • Status da oportunidades
    • Atribuição de responsavel pela oportunidades
    • Distribuição inteligente de oportunidades sem resposáveis
    • Transferencia de oportunidade para outro responsavel

Imagens da Aplicação

Será disponibilizado em breve

Pré-requisitos

Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:

Obs.: Pode optar ou pelo IntelliJ IDEA ou VsCode, ambos são IDEs/Editor com muitas funcionalidades.

Libs

Rodando o Back End (servidor)

Opcao 1 - Local

# Clone este repositório

$ git clone https://github.com/mateusflorencio/mobiauto-backend-interview.git

# Acesse a pasta do projeto no terminal/cmd

$ cd mobiauto-backend

# Instale as dependências

$ mvn clean install

# Execute a aplicação

$ mvn spring-boot:run

# O servidor inciará na porta:8080 - acesse http://localhost:8080

Opcao 2 - Docker

# Clone este repositório

$ git clone https://github.com/mateusflorencio/mobiauto-backend-interview.git

# Acesse a pasta do projeto no terminal/cmd

$ cd mobiauto-backend

# Instale as dependências

$ mvn clean install

# Execute a aplicação

$ docker-compose up

# O servidor inciará na porta:8080 - acesse http://localhost:8080

Como rodas os testes

Assumindo que o projeto já foi clonado e as dependências já foram instaladas, basta executar o comando abaixo:

mvn test

Banco de Dados

O banco de dados utilizado é o H2, um banco de dados em memória, para acessar o console do banco de dados, acesse:

http://localhost:8080/h2-console

Configurações do banco de dados H2

Driver Class: org.h2.Driver
JDBC URL: jdbc:h2:mem:testdb
User Name: sa
Password: password

Motivação de arquitetura

A arquitetura do projeto foi pensada para ser escalável e de fácil manutenção, com isso foi utilizado o padrão de arquitetura de software Clean Architecture, que é uma arquitetura de software que visa separar as responsabilidades de cada camada do projeto, tornando o projeto mais organizado e de fácil manutenção. Mesmo não sendo um projeto grande, a ideia é que ele possa crescer e se tornar um projeto grande, com isso a arquitetura foi pensada para ser escalável e com um possivel mudança de framework ou banco de dados, a mudança seja feita de forma mais fácil e rápida.

Além disso foi escolhido o ecosistema spring, que é um dos mais utilizados no mercado, por ser um framework robusto e com uma grande comunidade, o que facilita a resolução de problemas e a implementação de novas funcionalidades, propriamente o Spring Web MVC, Spring Data JPA e Spring Security.

Dependedo da disponibilidade e escalabilidade do projeto pode ser estudado a mudança para o Spring webflux, que é uma versão reativa do spring boot, que é mais performático e escalável.

A arquitetura do projeto foi dividida em 4 grandes camadas e uma apenas de contracts, sendo elas: Application, Domain, External, Main e Data para abstrair a camada de persistência.

Application

A camada de Application é responsável por orquestrar as chamadas de serviços, ela é a camada mais externa da aplicação, onde as requisições HTTP são recebidas e os dados são enviados para a camada de Domain.

Domain

A camada de Domain é a camada mais interna da aplicação, ela é responsável por toda a lógica de negócio da aplicação, nela estão contidos os modelos de dados, os casos de usos e as exceções além das contratos de serviços.

External

A camada de External é responsável por toda a comunicação com o mundo externo, nela estão contidos todos os adaptadores, como repositories.

Main

A camada de Main é responsável por inicializar a aplicação, nela estão contidos os controllers, os mappers e as configurações de segurança, construções de beans e classes de configuração com suas respectivas factories.

Data

A camada de Data é responsável por abstrair a camada de persistência, nela estão contidos as interfaces de repositórios.

Testes

Os testes foram feitos utilizando o JUnit 5 e mockito. Foi focado o desenvolvimento de testes unitários, testando os casos de uso e os serviços. E com o teste de integração, testando a integração entre as camadas de Application e Domain.

Proposta das Pastas

├── src
│   ├── main
│   │   ├── java
│   │   │   ├── br.com.mobiauto
│   │   │   │   ├── application
│   │   │   │   │   ├── controllers
│   │   │   │   │   ├── mappers
│   │   │   │   ├── domain
│   │   │   │   │   ├── contracts
│   │   │   │   │   ├── exceptions
│   │   │   │   │   ├── models
│   │   │   │   │   ├── services
│   │   │   │   │   ├── usecases
│   │   │   │   ├── external
│   │   │   │   │   ├── adapters
│   │   │   │   │   │   ├── repositories
│   │   │   │   ├── main
│   │   │   │   │   ├── config
│   │   │   │   │   ├── controllers
│   │   │   │   ├── data
│   │   │   │   │   ├── repositories
│   │   │   │   │   ├── dtos
│   │   │   │   ├── MobiautoApplication.java
│   ├── test
│   │   ├── java
│   │   │   ├── br.com.mobiauto
│   │   │   │   ├── application
│   │   │   │   │   ├── controllers
│   │   │   │   ├── domain
│   │   │   │   │   ├── services
│   │   │   │   │   ├── usecases
│   │   │   │   ├── external
│   │   │   │   │   ├── adapters
│   │   │   │   │   │   ├── repositories
│   │   │   │   ├── integration

Documentação Técnica

Para mais informações sobre o projeto, acesse a documentação técnica.

Documentação Técnica

Issues

Sinta-se a vontade para contribuir com o projeto, abra uma issue ou envie um pull request.

Contato

Mateus Florêncio - [email protected]

Desenvolvedores


Mateus Florêncio

mobiauto-backend-interview's People

Watchers

Mateus Florencio avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.