PHP (Laravel) MySQL APIs REST Stripe / PayPal WebSockets

ShopVerde

Arquitetura Backend para E-commerce Sustentável.

Uma API RESTful altamente escalável, desenhada com padrões rigorosos (MVC, Repositories, Services). Inclui autenticação segura, transações complexas em base de dados relacional e WebSockets para tracking em tempo real.

Frontend / App (React / Next.js) LARAVEL 10 API CORE Sanctum (JWT Auth) Controllers & Services OrderService | PaymentService WebSockets (Broadcasting) MySQL (Relational DB) Gateways (Stripe / PayPal) JSON (REST) Real-time Events Webhooks

O Problema

Muitas soluções de e-commerce falham quando o tráfego aumenta ou quando tentam gerir consistência de dados entre pagamentos e inventário. O ShopVerde precisava de um backend robusto que suportasse múltiplos métodos de pagamento, atualizações de estado em tempo real e a garantia absoluta de que um produto não seria vendido a dois clientes ao mesmo tempo.

Engenharia Aplicada

Backend Developer: Concebi toda a arquitetura baseada em PHP/Laravel. Modelei a base de dados relacional (MySQL), criei a lógica de autenticação (JWT) e implementei Design Patterns estruturais para garantir que o código se mantivesse limpo e testável ao escalar.

A Arquitetura na Prática

  • Design de API & Policies: Endpoints RESTful estritos. Implementação de Laravel Sanctum para autenticação stateless e Gates/Policies para controlo de permissões granulares (Admin vs Cliente).
  • Gateways de Pagamento Assíncronos: Integração com Stripe e PayPal. Implementação de Webhooks para confirmar pagamentos de forma assíncrona, protegendo o sistema contra falhas de rede no lado do cliente.
  • Transações Seguras em MySQL: Utilização pesada de DB::transaction e pessimistic locking (bloqueio pessimista) para evitar race conditions na atualização de stock durante o checkout.
  • Notificações Real-Time: Uso do Laravel Broadcasting com WebSockets para enviar eventos instantâneos para o frontend sempre que o status de uma encomenda muda (ex: "Em Processamento" para "Enviado").

Trechos de Código (Padrões de Engenharia)

Demonstração da aplicação do padrão Service Layer e Transações de Base de Dados para garantir a integridade da loja.

Exemplo: Criação de Encomenda com DB Transactions

namespace App\Services;

use Illuminate\Support\Facades\DB;
use App\Models\Order;
use App\Exceptions\OutOfStockException;

class OrderService 
{
    public function createSecureOrder(User $user, array $cartItems)
    {
        // Garante que ou TUDO é guardado na BD, ou NADA é guardado em caso de erro
        return DB::transaction(function () use ($user, $cartItems) {
            
            $order = Order::create(['user_id' => $user->id, 'status' => 'pending']);
            $totalAmount = 0;

            foreach ($cartItems as $item) {
                // Lock pessimista: Impede outras compras de acederem a este stock
                $product = Product::where('id', $item['id'])->lockForUpdate()->first();

                if ($product->stock < $item['quantity']) {
                    throw new OutOfStockException("Stock insuficiente para: {$product->name}");
                }

                $product->decrement('stock', $item['quantity']);
                $order->items()->create([
                    'product_id' => $product->id,
                    'quantity'   => $item['quantity'],
                    'price'      => $product->price
                ]);
                
                $totalAmount += ($product->price * $item['quantity']);
            }

            $order->update(['total' => $totalAmount]);
            
            return $order;
        });
    }
}
Anterior: Seven Faith Voltar aos Projetos