diff options
| -rw-r--r-- | db/index.js | 19 | ||||
| -rw-r--r-- | lib/sockets.js | 6 | ||||
| -rw-r--r-- | routes/invoices.js | 28 | ||||
| -rw-r--r-- | routes/requests.js | 74 |
4 files changed, 116 insertions, 11 deletions
diff --git a/db/index.js b/db/index.js index 749f770b..255382f4 100644 --- a/db/index.js +++ b/db/index.js @@ -20,7 +20,7 @@ import "./models/withdrawals"; import "./models/referrals"; import "./models/waiting_list"; -const { User, Account, Payment, Invoice, Key, Order, Referral } = db; +const { User, Account, Payment, Invoice, Key, Order, Referral, Request } = db; User.hasMany(Account, { as: "accounts", @@ -106,6 +106,7 @@ User.hasMany(Referral, { as: "referral_codes", foreignKey: "sponsor_id" }); + User.hasMany(Referral, { as: "sponsors", foreignKey: "user_id" @@ -115,6 +116,7 @@ Referral.belongsTo(User, { as: "sponsor", foreignKey: "sponsor_id" }); + Referral.belongsTo(User, { as: "user", foreignKey: "user_id" @@ -130,6 +132,21 @@ Payment.belongsTo(User, { foreignKey: "with_id" }); +Request.belongsTo(User, { + as: "requester", + foreignKey: "requester_id" +}); + +Request.belongsTo(User, { + as: "recipient", + foreignKey: "recipient_id" +}); + +Request.belongsTo(Invoice, { + as: "invoice", + foreignKey: "invoice_id" +}); + db.Order = Order; export default db; diff --git a/lib/sockets.js b/lib/sockets.js index 30eb86f0..7498db62 100644 --- a/lib/sockets.js +++ b/lib/sockets.js @@ -27,11 +27,7 @@ export const emit = (username, type, data) => { for (let i = subscriptions.length - 1; i >= 0; i--) { let s = subscriptions[i]; - if ( - s.invoice.amount === data.amount || - (data.address && s.invoice.address === data.address) || - (data.address && s.invoice.unconfidential === data.address) - ) { + if (s.invoice.id === data.invoice_id) { s.ws.send(JSON.stringify({ type, data })); } } diff --git a/routes/invoices.js b/routes/invoices.js index 6cde7de8..fa44f6e6 100644 --- a/routes/invoices.js +++ b/routes/invoices.js @@ -61,7 +61,15 @@ app.get("/invoice/:text", async (req, res, next) => { app.post("/invoice", optionalAuth, async (req, res, next) => { try { let { type = "bech32", liquidAddress, id, invoice, user, tx } = req.body; - let { blindkey, currency, tip, amount, rate, network, requester } = invoice; + let { + blindkey, + currency, + tip, + amount, + rate, + network, + request_id + } = invoice; let address, unconfidential, text; if (amount < 0) throw new Error("amount out of range"); @@ -151,11 +159,25 @@ app.post("/invoice", optionalAuth, async (req, res, next) => { if (blindkey) await lq.importBlindingKey(invoice.address, blindkey); } - if (requester) { - emit(requester, "invoice", { + if (request_id) { + console.log("REQ ID", request_id) + let request = await db.Request.findOne({ + where: { id: request_id }, + + include: { + model: db.User, + as: "requester", + attributes: ["username"] + } + }); + request.invoice_id = invoice.id; + await request.save(); + + emit(request.requester.username, "invoice", { amount: invoice.amount, currency: invoice.currency, rate: invoice.rate, + request_id, uuid: invoice.uuid, user: { username: user.username, profile: user.profile } }); diff --git a/routes/requests.js b/routes/requests.js index a4aad29f..affcfda7 100644 --- a/routes/requests.js +++ b/routes/requests.js @@ -2,6 +2,73 @@ import app from "$app"; import db from "$db"; import { auth } from "$lib/passport"; import { emit } from "$lib/sockets"; +import { Op } from "@sequelize/core"; + +app.get("/request/:id", auth, async (req, res) => { + try { + let request = await db.Request.findOne({ + where: { id: req.params.id }, + include: [ + { + attributes: ["username", "profile"], + model: db.User, + as: "requester" + }, + { + model: db.Invoice, + as: "invoice" + } + ] + }); + + res.send({ request }); + } catch (e) { + console.log(e); + res.code(500).send(e.message); + } +}); + +app.get("/requests", auth, async (req, res) => { + try { + const day = new Date(new Date().setDate(new Date().getDate() - 1)); + + let invoices = ( + await db.Request.findAll({ + where: { + requester_id: req.user.id, + createdAt: { [Op.gt]: day } + //"$invoice.received$": { [Op.lt]: "$invoice.amount$" } + }, + order: [["createdAt", "DESC"]], + include: { + model: db.Invoice, + as: "invoice", + include: { + model: db.User, + as: "user" + } + } + }) + ) + .map(r => r.invoice && r.invoice.get({ plain: true })) + .filter(Boolean); + + let requests = await db.Request.findAll({ + where: { recipient_id: req.user.id, createdAt: { [Op.gt]: day }, invoice_id: { [Op.eq]: null } }, + order: [["createdAt", "DESC"]], + include: { + attributes: ["username", "profile"], + model: db.User, + as: "requester" + } + }); + + res.send({ invoices, requests }); + } catch (e) { + console.log(e); + res.code(500).send(e.message); + } +}); app.post("/requests", auth, async (req, res) => { try { @@ -10,12 +77,15 @@ app.post("/requests", auth, async (req, res) => { let request = await db.Request.create({ recipient_id, ...params }); request = request.get({ plain: true }); - request.requester = { username: req.user.username, profile: req.user.profile }; + request.requester = { + username: req.user.username, + profile: req.user.profile + }; emit(username, "request", request); res.send(request); } catch (e) { - console.log(e) + console.log(e); res.code(500).send(e.message); } }); |
