aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--db/index.js19
-rw-r--r--lib/sockets.js6
-rw-r--r--routes/invoices.js28
-rw-r--r--routes/requests.js74
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);
}
});