Skip to content

Commit

Permalink
Merge branch 'feat/personagem-jogavel'
Browse files Browse the repository at this point in the history
  • Loading branch information
zzzBECK committed Dec 11, 2023
2 parents 5d48b00 + edde699 commit baf0d06
Show file tree
Hide file tree
Showing 19 changed files with 906 additions and 101 deletions.
30 changes: 30 additions & 0 deletions game/Backend/postgres/migrations/1_schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,20 @@ CREATE TABLE personagem (
);


CREATE TABLE parte (
idParte SERIAL,
idPersonagem INTEGER NOT NULL,
tipoParte VARCHAR(50),
hpMax INTEGER,
hpAtual INTEGER,
probAcerto NUMERIC,
PRIMARY KEY (idParte, idPersonagem),
FOREIGN KEY (idPersonagem) REFERENCES Personagem (id_personagem)
ON DELETE CASCADE
);



CREATE TABLE personagem_jogavel (
id_personagem SERIAL PRIMARY KEY,
hpAtual INTEGER,
Expand Down Expand Up @@ -63,6 +77,22 @@ CREATE TABLE personagem_nao_jogavel (
-- Se 'tipoPnj' for uma chave estrangeira para outra tabela, você precisará adicionar a chave estrangeira aqui.
);


CREATE TABLE inimigo (
id_personagem INTEGER PRIMARY KEY,
nivelPerigo INTEGER NOT NULL,
recompensa INTEGER NOT NULL,
FOREIGN KEY (id_personagem) REFERENCES personagem_nao_jogavel (id_personagem) ON DELETE CASCADE
);

CREATE TABLE lojista (
id_personagem INTEGER PRIMARY KEY,
nomeLoja VARCHAR(50) NOT NULL,
especialidade VARCHAR(50),
FOREIGN KEY (id_personagem) REFERENCES personagem_nao_jogavel (id_personagem) ON DELETE CASCADE
);


-- Assuming 'Item' is an entity that includes 'nome', 'descricao', 'valor', 'peso'
CREATE TABLE item (
idItem SERIAL PRIMARY KEY,
Expand Down
55 changes: 55 additions & 0 deletions game/Backend/postgres/migrations/2_functions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,31 @@ FOR EACH ROW EXECUTE FUNCTION check_exclusive_personagem_type();



CREATE OR REPLACE FUNCTION check_exclusive_pnj_type()
RETURNS TRIGGER AS $$
DECLARE
count_subcategories INT; -- Contador para o número total de subcategorias associadas
BEGIN
-- Inicializa o contador como zero
count_subcategories := 0;

-- Verifica se o personagem existe na subcategoria Inimigo
SELECT COUNT(*) INTO count_subcategories FROM inimigo WHERE id_personagem = NEW.id_personagem;
-- Verifica se o personagem existe na subcategoria Lojista e adiciona ao contador
SELECT COUNT(*) INTO count_subcategories FROM lojista WHERE id_personagem = NEW.id_personagem + count_subcategories;

-- Se o contador for maior que 1, então o personagem está em mais de uma subcategoria
IF count_subcategories > 1 THEN
RAISE EXCEPTION 'Um personagem não pode ser de mais de um tipo de PNJ.';
END IF;

-- Se tudo estiver correto, permite a inserção ou atualização
RETURN NEW;
END;
$$ LANGUAGE plpgsql;



CREATE OR REPLACE FUNCTION check_exclusive_item_type()
RETURNS TRIGGER AS $$
DECLARE
Expand Down Expand Up @@ -121,4 +146,34 @@ END;
$$;


CREATE OR REPLACE FUNCTION criar_partes_personagem()
RETURNS TRIGGER AS $$
BEGIN
-- Insere duas pernas para o novo personagem
FOR i IN 1..2 LOOP
INSERT INTO parte (idPersonagem, tipoParte, hpMax, hpAtual, probAcerto)
VALUES (NEW.id_personagem, 'Perna', 100, 100, 0.7);
END LOOP;

-- Insere dois braços para o novo personagem
FOR i IN 1..2 LOOP
INSERT INTO parte (idPersonagem, tipoParte, hpMax, hpAtual, probAcerto)
VALUES (NEW.id_personagem, 'Braço', 100, 100, 0.8);
END LOOP;

-- Insere um torso para o novo personagem
INSERT INTO parte (idPersonagem, tipoParte, hpMax, hpAtual, probAcerto)
VALUES (NEW.id_personagem, 'Torso', 200, 200, 0.5);

-- Insere uma cabeça para o novo personagem
INSERT INTO parte (idPersonagem, tipoParte, hpMax, hpAtual, probAcerto)
VALUES (NEW.id_personagem, 'Cabeça', 50, 50, 0.2);

RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trigger_criar_partes_personagem
AFTER INSERT ON Personagem
FOR EACH ROW
EXECUTE FUNCTION criar_partes_personagem();
55 changes: 15 additions & 40 deletions game/Backend/postgres/migrations/3_data.sql
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,7 @@ VALUES
'O bosque que fica ao redor da cidade.',
FALSE
);
-- (
-- 'Circo',
-- 'Um lugar que antes era usado para diversão e entretenimento, mas que atualmente tem um aspecto sinistro e abandonado.',
-- TRUE
-- ),
-- (
-- 'Truques e mágica Dr. Kefer',
-- 'Um pequeno edifício de aparência desgastada.',
-- FALSE
-- ),
-- (
-- 'Livraria',
-- 'A livraria comercializava todo tipo de livro dos mais variados assuntos.',
-- FALSE
-- ),
-- (
-- 'Casa do lenhador',
-- 'A casa do lenhador do vilarejo',
-- FALSE
-- );


INSERT INTO
Local (idRegiao, nomeL, imgTexto)
Expand Down Expand Up @@ -93,9 +74,9 @@ VALUES

-- Primeiro, inserimos um personagem que será jogável
INSERT INTO
personagem (nome, idLocal, tipoP, dinheiro)
personagem (nome, idLocal, tipoP, dinheiro, atq)
VALUES
('Jogador Heroico', 1, 'personagem_jogavel', 1000) RETURNING id_personagem;
('Jogador Heroico', 1, 'personagem_jogavel', 1000, 20) RETURNING id_personagem;

-- Suponha que o ID retornado seja 1, usamos esse ID para inserir na tabela PersonagemJogavel
INSERT INTO
Expand All @@ -119,29 +100,23 @@ VALUES
'Cota de Malha'
);

