mirror of https://github.com/lukechilds/lnbits.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
3.5 KiB
142 lines
3.5 KiB
from lnbits.db import open_db
|
|
|
|
|
|
def m001_initial(db):
|
|
"""
|
|
Initial LNbits tables.
|
|
"""
|
|
db.execute(
|
|
"""
|
|
CREATE TABLE IF NOT EXISTS accounts (
|
|
id TEXT PRIMARY KEY,
|
|
email TEXT,
|
|
pass TEXT
|
|
);
|
|
"""
|
|
)
|
|
db.execute(
|
|
"""
|
|
CREATE TABLE IF NOT EXISTS extensions (
|
|
user TEXT NOT NULL,
|
|
extension TEXT NOT NULL,
|
|
active BOOLEAN DEFAULT 0,
|
|
|
|
UNIQUE (user, extension)
|
|
);
|
|
"""
|
|
)
|
|
db.execute(
|
|
"""
|
|
CREATE TABLE IF NOT EXISTS wallets (
|
|
id TEXT PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
user TEXT NOT NULL,
|
|
adminkey TEXT NOT NULL,
|
|
inkey TEXT
|
|
);
|
|
"""
|
|
)
|
|
db.execute(
|
|
"""
|
|
CREATE TABLE IF NOT EXISTS apipayments (
|
|
payhash TEXT NOT NULL,
|
|
amount INTEGER NOT NULL,
|
|
fee INTEGER NOT NULL DEFAULT 0,
|
|
wallet TEXT NOT NULL,
|
|
pending BOOLEAN NOT NULL,
|
|
memo TEXT,
|
|
time TIMESTAMP NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
|
|
UNIQUE (wallet, payhash)
|
|
);
|
|
"""
|
|
)
|
|
|
|
db.execute(
|
|
"""
|
|
CREATE VIEW IF NOT EXISTS balances AS
|
|
SELECT wallet, COALESCE(SUM(s), 0) AS balance FROM (
|
|
SELECT wallet, SUM(amount) AS s -- incoming
|
|
FROM apipayments
|
|
WHERE amount > 0 AND pending = 0 -- don't sum pending
|
|
GROUP BY wallet
|
|
UNION ALL
|
|
SELECT wallet, SUM(amount + fee) AS s -- outgoing, sum fees
|
|
FROM apipayments
|
|
WHERE amount < 0 -- do sum pending
|
|
GROUP BY wallet
|
|
)
|
|
GROUP BY wallet;
|
|
"""
|
|
)
|
|
db.execute("DROP VIEW balances")
|
|
db.execute(
|
|
"""
|
|
CREATE VIEW IF NOT EXISTS balances AS
|
|
SELECT wallet, COALESCE(SUM(s), 0) AS balance FROM (
|
|
SELECT wallet, SUM(amount) AS s -- incoming
|
|
FROM apipayment
|
|
WHERE amount > 0 AND pending = 0 -- don't sum pending
|
|
GROUP BY wallet
|
|
UNION ALL
|
|
SELECT wallet, SUM(amount + fee) AS s -- outgoing, sum fees
|
|
FROM apipayment
|
|
WHERE amount < 0 -- do sum pending
|
|
GROUP BY wallet
|
|
)
|
|
GROUP BY wallet;
|
|
"""
|
|
)
|
|
|
|
def m002_changed(db):
|
|
|
|
db.execute(
|
|
"""
|
|
CREATE TABLE IF NOT EXISTS apipayment (
|
|
id TEXT NOT NULL,
|
|
payment_hash TEXT NOT NULL,
|
|
amount INTEGER NOT NULL,
|
|
fee INTEGER NOT NULL DEFAULT 0,
|
|
wallet TEXT NOT NULL,
|
|
pending BOOLEAN NOT NULL,
|
|
memo TEXT,
|
|
time TIMESTAMP NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
|
|
UNIQUE (wallet, id)
|
|
);
|
|
"""
|
|
)
|
|
|
|
|
|
for row in [list(row) for row in db.fetchall("SELECT * FROM apipayments")]:
|
|
db.execute(
|
|
"""
|
|
INSERT INTO apipayment (
|
|
id,
|
|
payment_hash,
|
|
amount,
|
|
fee,
|
|
wallet,
|
|
pending,
|
|
memo,
|
|
time
|
|
)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
""",
|
|
(
|
|
row[0],
|
|
"oldinvoice",
|
|
row[1],
|
|
row[2],
|
|
row[3],
|
|
row[4],
|
|
row[5],
|
|
row[6],
|
|
),
|
|
)
|
|
db.execute("DROP TABLE apipayments")
|
|
|
|
def migrate():
|
|
with open_db() as db:
|
|
m001_initial(db)
|
|
m002_changed(db)
|
|
|