O CarVerzel é um projeto utilizado para teste técnico em duas vagas da Verzel, contendo diversas tecnologias para fornecer uma solução completa, incluindo frontend, backend e um aplicativo mobile.
- Home page exibindo uma vitrine de carros;
- Os veículos devem estar ordenados por valor;
- Para PUT, POST, DELETE, deverá ter autenticação JWT, obtida por meio de login;
- O veículo deve possuir atributos de: id, nome, marca, modelo, foto;
- Aplicação deve conter todas rotas de CRUD;
- Backend deve ser uma API REST;
- Dados devem ser persistidos no banco de dados;
- Deve possuir um readme de orientações completa;
- Front end em Angular e mobile em Flutter;
- Prazo de sete dias;
-
Frontend
- Angular CLI: 16.1.4
- Node: 18.16.1
- Package Manager: npm 9.5.1
-
Backend
- Dotnet: 6.0.x
- Entity Framework Core: 6.0.x
- Entity Framework Core SqlServer: 6.0.x
- JwtBearer: 6.0.x
- AspNetCore.Authorization: 6.0.x
-
Mobile
- SDK: 33
- Flutter: 3.10.5
- Dart: 3.0.5
- DevTools: 2.23.1
-
Banco de Dados
- SQL Server: 2022
Antes de iniciar, verifique se você possui as mesmas versões utilizadas no projeto.
O projeto possui a API e o banco de dados hospedados no Azure. Caso deseje rodar localmente, siga os seguintes passos:
-
Comente no arquivo Program.cs a conexão com o Azure e insira sua string de conexão local no arquivo appSetings.json.
string azureDbConnectionString = builder.Configuration.GetConnectionString("CarVerzelAzureDb"); builder.Services.AddDbContext<CarVerzelContext>(options => { options.UseSqlServer(azureDbConnectionString); });
-
Utilize um banco de dados SQL Server local.
-
Realize as migrations e atualize o banco com os seguintes comandos:
dotnet ef migrations add Nome-da-Migration dotnet ef database update
-
Por fim, compile, execute a aplicação e acesse a rota /swagger para testar os endpoints.
dotnet build dotnet run
Acesse:
seu-local-host/swagger
-
Navegue para a pasta do frontend no terminal.
-
Instale as dependências com o comando:
npm install
-
Execute a aplicação localmente com o comando:
ng serve --open
Caso deseje compilar a aplicação manualmente, siga os passos abaixo:
-
Navegue até a pasta mobile no terminal.
-
Atualize as dependências com o comando:
flutter pub run get
-
Rode a aplicação com o comando:
flutter run
Lembre-se de que é necessário ter o Flutter SDK instalado em sua máquina.
Agora você está pronto para explorar o projeto CarVerzel em todas as suas plataformas! Caso precise de mais informações sobre as funcionalidades e uso da API, consulte a documentação disponível em seu-local-host/swagger
.
- GET api/carros
Este endpoint retorna uma lista de todos os carros cadastrados no banco de dados.
- GET api/carros/{id}
Este endpoint permite buscar um carro específico pelo seu ID.
- GET api/carros/preco
Este endpoint retorna uma lista de carros ordenados por preço, em ordem crescente.
- POST api/carros
Endpoint para cadastrar um novo carro na base de dados. Requer autenticação, apenas usuários com a role "admin" podem acessar este endpoint.
- PUT api/carros/{id}
Endpoint para atualizar as informações de um carro existente. Requer autenticação, apenas usuários com a role "admin" podem acessar este endpoint.
- DELETE api/carros/{id}
Endpoint para excluir um carro do banco de dados. Requer autenticação, apenas usuários com a role "admin" podem acessar este endpoint.
CarListComponent: Componente responsável por exibir a lista de carros cadastrados. A rota padrão (path: '') direciona para esse componente, ou seja, quando acessamos o aplicativo sem nenhuma rota específica, será exibida a lista de carros.
LoginComponent: Componente responsável por exibir a página de login. A rota '/login' direciona para esse componente.
CarFormComponent: Componente responsável por exibir o formulário de cadastro de um novo carro. A rota '/add-car' direciona para esse componente.
CarEditComponent: Componente responsável por exibir o formulário de edição de um carro existente. A rota '/carros/:id' direciona para esse componente, onde ":id" é o ID do carro que será editado.
Caso deseje testar a aplicação, sem instalar o SDK ou atualizar o flutter, dois instaladores (ANDROID) disponível na pasta instaladores.
Widgets: Três widgets customizados por mim, são usados na aplicação (alerta, espaçador e indicador de carregamento), para facilitar interação com usuário.
Components: Dois componentes para exibição do carro foram criados, para manipular de forma mais simples a exibição e retorno das requests.
Pages:
- Uma página de introdução, com link para github e breve explicação da aplicação
- Página de listagem dos carros utilizando endpoint de getAll e getPrice
- Página que ao mesmo tempo cria ou edita, dependendo se foi informado ou não o carId
- Página de login, responsável por logar e salvar o token de resposta. Ao logar com sucesso, são exibidos o botão de adicionar um carro (POST) e editar e excluir ao visualizar detalhes de um único carro (PUT e DELETE)
Citarei alguns objetivos que não conseguir atingir dos requisitos:
- Salvar imagem no Backend e banco de dados
- Handle de arquivo no Frontend