Coder Social home page Coder Social logo

mister_delivery_laravel's People

Contributors

patrickgpcw avatar

Watchers

 avatar  avatar

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 ou nã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á na Categoria 1.
Extra 1 está na Categoria 1 e é contável.
Extra 2 está na Categoria 1 e não é contável.
Carrinho 1 tem o Lanche 1 no Usuário 1.
Carrinho_Extra 1 tem o Carrinho 1 e Extra 1 com 3 Quantidades.
Carrinho_Extra 1 tem o Carrinho 1 e Extra 2 com 1 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 photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.