API de cadastrado de categorias, produtos, clientes e compra.

Overview

Teste Backend - Left

Descrição

Teste técnico da Left de um sistema contendo as tabelas Categoria, Produto, Cliente e Endereço do cliente e seus respectivos CRUD's.

Rotas

Rotas Category

Método HTTP Endpoint Descrição
GET /api/category Retorna todos as categorias cadastradas
GET /api/category/{id} Retorna uma categoria por Id
POST /api/category Cadastra uma nova categoria
PUT /api/category{id} Altera informações de uma categoria
DELETE /api/category{id} Deleta uma categoria especifica

Rotas Product

Método HTTP Endpoint Descrição
GET /api/product Retorna todos os produtos cadastrados
GET /api/product/{id} Retorna um produto por Id
GET /storage/{path-image} Rota para visualizar imagem cadastrada
POST /api/product Cadastra um novo produto
POST /api/product{id} Altera informações de um produto
DELETE /api/product{id} Deleta um produto especifico

Rotas Client

Método HTTP Endpoint Descrição
GET /api/client Retorna todos os clientes cadastrados
GET /api/client/{id} Retorna um cliente por Id
POST /api/client Cadastra um novo cliente
PUT /api/client{id} Altera informações de um cliente
DELETE /api/client{id} Deleta um cliente especifico

Rotas Address

Método HTTP Endpoint Descrição
GET /api/address Retorna todos os enedereços de clientes cadastrados
GET /api/address/{id} Retorna um endereço por Id
POST /api/address Cadastra um novo enedereço
PUT /api/address{id} Altera informações de um enedereço
DELETE /api/address{id} Deleta um enedereço especifico

Rotas Client Order

Método HTTP Endpoint Descrição
GET /api/client-order Retorna todos os pedidos de produtos dos clientes
GET /api/client-order/{id} Retorna um pedido por Id
POST /api/client-order Cadastra um novo pedido
PUT /api/client-order{id} Altera informações de um pedido
DELETE /api/client-order{id} Deleta um pedido especifico

Dados do body request em formato JSON - Category

🔃 POST/PUT

{
	"name": "Categoria 1"
}

Dados do body request em formato Multipart Form - Product

🔃 POST

{
	"name": "Product 1",
	"description": "Description 1",
	"category_id": 1,
	"quantity_stock": 10,
	"price": 5,
    "image": image.jpg
}

🔃 POST para atualizar um product

{
	"name": "Product 1",
	"description": "Description 1",
	"category_id": 1,
	"quantity_stock": 10,
	"price": 5,
    "image": image.jpg,
    "_method": "PUT"
}

Dados do body request formato JSON - Client

🔃 POST

{
	"name": "Iva Heaney",
	"email": "[email protected]",
	"phone_number": "072326781",
	"date_birth": "1971-07-31",
	"cpf": "00000000000",
	"cnpj": "00000000000000",
	"addresses": [
	{
			"cep": "00000000",
			"number": "10",
			"complement": ""
	},
	{
			"cep": "00000001",
			"number": "28",
			"complement": ""
	}]
}

🔃 PUT

{
	"name": "Iva Heaney",
	"email": "[email protected]",
	"phone_number": "072326781",
	"date_birth": "1990-06-30",
	"cpf": "00000000000",
	"cnpj": "00000000000000"
}

Dados do body request em formato JSON - Address

🔃 POST/PUT

{
	"client_id": 2,
	"cep": "00000001",
	"number": "14",
	"complement": ""
}

Dados do body request em formato JSON - Client Order

🔃 POST/PUT

{
	"client_id": 10,
	"product_id": 10,
	"quantity": 5
}

Como executar o projeto em sua máquina

# Clone este repositório
$ git clone https://github.com/adkatarine/left-test-backend.git

# Acesse a pasta do projeto no terminal ou cmd ou editor de sua preferência

# Instale as dependências na raiz do projeto
$ composer install

# Configure as variáveis de ambiente do banco de dados no arquivo .env

# Crie uma nova chave para a aplicação
$ php artisan key:generate

# Execute este comando para criar todas as migrações
$ php artisan migrate

# Execute este comando para criar um link simbólico para o disco public
$ php artisan storage:link

# Execute este comando para popular as tabelas usando o Seeder
$ php artisan db:seed

# Execute a aplicação para acessar a API
$ php artisan serve

# Escolha um cliente da sua preferência para testar a API e configure as rotas ou importe o arquivo
insomnia-routes.json no Insominia. Caso deseje configurar as rotas, adicione no Headers de cada rota
POST/PUT um header Accept com value application/json

# Para que seja possível visualizar a imagem cadastrada é so utilizar a rota especificada anteriormente,
por exemplo: http://127.0.0.1:8000/storage/images\/XqJDTZNjBZHXPDVTiVwADGL3YVYMlAUwtbCoStka.jpg

Decisões de projeto

Tabelas

A tabela Client Order foi adiciona para simular uma "compra" de algum produto pelo cliente e assim obtendo interação entre as tabelas.

API de requisição do endereço

A classe estática responsável pelos dados e requisição da API BrasilAPI implementa a interface BrasilAPI para minimizar grandes mudanças em outras partes do código caso seja necessário trocar de API.

Service Container

Este recurso foi utilizado, junto com os repositories, afim de remover as regras de negócios dos controllers e utilizar a injeção de dependência.

Cache do Laravel

A Cache do Laravel foi utilizada na requisição das categorias no banco, considerando que é provavel que raramente categorias seriam adicionadas ou removidas sempre, tornando descessário requisitar o banco com tanta frequência.

