mister_delivery_laravel's People
mister_delivery_laravel's Issues
Escopo
Base
- Instalar o Laravel 8.x
- Instalar o Laravel Jetstream
Laravel Permission
- Instalar o Laravel Permission
- Configurar o Laravel Permission para funcionar no Laravel Jetstream
- Testar o Laravel Permission
Horários de Trabalho
- Criação de Horários de Trabalho
- Criação da API de Horários de Trabalho
- Testar Horário de Trabalho
Configurações
- Criação de Configurações
- Criação do Helper para Configurações
- Criação dos campos necessários: Logo, Nome, Descrição, Endereço, Horários de Funcionamento.
- Testar as Configurações
Endereços de Usuários
- Criação de Endereços de Usuários
- Testar os Endereços de Usuários
Área de Delivery
- Criação das Áreas de Delivery
- Testar as Áreas de Delivery
Categoria de Comidas
- Criação de Categorias de Comidas
- Testar as Categorias de Comidas
Comidas
- Criação de Comidas
- Criação de Extras das Comidas
- Testar as Comidas
- Testar os Extras das Comidas
Favoritos
- Criação dos Favoritos
- Criação de Extras dos Favoritos
- Testar os Favoritos
- Testar os Extras dos Favoritos
Carrinho
- Criação dos Carrinhos
- Criação dos Extras dos Carrinhos
- Testar os Carrinhos
- Testar os Extras dos Carrinhos
Pedidos
- Criação dos Pedidos
- Criação das Comidas dos Pedidos
- Criação dos Extras das Comidas dos Pedidos
- Testar os Pedidos
- Testar os Comidas dos Pedidos
- Testar os Extras das Comidas dos Pedidos
Todos os Testes serão realizados com o PHP Unit.
Pacotes
Banco de Dados
Configurações (settings)
name | db_type |
---|---|
key | string:unique |
value | string:default,'' |
- Não haverá timestamps
- Campos Necessários: Logo, Nome, Descrição, Endereço, Horários de Funcionamento.
- Necessário criação de um helper:
if(!function_exists("setting"))
{
function setting($key, $value = null)
{
if (!$value) {
$setting = Setting::where('key', $key)->first();
} else {
$setting = Setting::upsert([
'key' => $key,
'value' => $value,
]);
}
return $setting ? $setting->value : '';
}
}
//setting('company_name', 'App World');
//setting('company_name'); //Retorna "App World"
Endereços do Usuário (user_address)
name | db_type | html_type | options | validation |
---|---|---|---|---|
name | string,127 | text | required|max:127 | |
zip | string,20 | text | required|regex:/[0-9]{5}-[0-9]{3}/ | |
state | string,2 | select | required|max:2 | |
city | string,100 | text | required|max:100 | |
district | string,127 | text | required|max:127 | |
address | string,127 | text | required|max:127 | |
number | string,127 | text | required|max:127 | |
complement | text,127:nullable | textarea | nullable|max:127 | |
is_default | boolean:default,0 | checkbox:1 | s | boolean |
user_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select |
Área de Delivery (delivery_area)
name | db_type | html_type | options | validation |
---|---|---|---|---|
initial_zip | string,20:unique | text | ||
final_zip | string,20:unique | text | ||
price | decimal,8,2 | numeric | ||
prevent | boolean:default,1 | checkbox,1 |
Lógica:
$area = DeliveryArea::where('initial_zip', '<=', $zip)
->where('final_zip', '>=', $zip)
->orderBy('prevent', 'desc')
->orderBy('initial_zip', 'desc')
->orderBy('final_zip', 'desc')
->first();
if ($area && $area->prevent) {
return false;
}
return $area;
Categoria de Comida (food_categories)
name | db_type | html_type | options | validation |
---|---|---|---|---|
name | string,127 | text | required|max:127 | |
description | text:nullable | textarea | s | max:10000 |
has_details | boolean:default,1 | checkbox,1 |
O campo
has_details
representa quando irá ter detalhes do produto. Exemplo: Bebidas não necessita de detalhes Comidas, pois há extras e detalhes.
Comidas (foods)
name | db_type | html_type | options | validation |
---|---|---|---|---|
name | string,127 | text | required|max:127 | |
price | decimal,8,2:default,0 | number | s | min:0|max:99999999 |
description | text:nullable | textarea | s | max:10000 |
category_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
active | boolean:default,1 | checkbox:1 |
Adicionais da Comida (food_extras)
name | db_type | html_type | options | validation |
---|---|---|---|---|
name | string,127 | text | required|max:127 | |
price | decimal,8,2:default,0 | number | s | min:0|max:99999999 |
description | text:nullable | textarea | s | max:10000 |
countable | boolean:default,0 | checkbox:1 | s | boolean |
limit | unsignedInteger:nullable | number | s | nullable|min:1 |
category_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
active | boolean:default,1 | checkbox:1 |
- O campo
countable
representa quando o extra é ou não é quantitativo (1,2,3,4,5). Exemplo: Ovo em lanche é contável, Ovo em pizza ésim
ounão
.- O campo
limit
representa quando o item extra écountable
e tem um certo limite de adição dele nos produtos.
Comidas Favoritas (food_favorites)
name | db_type | html_type | options | validation |
---|---|---|---|---|
user_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
food_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select |
Comidas Favorita Extras (food_favorite_extras)
name | db_type | html_type | options | validation |
---|---|---|---|---|
food_favorite_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
extra_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
quantity | unsignedInteger:default,1 | number | min:1|max:5 |
Carrinhos (carts)
name | db_type | html_type | options | validation |
---|---|---|---|---|
user_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
food_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select |
Adicionais no Carrinho (cart_extras)
name | db_type | html_type | options | validation |
---|---|---|---|---|
cart_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
extra_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
quantity | unsignedInteger:default,1 | number | min:1|max:5 |
O Adicional do Carrinho está vinculado diretamente com o Extra e o Carrinho, exemplo:
Lanche 1
está naCategoria 1
.
Extra 1
está naCategoria 1
eé contável
.
Extra 2
está naCategoria 1
enão é contável
.
Carrinho 1
tem oLanche 1
noUsuário 1
.
Carrinho_Extra 1
tem oCarrinho 1
eExtra 1
com3 Quantidades
.
Carrinho_Extra 1
tem oCarrinho 1
eExtra 2
com1 Quantidade (default)
.
Pedidos (orders)
name | db_type | html_type | options | validation |
---|---|---|---|---|
user_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
status | enum,Aguardando Aprovação,Em Preparo,Saiu Para Entrega,Concluído,Cancelado | select | ||
delivery_fee_price | decimal,8,2 | numeric |
Pedido Comida (order_foods)
name | db_type | html_type | options | validation |
---|---|---|---|---|
order_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
food_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
price | decimal,8,2 | numeric |
Pedido Comida Extras (order_food_extras)
name | db_type | html_type | options | validation |
---|---|---|---|---|
cart_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
extra_id | foreignId:constrained:onUpdate,"cascade":onDelete,"cascade" | select | ||
quantity | unsignedInteger:default,1 | number | min:1|max:5 | |
price | decimal,8,2 | numeric |
RoadMap
- Pagamentos
- Relatórios (Earnings)
- Notificações Dinâmicas (Cliente pode gerar um Push Notification pelo Sistema a qualquer momento)
- Cupons
- Adicionar Telefone No Usuário
- Laravel Permission
- Administrador conseguir mudar o endereço do usuário
- Cadastrar Dias Que Não Trabalha (Feriados)
- Validar Se Pode Realizar o Pedido ou Não (Dia De Folga / Estabelecimento Fechado)
- Painel De Todos Os Pedidos Já Realizado
- Adicionar botão de remover pedido no interno do pedido
- Adicionar para desativar uma comida e extras (boolean)
- Validar se a comida / extra da comida existe para adicionar no carrinho / finalizar pedido
- Decidir como será exibido o preço nos cards dos pedidos do dia e no pedido interno
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.