1
- import { likeNFTBookUserCollection } from '../../firebase' ;
1
+ import {
2
+ db , FieldValue , likeNFTBookUserCollection , userCollection ,
3
+ } from '../../firebase' ;
4
+ import { migrateLikerLandEvmWallet } from '../../liker-land' ;
2
5
3
6
export async function findLikeWalletByEvmWallet ( evmWallet : string ) {
4
7
const userQuery = await likeNFTBookUserCollection . where ( 'evmWallet' , '==' , evmWallet ) . get ( ) ;
@@ -8,4 +11,80 @@ export async function findLikeWalletByEvmWallet(evmWallet: string) {
8
11
return userQuery . docs [ 0 ] . data ( ) ?. likeWallet ;
9
12
}
10
13
14
+ async function migrateBookUser ( likeWallet : string , evmWallet : string ) {
15
+ try {
16
+ const userExists = await db . runTransaction ( async ( t ) => {
17
+ const [ evmQuery , userDoc ] = await Promise . all ( [
18
+ t . get ( likeNFTBookUserCollection . where ( 'evmWallet' , '==' , evmWallet ) . limit ( 1 ) ) ,
19
+ t . get ( likeNFTBookUserCollection . doc ( likeWallet ) . get ( ) ) ,
20
+ ] ) ;
21
+ if ( evmQuery . docs . length > 0 ) {
22
+ throw new Error ( 'EVM_WALLET_ALREADY_EXIST' ) ;
23
+ }
24
+ if ( ! userDoc . exists ) {
25
+ t . create ( likeNFTBookUserCollection . doc ( likeWallet ) , {
26
+ evmWallet,
27
+ likeWallet,
28
+ timestamp : FieldValue . serverTimestamp ( ) ,
29
+ } ) ;
30
+ } else {
31
+ t . update ( { evmWallet, likeWallet } ) ;
32
+ }
33
+ return userDoc . exists ;
34
+ } ) ;
35
+ return { error : null } ;
36
+ } catch ( error ) {
37
+ // eslint-disable-next-line no-console
38
+ console . error ( error ) ;
39
+ return { error : ( error as Error ) . message } ;
40
+ }
41
+ }
42
+
43
+ async function migrateLikerId ( likeWallet :string , evmWallet : string ) {
44
+ try {
45
+ const likerId = await db . runTransaction ( async ( t ) => {
46
+ const [ evmQuery , userQuery ] = await Promise . all ( [
47
+ t . get ( userCollection . where ( 'evmWallet' , '==' , evmWallet ) . limit ( 1 ) ) ,
48
+ t . get ( userCollection . where ( 'likeWallet' , '==' , likeWallet ) . limit ( 1 ) ) ,
49
+ ] ) ;
50
+ if ( evmQuery . docs . length > 0 ) {
51
+ throw new Error ( 'EVM_WALLET_ALREADY_EXIST' ) ;
52
+ }
53
+ if ( userQuery . docs . length === 0 ) {
54
+ throw new Error ( 'LIKE_WALLET_NOT_FOUND' ) ;
55
+ }
56
+ const userDoc = userQuery . docs [ 0 ] ;
57
+ t . update ( userDoc . ref , { evmWallet } ) ;
58
+ return userDoc . id ;
59
+ } ) ;
60
+ return { likerId, error : null } ;
61
+ } catch ( error ) {
62
+ // eslint-disable-next-line no-console
63
+ console . error ( error ) ;
64
+ return { error : ( error as Error ) . message } ;
65
+ }
66
+ }
67
+
68
+ export async function migrateLikeWalletToEvmWallet ( likeWallet : string , evmWallet : string ) {
69
+ const [
70
+ { error : migrateBookUserError } ,
71
+ { error : migrateLikerIdError , likerId } ,
72
+ { error : migrateLikerLandError , user : likerLandUser } ,
73
+ ] = await Promise . all ( [
74
+ migrateBookUser ( likeWallet , evmWallet ) ,
75
+ migrateLikerId ( likeWallet , evmWallet ) ,
76
+ migrateLikerLandEvmWallet ( likeWallet , evmWallet ) ,
77
+ ] ) ;
78
+ return {
79
+ isMigratedBookUser : ! migrateBookUserError ,
80
+ isMigratedLikerId : ! migrateLikerIdError ,
81
+ isMigratedLikerLand : ! migrateLikerLandError ,
82
+ migratedLikerId : likerId ,
83
+ migratedLikerLandUser : likerLandUser ,
84
+ migrateBookUserError,
85
+ migrateLikerIdError,
86
+ migrateLikerLandError,
87
+ } ;
88
+ }
89
+
11
90
export default findLikeWalletByEvmWallet ;
0 commit comments