Skip to content

Commit fd749d6

Browse files
committed
🚧 Add WIP migrate book id endpoint
1 parent cb441db commit fd749d6

File tree

3 files changed

+81
-2
lines changed

3 files changed

+81
-2
lines changed

‎src/routes/wallet/index.ts

+26-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ import { checkCosmosSignPayload, checkEvmSignPayload } from '../../util/api/user
33
import { ValidationError } from '../../util/ValidationError';
44
import { jwtSign } from '../../util/jwt';
55
import {
6-
findLikeWalletByEvmWallet, migrateLikeUserToEvmUser, migrateLikeWalletToEvmWallet,
6+
findLikeWalletByEvmWallet,
7+
migrateBookClassId,
8+
migrateLikeUserToEvmUser,
9+
migrateLikeWalletToEvmWallet,
710
} from '../../util/api/wallet';
811

912
const router = Router();
@@ -53,6 +56,28 @@ router.post('/authorize', async (req, res, next) => {
5356
}
5457
});
5558

59+
router.post('/evm/migrate/book', async (req, res, next) => {
60+
try {
61+
const {
62+
like_class_id: likeClassId,
63+
evm_class_id: evmClassId,
64+
} = req.body;
65+
if (!likeClassId || !evmClassId) throw new ValidationError('INVALID_PAYLOAD');
66+
const {
67+
error,
68+
migratedClassIds,
69+
migratedCollectionIds,
70+
} = await migrateBookClassId(likeClassId, evmClassId);
71+
res.json({
72+
migratedClassIds,
73+
migratedCollectionIds,
74+
error,
75+
});
76+
} catch (err) {
77+
next(err);
78+
}
79+
});
80+
5681
router.post('/evm/migrate/user', async (req, res, next) => {
5782
try {
5883
const {

‎src/util/ValidationHelper.ts

+2
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,7 @@ export function filterNFTBookListingInfo(bookInfo, isOwner = false) {
682682
const {
683683
id: inputId,
684684
classId,
685+
evmClassId,
685686
prices: inputPrices = [],
686687
shippingRates,
687688
pendingNFTCount,
@@ -711,6 +712,7 @@ export function filterNFTBookListingInfo(bookInfo, isOwner = false) {
711712
const payload: any = {
712713
id,
713714
classId: id,
715+
evmClassId,
714716
prices,
715717
shippingRates,
716718
isSoldOut: stock <= 0,

‎src/util/api/wallet/index.ts

+53-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import {
2-
db, FieldValue, likeNFTBookCollection, likeNFTBookUserCollection, userCollection,
2+
db,
3+
FieldValue,
4+
likeNFTBookCollection,
5+
likeNFTBookUserCollection,
6+
likeNFTCollectionCollection,
7+
userCollection,
38
} from '../../firebase';
49
import { migrateLikerLandEvmWallet } from '../../liker-land';
510

@@ -97,6 +102,53 @@ async function migrateLikerId(likeWallet:string, evmWallet: string) {
97102
}
98103
}
99104

105+
export async function migrateBookClassId(likeClassId:string, evmClassId: string) {
106+
try {
107+
// TODO: verify evmClassId contains information about likeClassId
108+
const res = await db.runTransaction(async (t) => {
109+
const migratedClassIds: string[] = [];
110+
const migratedCollectionIds: string[] = [];
111+
const [bookListingDoc, collectionQuery] = await Promise.all([
112+
t.get(likeNFTBookCollection.doc(likeClassId).get()),
113+
t.get(likeNFTCollectionCollection.where('classIds', 'array-contains', likeClassId).limit(100)),
114+
]);
115+
if (bookListingDoc.exists) {
116+
const { evmClassId: existingEvmClassId } = bookListingDoc.data();
117+
if (!existingEvmClassId) {
118+
t.update(bookListingDoc.ref, { evmClassId });
119+
migratedClassIds.push(likeClassId);
120+
}
121+
}
122+
collectionQuery.docs.forEach((doc) => {
123+
const { classIds } = doc.data();
124+
const index = classIds.indexOf(likeClassId);
125+
if (index >= 0) {
126+
classIds[index] = evmClassId;
127+
t.update(doc.ref, { classIds });
128+
migratedCollectionIds.push(doc.id);
129+
}
130+
});
131+
return {
132+
migratedClassIds,
133+
migratedCollectionIds,
134+
};
135+
});
136+
const {
137+
migratedClassIds,
138+
migratedCollectionIds,
139+
} = res;
140+
return {
141+
error: null,
142+
migratedClassIds,
143+
migratedCollectionIds,
144+
};
145+
} catch (error) {
146+
// eslint-disable-next-line no-console
147+
console.error(error);
148+
return { error: (error as Error).message };
149+
}
150+
}
151+
100152
export async function migrateLikeUserToEvmUser(likeWallet: string, evmWallet: string) {
101153
const [
102154
{ error: migrateLikerIdError, likerId },

0 commit comments

Comments
 (0)