I created a new Moralis server, redid the Ganache and frp settings, etc. from scratch, and it worked!
Thank you very much.
Moralis is awesome and so are you.
I created a new Moralis server, redid the Ganache and frp settings, etc. from scratch, and it worked!
Thank you very much.
Moralis is awesome and so are you.
Awesome!
Thanks for the kind words!
Happy BUIDLing
Hey everyone. Iām having an issue where NFTS are minting but not listed in itemsforsale row. User information is being collected. Avatar, email address and everything. NFTs are minting fine. But after I list an item for sale, I donāt see it listed in the itemsforsale row.
What I have noticed is that in the ethNFT owners row the address is identified by ātable owner_of stringā
Then in the user row their address is identified by āethAddress Stringā should these two fields not be listed the same ?
Iāve checked all settings including full re-boot. The only thing I havenāt managed to do is execute the cloud watch file in my project file path. It keeps throwing errors
Here are my cloud function settings.
Moralis.Cloud.define(āgetUserItemsā, async (request) => {
const query = new Moralis.Query("NFTTokenOwners");
query.equalTo("contract_type", "ERC721");
query.containedIn("owner_of", request.user.attributes.accounts);
const queryResults = await query.find();
const results = [];
for (let i = 0; i < queryResults.length; ++i) {
results.push({
"tokenObjectId": queryResults[i].id,
"tokenId": queryResults[i].attributes.token_id,
"tokenAddress": queryResults[i].attributes.token_address,
"symbol": queryResults[i].attributes.symbol,
"tokenUri": queryResults[i].attributes.token_uri,
});
}
return results;
});
Moralis.Cloud.beforeSave("ItemsForSale", async (request) => {
const query = new Moralis.Query("NFTTokenOwners");
query.equalTo("token_address", request.object.get('tokenAddress'));
query.equalTo("token_id", request.object.get('tokenId'));
const object = await query.first();
if (object){
const owner = object.attributes.owner_of;
const userQuery = new Moralis.Query(Moralis.User);
userQuery.equalTo("accounts", owner);
const userObject = await userQuery.first({useMasterKey:true});
if (userObject){
request.object.set('user', userObject);
}
request.object.set('token', object);
}
});
Moralis.Cloud.beforeSave("SoldItems", async (request) => {
const query = new Moralis.Query("ItemsForSale");
query.equalTo("uid", request.object.get('uid'));
const item = await query.first();
if (item){
request.object.set('item', item);
item.set('isSold', true);
await item.save();
const userQuery = new Moralis.Query(Moralis.User);
userQuery.equalTo("accounts", request.object.get('buyer'));
const userObject = await userQuery.first({useMasterKey:true});
if (userObject){
request.object.set('user', userObject);
}
}
});
Moralis.Cloud.define("getItems", async (request) => {
const query = new Moralis.Query("ItemsForSale");
query.notEqualTo("isSold", true);
query.select("uid","askingPrice","tokenAddress","tokenId", "token.token_uri", "token.symbol","token.owner_of","token.id", "user.avatar","user.username");
const queryResults = await query.find({useMasterKey:true});
const results = [];
for (let i = 0; i < queryResults.length; ++i) {
if (!queryResults[i].attributes.token || !queryResults[i].attributes.user) continue;
results.push({
"uid": queryResults[i].attributes.uid,
"tokenId": queryResults[i].attributes.tokenId,
"tokenAddress": queryResults[i].attributes.tokenAddress,
"askingPrice": queryResults[i].attributes.askingPrice,
"symbol": queryResults[i].attributes.token.attributes.symbol,
"tokenUri": queryResults[i].attributes.token.attributes.token_uri,
"ownerOf": queryResults[i].attributes.token.attributes.owner_of,
"tokenObjectId": queryResults[i].attributes.token.id,
"sellerUsername": queryResults[i].attributes.user.attributes.username,
"sellerAvatar": queryResults[i].attributes.user.attributes.avatar,
});
}
return results;
});
Moralis.Cloud.define("getItem", async (request) => {
const query = new Moralis.Query("ItemsForSale");
query.equalTo("uid", request.params.uid);
query.select("uid","askingPrice","tokenAddress","tokenId", "token.token_uri", "token.symbol","token.owner_of","token.id","user.avatar","user.username");
const queryResult = await query.first({useMasterKey:true});
if (!queryResult) return;
return {
"uid": queryResult.attributes.uid,
"tokenId": queryResult.attributes.tokenId,
"tokenAddress": queryResult.attributes.tokenAddress,
"askingPrice": queryResult.attributes.askingPrice,
"symbol": queryResult.attributes.token.attributes.symbol,
"tokenUri": queryResult.attributes.token.attributes.token_uri,
"ownerOf": queryResult.attributes.token.attributes.owner_of,
"tokenObjectId": queryResult.attributes.token.id,
"sellerUsername": queryResult.attributes.user.attributes.username,
"sellerAvatar": queryResult.attributes.user.attributes.avatar,
};
});
Hi @ad01LA
You can find the correct Cloud Functions File above
Only one thing you have to change in the cloud code from the repo
NFTTokenOwners -> EthNFTOwners
.
Thank you. After this change in the cloud functions. Minted NFTs now display in āmy Itemsā. However, still no items listed for sale in the coresponding āitemsforsaleā row and, it appears as though when i mint NFTs from different addressās in Ganache. All minted items are showing up in āmy itemsā.
Could it be to do with Watch cloud folder not been executed in the correct file path ?
What else could be wrong ?
Hey @ad01LA
Take a look at. I think your NFTs are in the pendingNFTs
table and thatās why they doesnāt display in the items for sale:
Take a look at the tutorial how to use watch-cloud-folder