diff --git a/sql/triggers.sql b/sql/triggers.sql index 7c98b4b..667f712 100644 --- a/sql/triggers.sql +++ b/sql/triggers.sql @@ -27,8 +27,7 @@ DELIMITER // CREATE OR REPLACE TRIGGER RN_4_02_ConversacionesSoloVinculosActivos BEFORE INSERT ON conversaciones FOR EACH row begin - if (estadoVinculo(NEW.)) - + if () DELIMITER ; @@ -131,6 +130,7 @@ CREATE OR REPLACE TRIGGER RN_2_01_ConsitenciaFechasVinculoAmistad -- usuario aceptante y solicitante?? END // DELIMITER ; + DELIMITER // CREATE OR REPLACE TRIGGER RN_2_01_ConsitenciaFechasVinculoAmistadU AFTER update ON vinculos FOR EACH row @@ -174,44 +174,62 @@ CREATE OR REPLACE TRIGGER RN_2_03_Derivacion_atributo_vinculoActivo DELIMITER ; DELIMITER // -CREATE OR REPLACE TRIGGER RN_2_04_Limitacion_de_vinculos_entre_dos_usuarios - BEFORE INSERT ON vinculos FOR EACH ROW +CREATE OR REPLACE TRIGGER RN_3_02_b_Autoexclusion_en_vinculos + BEFORE INSERT ON vinculos FOR EACH row begin - if(numeroVinculosActivosDeUsuario(NEW.usuarioid1, NEW.usuarioid2) > 1) then + if(NEW.usuarioid1 = NEW.usuarioid2) then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = - 'Dos usuarios no pueden tener mas de un vinculo activo entre ellos dos'; - END if; - END// + 'RN_3_02_b: Un usuario no puede crear un vinculo consigo mismo'; + END if; + END// DELIMITER ; DELIMITER // -CREATE OR REPLACE TRIGGER RN_2_05_Usuarios_activos_para_creacion_de_vinculos - BEFORE INSERT ON vinculos FOR EACH row +CREATE OR REPLACE TRIGGER RN_2_01_ConsitenciaFechasVinculoAmistadU + AFTER UPDATE ON vinculos FOR EACH row begin - if(usuarioActivo(NEW.usuarioid1) = FALSE) then - SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = - 'Un usuario inactivo no puede enviar una solicitud de vinculo'; - END if; - END// + DECLARE fechaAceptacion ROW TYPE of vinculos; + DECLARE fechaRevoacion ROW TYPE of vinculos; + DECLARE estadoSolicitud ROW TYPE of vinculos; + DECLARE estadoVinculo ROW TYPE of vinculos; + if (NEW.fechaAceptacion IS NULL AND NEW.fechaRevocacion IS NULL) then + SET estadoVinculo = 'Inactivo'; + SET estadoSolicitud = 'Pendiente'; + END if; + if (NEW.fechaAceptacion IS NOT NULL AND NEW.fechaRevocacion IS NULL) then + SET estadoVinculo = 'Activo'; + SET estadoSolicitud = 'Aceptado'; + END if; + if (NEW.fechaAceptacion IS NOT NULL AND NEW.fechaRevocacion IS NOT NULL) then + SET estadoVinculo = 'Inactivo'; + SET estadoSolicitud = 'Aceptado'; + END if; + END // DELIMITER ; + DELIMITER // -CREATE OR REPLACE TRIGGER RN_2_05_Usuarios_activos_para_creacion_de_vinculos_aceptante - BEFORE INSERT ON vinculos FOR EACH row - begin - if(usuarioActivo(NEW.usuarioid2) = FALSE) then - SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = - 'Un usuario inactivo no puede aceptar una solicitud de vinculo'; - END if; - END// +CREATE OR REPLACE TRIGGER RN_2_04_Limitacion_de_vinculos_entre_dos_usuarios + BEFORE INSERT ON vinculos FOR EACH ROW + begin + if(numeroVinculosActivosDeUsuario(NEW.usuarioid1, NEW.usuarioid2) > 1) then + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = + 'Dos usuarios no pueden tener mas de un vinculo activo entre ellos dos'; + END if; + END// DELIMITER ; DELIMITER // -CREATE OR REPLACE TRIGGER RN_3_02_b_Autoexclusion_en_vinculos - BEFORE INSERT ON vinculos FOR EACH row - begin - if(NEW.usuarioid1 = NEW.usuarioid2) then - SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = - 'RN_3_02_b: Un usuario no puede crear un vinculo consigo mismo'; - END if; - END// -DELIMITER ; \ No newline at end of file +CREATE OR REPLACE TRIGGER RN_2_05_SoloUsuariosActivos + BEFORE INSERT ON vinculos FOR EACH ROW + BEGIN + if (usuarioActivo(NEW.usuarioId1) = FALSE) then + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT 'Solo los usuarios que esten activos pueden enviar solicitudes de amistad y aceptarlas.'; + END if; + END// +DELIMITER ; + + + + + + \ No newline at end of file