@@ -16,32 +16,54 @@ export async function findLikeWalletByEvmWallet(evmWallet: string) {
16
16
return userQuery . docs [ 0 ] . data ( ) ?. likeWallet ;
17
17
}
18
18
19
+ export async function checkBookUserEvmWallet ( likeWallet : string ) {
20
+ const userQuery = await likeNFTBookUserCollection . doc ( likeWallet ) . get ( ) ;
21
+ if ( ! userQuery . exists ) {
22
+ return null ;
23
+ }
24
+ return userQuery . data ( ) ?. evmWallet || null ;
25
+ }
26
+
19
27
async function migrateBookUser ( likeWallet : string , evmWallet : string ) {
20
28
try {
21
- const userExists = await db . runTransaction ( async ( t ) => {
22
- const [ evmQuery , userDoc , bookQuery ] = await Promise . all ( [
29
+ const { userExists, alreadyMigrated } = await db . runTransaction ( async ( t ) => {
30
+ const [ evmQuery , userDoc ] = await Promise . all ( [
23
31
t . get ( likeNFTBookUserCollection . where ( 'evmWallet' , '==' , evmWallet ) . limit ( 1 ) ) ,
24
32
t . get ( likeNFTBookUserCollection . doc ( likeWallet ) . get ( ) ) ,
25
- t . get ( likeNFTBookCollection . where ( 'ownerWallet' , '==' , likeWallet ) . limit ( 1 ) ) ,
26
33
] ) ;
27
34
if ( evmQuery . docs . length > 0 ) {
28
- throw new Error ( 'EVM_WALLET_ALREADY_EXIST' ) ;
35
+ if ( evmQuery . docs [ 0 ] . id !== userDoc ?. id ) {
36
+ throw new Error ( 'EVM_WALLET_USED_BY_OTHER_USER' ) ;
37
+ }
38
+ return {
39
+ userExists : true ,
40
+ alreadyMigrated : true ,
41
+ } ;
29
42
}
30
43
if ( ! userDoc . exists ) {
31
44
t . create ( likeNFTBookUserCollection . doc ( likeWallet ) , {
32
45
evmWallet,
33
46
likeWallet,
47
+ migrateTimestamp : FieldValue . serverTimestamp ( ) ,
34
48
timestamp : FieldValue . serverTimestamp ( ) ,
35
49
} ) ;
36
50
} else {
37
- t . update ( userDoc , { evmWallet, likeWallet } ) ;
51
+ const { evmWallet : existingEvmWallet } = userDoc . data ( ) ;
52
+ if ( existingEvmWallet && existingEvmWallet !== evmWallet ) {
53
+ throw new Error ( 'EVM_WALLET_NOT_MATCH_USER_RECORD' ) ;
54
+ }
55
+ t . update ( userDoc , {
56
+ evmWallet,
57
+ likeWallet,
58
+ migrateTimestamp : FieldValue . serverTimestamp ( ) ,
59
+ } ) ;
38
60
}
39
- bookQuery . docs . forEach ( ( doc ) => {
40
- t . update ( doc . ref , { ownerWallet : evmWallet } ) ;
41
- } ) ;
42
- return userDoc . exists ;
61
+ return {
62
+ userExists : userDoc . exists ,
63
+ alreadyMigrated : false ,
64
+ } ;
43
65
} ) ;
44
- return { error : null } ;
66
+ return { error : null , userExists , alreadyMigrated } ;
45
67
} catch ( error ) {
46
68
// eslint-disable-next-line no-console
47
69
console . error ( error ) ;
@@ -98,7 +120,7 @@ async function migrateLikerId(likeWallet:string, evmWallet: string) {
98
120
} catch ( error ) {
99
121
// eslint-disable-next-line no-console
100
122
console . error ( error ) ;
101
- return { error : ( error as Error ) . message } ;
123
+ return { likerId : null , error : ( error as Error ) . message } ;
102
124
}
103
125
}
104
126
@@ -150,6 +172,19 @@ export async function migrateBookClassId(likeClassId:string, evmClassId: string)
150
172
}
151
173
152
174
export async function migrateLikeUserToEvmUser ( likeWallet : string , evmWallet : string ) {
175
+ const { error : migrateBookUserError } = await migrateBookUser ( likeWallet , evmWallet ) ;
176
+ if ( migrateBookUserError ) {
177
+ return {
178
+ isMigratedBookUser : false ,
179
+ isMigratedLikerId : false ,
180
+ isMigratedLikerLand : false ,
181
+ migratedLikerId : null ,
182
+ migratedLikerLandUser : null ,
183
+ migrateBookUserError,
184
+ migrateLikerIdError : null ,
185
+ migrateLikerLandError : null ,
186
+ } ;
187
+ }
153
188
const [
154
189
{ error : migrateLikerIdError , likerId } ,
155
190
{ error : migrateLikerLandError , user : likerLandUser } ,
@@ -158,23 +193,38 @@ export async function migrateLikeUserToEvmUser(likeWallet: string, evmWallet: st
158
193
migrateLikerLandEvmWallet ( likeWallet , evmWallet ) ,
159
194
] ) ;
160
195
return {
196
+ isMigratedBookUser : ! migrateBookUserError ,
161
197
isMigratedLikerId : ! migrateLikerIdError ,
162
198
isMigratedLikerLand : ! migrateLikerLandError ,
163
199
migratedLikerId : likerId ,
164
200
migratedLikerLandUser : likerLandUser ,
201
+ migrateBookUserError,
165
202
migrateLikerIdError,
166
203
migrateLikerLandError,
167
204
} ;
168
205
}
169
206
170
207
export async function migrateLikeWalletToEvmWallet ( likeWallet : string , evmWallet : string ) {
208
+ const { error : migrateBookUserError } = await migrateBookUser ( likeWallet , evmWallet ) ;
209
+ if ( migrateBookUserError ) {
210
+ return {
211
+ isMigratedBookUser : false ,
212
+ isMigratedBookOwner : false ,
213
+ isMigratedLikerId : false ,
214
+ isMigratedLikerLand : false ,
215
+ migratedLikerId : null ,
216
+ migratedLikerLandUser : null ,
217
+ migrateBookUserError,
218
+ migrateBookOwnerError : null ,
219
+ migrateLikerIdError : null ,
220
+ migrateLikerLandError : null ,
221
+ } ;
222
+ }
171
223
const [
172
- { error : migrateBookUserError } ,
173
224
{ error : migrateBookOwnerError } ,
174
225
{ error : migrateLikerIdError , likerId } ,
175
226
{ error : migrateLikerLandError , user : likerLandUser } ,
176
227
] = await Promise . all ( [
177
- migrateBookUser ( likeWallet , evmWallet ) ,
178
228
migrateBookOwner ( likeWallet , evmWallet ) ,
179
229
migrateLikerId ( likeWallet , evmWallet ) ,
180
230
migrateLikerLandEvmWallet ( likeWallet , evmWallet ) ,
0 commit comments