/StyleShoes

:shoe: Loja de produtos desenvolvida em PHP utilizando o framework Laravel.

Primary LanguagePHP

Repositório de um projeto que fiz como teste para a InfoTech Soluções utilizando PHP e Laravel.

  • O projeto consiste em um sistema de loja de tênis online, um e-commerce.
  • Usuários se cadastram e podem visualizar os produtos (tênis), além de poderem adicionar produtos ao seu carrinho de compras próprio.
  • Administradores tem controle sobre a plataforma, podendo cadastrar, atualizar e excluir seus produtos (CRUD).

🔥 Conteúdo

💎 Funcionalidades

Autenticação e cadastro de usuários

Visualização da lista de produtos

Repare que o usuário é o administrador, pois ele possui acesso a área de "Gerenciar Produtos"

Visualização de um produto específico

Ao clicar em "Saiba Mais" a página do produto é exibida, contendo mais dados sobre o mesmo. Nesse caso, o usuário não é um administrador, pois não tem o botão "Gerenciar produtos na Nav-Bar. Mesmo que ele tente acessar sabendo a URL, não poderá entrar na página do admin por segurança dos middlewares"

Adicionando um produto ao carrinho de compras

Ao clicar em comprar, ele é avisado se deseja adicionar o produto em seu carrinho (acessado pela Nav-Bar)"

Se clicar em adicionar ao carrinho, ele é redirecionado automáticamente a sua página de compras, onde contêm todos os produtos que ele deseja comprar, podendo ver o preço total e apagar produtos do carrinho. O botão "Comprar produtos" está desativado.

Apagar um produto do carrinho de compras

Gereciamento de Produtos (página exclusiva do administrador)

Aqui o admin tem acesso a uma tabela com todos os produtos cadastrados em seus sistema, podendo alterar e apagar cada um deles, além de poder cadastrar um novo produto

Cadastrando um novo produto

Atualizando informações do produto

Apagando um produto do banco

☁️ Banco de dados

- MySQL + InnoDB para as relações com chave-estrangeira.
- Autenticação com admin: Email - admin@email.com / Password - admin || Ele já é criado automaticamente ao rodar as migrations.
- Um produto possui uma imagem
- Um carrinho é único, ele possui um usuário a quem pertence e o produto que ele deseja comprar. Poderia ser adicionado um atributo "quantidade", por exemplo.

📌 API Rest

Utilizei sessions nos controllers para proteção de rotas e não os middlewares do Laravel.

//USUÁRIO
- Route::get('/register', [UserController::class, 'create']);
- Route::post('/register', [UserController::class, 'store']);
- Route::post('/authenticate', [UserController::class, 'authenticate']);
- Route::get('/admin', [UserController::class, 'adminPage']);
- Route::get('/logout', [UserController::class, 'logout']);

//PRODUTOS
- Route::get('/products', [ProductController::class, 'index']);
- Route::get('/product/{id}', [ProductController::class, 'show']);
- Route::get('/register-product', [ProductController::class, 'create']);
- Route::post('/register-product', [ProductController::class, 'store']);
- Route::delete('/delete-product/{id}', [ProductController::class, 'destroy']);
- Route::get('/update-product/{id}', [ProductController::class, 'updateProductShow']);
- Route::put('/update-product/{id}', [ProductController::class, 'updateProduct']);

//CARRINHOS
- Route::get('/user/cart', [CartController::class, 'index']);
- Route::post('/product/buy/{id}', [CartController::class, 'store']);
- Route::delete('/delete/cart/product/{id}', [CartController::class, 'destroy']);

//404
- Route::fallback(function() {
    return redirect('/');
  });