diff --git a/libraryModel.js b/libraryModel.js new file mode 100644 index 0000000..2a909b1 --- /dev/null +++ b/libraryModel.js @@ -0,0 +1,33 @@ +const db = require('../config/db'); + +// Este arquivo é o nosso "guarda-roupa" - aqui guardamos todas as funções +// que interagem diretamente com o banco de dados da biblioteca. +// Seguimos o padrão MVC: Model lida com dados, Controller com lógica, View com apresentação. + +// Função para adicionar um item (jogo ou gift card) à biblioteca do usuário. +// É chamada quando um pagamento é aprovado ou quando queremos adicionar manualmente. +exports.addItem = (data, callback) => { + // SQL preparado para evitar injeção de código malicioso + // Campos: user_id (quem comprou), type (jogo ou gift card), item_id (ID do item), + // title (nome do jogo/gift), platform (onde roda ou vale) + const sql = `INSERT INTO users_library (user_id, type, item_id, title, platform) + VALUES (?, ?, ?, ?, ?)`; + + // Executa a query com os dados sanitizados + db.query(sql, [data.user_id, data.type, data.item_id, data.title, data.platform], callback); +}; + +// Função que busca TODOS os itens da biblioteca de um usuário específico. +// É usada quando o usuário quer ver sua coleção completa. +exports.getUserLibrary = (user_id, callback) => { + // Query simples mas eficiente - busca tudo do usuário + db.query('SELECT * FROM users_library WHERE user_id = ?', [user_id], callback); +}; + +// Função importante para evitar duplicatas! +// Antes de adicionar um item, verificamos se o usuário já não o tem. +// Isso evita que alguém compre o mesmo jogo duas vezes por acidente. +exports.checkItem = (user_id, item_id, callback) => { + // Busca se existe algum registro com esse usuário e item + db.query('SELECT * FROM users_library WHERE user_id = ? AND item_id = ?', [user_id, item_id], callback); +}; diff --git a/libraryRoutes.js b/libraryRoutes.js new file mode 100644 index 0000000..e1b3bb7 --- /dev/null +++ b/libraryRoutes.js @@ -0,0 +1,26 @@ +const express = require('express'); +const router = express.Router(); +const controller = require('../controllers/libraryController'); + +// Este arquivo define as "portas de entrada" da nossa API! +// Cada rota é como uma porta específica do prédio - cada uma leva a um lugar diferente. +// Seguimos convenções REST: POST para criar, GET para buscar. + +// Rota para adicionar um item manualmente à biblioteca +// Método: POST /library/add +// Uso: Para correções ou imports especiais (não para compras normais) +router.post('/add', controller.addItem); + +// Rota para buscar toda a biblioteca de um usuário +// Método: GET /library/user/:user_id +// Exemplo: GET /library/user/123 retorna todos os jogos e gift cards do usuário 123 +router.get('/user/:user_id', controller.getLibrary); + +// Rota CRUCIAL para integração com o serviço de pagamentos! +// Método: POST /library/integration/payment-approved +// Esta rota é chamada AUTOMATICAMENTE quando um pagamento é aprovado. +// É o elo entre "comprou" e "recebeu na biblioteca". +router.post('/integration/payment-approved', controller.paymentApproved); + +// Exportamos o router para que o app.js possa usar essas rotas +module.exports = router; diff --git a/mime b/mime new file mode 100644 index 0000000..7751de3 --- /dev/null +++ b/mime @@ -0,0 +1,16 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) + if command -v cygpath > /dev/null 2>&1; then + basedir=`cygpath -w "$basedir"` + fi + ;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../mime/cli.js" "$@" +else + exec node "$basedir/../mime/cli.js" "$@" +fi