Construído com

  • Laravel - Framework na versão 9.x para criar a API
  • MySQL - Database
  • Service Container - Ferramenta do Laravel para realizar injeção de dependência
  • Cache - Cache do Laravel para não ser necessário consultar as categorias no banco a cada requisição
  • validator-docs - Biblioteca PHP para validação de documentos do Brasil usando Laravel
  • Brasil API - API para consulta dos endereços utilizando a versão 2 do serviço de busca por CEP
  • Insomnia - Cliente para testar a API
You might also like...
API for Laracasts Feed built with Lumen.
API for Laracasts Feed built with Lumen.

Lissandra Discontinued API for Laracasts Feed built with Lumen. Lissandra fetches the Laracasts XML RSS feed and converts it to JSON format. By doing

A micro web application providing a REST API on top of any relational database, using Silex and Doctrine DBAL

Microrest is a Silex provider to setting up a REST API on top of a relational database, based on a YAML (RAML) configuration file.

A simple RESTful non-blocking API, to send and receive money

A simple RESTful non-blocking API, to send and receive money.

Provides an API wrapper for interacting with remote CiviCRM instances via APIv4.

civicrm-api is a Composer package that allows developers to interact with a CiviCRM instance using the REST API v4 functionality within CiviCRM.

Faculty Management System (FMS) Built with Laravel 9 in Back-end and React , Redux in Front-end API's

Final Project Faculty Management System (FMS) as final project for faculty of Copmuter Science, Kandahar University, 2021 Faculty Management System (F

🌶🥗🧀🍉 Brazilian Table of Food Composition made by IBGE - Laravel 9 REST API

About API of the 2008-2009 Family Budget Survey: tables of nutritional composition of foods consumed in Brazil / IBGE, Coordination of Work and Income

Create a PHP 8 CRUD (Create, Read, Update, Delete) RESTful API with an MySQL database.
Create a PHP 8 CRUD (Create, Read, Update, Delete) RESTful API with an MySQL database.

Créer une API RESTful PHP 8 CRUD (Create, Read, Update , Delete) simple avec MySQL et PDO (PHP Data Objects) Détails du référentiel : Lire, insérer, m

GET API Covid-19 Indonesia

About APP Covid-19 GET API Indonesia,dibuat dengan Laravel Framework,silahkan di clone dan di kembangkan sesuka hati. Menampilkan total data positif C

¡BACKEND OVER APP! API REST IMPLEMENTANDO CONCEPTOS DE ARQUITECTURA HEXAGONAL, DDD, TDD Y SOLID. HECHO EN LARAVEL & PHP
¡BACKEND OVER APP! API REST IMPLEMENTANDO CONCEPTOS DE ARQUITECTURA HEXAGONAL, DDD, TDD Y SOLID. HECHO EN LARAVEL & PHP

¡BACKEND OVER APP! API REST IMPLEMENTANDO CONCEPTOS DE ARQUITECTURA HEXAGONAL, DDD, TDD Y SOLID. HECHO EN LARAVEL & PHP

Owner
Adlla Katarine
Graduanda em Engenharia de Computação - UEFS
Adlla Katarine
This is a plugin written in PHP programming language and running on the PocketMine platform that works stably on the API 4.0.0 platform. It allows you to query some other server information

QueryServer This is a plugin written in PHP programming language and running on the PocketMine platform that works stably on the API 4.0.0 platform. I

Thành Nhân 1 Jul 6, 2022
Retrieve MySejahtera App's data from MySejahtera API and show to users via web browser. Written in PHP

MySejahtera-PHP-Web Retrieve MySejahtera App's data from MySejahtera API and show to users via web browser. Written in PHP. Disclaimer This web app is

Sam Sam 3 Oct 21, 2022
Laravel wrapper for the Fathom Analytics API

Please note: This package is still a work in progress and the Fathom API is also only in early access. Do not use this package in your production envi

Marc Reichel 12 Sep 19, 2022
Provides access to Cloudflare Images API for Laravel projects

Cloudflare Images Provides access to Cloudflare Images API for Laravel projects Table of contents Installation Configuration Using Installation To get

Dmytro 20 Dec 16, 2022
Provide a module to industrialize API REST call with dependency injection using Guzzle library

Zepgram Rest Technical module to industrialize API REST call with dependency injection using Guzzle library. Provides multiple features to make your l

Benjamin Calef 6 Jun 15, 2022
Simple searching for postcodes to retrieve geographic information. Support for various API providers and a unified address/output format.

Postcode Search Simple searching for postcodes to retrieve geographic information. Support for various API providers and a unified address/output form

Gary Green 10 Nov 29, 2022
nextcloud app that replicates basic gpodder.net api

nextcloud-gpodder Nextcloud app that replicates basic gpodder.net api This app serves as synchronization endpoint for AntennaPod: https://github.com/A

null 121 Dec 30, 2022
Translate laravel resource, vendor, folder or file from google translation without requiring any api information

⚡ ⚡ ⚡ Laravel Go Translate Translate laravel resource, vendor, folder or file from google translation without requiring any api information. Table of

CodeBugLab 37 Jun 18, 2022
Quick and dirty PHP script to turn a Twitter feed into an RSS feed using Twitter's v2 API

Twitter to RSS Quick and dirty PHP script that turns a given Twitter feed into a RSS feed using Twitter's API v2 (the free version!) Does some basic l

Jon W 0 Aug 11, 2022
Facebook & Instagram Ads API for Laravel

Laravel Facebook Ads Get ads infos (campaigns, ads, insights, etc...) from Facebook & Instagram Ads API Supported Facebook API version: >= v3.0 Instal

Eduardo Bizarro 108 Dec 5, 2022