https://github.com/andrepfdev/teste-motocasystems-backend
Meu desafio Backend Junior para a Motoca - Laravel 10
https://github.com/andrepfdev/teste-motocasystems-backend
docker laravel laravel10 mariadb php php8
Last synced: 3 months ago
JSON representation
Meu desafio Backend Junior para a Motoca - Laravel 10
- Host: GitHub
- URL: https://github.com/andrepfdev/teste-motocasystems-backend
- Owner: andrepfdev
- Created: 2024-06-15T17:15:39.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2025-03-04T15:01:24.000Z (over 1 year ago)
- Last Synced: 2025-03-04T16:20:03.137Z (over 1 year ago)
- Topics: docker, laravel, laravel10, mariadb, php, php8
- Language: PHP
- Homepage:
- Size: 179 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Teste Motoca BackEnd
Este teste é a resolução do seguinte desafio: DESAFIO MOTOCA
## API Laravel 10
Este README detalha a aplicação back-end desenvolvida para o desafio de contratação da Motoca Systems, na vaga de Desenvolvedor Back-End. A aplicação segue as especificações fornecidas, utilizando Laravel e PostgreSQL para implementar uma **API CRUD** para as entidades "Produtos" e "Categorias". Observe a existência de duas branchs, em especial a **branch dev**.
### Funcionalidades
#### Entidades:
- Produtos
- Categorias
#### Operações CRUD:
##### Produtos:
- Criar
- Ler (todos os produtos e por ID)
- Atualizar
- Deletar
##### Categorias:
- Criar
- Ler (todas as categorias e por ID)
- Atualizar
- Deletar
#### Relacionamento:
Cada produto pertence a uma categoria (chave estrangeira **categoria_id** na tabela produtos).
Cada categoria pode ter vários produtos.
## Instalação
Para este projeto usou-se **Docker Sail**
1. Clone este repositório: `git clone https://github.com/andrepfdev/teste-motocaSystems-backEnd`;
2. Entre no diretório do projeto localmente: `cd teste-motocaSystems-backEnd`;
3. Instale as dependências do projeto: `composer install`; Talvez precise rodar primeiro: `composer update`;
4. Configure o arquivo **`.env`** com as informaçẽos de banco de dados que informei abaixo;
5. Incie o ambiente Docker com o comando: `./vendor/bin/sail up -d`;
6. Execute as migrations do banco de dados: `./vendor/bin/sail artisan migrate`;
7. Popule o banco de dados com os dados iniciais: `./vendor/bin/sail artisan db:seed`.
Observe os dados configurados nos arquivos `docker-compose.yml` e `.env` que possui, além do PostgreSQL, o gerenciador `pgAdmin4`.
| nº | Images |
|-----:|------------|
| 1| Laravel 10 |
| 2| PostgreSQL |
| 3| pgAdmin 4 |
#### pgAdmin4
-> URL: http://localhost:5050
-> User: admin@admin.com
-> Passord: admin

#### Banco de dados:
DB_CONNECTION=pgsql
DB_HOST=pgsql
DB_PORT=5432
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=password
### Endpoints
```
http://localhost/api/produtos
http://localhost/api/categorias
```
## Postman Teste

Link para o arquivo de testes: Download
Documento Postman: Clique aqui.
## Observações sobre o projeto:
### Models
Foram definidos os models:
```
- Category
- Product
```
Onde em Category existe a função `products` que possibilita a relação um para muitos (`hasMany`). E em Product, há a função `category`, estabelecendo a relação `belongsTo`, possibilitando a relação entre o produto e a categoria.
### Migrations
As migrations para Categorias e Produtos foram definidas usando apenas o essencial proposto no desafio, organizado e claro para que se possa fazer alterações sem perda de produtividade.
- create_categories_table
- create_products_table
### Seeders
Para popular o banco de dados corretamente e possibilitar usar e entender melhor como este projeto funciona, seeders foram criados:
- CategorySeeder
- ProductSeeder
### Controllers
Há dois controllers, sendo eles:
- CategoryController
- ProductController
Na branch **master** as regras estão definidas no controller, contudo, na branch **dev** houve separação da lógica para **Services**.
### Paginate
Existe uma paginação simples tanto em Categorias quanto para Produtos, mas pode ser alterado para uma paginação completa alterando os controllers.
Para a alteração em ambos métodos index, muda-se `simplePaginate()` para `paginate()`.
### Routes
Seguindo a documentação Laravel 10, optou-se por definir as rotas da seguinte maneira:
`Route::apiResource('/produtos', ProductController::class);`
`Route::apiResource('/categorias', CategoryController::class);`
Desta forma, além do código ficar mais simples e produtivo, apiResource se encarrega de devolver o status code correto para cada requisição solicitada.
### Requests
Para facilicar o processo de validação dos dados, usou-se requests, sendo eles:
- StoreCategoryRequest
- StoreProductRequest
### API Resources
Como sugere a documentação do Laravel, usou-e API Resources para que os modelos do Eloquent trabalhe com as respostas JSON de forma mais acertiva.
- CategoryResource
- ProductResource
Fico feliz em ter participado deste processo seletivo. Meus números de contato são: (98) 98569-4325 e (99) 99193-2001
Tenho bastante vontade de aprender mais. Desejo trabalhar com uma equipe que me ajude a crescer na área. Aceito, inclusive, vaga de estágio.