@@ -501,3 +501,104 @@ CREATE TRIGGER wallet_check_support
501
501
BEFORE INSERT OR UPDATE ON " WalletRecvLNDGRPC"
502
502
FOR EACH ROW
503
503
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