Skip to content

Commit

Permalink
Atualizando a main.
Browse files Browse the repository at this point in the history
  • Loading branch information
ShaineOliveira committed Sep 8, 2024
1 parent 9b1aab5 commit ad6d6ed
Show file tree
Hide file tree
Showing 6 changed files with 349 additions and 139 deletions.
2 changes: 1 addition & 1 deletion docs/modelagem/diagrama-entidade-relacionamento.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ O Diagrama de Entidade-Relacionamento (DER) destaca as principais entidades e se
Abaixo temos a imagem do diagrama de entidade relacionamento:

<figure markdown="span">
![Diagrama Entidade Relacionamento](../images/DER/diagrama-entidade-relacionamento-1.6.png)
![Diagrama Entidade Relacionamento](../images/DER/diagrama-entidade-relacionamento-1.7.png)
<figcaption>Diagrama entidade relacionamento</figcaption>
</figure>

Expand Down
333 changes: 197 additions & 136 deletions docs/modelagem/dicionario_dados.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions docs/modelagem/modelo-entidade-relacionamento.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ Abaixo temos a imagem do modelo de entidade relacionamento:
<!-- ![Image title](../images/MER/modelo-entidade-relacionamento.png/#only-light)
![Image title](../images/MER/modelo-entidade-relacionamento-dark.png/#only-dark) -->

[Link para o Modelo Entidade-Relacionamento](https://drive.google.com/file/d/1nllkrmmWlrq3KmpdA-dB0EknChRtXsTk/view?usp=sharing)
[Link para o Modelo Entidade-Relacionamento](https://miro.com/app/board/uXjVKwg_uxM=/)

## Histórico de Versão

| Versão | Data | Descrição | Autor(es) |
| :----: | :--------: | :-----------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| `1.0` | 27/06/2024 | Primeira versão do modelo entidade relacionanemto | [Gabriel Marcolino](https://github.com/GabrielMR360), [Shaíne Oliveira](ttps://github.com/ShaineOliveira), [José Filipi](https://github.com/JoseFilipi) e [Leonardo Bonetti](https://github.com/LeoFacB) |
| `1.1` | 27/06/2024 | Atualizando MER | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
| `1.1` | 27/06/2024 | Atualizando MER | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |
82 changes: 82 additions & 0 deletions docs/sql/trigger_procedure/trigger.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# <b>Triggers e Stored Procedures</b>

#### Validar a alteração do tamanho do inventário
~~~sql
CREATE FUNCTION valida_update_tam_inventario() RETURNS TRIGGER AS
$$
BEGIN
IF NEW.tam_inventario != OLD.tam_inventario THEN
RAISE EXCEPTION 'A coluna tam_inventario não pode ser alterada diretamente.';
END IF;
END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS valida_update_tam_inventario ON jogador;
CREATE TRIGGER valida_update_tam_inventario
BEFORE UPDATE
ON jogador
FOR EACH ROW
EXECUTE FUNCTION valida_update_tam_inventario();
~~~

#### Verificar se o inventário do jogador está cheio antes de adicionar um novo item
~~~~sql
CREATE OR REPLACE FUNCTION verificar_tam_inventario() RETURNS TRIGGER AS
$$
DECLARE
qtd_itens INT;
tamanho_inventario INT;
BEGIN
SELECT count(*)
INTO qtd_itens
FROM inventario i
JOIN jogador j on i.id_inventario = j.id_jogador
JOIN instancia_item ii on i.id_instancia_item = ii.id_instancia_item
WHERE j.id_jogador = NEW.id_inventario;

SELECT tam_inventario INTO tamanho_inventario FROM jogador WHERE id_jogador = NEW.id_inventario;

IF qtd_itens < tamanho_inventario THEN
RETURN NEW;
ELSE
RAISE EXCEPTION 'Inventário cheio! Não é possível adicionar mais itens.';
END IF;
END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS before_insert_instancia_item ON inventario;
CREATE TRIGGER before_insert_instancia_item
BEFORE INSERT
ON inventario
FOR EACH ROW
EXECUTE FUNCTION verificar_tam_inventario();
~~~~

#### Move o jogador para a cidade quando a vida dele for igual a zero
~~~~sql
CREATE OR REPLACE FUNCTION verifica_vida_jogador()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.vida <= 0 THEN
NEW.posicao := (SELECT id_terreno FROM terreno WHERE x = 0 AND y = 0);
RAISE NOTICE 'Jogador % retornou para a cidade.', NEW.id_jogador;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;


CREATE OR REPLACE TRIGGER trigger_verifica_vida_jogador
BEFORE UPDATE OF vida ON jogador
FOR EACH ROW
WHEN (NEW.vida <= 0)
EXECUTE FUNCTION verifica_vida_jogador();
~~~~

## Histórico de Versão

| Versão | Data | Descrição | Autor(es) |
| :----: | :--------: | :-----------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| `1.0` | 07/09/2024 | Adicionando triggers | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira)|
| `1.1` | 07/09/2024 | Adiciona trigger de vida | [Gabriel Marcolino](https://github.com/GabrielMR360) e [Shaíne Oliveira](ttps://github.com/ShaineOliveira) |

66 changes: 66 additions & 0 deletions docs/sql/trigger_procedure/trigger.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
-- Validar a alteração do tamanho do inventário
CREATE FUNCTION before_update_tam_inventario() RETURNS TRIGGER AS
$$
BEGIN
IF NEW.tam_inventario != OLD.tam_inventario THEN
RAISE EXCEPTION 'A coluna tam_inventario não pode ser alterada diretamente.';
END IF;
END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS before_update_tam_inventario ON jogador;
CREATE TRIGGER before_update_tam_inventario
BEFORE UPDATE
ON jogador
FOR EACH ROW
EXECUTE FUNCTION before_update_tam_inventario();

-- Trigger para verificar se o inventário do jogador está cheio antes de adicionar um novo item
CREATE OR REPLACE FUNCTION verificar_tam_inventario() RETURNS TRIGGER AS
$$
DECLARE
qtd_itens INT;
tamanho_inventario INT;
BEGIN
SELECT count(*)
INTO qtd_itens
FROM inventario i
JOIN jogador j on i.id_inventario = j.id_jogador
JOIN instancia_item ii on i.id_instancia_item = ii.id_instancia_item
WHERE j.id_jogador = NEW.id_inventario;

SELECT tam_inventario INTO tamanho_inventario FROM jogador WHERE id_jogador = NEW.id_inventario;

IF qtd_itens < tamanho_inventario THEN
RETURN NEW;
ELSE
RAISE EXCEPTION 'Inventário cheio! Não é possível adicionar mais itens.';
END IF;
END;
$$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS before_insert_instancia_item ON inventario;
CREATE TRIGGER before_insert_instancia_item
BEFORE INSERT
ON inventario
FOR EACH ROW
EXECUTE FUNCTION verificar_tam_inventario();

--Move o jogador para a cidade quando a vida dele for igual a zero
CREATE OR REPLACE FUNCTION verifica_vida_jogador()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.vida <= 0 THEN
NEW.posicao := (SELECT id_terreno FROM terreno WHERE x = 0 AND y = 0);
RAISE NOTICE 'Jogador % retornou para a cidade.', NEW.id_jogador;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;


CREATE OR REPLACE TRIGGER trigger_verifica_vida_jogador
BEFORE UPDATE OF vida ON jogador
FOR EACH ROW
WHEN (NEW.vida <= 0)
EXECUTE FUNCTION verifica_vida_jogador();
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ nav:
- DDL: sql/ddl/ddl.md
- DML: sql/dml/dml.md
- DQL: sql/dql/dql.md
- Trigger: sql/trigger_procedure/trigger_procedure.md
- Apresentações:
- Apresentação 1: entregas/modulo1/apresentacao_1.md
- Apresentação 2: entregas/modulo2/apresentacao_2.md
Expand Down

0 comments on commit ad6d6ed

Please sign in to comment.