-- ===================================================== -- ARQUIVO: database.sql -- Estrutura do Banco de Dados MySQL -- ===================================================== CREATE DATABASE IF NOT EXISTS helpme_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE helpme_db; -- Tabela de Usuários CREATE TABLE usuarios ( id INT PRIMARY KEY AUTO_INCREMENT, nome VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, senha VARCHAR(255), telefone VARCHAR(20), foto_perfil VARCHAR(255), tipo_usuario ENUM('cliente', 'prestador', 'ambos') NOT NULL, google_id VARCHAR(255) UNIQUE, facebook_id VARCHAR(255) UNIQUE, cpf_cnpj VARCHAR(20), data_nascimento DATE, endereco TEXT, cidade VARCHAR(100), estado VARCHAR(2), cep VARCHAR(10), status ENUM('ativo', 'inativo', 'bloqueado') DEFAULT 'ativo', avaliacao_media DECIMAL(3,2) DEFAULT 0.00, total_avaliacoes INT DEFAULT 0, data_cadastro TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ultimo_acesso TIMESTAMP NULL, INDEX idx_email (email), INDEX idx_tipo (tipo_usuario), INDEX idx_google (google_id) ) ENGINE=InnoDB; -- Tabela de Prestadores (informações adicionais) CREATE TABLE prestadores ( id INT PRIMARY KEY AUTO_INCREMENT, usuario_id INT NOT NULL, especialidades TEXT, -- JSON com especialidades raio_atuacao INT DEFAULT 10, -- em km valor_hora DECIMAL(10,2), cnpj VARCHAR(20), nome_empresa VARCHAR(150), descricao TEXT, documentos_verificados BOOLEAN DEFAULT FALSE, certificacoes TEXT, -- JSON disponivel BOOLEAN DEFAULT TRUE, FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE ) ENGINE=InnoDB; -- Tabela de Solicitações CREATE TABLE solicitacoes ( id INT PRIMARY KEY AUTO_INCREMENT, cliente_id INT NOT NULL, prestador_id INT NULL, tipo_servico VARCHAR(100) NOT NULL, descricao TEXT NOT NULL, latitude DECIMAL(10, 8) NOT NULL, longitude DECIMAL(11, 8) NOT NULL, endereco_completo TEXT, status ENUM('aberta', 'aceita', 'em_andamento', 'concluida', 'cancelada') DEFAULT 'aberta', valor_proposto DECIMAL(10,2), valor_final DECIMAL(10,2), data_solicitacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP, data_aceite TIMESTAMP NULL, data_inicio TIMESTAMP NULL, data_conclusao TIMESTAMP NULL, tempo_estimado INT, -- em minutos observacoes TEXT, fotos TEXT, -- JSON com URLs das fotos INDEX idx_cliente (cliente_id), INDEX idx_prestador (prestador_id), INDEX idx_status (status), INDEX idx_data (data_solicitacao), INDEX idx_localizacao (latitude, longitude), FOREIGN KEY (cliente_id) REFERENCES usuarios(id), FOREIGN KEY (prestador_id) REFERENCES usuarios(id) ON DELETE SET NULL ) ENGINE=InnoDB; -- Tabela de Mensagens/Chat CREATE TABLE mensagens ( id INT PRIMARY KEY AUTO_INCREMENT, solicitacao_id INT NOT NULL, remetente_id INT NOT NULL, destinatario_id INT NOT NULL, mensagem TEXT NOT NULL, lida BOOLEAN DEFAULT FALSE, data_envio TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_solicitacao (solicitacao_id), INDEX idx_remetente (remetente_id), INDEX idx_destinatario (destinatario_id), FOREIGN KEY (solicitacao_id) REFERENCES solicitacoes(id) ON DELETE CASCADE, FOREIGN KEY (remetente_id) REFERENCES usuarios(id), FOREIGN KEY (destinatario_id) REFERENCES usuarios(id) ) ENGINE=InnoDB; -- Tabela de Avaliações CREATE TABLE avaliacoes ( id INT PRIMARY KEY AUTO_INCREMENT, solicitacao_id INT NOT NULL, avaliador_id INT NOT NULL, avaliado_id INT NOT NULL, nota INT NOT NULL CHECK (nota BETWEEN 1 AND 5), comentario TEXT, data_avaliacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_avaliado (avaliado_id), FOREIGN KEY (solicitacao_id) REFERENCES solicitacoes(id), FOREIGN KEY (avaliador_id) REFERENCES usuarios(id), FOREIGN KEY (avaliado_id) REFERENCES usuarios(id) ) ENGINE=InnoDB; -- Tabela de Pagamentos CREATE TABLE pagamentos ( id INT PRIMARY KEY AUTO_INCREMENT, solicitacao_id INT NOT NULL, valor DECIMAL(10,2) NOT NULL, metodo_pagamento ENUM('dinheiro', 'pix', 'cartao', 'boleto') NOT NULL, status_pagamento ENUM('pendente', 'processando', 'aprovado', 'recusado', 'estornado') DEFAULT 'pendente', transaction_id VARCHAR(255), taxa_plataforma DECIMAL(10,2), valor_liquido DECIMAL(10,2), data_pagamento TIMESTAMP DEFAULT CURRENT_TIMESTAMP, data_liberacao TIMESTAMP NULL, INDEX idx_solicitacao (solicitacao_id), FOREIGN KEY (solicitacao_id) REFERENCES solicitacoes(id) ) ENGINE=InnoDB; -- Tabela de Notificações CREATE TABLE notificacoes ( id INT PRIMARY KEY AUTO_INCREMENT, usuario_id INT NOT NULL, tipo VARCHAR(50) NOT NULL, titulo VARCHAR(200) NOT NULL, mensagem TEXT NOT NULL, lida BOOLEAN DEFAULT FALSE, data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP, link VARCHAR(255), INDEX idx_usuario (usuario_id), INDEX idx_lida (lida), FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE ) ENGINE=InnoDB; -- Tabela de Histórico de Localização (para estatísticas) CREATE TABLE historico_localizacao ( id INT PRIMARY KEY AUTO_INCREMENT, usuario_id INT NOT NULL, latitude DECIMAL(10, 8) NOT NULL, longitude DECIMAL(11, 8) NOT NULL, data_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_usuario (usuario_id), FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE ) ENGINE=InnoDB; -- Tabela de Favoritos CREATE TABLE favoritos ( id INT PRIMARY KEY AUTO_INCREMENT, cliente_id INT NOT NULL, prestador_id INT NOT NULL, data_adicao TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY unique_favorito (cliente_id, prestador_id), FOREIGN KEY (cliente_id) REFERENCES usuarios(id) ON DELETE CASCADE, FOREIGN KEY (prestador_id) REFERENCES usuarios(id) ON DELETE CASCADE ) ENGINE=InnoDB; -- Tabela de Denúncias CREATE TABLE denuncias ( id INT PRIMARY KEY AUTO_INCREMENT, denunciante_id INT NOT NULL, denunciado_id INT NOT NULL, solicitacao_id INT, motivo VARCHAR(100) NOT NULL, descricao TEXT, status ENUM('pendente', 'analisando', 'resolvida', 'arquivada') DEFAULT 'pendente', data_denuncia TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_denunciado (denunciado_id), FOREIGN KEY (denunciante_id) REFERENCES usuarios(id), FOREIGN KEY (denunciado_id) REFERENCES usuarios(id), FOREIGN KEY (solicitacao_id) REFERENCES solicitacoes(id) ) ENGINE=InnoDB; -- ===================================================== -- ARQUIVO: config.php -- Configurações do Sistema -- ===================================================== PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false ] ); } catch(PDOException $e) { die("Erro de conexão: " . $e->getMessage()); } // Funções Auxiliares function limparInput($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } function verificarLogin() { if (!isset($_SESSION['usuario_id'])) { header('Location: login.php'); exit(); } } function calcularDistancia($lat1, $lon1, $lat2, $lon2) { $raioTerra = 6371; // em km $dLat = deg2rad($lat2 - $lat1); $dLon = deg2rad($lon2 - $lon1); $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2); $c = 2 * atan2(sqrt($a), sqrt(1-$a)); $distancia = $raioTerra * $c; return round($distancia, 2); } ?> -- ===================================================== -- ARQUIVO: index.php -- Página Principal -- ===================================================== HelpMe - Ajuda Rápida e Confiável
Ajuda Rápida Quando Você Mais Precisa
Conectamos você a profissionais qualificados em emergências
ou continue com
ou cadastre-se com
Rápido

Encontre ajuda em minutos, não em horas

🔒
Seguro

Prestadores verificados e avaliados

📍
Próximo

Profissionais na sua região

💬
Comunicação

Chat direto com o prestador