-- https://www.phpmyadmin.net/
--
-- Tempo de geração: 19/06/2026 às 20:03
-- Versão do servidor: 10.4.32-MariaDB
-- Versão do PHP: 8.2.12

START TRANSACTION;



--
-- Banco de dados: `trabalhofinalduarte`
--

DELIMITER $$
--
-- Procedimentos
--
CREATE DEFINER=`root`@`localhost` PROCEDURE `decrementaColetorDuarte` (IN `p_idcoletor` INT)   BEGIN
    UPDATE coletorduarte
    SET contador = GREATEST(contador - 1, 0)
    WHERE idcoletorduarte = p_idcoletor;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `decrementaMacDuarte` (IN `p_idmac` VARCHAR(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci)   BEGIN
    UPDATE macduarte
    SET contador = GREATEST(contador - 1, 0)
    WHERE idmacduarte = p_idmac;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `decrementaSensorDuarte` (IN `p_idsensor` INT)   BEGIN
    UPDATE sensorduarte
    SET contador = GREATEST(contador - 1, 0)
    WHERE idsensorduarte = p_idsensor;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `validaColetorDuarte` (IN `p_idcoletor` INT)   BEGIN
    DECLARE v_ativo BOOL;
    DECLARE v_contador INT;
    DECLARE v_limite INT;

    SELECT ativo, contador, limite
    INTO v_ativo, v_contador, v_limite
    FROM coletorduarte
    WHERE idcoletorduarte = p_idcoletor;

    IF v_ativo = 0 THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Coletor inativo';
    END IF;

    IF v_contador >= v_limite THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Coletor atingiu limite';
    END IF;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `validaMacDuarte` (IN `p_idmac` VARCHAR(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci)   BEGIN
    DECLARE v_ativo BOOL;
    DECLARE v_contador INT;
    DECLARE v_limite INT;

    SELECT ativo, contador, limite
    INTO v_ativo, v_contador, v_limite
    FROM macduarte
    WHERE idmacduarte = p_idmac;

    IF v_ativo = 0 THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'MAC inativo';
    END IF;

    IF v_contador >= v_limite THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'MAC atingiu limite';
    END IF;
END$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `validaSensorDuarte` (IN `p_idsensor` INT)   BEGIN
    DECLARE v_ativo BOOL;
    DECLARE v_contador INT;
    DECLARE v_limite INT;

    SELECT ativo, contador, limite
    INTO v_ativo, v_contador, v_limite
    FROM sensorduarte
    WHERE idsensorduarte = p_idsensor;

    IF v_ativo = 0 THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Sensor inativo';
    END IF;

    IF v_contador >= v_limite THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Sensor atingiu limite';
    END IF;
END$$

DELIMITER ;

-- --------------------------------------------------------

--
-- Estrutura para tabela `coletorduarte`
--

CREATE TABLE `coletorduarte` (
  `idcoletorDuarte` int(10) UNSIGNED NOT NULL,
  `nome` varchar(45) DEFAULT NULL,
  `contador` int(10) UNSIGNED DEFAULT 0,
  `ativo` tinyint(1) DEFAULT 1,
  `limite` int(10) UNSIGNED DEFAULT 100
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Despejando dados para a tabela `coletorduarte`
--

INSERT INTO `coletorduarte` (`idcoletorDuarte`, `nome`, `contador`, `ativo`, `limite`) VALUES
(1, 'coletorDuarte1', 1, 1, 100);

-- --------------------------------------------------------

--
-- Estrutura para tabela `leituraduarte`
--

CREATE TABLE `leituraduarte` (
  `idleituraDuarte` int(10) UNSIGNED NOT NULL,
  `coletorDuarte_idcoletorDuarte` int(10) UNSIGNED NOT NULL,
  `sensorDuarte_idsensorDuarte` int(10) UNSIGNED NOT NULL,
  `macDuarte_idmacDuarte` varchar(17) NOT NULL,
  `dataleitura` date DEFAULT NULL,
  `horaleitura` time DEFAULT NULL,
  `valor` int(10) UNSIGNED ZEROFILL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Despejando dados para a tabela `leituraduarte`
--

INSERT INTO `leituraduarte` (`idleituraDuarte`, `coletorDuarte_idcoletorDuarte`, `sensorDuarte_idsensorDuarte`, `macDuarte_idmacDuarte`, `dataleitura`, `horaleitura`, `valor`) VALUES
(1, 1, 1, '1', '2026-06-19', '14:19:00', NULL);

--
-- Acionadores `leituraduarte`
--
DELIMITER $$
CREATE TRIGGER `trg_decrementa_contadores_duarte` AFTER DELETE ON `leituraduarte` FOR EACH ROW BEGIN
    CALL decrementaMacDuarte(OLD.macduarte_idmacduarte);
    CALL decrementaSensorDuarte(OLD.sensorduarte_idsensorduarte);
    CALL decrementaColetorDuarte(OLD.coletorduarte_idcoletorduarte);
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `trg_incrementa_contadores_duarte` AFTER INSERT ON `leituraduarte` FOR EACH ROW BEGIN
    UPDATE macduarte
    SET contador = contador + 1
    WHERE idmacduarte = NEW.macduarte_idmacduarte;

    UPDATE sensorduarte
    SET contador = contador + 1
    WHERE idsensorduarte = NEW.sensorduarte_idsensorduarte;

    UPDATE coletorduarte
    SET contador = contador + 1
    WHERE idcoletorduarte = NEW.coletorduarte_idcoletorduarte;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `trg_valida_leitura_duarte` BEFORE INSERT ON `leituraduarte` FOR EACH ROW BEGIN
    CALL validaMacDuarte(NEW.macduarte_idmacduarte);
    CALL validaSensorDuarte(NEW.sensorduarte_idsensorduarte);
    CALL validaColetorDuarte(NEW.coletorduarte_idcoletorduarte);
END
$$
DELIMITER ;

-- --------------------------------------------------------

--
-- Estrutura para tabela `macduarte`
--

CREATE TABLE `macduarte` (
  `idmacDuarte` varchar(17) NOT NULL,
  `nome` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `contador` int(10) UNSIGNED DEFAULT 0,
  `ativo` tinyint(1) DEFAULT 1,
  `limite` int(10) UNSIGNED DEFAULT 100
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Despejando dados para a tabela `macduarte`
--

INSERT INTO `macduarte` (`idmacDuarte`, `nome`, `contador`, `ativo`, `limite`) VALUES
('1', NULL, 1, 1, 100);

-- --------------------------------------------------------

--
-- Estrutura para tabela `sensorduarte`
--

CREATE TABLE `sensorduarte` (
  `idsensorDuarte` int(10) UNSIGNED NOT NULL,
  `nome` varchar(45) DEFAULT NULL,
  `ativo` tinyint(1) DEFAULT 1,
  `limite` int(10) UNSIGNED DEFAULT 100,
  `contador` int(10) UNSIGNED DEFAULT 0,
  `unidade` varchar(10) DEFAULT NULL,
  `sigla` varchar(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Despejando dados para a tabela `sensorduarte`
--

INSERT INTO `sensorduarte` (`idsensorDuarte`, `nome`, `ativo`, `limite`, `contador`, `unidade`, `sigla`) VALUES
(1, 'sensorDuarte1', 1, 100, 1, NULL, NULL);

--
-- Índices para tabelas despejadas
--

--
-- Índices de tabela `coletorduarte`
--
ALTER TABLE `coletorduarte`
  ADD PRIMARY KEY (`idcoletorDuarte`);

--
-- Índices de tabela `leituraduarte`
--
ALTER TABLE `leituraduarte`
  ADD PRIMARY KEY (`idleituraDuarte`),
  ADD KEY `leitura_FKIndex1` (`macDuarte_idmacDuarte`),
  ADD KEY `leitura_FKIndex2` (`sensorDuarte_idsensorDuarte`),
  ADD KEY `leitura_FKIndex3` (`coletorDuarte_idcoletorDuarte`);

--
-- Índices de tabela `macduarte`
--
ALTER TABLE `macduarte`
  ADD PRIMARY KEY (`idmacDuarte`);

--
-- Índices de tabela `sensorduarte`
--
ALTER TABLE `sensorduarte`
  ADD PRIMARY KEY (`idsensorDuarte`);

--
-- AUTO_INCREMENT para tabelas despejadas
--

--
-- AUTO_INCREMENT de tabela `coletorduarte`
--
ALTER TABLE `coletorduarte`
  MODIFY `idcoletorDuarte` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- AUTO_INCREMENT de tabela `leituraduarte`
--
ALTER TABLE `leituraduarte`
  MODIFY `idleituraDuarte` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- AUTO_INCREMENT de tabela `sensorduarte`
--
ALTER TABLE `sensorduarte`
  MODIFY `idsensorDuarte` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- Restrições para tabelas despejadas
--

--
-- Restrições para tabelas `leituraduarte`
--
ALTER TABLE `leituraduarte`
  ADD CONSTRAINT `leituraduarte_ibfk_1` FOREIGN KEY (`macDuarte_idmacDuarte`) REFERENCES `macduarte` (`idmacDuarte`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `leituraduarte_ibfk_2` FOREIGN KEY (`sensorDuarte_idsensorDuarte`) REFERENCES `sensorduarte` (`idsensorDuarte`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `leituraduarte_ibfk_3` FOREIGN KEY (`coletorDuarte_idcoletorDuarte`) REFERENCES `coletorduarte` (`idcoletorDuarte`) ON DELETE NO ACTION ON UPDATE NO ACTION;
COMMIT;

