Skip to content

Commit 571408b

Browse files
committed
WIP: Wallet migration
1 parent a3e99ac commit 571408b

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

prisma/migrations/20250502042253_wallet_v2/migration.sql

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,3 +501,104 @@ CREATE TRIGGER wallet_check_support
501501
BEFORE INSERT OR UPDATE ON "WalletRecvLNDGRPC"
502502
FOR EACH ROW
503503
EXECUTE FUNCTION wallet_check_support('RECEIVE');
504+
505+
CREATE OR REPLACE FUNCTION wallet_v2_migration()
506+
RETURNS void AS
507+
$$
508+
DECLARE
509+
row RECORD;
510+
BEGIN
511+
-- the loops can create multiple wallets for the same user because for some reason, users already have multiple wallets of the same type
512+
-- ( see `SELECT "userId", type, COUNT(1) FROM "Wallet" GROUP BY "userId", type ORDER BY count DESC` )
513+
-- but that's no longer a problem because we can support multiple LNbits, NWC, lightning addresses etc. now
514+
FOR row IN
515+
SELECT w1.*, w2."userId", w2."priority", w2."enabled"
516+
FROM "WalletLNbits" w1
517+
JOIN "Wallet" w2 ON w1."walletId" = w2.id
518+
LOOP
519+
DECLARE
520+
userWalletId INT;
521+
BEGIN
522+
INSERT INTO "UserWallet" ("userId", "walletId", "priority", "enabled")
523+
SELECT row."userId", w.id, row."priority", row."enabled"
524+
FROM "WalletV2" w
525+
WHERE w.name = 'LNBITS'
526+
RETURNING id INTO userWalletId;
527+
528+
IF row."adminKeyId" IS NOT NULL THEN
529+
INSERT INTO "WalletSendLNbits" ("walletId", "url", "apiKeyId")
530+
VALUES (userWalletId, row."url", row."adminKeyId");
531+
END IF;
532+
533+
IF row."invoiceKey" IS NOT NULL THEN
534+
INSERT INTO "WalletRecvLNbits" ("walletId", "url", "apiKey")
535+
VALUES (userWalletId, row."url", row."invoiceKey");
536+
END IF;
537+
END;
538+
END LOOP;
539+
540+
FOR row IN
541+
SELECT w1.*, w2."userId", w2."userId", w2."priority", w2."enabled"
542+
FROM "WalletPhoenixd" w1
543+
JOIN "Wallet" w2 ON w1."walletId" = w2.id
544+
LOOP
545+
DECLARE
546+
userWalletId INT;
547+
BEGIN
548+
INSERT INTO "UserWallet" ("userId", "walletId", "priority", "enabled")
549+
SELECT row."userId", w.id, row."priority", row."enabled"
550+
FROM "WalletV2" w
551+
WHERE w.name = 'PHOENIXD'
552+
RETURNING id INTO userWalletId;
553+
554+
IF row."primaryPasswordId" IS NOT NULL THEN
555+
INSERT INTO "WalletSendPhoenixd" ("walletId", "url", "apiKeyId")
556+
VALUES (userWalletId, row."url", row."primaryPasswordId");
557+
END IF;
558+
559+
IF row."secondaryPassword" IS NOT NULL THEN
560+
INSERT INTO "WalletRecvPhoenixd" ("walletId", "url", "apiKey")
561+
VALUES (userWalletId, row."url", row."secondaryPassword");
562+
END IF;
563+
END;
564+
END LOOP;
565+
566+
FOR row IN
567+
SELECT w1.*, w2."userId", w2."userId", w2."priority", w2."enabled"
568+
FROM "WalletBlink" w1
569+
JOIN "Wallet" w2 ON w1."walletId" = w2.id
570+
LOOP
571+
DECLARE
572+
userWalletId INT;
573+
BEGIN
574+
INSERT INTO "UserWallet" ("userId", "walletId", "priority", "enabled")
575+
SELECT row."userId", w.id, row."priority", row."enabled"
576+
FROM "WalletV2" w
577+
WHERE w.name = 'BLINK'
578+
RETURNING id INTO userWalletId;
579+
580+
IF row."apiKeyId" IS NOT NULL AND row."currencyId" IS NOT NULL THEN
581+
INSERT INTO "WalletSendBlink" ("walletId", "apiKeyId", "currencyId")
582+
VALUES (userWalletId, row."apiKeyId", row."currencyId");
583+
END IF;
584+
585+
IF row."apiKeyRecv" IS NOT NULL AND row."currencyRecv" IS NOT NULL THEN
586+
INSERT INTO "WalletRecvBlink" ("walletId", "currency", "apiKey")
587+
VALUES (userWalletId, row."currencyRecv", row."apiKeyRecv");
588+
END IF;
589+
END;
590+
END LOOP;
591+
592+
-- TODO: migrate remaining wallets
593+
-- - WalletWebLN: 'ALBY', WalletSendWebLN
594+
-- - WalletLND: 'LND', WalletRecvLND
595+
-- - WalletCLN: 'CLN', WalletRecvCLN
596+
-- - WalletLNC: 'LND', WalletSendLNC
597+
-- - WalletLightningAddress: '<WALLET_BY_DOMAIN>', WalletRecvLightningAddress
598+
-- - WalletNWC: '<WALLET_BY_RELAY>', WalletSendNWC, WalletRecvNWC
599+
END;
600+
$$ LANGUAGE plpgsql;
601+
602+
SELECT wallet_v2_migration();
603+
604+
DROP FUNCTION wallet_v2_migration();

0 commit comments

Comments
 (0)