I’ve been continuing “I Cloned Rarible in 24H” series part 12. then I got an issue, my item in itemsForSale didn’t get uid.
here is the marketplace contract snippet code.
event itemAdded(uint256 id, uint256 tokenId, address tokenAddress, uint256 askingPrice);
event itemSold(uint256 id, address buyer, uint256 askingPrice);
function buyItem(uint256 id) payable external ItemExist(id) IsForSale(id) HasTransferApproval(itemsForSale[id].tokenAddress, itemsForSale[id].tokenId) {
require(msg.value >= itemsForSale[id].askingPrice, "Not enough funds sent!");
require(msg.sender != itemsForSale[id].seller);
itemsForSale[id].isSold = true;
activeItems[itemsForSale[id].tokenAddress][itemsForSale[id].tokenId] = false;
IERC721(itemsForSale[id].tokenAddress).safeTransferFrom(itemsForSale[id].seller, msg.sender, itemsForSale[id].tokenId);
itemsForSale[id].seller.transfer(msg.value);
emit itemSold(id, msg.sender, itemsForSale[id].askingPrice);
}
so when I query soldItems, const item isn’t detected.
here is the cloud functions full code.
Moralis.Cloud.beforeSave("itemsForSale", async (request) => {
const query = new Moralis.Query("EthNFTOwners");
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("account", 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("account", request.object.get("buyer"));
const userObject = await userQuery.first(useMasterKey:true);
if (userObject){
request.object.set("user", userObject);
}
}
});