129 lines
2.5 KiB
JavaScript
129 lines
2.5 KiB
JavaScript
const express = require("express");
|
|
const router = express.Router();
|
|
const db = require("../database/database");
|
|
const auth = require("../middleware/auth");
|
|
|
|
router.get("/pages", auth, async (req, res) => {
|
|
const userId = req.session.user.id;
|
|
|
|
try {
|
|
const [owned] = await db.query(
|
|
`
|
|
SELECT page
|
|
FROM user_inventory_pages
|
|
WHERE user_id = ?
|
|
ORDER BY page
|
|
`,
|
|
[userId],
|
|
);
|
|
|
|
const [prices] = await db.query(`
|
|
SELECT page, price
|
|
FROM inventory_page_prices
|
|
ORDER BY page
|
|
`);
|
|
|
|
const [[config]] = await db.query(`
|
|
SELECT config_value
|
|
FROM game_config
|
|
WHERE config_key = 'inventory_max_pages'
|
|
`);
|
|
|
|
const maxPages = config ? config.config_value : 8;
|
|
|
|
const ownedPages = owned.map((p) => p.page);
|
|
|
|
// Seite 1 ist immer kostenlos und gilt als besessen
|
|
if (!ownedPages.includes(1)) {
|
|
ownedPages.unshift(1);
|
|
}
|
|
|
|
res.json({
|
|
ownedPages: ownedPages,
|
|
prices: prices,
|
|
maxPages: maxPages,
|
|
});
|
|
} catch (err) {
|
|
console.error(err);
|
|
res.status(500).json({ error: "DB Fehler" });
|
|
}
|
|
});
|
|
|
|
router.post("/buy-page", auth, async (req, res) => {
|
|
const userId = req.session.user.id;
|
|
|
|
try {
|
|
const [[maxPage]] = await db.query(
|
|
`
|
|
SELECT MAX(page) AS page
|
|
FROM user_inventory_pages
|
|
WHERE user_id = ?
|
|
`,
|
|
[userId],
|
|
);
|
|
|
|
const nextPage = (maxPage.page || 1) + 1;
|
|
|
|
const [[priceRow]] = await db.query(
|
|
`
|
|
SELECT price
|
|
FROM inventory_page_prices
|
|
WHERE page = ?
|
|
`,
|
|
[nextPage],
|
|
);
|
|
|
|
if (!priceRow) {
|
|
return res.json({ error: "Max Seiten erreicht" });
|
|
}
|
|
|
|
const price = priceRow.price;
|
|
|
|
const [[currency]] = await db.query(
|
|
`
|
|
SELECT gold
|
|
FROM account_currency
|
|
WHERE account_id = ?
|
|
`,
|
|
[userId],
|
|
);
|
|
|
|
if (currency.gold < price) {
|
|
const missing = price - currency.gold;
|
|
return res.json({
|
|
error: "Nicht genug Gold",
|
|
gold: currency.gold,
|
|
price: price,
|
|
missing: missing,
|
|
});
|
|
}
|
|
|
|
await db.query(
|
|
`
|
|
UPDATE account_currency
|
|
SET gold = gold - ?
|
|
WHERE account_id = ?
|
|
`,
|
|
[price, userId],
|
|
);
|
|
|
|
await db.query(
|
|
`
|
|
INSERT INTO user_inventory_pages (user_id,page)
|
|
VALUES (?,?)
|
|
`,
|
|
[userId, nextPage],
|
|
);
|
|
|
|
res.json({
|
|
success: true,
|
|
page: nextPage,
|
|
});
|
|
} catch (err) {
|
|
console.error(err);
|
|
res.status(500).json({ error: "DB Fehler" });
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|