{"id":25996668,"url":"https://github.com/andrepfdev/teste-motocasystems-backend","last_synced_at":"2026-04-10T12:31:09.741Z","repository":{"id":244575113,"uuid":"815635339","full_name":"andrepfdev/teste-motocaSystems-backEnd","owner":"andrepfdev","description":"Meu desafio Backend Junior para a Motoca - Laravel 10","archived":false,"fork":false,"pushed_at":"2025-03-04T15:01:24.000Z","size":183,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-04T16:20:03.137Z","etag":null,"topics":["docker","laravel","laravel10","mariadb","php","php8"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrepfdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-15T17:15:39.000Z","updated_at":"2025-03-04T15:01:28.000Z","dependencies_parsed_at":"2024-08-12T00:53:08.289Z","dependency_job_id":null,"html_url":"https://github.com/andrepfdev/teste-motocaSystems-backEnd","commit_stats":null,"previous_names":["andrepfdev/teste-motocasystems-backend"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrepfdev%2Fteste-motocaSystems-backEnd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrepfdev%2Fteste-motocaSystems-backEnd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrepfdev%2Fteste-motocaSystems-backEnd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrepfdev%2Fteste-motocaSystems-backEnd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrepfdev","download_url":"https://codeload.github.com/andrepfdev/teste-motocaSystems-backEnd/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242059738,"owners_count":20065390,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","laravel","laravel10","mariadb","php","php8"],"created_at":"2025-03-05T16:25:34.210Z","updated_at":"2025-12-31T01:02:10.031Z","avatar_url":"https://github.com/andrepfdev.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003ca href=\"https://laravel.com\" target=\"_blank\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg\" width=\"400\" alt=\"Laravel Logo\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n\n# Teste Motoca BackEnd\n\nEste teste é a resolução do seguinte desafio: \u003ca href=\"https://github.com/WellitonCunha/teste-motoca-systems\" target=\"_blank\"\u003e DESAFIO MOTOCA\u003c/a\u003e\n\n## API Laravel 10\n\nEste 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**.\n\n### Funcionalidades\n\n#### Entidades:\n- Produtos\n- Categorias\n\n#### Operações CRUD:    \n##### Produtos:\n- Criar\n- Ler (todos os produtos e por ID)\n- Atualizar\n- Deletar\n   \n##### Categorias:\n- Criar\n- Ler (todas as categorias e por ID)\n- Atualizar\n- Deletar\n\n#### Relacionamento:\n\nCada produto pertence a uma categoria (chave estrangeira **categoria_id** na tabela produtos).\nCada categoria pode ter vários produtos.    \n\n## Instalação\n\nPara este projeto usou-se **Docker Sail**\n\n1.  Clone este repositório: `git clone https://github.com/andrepfdev/teste-motocaSystems-backEnd`;\n2.  Entre no diretório do projeto localmente: `cd teste-motocaSystems-backEnd`;\n3.  Instale as dependências do projeto: `composer install`; Talvez precise rodar primeiro: `composer update`;\n4.  Configure o arquivo **`.env`** com as informaçẽos de banco de dados que informei abaixo;\n5.  Incie o ambiente Docker com o comando: `./vendor/bin/sail up -d`;\n6.  Execute as migrations do banco de dados: `./vendor/bin/sail artisan migrate`;\n7.  Popule o banco de dados com os dados iniciais: `./vendor/bin/sail artisan db:seed`.\n\nObserve os dados configurados nos arquivos `docker-compose.yml` e `.env` que possui, além do PostgreSQL, o gerenciador `pgAdmin4`.\n\n|  nº  | Images     |\n|-----:|------------|\n|     1| Laravel 10 |\n|     2| PostgreSQL |\n|     3| pgAdmin 4  |\n\n#### pgAdmin4\n    -\u003e URL: http://localhost:5050\n    -\u003e User: admin@admin.com\n    -\u003e Passord: admin\n\n![pgadmin4](https://github.com/andrepfdev/teste-motocaSystems-backEnd/assets/49399742/f74ba3dc-fb2d-4a76-bcb8-e7c77a2606bc)\n\n#### Banco de dados:\n    DB_CONNECTION=pgsql\n    DB_HOST=pgsql\n    DB_PORT=5432\n    DB_DATABASE=laravel\n    DB_USERNAME=sail\n    DB_PASSWORD=password\n\n### Endpoints\n    \n```\nhttp://localhost/api/produtos\n\nhttp://localhost/api/categorias\n```\n\n## Postman Teste\n\n![postman doc](https://github.com/andrepfdev/teste-motocaSystems-backEnd/assets/49399742/7d46c864-acb8-4c62-92e2-c4248f18b9ef)\n\nLink para o arquivo de testes: \u003ca href=\"https://drive.google.com/file/d/1kvp6Ztr2UTurF2-JYouufn83pWGMgyax/view?usp=sharing\" target=\"_blank\"\u003e Download \u003c/a\u003e\n\nDocumento Postman: \u003ca href=\"https://documenter.getpostman.com/view/28415815/2sA3XQiN8G\" target=\"_blank\"\u003eClique aqui.\u003c/a\u003e\n\n## Observações sobre o projeto:\n\n### Models\nForam definidos os models:\n```\n - Category\n - Product\n```\nOnde 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.\n\n### Migrations\nAs 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.\n\n - create_categories_table\n - create_products_table\n\n### Seeders\nPara popular o banco de dados corretamente e possibilitar usar e entender melhor como este projeto funciona, seeders foram criados:\n\n - CategorySeeder\n - ProductSeeder\n\n### Controllers\nHá dois controllers, sendo eles:\n\n - CategoryController\n - ProductController\n\nNa branch **master** as regras estão definidas no controller, contudo, na branch **dev** houve separação da lógica para **Services**.\n\n### Paginate\nExiste uma paginação simples tanto em Categorias quanto para Produtos, mas pode ser alterado para uma paginação completa alterando os controllers.\nPara a alteração em ambos métodos index, muda-se `simplePaginate()` para `paginate()`.\n\n### Routes\nSeguindo a documentação Laravel 10, optou-se por definir as rotas da seguinte maneira:\n\n `Route::apiResource('/produtos', ProductController::class);`\n \n `Route::apiResource('/categorias', CategoryController::class);`\n\nDesta 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.\n\n### Requests\nPara facilicar o processo de validação dos dados, usou-se requests, sendo eles:\n\n - StoreCategoryRequest\n - StoreProductRequest\n\n### API Resources\nComo 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.\n\n - CategoryResource\n - ProductResource\n\nFico feliz em ter participado deste processo seletivo. Meus números de contato são: (98) 98569-4325 e (99) 99193-2001\n\nTenho bastante vontade de aprender mais. Desejo trabalhar com uma equipe que me ajude a crescer na área. Aceito, inclusive, vaga de estágio.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrepfdev%2Fteste-motocasystems-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrepfdev%2Fteste-motocasystems-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrepfdev%2Fteste-motocasystems-backend/lists"}