-- Em seguida, inserimos um personagem que não será jogável
-- Inserir NPCs na tabela personagem
-- Suponha que os IDs de Local correspondam aos inseridos anteriormente nas tabelas de Região e Local
INSERT INTO
personagem (nome, idLocal, tipoP)
personagem (nome, idLocal, tipoP, dinheiro)
VALUES
('NPC Misterioso', 1, 'personagem_nao_jogavel') RETURNING id_personagem;
('Lojista da Fonte', 1, 'personagem_nao_jogavel', 0),
('Ermitão da Praça', 2, 'personagem_nao_jogavel', 0)
RETURNING id_personagem;

-- Suponha que o ID retornado seja 2, usamos esse ID para inserir na tabela PersonagemNaoJogavel
-- Inserir detalhes dos NPCs na tabela personagem_nao_jogavel
-- Suponha que os IDs retornados correspondam aos nomes dos NPCs acima
INSERT INTO
personagem_nao_jogavel (
id_personagem,
descricao,
fala,
imgTexto,
tipoPnj
)
personagem_nao_jogavel (id_personagem, descricao, fala, imgTexto, tipoPnj)
VALUES
(
2,
'Um misterioso Logista que oferece conselhos.',
'Olá, aventureiro!',
'imagem_do_npc.png',
'Lojista'
);
(2, 'O guardião eterno da fonte, observa e cuida dela.', 'As águas ainda fluem puras...', null, 'Lojista'),
(3, 'Uma sombra ameaçadora que assombra os limites da praça. ', 'Encontre seu caminho ou perca-se tentando...', null, 'Inimigo');


-- Inserting items into the 'item' table
INSERT INTO
Expand Down
59 changes: 57 additions & 2 deletions game/Backend/src/Services/PersonagemServicesDB.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export const getItemPersonagem = async () => {
return await getDBConnection(query);
};

