Skip to content

Commit

Permalink
Adicao de triggers e adicao do pp
Browse files Browse the repository at this point in the history
  • Loading branch information
LeoFacB committed Sep 8, 2024
1 parent 204ab7a commit 5cfccbe
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 15 deletions.
7 changes: 4 additions & 3 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ services:
image: postgres:16.2
volumes:
- db-pokemon-data:/var/lib/postgresql/data
- ./docs/sql/ddl/ddl.sql:/docker-entrypoint-initdb.d/ddl.sql
- ./docs/sql/dml/dml.sql:/docker-entrypoint-initdb.d/dml.sql
- ./python/scripts_de_api/cidade.sql:/docker-entrypoint-initdb.d/z.sql
- ./docs/sql/ddl/ddl.sql:/docker-entrypoint-initdb.d/a.sql
- ./docs/sql/dml/dml.sql:/docker-entrypoint-initdb.d/b.sql
- ./python/scripts_de_api/cidade.sql:/docker-entrypoint-initdb.d/c.sql
- ./docs/sql/trigger_procedure/trigger.sql:/docker-entrypoint-initdb.d/d.sql
environment:
POSTGRES_USER: "pokemon"
POSTGRES_PASSWORD: "123456"
Expand Down
2 changes: 2 additions & 0 deletions docs/sql/ddl/ddl.sql
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ CREATE TABLE habilidade
acuracia INT NOT NULL,
nome_efeito VARCHAR,
tipo_elemental VARCHAR,
pp INT NOT NULL,

FOREIGN KEY (nome_efeito) REFERENCES efeito (nome),
FOREIGN KEY (tipo_elemental) REFERENCES tipo_elemental (nome)
Expand Down Expand Up @@ -192,6 +193,7 @@ CREATE TABLE pokemon_habilidade
id_pokemon_habilidade SERIAL PRIMARY KEY,
id_pokemon INT,
id_habilidade INT,
pp_restante INT,

FOREIGN KEY (id_pokemon) REFERENCES pokemon (id_pokemon),
FOREIGN KEY (id_habilidade) REFERENCES habilidade (id_habilidade)
Expand Down
24 changes: 12 additions & 12 deletions docs/sql/dml/dml.sql
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,12 @@ VALUES


-- Inserindo dados na tabela 'habilidade'
INSERT INTO habilidade (nome, dano, acuracia, nome_efeito, tipo_elemental)
VALUES ('Lança Chamas', 70, 90, 'queimadura', 'fire');
INSERT INTO habilidade (nome, dano, acuracia, nome_efeito, tipo_elemental)
VALUES ('Hidro Bomba', 80, 85, 'confusão', 'water');
INSERT INTO habilidade (nome, dano, acuracia, nome_efeito, tipo_elemental)
VALUES ('Choque do Trovão', 60, 95, 'paralisia', 'electric');
INSERT INTO habilidade (nome, dano, acuracia, nome_efeito, tipo_elemental, pp)
VALUES ('Lança Chamas', 70, 90, 'queimadura', 'fire', 10);
INSERT INTO habilidade (nome, dano, acuracia, nome_efeito, tipo_elemental, pp)
VALUES ('Hidro Bomba', 80, 85, 'confusão', 'water', 15);
INSERT INTO habilidade (nome, dano, acuracia, nome_efeito, tipo_elemental, pp)
VALUES ('Choque do Trovão', 60, 95, 'paralisia', 'electric', 5);

-- Inserindo dados na tabela 'interacao'
INSERT INTO interacao (valor, tipo_atacante, tipo_defensor)
Expand Down Expand Up @@ -443,12 +443,12 @@ INSERT INTO instancia_missao (id_missao, id_jogador, concluida)
VALUES (1, 3, false);

-- Inserindo dados na tabela 'pokemon_habilidade'
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade)
VALUES (1, 1);
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade)
VALUES (2, 2);
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade)
VALUES (3, 3);
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade, pp_restante)
VALUES (1, 1, 0);
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade, pp_restante)
VALUES (2, 2, 1);
INSERT INTO pokemon_habilidade (id_pokemon, id_habilidade, pp_restante)
VALUES (3, 3, 2);

-- Inserindo dados na tabela 'terreno_loot'
INSERT INTO terreno_loot (id_terreno, id_loot)
Expand Down
58 changes: 58 additions & 0 deletions docs/sql/trigger_procedure/trigger.sql
Original file line number Diff line number Diff line change
Expand Up @@ -104,5 +104,63 @@ CREATE TRIGGER trigger_check_jogador
BEFORE UPDATE OR INSERT ON npc
FOR EACH ROW EXECUTE PROCEDURE check_jogador();

-- Trigger para verificar apos o movimento se o jogador está envenenado e se ele se moveu e diminuir a vida
CREATE OR REPLACE FUNCTION verifica_movimento_veneno()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.status = 'Envenenado' THEN
IF (NEW.posicao <> OLD.posicao) THEN
UPDATE jogador j SET vida = vida-1 WHERE j.id_jogador = NEW.id_jogador;
RAISE NOTICE 'Jogador % perdeu 1 de vida por estar envenenado.', NEW.id_jogador;
END IF;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE OR REPLACE TRIGGER trigger_verifica_movimento_veneno
AFTER UPDATE OF posicao ON jogador
FOR EACH ROW
EXECUTE FUNCTION verifica_movimento_veneno();

--Trigger para verificar antes de usar um golpe se a habilidade tem PP suficiente
CREATE OR REPLACE FUNCTION verifica_pp_habilidade()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.pp_restante < 0 THEN
RAISE EXCEPTION 'Habilidade sem PP suficiente para ser usada.';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE OR REPLACE TRIGGER trigger_verifica_pp_habilidade
BEFORE UPDATE OF pp_restante ON pokemon_habilidade
FOR EACH ROW
EXECUTE FUNCTION verifica_pp_habilidade();

--Trigger para verificar se o pp_restante ultrapassou que o pp máximo da habilidade
CREATE OR REPLACE FUNCTION verifica_pp_habilidade_maximo() RETURNS TRIGGER AS
$$
DECLARE
pp_maximo INT;
BEGIN
SELECT pp
INTO pp_maximo
FROM pokemon_habilidade ph
JOIN habilidade h ON h.id_habilidade = ph.id_habilidade
WHERE ph.id_habilidade = NEW.id_habilidade;
IF NEW.pp_restante > pp_maximo THEN
RAISE EXCEPTION 'Não é possível adicionar mais PP do que o máximo.';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE OR REPLACE TRIGGER trigger_verifica_pp_habilidade_maximo
BEFORE UPDATE OF pp_restante ON pokemon_habilidade
FOR EACH ROW
EXECUTE FUNCTION verifica_pp_habilidade_maximo();



0 comments on commit 5cfccbe

Please sign in to comment.