From fed98d51bea411598e9f17078e2dcc69d919c716 Mon Sep 17 00:00:00 2001 From: Daniel Gonzalez Date: Mon, 20 Oct 2025 18:37:54 -0400 Subject: [PATCH] feat(userdata): Store user data on the database --- src/adapters/localdb/models/offer.js | 1 + src/use-cases/offer/index.js | 16 +++++++++++----- test/unit/use-cases/offer.use-case.unit.js | 17 ++++++++++++++++- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/adapters/localdb/models/offer.js b/src/adapters/localdb/models/offer.js index 823aae2..f36c7a7 100644 --- a/src/adapters/localdb/models/offer.js +++ b/src/adapters/localdb/models/offer.js @@ -47,6 +47,7 @@ const Offer = new mongoose.Schema({ tokenIconUrl: { type: String, default: null }, tokenCategories: { type: Array, default: [] }, tokenTags: { type: Array, default: [] }, + userDataStr: { type: String }, // Token user data lastUpdatedTokenData: { type: String, default: null } // ISO timestamp of the last time token data was updated. }) diff --git a/src/use-cases/offer/index.js b/src/use-cases/offer/index.js index c8a5e29..0999583 100644 --- a/src/use-cases/offer/index.js +++ b/src/use-cases/offer/index.js @@ -141,12 +141,18 @@ class OfferUseCases { // Get the mutable data from the cid if it exists. if (mutableDataCid && typeof mutableDataCid === 'string') { const mutableData = await this.retryQueue.addToQueue(this.adapters.wallet.cid2json, mutableDataCid) - // console.log('mutableData: ', mutableData) + console.log('mutableData: ', mutableData) if (mutableData) { - offerEntity.tokenIconUrl = mutableData.tokenIcon - offerEntity.tokenCategories = mutableData.category - offerEntity.tokenTags = mutableData.tags - offerEntity.lastUpdatedTokenData = new Date().getTime() + try { + offerEntity.tokenIconUrl = mutableData.tokenIcon + offerEntity.tokenCategories = mutableData.category + offerEntity.tokenTags = mutableData.tags + offerEntity.lastUpdatedTokenData = new Date().getTime() + + offerEntity.userDataStr = JSON.stringify(mutableData.userData) + } catch (error) { + // skip error + } } } diff --git a/test/unit/use-cases/offer.use-case.unit.js b/test/unit/use-cases/offer.use-case.unit.js index f9ad063..878a771 100644 --- a/test/unit/use-cases/offer.use-case.unit.js +++ b/test/unit/use-cases/offer.use-case.unit.js @@ -112,7 +112,22 @@ describe('#offer-use-case', () => { const tokenDataMock = mockData.nftTokenData01 const offerObj = mockData.offerMockData const mutableDataMock = mockData.mutableDataMock - console.log('mutableDataMock: ', mutableDataMock) + // Mock dependencies + // sandbox.stub(uut.adapters.wallet.bchWallet, 'utxoIsValid').resolves(false) + sandbox.stub(uut, 'findOfferByTxid').throws(new Error('offer not found')) + sandbox.stub(uut.retryQueue, 'addToQueue') + .onCall(0).resolves({}) // Utxo Status call + .onCall(1).resolves(tokenDataMock) // Token Data call + .onCall(2).resolves(mutableDataMock) + + const result = await uut.createOffer(offerObj) + assert.isTrue(result) + }) + it('should skip userData stringify error', async () => { + const tokenDataMock = mockData.nftTokenData01 + const offerObj = mockData.offerMockData + const mutableDataMock = mockData.mutableDataMock + mutableDataMock.userData = { n: 10n } // Mock dependencies // sandbox.stub(uut.adapters.wallet.bchWallet, 'utxoIsValid').resolves(false) sandbox.stub(uut, 'findOfferByTxid').throws(new Error('offer not found'))