CREATE TABLE IF NOT EXISTS usuarios ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(120) NOT NULL, email VARCHAR(180) NOT NULL UNIQUE, senha VARCHAR(255) NOT NULL, avatar VARCHAR(255) DEFAULT NULL, fuso_horario VARCHAR(60) DEFAULT 'America/Sao_Paulo', criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS tarefas ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, usuario_id INT UNSIGNED NOT NULL, titulo VARCHAR(255) NOT NULL, descricao TEXT DEFAULT NULL, prioridade ENUM('baixa','media','alta') DEFAULT 'media', status ENUM('pendente','em_andamento','concluida','cancelada') DEFAULT 'pendente', data_vencimento DATE DEFAULT NULL, concluida_em TIMESTAMP NULL DEFAULT NULL, criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE, INDEX idx_usuario_status (usuario_id, status), INDEX idx_usuario_prioridade (usuario_id, prioridade) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS metas ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, usuario_id INT UNSIGNED NOT NULL, titulo VARCHAR(255) NOT NULL, descricao TEXT DEFAULT NULL, categoria ENUM('pessoal','profissional','saude','financeiro','estudo','outro') DEFAULT 'pessoal', progresso TINYINT UNSIGNED DEFAULT 0, status ENUM('ativa','pausada','concluida','abandonada') DEFAULT 'ativa', data_inicio DATE DEFAULT NULL, data_prazo DATE DEFAULT NULL, concluida_em TIMESTAMP NULL DEFAULT NULL, criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE, INDEX idx_usuario_status (usuario_id, status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS demandas ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, usuario_id INT UNSIGNED NOT NULL, titulo VARCHAR(255) NOT NULL, descricao TEXT DEFAULT NULL, cliente VARCHAR(150) DEFAULT NULL, projeto VARCHAR(150) DEFAULT NULL, prioridade ENUM('baixa','media','alta','urgente') DEFAULT 'media', status ENUM('aberta','em_andamento','aguardando','concluida','cancelada') DEFAULT 'aberta', estimativa_horas DECIMAL(6,2) DEFAULT NULL, horas_trabalhadas DECIMAL(6,2) DEFAULT 0.00, data_entrega DATE DEFAULT NULL, concluida_em TIMESTAMP NULL DEFAULT NULL, criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE, INDEX idx_usuario_status (usuario_id, status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS sessoes_foco ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, usuario_id INT UNSIGNED NOT NULL, titulo VARCHAR(255) DEFAULT 'Sessao de Foco', descricao TEXT DEFAULT NULL, tarefa_id INT UNSIGNED DEFAULT NULL, demanda_id INT UNSIGNED DEFAULT NULL, duracao_planejada INT UNSIGNED DEFAULT 25, duracao_real INT UNSIGNED DEFAULT NULL, pausas INT UNSIGNED DEFAULT 0, status ENUM('planejada','ativa','pausada','concluida','abandonada') DEFAULT 'planejada', iniciada_em TIMESTAMP NULL DEFAULT NULL, concluida_em TIMESTAMP NULL DEFAULT NULL, criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE, FOREIGN KEY (tarefa_id) REFERENCES tarefas(id) ON DELETE SET NULL, FOREIGN KEY (demanda_id) REFERENCES demandas(id) ON DELETE SET NULL, INDEX idx_usuario_data (usuario_id, criado_em) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS financeiro ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, usuario_id INT UNSIGNED NOT NULL, tipo ENUM('entrada','saida') NOT NULL, titulo VARCHAR(255) NOT NULL, descricao TEXT DEFAULT NULL, categoria VARCHAR(100) DEFAULT NULL, valor DECIMAL(12,2) NOT NULL, data_registro DATE NOT NULL, recorrente TINYINT(1) DEFAULT 0, criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE, INDEX idx_usuario_tipo (usuario_id, tipo), INDEX idx_usuario_data (usuario_id, data_registro) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS logs_produtividade ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, usuario_id INT UNSIGNED NOT NULL, data_log DATE NOT NULL, tarefas_concluidas INT UNSIGNED DEFAULT 0, sessoes_foco_concluidas INT UNSIGNED DEFAULT 0, minutos_focados INT UNSIGNED DEFAULT 0, metas_atualizadas INT UNSIGNED DEFAULT 0, pontuacao INT UNSIGNED DEFAULT 0, criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE, UNIQUE KEY uk_usuario_data (usuario_id, data_log) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS sessoes_login ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, usuario_id INT UNSIGNED NOT NULL, token VARCHAR(128) NOT NULL UNIQUE, ip VARCHAR(45) DEFAULT NULL, user_agent TEXT DEFAULT NULL, expira_em TIMESTAMP NOT NULL, criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE, INDEX idx_token (token), INDEX idx_usuario (usuario_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;