128 lines
3.5 KiB
JavaScript
128 lines
3.5 KiB
JavaScript
const model = require('../models/libraryModel');
|
|
|
|
// Este é o "cérebro" do nosso microsserviço!
|
|
// O controller recebe as requisições HTTP, valida os dados,
|
|
// chama as funções do model e retorna respostas apropriadas.
|
|
// É como o gerente que coordena tudo.
|
|
|
|
// Função para adicionar um item manualmente à biblioteca.
|
|
// Pode ser usado para correções ou imports especiais.
|
|
exports.addItem = (req, res) => {
|
|
// Validação básica dos dados obrigatórios
|
|
const { user_id, type, item_id, title } = req.body;
|
|
|
|
if (!user_id || !type || !item_id || !title) {
|
|
return res.json({
|
|
success: false,
|
|
message: 'Dados obrigatórios faltando: user_id, type, item_id, title'
|
|
});
|
|
}
|
|
|
|
// Só aceitamos tipos válidos para manter consistência
|
|
if (!['game', 'gift_card'].includes(type)) {
|
|
return res.json({
|
|
success: false,
|
|
message: 'Tipo inválido. Use "game" ou "gift_card"'
|
|
});
|
|
}
|
|
|
|
// Chama o model para adicionar o item
|
|
model.addItem(req.body, (err) => {
|
|
if (err) {
|
|
return res.json({
|
|
success: false,
|
|
error: err,
|
|
message: 'Erro ao adicionar item à biblioteca'
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
message: 'Item adicionado à biblioteca com sucesso!'
|
|
});
|
|
});
|
|
};
|
|
|
|
// Função que retorna toda a biblioteca de um usuário.
|
|
// É chamada quando o usuário abre sua página de biblioteca.
|
|
exports.getLibrary = (req, res) => {
|
|
const user_id = req.params.user_id;
|
|
|
|
// Validação do ID do usuário
|
|
if (!user_id || isNaN(user_id)) {
|
|
return res.json({
|
|
success: false,
|
|
message: 'ID do usuário inválido'
|
|
});
|
|
}
|
|
|
|
// Busca todos os itens do usuário
|
|
model.getUserLibrary(user_id, (err, results) => {
|
|
if (err) {
|
|
return res.json({
|
|
success: false,
|
|
error: err,
|
|
message: 'Erro ao buscar biblioteca'
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
data: results,
|
|
message: `Encontrados ${results.length} itens na biblioteca`
|
|
});
|
|
});
|
|
};
|
|
|
|
// Esta é a função mais importante para integração!
|
|
// É chamada AUTOMATICAMENTE pelo serviço de pagamentos quando uma compra é aprovada.
|
|
// Garante que o usuário receba seu jogo/gift card na biblioteca.
|
|
exports.paymentApproved = (req, res) => {
|
|
const data = req.body;
|
|
|
|
// Validações rigorosas pois isso vem de outro serviço
|
|
const { user_id, type, item_id, title } = data;
|
|
|
|
if (!user_id || !type || !item_id || !title) {
|
|
return res.json({
|
|
success: false,
|
|
message: 'Dados de pagamento incompletos'
|
|
});
|
|
}
|
|
|
|
// Primeiro verifica se o usuário já tem esse item (evita duplicatas)
|
|
model.checkItem(user_id, item_id, (err, results) => {
|
|
if (err) {
|
|
return res.json({
|
|
success: false,
|
|
error: err,
|
|
message: 'Erro ao verificar item existente'
|
|
});
|
|
}
|
|
|
|
// Se já tem, informa que não precisa adicionar novamente
|
|
if (results.length > 0) {
|
|
return res.json({
|
|
success: false,
|
|
message: 'Usuário já possui este item em sua biblioteca'
|
|
});
|
|
}
|
|
|
|
// Se não tem, adiciona o item
|
|
model.addItem(data, (err) => {
|
|
if (err) {
|
|
return res.json({
|
|
success: false,
|
|
error: err,
|
|
message: 'Erro ao adicionar item após pagamento'
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
message: 'Pagamento aprovado! Item adicionado à biblioteca.'
|
|
});
|
|
});
|
|
});
|
|
};
|