export const getPersonagensPorLocal = async (idLocal) => {
export const getPersonagensPorLocal = async (idLocal) => {
const query = `SELECT personagem.*, local.imgTexto
FROM personagem
INNER JOIN local ON personagem.idLocal = local.idLocal
Expand All @@ -14,7 +14,62 @@ export const getPersonagensPorLocal = async (idLocal) => {
return await getDBConnection(query);
};

export const getPersonagensById = async (id_personagem) => {
export const getPersonagensById = async (id_personagem) => {
const query = `SELECT * FROM personagem WHERE id_personagem = ${id_personagem};`;
return await getDBConnection(query);
};

export const getPersonagensJogaveis = async () => {
const query = `
SELECT pj.*, p.nome
FROM personagem_jogavel pj
JOIN personagem p ON pj.id_personagem = p.id_personagem;
`;
return await getDBConnection(query);
};

export const getPersonagensNaoJogaveis = async () => {
const query = `
SELECT pnj.*, p.nome
FROM personagem_nao_jogavel pnj
JOIN personagem p ON pnj.id_personagem = p.id_personagem;
`;
return await getDBConnection(query);
};

export const getPersonagensNaoJogaveisPorLocal = async (id_local) => {
const query = `
SELECT pnj.*, p.nome
FROM personagem_nao_jogavel pnj
JOIN personagem p ON pnj.id_personagem = p.id_personagem
WHERE p.idlocal = ${id_local};
`;
return await getDBConnection(query);
};

export const getPersonagensNaoJogaveisPorId = async (id_personagem) => {
const query = `
SELECT pnj.*, p.nome
FROM personagem_nao_jogavel pnj
JOIN personagem p ON pnj.id_personagem = p.id_personagem
WHERE p.id_personagem = ${id_personagem};
`;
return await getDBConnection(query);
};

export const movePersonagem = async (id_personagem, id_local) => {
const query = `
UPDATE personagem
SET idLocal = ${id_local}
WHERE id_personagem = ${id_personagem};
`;
return await getDBConnection(query);
};

export const getPartesPersonagem = async (id_personagem) => {
const query = `
SELECT * FROM parte
WHERE idPersonagem = ${id_personagem};
`;
return await getDBConnection(query);
};
12 changes: 10 additions & 2 deletions game/Backend/src/Services/compraServiceDB.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ import getDBConnection from "./getDBConnection.js";

export const compraItens = async (idPersonagem, idItem) => {
// const query = "'CALL comprarItem($1, $2)', [idPersonagem, idItem]";
return await getDBConnection('CALL comprarItem($1, $2)', [idPersonagem, idItem]);
return await getDBConnection("CALL comprarItem($1, $2)", [
idPersonagem,
idItem,
]);
};

export const ItemComprados = async () => {
Expand All @@ -16,5 +19,10 @@ export const ItemComprados = async () => {
WHERE c.id_personagem = $1
ORDER BY c.dataCompra DESC;
`;
return await getDBConnection(query, [1]);
return await getDBConnection(query, [1]);
};

export const putParteAtualizarHP = async (id, hp) => {
const query = `UPDATE parte SET hpAtual = ${hp} WHERE idParte = ${id};`;
return await getDBConnection(query);
};
21 changes: 18 additions & 3 deletions game/Backend/src/controller/CompraController.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import { ItemComprados, compraItens } from "../Services/compraServiceDB.js";
import {
ItemComprados,
compraItens,
putParteAtualizarHP,
} from "../Services/compraServiceDB.js";

class CompraController {
async ComprarItem(req, res) {
try {
// Acessando o parâmetro da rota
const { idPersonagem, idItem } = req.params;
console.log("DEU bom o params", idPersonagem, idItem);
const response = (await compraItens(idPersonagem, idItem)) ?? null;
return res.status(200).json(response);
} catch (error) {
Expand All @@ -16,14 +19,26 @@ class CompraController {

async ItemComprados(req, res) {
try {
// Acessando o parâmetro da rota
// Acessando o parâmetro da rota
const response = (await ItemComprados()) ?? null;
return res.status(200).json(response);
} catch (error) {
console.error(error.message);
return res.status(500).json({ error: "Compra não efetuada" });
}
}

async putParteAtualizarHP(req, res) {
try {
// Acessando o parâmetro da rota
const { id, hp } = req.params;
const response = (await putParteAtualizarHP(id, hp)) ?? null;
return res.status(200).json(response);
} catch (error) {
console.error(error.message);
return res.status(500).json({ error: "error na atualização da vida" });
}
}
}

export default new CompraController();
Loading

0 comments on commit baf0d06

Please sign in to comment.