Arquitetura do Sistema

O Chef-OS foi desenvolvido utilizando uma arquitetura monolítica simplificada baseada em PHP Nativo e MySQL. O foco do projeto foi performance, segurança e uma experiência de usuário (UX) fluida sem a necessidade de frameworks pesados.

🐘 PHP 8+
🐬 MySQL
🎨 TailwindCSS
🔒 PDO Secure

1. Autenticação & Segurança

O sistema implementa controle de acesso baseado em roles (RBAC) para diferenciar Chefs de Clientes. As senhas são armazenadas utilizando hash moderno (`PASSWORD_DEFAULT`), e todas as consultas ao banco utilizam Prepared Statements para prevenir SQL Injection.

login.php (Lógica de Hash)

// Verificação segura de senha
if ($user && password_verify($password, $user['password_hash'])) {
    $_SESSION['user_id'] = $user['id'];
    $_SESSION['user_role'] = $user['role'];

    // Redirecionamento baseado na Role
    if ($user['role'] === 'client') {
        header("Location: my_events.php");
    } else {
        header("Location: dashboard.php");
    }
}
                    

2. Cálculo Dinâmico de Custos

Um dos diferenciais técnicos é o cálculo de custo da ficha técnica feito diretamente na query SQL. Isso evita loops desnecessários no PHP (o problema N+1), garantindo performance mesmo com receitas complexas.

recipes.php (Subquery Otimizada)

SELECT r.*, 
(
    -- Subquery para somar (Preço do Insumo * Quantidade usada)
    SELECT COALESCE(SUM(i.price * ri.quantity), 0)
    FROM recipe_ingredients ri
    JOIN ingredients i ON ri.ingredient_id = i.id
    WHERE ri.recipe_id = r.id
) as total_cost
FROM recipes r
WHERE r.chef_id = ?
ORDER BY r.id DESC
                    

3. Transações ACID (Integridade)

Para operações críticas, como a exclusão de um prato que possui vínculos em outras tabelas (ingredientes e eventos), utilizamos transações de banco de dados. Isso garante que, se uma etapa falhar, nada é apagado (Rollback), mantendo a integridade dos dados.

recipes.php (Exclusão Segura)

try {
    $pdo->beginTransaction(); // Inicia a transação

    // 1. Remove dependências
    $pdo->prepare("DELETE FROM recipe_ingredients WHERE recipe_id = ?")->execute([$delId]);
    
    // 2. Remove o prato
    $pdo->prepare("DELETE FROM recipes WHERE id = ?")->execute([$delId]);

    $pdo->commit(); // Efetiva as mudanças
    
    // Só apaga a imagem se o banco confirmou
    if (file_exists($imgUrl)) unlink($imgUrl);

} catch (Exception $e) {
    $pdo->rollBack(); // Desfaz tudo se der erro
    die("Erro ao excluir: " . $e->getMessage());
}
                    

4. UI/UX: Responsividade Híbrida

Para oferecer a melhor experiência tanto em desktops quanto em dispositivos móveis, o layout adapta sua navegação estruturalmente, não apenas esteticamente.

  • Desktop: Sidebar lateral fixa para acesso rápido e profissional.
  • Mobile: Menu inferior estilo "App" (Bottom Navigation), facilitando o uso com uma mão.
🖥️

Sidebar (Desktop)

hidden md:flex
📱

Bottom Bar (Mobile)

md:hidden fixed bottom-0