From 4aae187f810db52786f3b25a61904aaf600a5b6e Mon Sep 17 00:00:00 2001 From: 0xRomain Date: Sat, 4 Nov 2023 23:34:58 +0100 Subject: [PATCH 1/4] remove the s to prevent issue with plural management --- schema.graphql | 6 +++--- src/getters.ts | 30 ++++++++++++++-------------- src/mappings/talent-layer-escrow.ts | 14 ++++++------- src/mappings/talent-layer-id.ts | 2 +- src/mappings/talent-layer-review.ts | 10 +++++----- src/mappings/talent-layer-service.ts | 8 ++++---- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/schema.graphql b/schema.graphql index 586d8ed6..f7da8c75 100644 --- a/schema.graphql +++ b/schema.graphql @@ -80,7 +80,7 @@ type User @entity { createdAt: BigInt! updatedAt: BigInt! platform: Platform # Platform on which user nft was minted - numReviews: BigInt # DEPRECATED - will be remove soon, use UserStats.numReceivedReviews instead + numReviews: BigInt # DEPRECATED - will be remove soon, use UserStat.numReceivedReviews instead address: String! # wallet address of user rating: BigDecimal! # average rating from reviews user has received reviews: [Review!] @derivedFrom(field: "to") # reviews of user @@ -90,10 +90,10 @@ type User @entity { cid: String #cid of the description description: UserDescription # User description (off chain data) delegates: [String!]! # list of user delegators - userStats: UserStats # User proposal, service & reviews statistics + userStat: UserStat # User proposal, service & reviews statistics } -type UserStats @entity { +type UserStat @entity { id: ID! # ID of the user numReceivedReviews: BigInt! # number of reviews user has received numGivenReviews: BigInt! # number of reviews user has given diff --git a/src/getters.ts b/src/getters.ts index dbe18828..74c0183a 100644 --- a/src/getters.ts +++ b/src/getters.ts @@ -15,7 +15,7 @@ import { Transaction, Evidence, Keyword, - UserStats, + UserStat, } from '../generated/schema' import { PROTOCOL_ID, ZERO, ZERO_ADDRESS, ZERO_BIGDEC, ZERO_TOKEN_ADDRESS } from './constants' import { ERC20 } from '../generated/TalentLayerEscrow/ERC20' @@ -72,27 +72,27 @@ export function getOrCreateUser(id: BigInt): User { user.delegates = [] user.save() - user.userStats = getOrCreateUserStats(id).id + user.userStat = getOrCreateUserStat(id).id user.save() } return user } -export function getOrCreateUserStats(id: BigInt): UserStats { - let userStats = UserStats.load(id.toString()) - if (!userStats) { - userStats = new UserStats(id.toString()) - userStats.user = getOrCreateUser(id).id - userStats.numReceivedReviews = ZERO - userStats.numGivenReviews = ZERO - userStats.numCreatedServices = ZERO - userStats.numFinishedServicesAsBuyer = ZERO - userStats.numCreatedProposals = ZERO - userStats.numFinishedServicesAsSeller = ZERO - userStats.save() +export function getOrCreateUserStat(id: BigInt): UserStat { + let userStat = UserStat.load(id.toString()) + if (!userStat) { + userStat = new UserStat(id.toString()) + userStat.user = getOrCreateUser(id).id + userStat.numReceivedReviews = ZERO + userStat.numGivenReviews = ZERO + userStat.numCreatedServices = ZERO + userStat.numFinishedServicesAsBuyer = ZERO + userStat.numCreatedProposals = ZERO + userStat.numFinishedServicesAsSeller = ZERO + userStat.save() } - return userStats + return userStat } export function getOrCreateTransaction(id: BigInt, blockTimestamp: BigInt = ZERO): Transaction { diff --git a/src/mappings/talent-layer-escrow.ts b/src/mappings/talent-layer-escrow.ts index c83034c2..3098e537 100644 --- a/src/mappings/talent-layer-escrow.ts +++ b/src/mappings/talent-layer-escrow.ts @@ -13,7 +13,7 @@ import { getOrCreateProtocol, getOrCreateTransaction, getOrCreateEvidence, - getOrCreateUserStats, + getOrCreateUserStat, } from '../getters' import { Payment, @@ -84,13 +84,13 @@ export function handlePaymentCompleted(event: PaymentCompleted): void { service.updatedAt = event.block.timestamp service.save() - const buyerUserStats = getOrCreateUserStats(BigInt.fromString(service.buyer!)) - buyerUserStats.numFinishedServicesAsBuyer.plus(ONE) - buyerUserStats.save() + const buyerUserStat = getOrCreateUserStat(BigInt.fromString(service.buyer!)) + buyerUserStat.numFinishedServicesAsBuyer.plus(ONE) + buyerUserStat.save() - const sellerUserStats = getOrCreateUserStats(BigInt.fromString(service.seller!)) - sellerUserStats.numFinishedServicesAsSeller.plus(ONE) - sellerUserStats.save() + const sellerUserStat = getOrCreateUserStat(BigInt.fromString(service.seller!)) + sellerUserStat.numFinishedServicesAsSeller.plus(ONE) + sellerUserStat.save() } export function handlePayment(event: Payment): void { diff --git a/src/mappings/talent-layer-id.ts b/src/mappings/talent-layer-id.ts index ccefbe06..9d547d1f 100644 --- a/src/mappings/talent-layer-id.ts +++ b/src/mappings/talent-layer-id.ts @@ -39,7 +39,7 @@ export function handleCidUpdated(event: CidUpdated): void { export function handleMint(event: Mint): void { const user = getOrCreateUser(event.params.profileId) - user.userStats = event.params.profileId.toString() + user.userStat = event.params.profileId.toString() user.address = event.params.user.toHex() user.handle = event.params.handle user.createdAt = event.block.timestamp diff --git a/src/mappings/talent-layer-review.ts b/src/mappings/talent-layer-review.ts index 86b416ac..0c473df8 100644 --- a/src/mappings/talent-layer-review.ts +++ b/src/mappings/talent-layer-review.ts @@ -1,7 +1,7 @@ import { BigInt, DataSourceContext } from '@graphprotocol/graph-ts' import { User } from '../../generated/schema' import { Approval, ApprovalForAll, Mint, Transfer } from '../../generated/TalentLayerReview/TalentLayerReview' -import { getOrCreateReview, getOrCreateService, getOrCreateUserStats } from '../getters' +import { getOrCreateReview, getOrCreateService, getOrCreateUserStat } from '../getters' import { ONE } from '../constants' import { ReviewData } from '../../generated/templates' @@ -16,7 +16,7 @@ export function handleMint(event: Mint): void { review.cid = event.params.reviewUri const receiver = User.load(event.params.toId.toString()) - const receiverStats = getOrCreateUserStats(event.params.toId); + const receiverStats = getOrCreateUserStat(event.params.toId) if (!receiver) return @@ -29,10 +29,10 @@ export function handleMint(event: Mint): void { receiverStats.save() const service = getOrCreateService(event.params.serviceId) - const buyerStats = getOrCreateUserStats(BigInt.fromString(service.buyer!)) - const sellerStats = getOrCreateUserStats(BigInt.fromString(service.seller!)) + const buyerStats = getOrCreateUserStat(BigInt.fromString(service.buyer!)) + const sellerStats = getOrCreateUserStat(BigInt.fromString(service.seller!)) - if(receiverStats.id == buyerStats.id) { + if (receiverStats.id == buyerStats.id) { sellerStats.numGivenReviews.plus(ONE) sellerStats.save() } else { diff --git a/src/mappings/talent-layer-service.ts b/src/mappings/talent-layer-service.ts index fce94544..914b24ca 100644 --- a/src/mappings/talent-layer-service.ts +++ b/src/mappings/talent-layer-service.ts @@ -16,13 +16,13 @@ import { getOrCreatePlatform, getOrCreateUser, getOrCreateProtocol, - getOrCreateUserStats, + getOrCreateUserStat, } from '../getters' import { generateIdFromTwoElements } from './utils' -import { ONE } from "../constants"; +import { ONE } from '../constants' export function handleServiceCreated(event: ServiceCreated): void { - const buyerStats = getOrCreateUserStats(event.params.ownerId) + const buyerStats = getOrCreateUserStat(event.params.ownerId) buyerStats.numCreatedServices.plus(ONE) buyerStats.save() @@ -71,7 +71,7 @@ export function handleServiceDetailedUpdated(event: ServiceDetailedUpdated): voi } export function handleProposalCreated(event: ProposalCreated): void { - const sellerStats = getOrCreateUserStats(event.params.ownerId) + const sellerStats = getOrCreateUserStat(event.params.ownerId) sellerStats.numCreatedProposals.plus(ONE) sellerStats.save() From e0d4da8f71be249f43d3f04c811ddfc8c6b2b833 Mon Sep 17 00:00:00 2001 From: 0xRomain Date: Sat, 4 Nov 2023 23:43:33 +0100 Subject: [PATCH 2/4] fix incrementations --- src/mappings/talent-layer-escrow.ts | 4 ++-- src/mappings/talent-layer-review.ts | 9 +++++---- src/mappings/talent-layer-service.ts | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/mappings/talent-layer-escrow.ts b/src/mappings/talent-layer-escrow.ts index 3098e537..1b0d11be 100644 --- a/src/mappings/talent-layer-escrow.ts +++ b/src/mappings/talent-layer-escrow.ts @@ -85,11 +85,11 @@ export function handlePaymentCompleted(event: PaymentCompleted): void { service.save() const buyerUserStat = getOrCreateUserStat(BigInt.fromString(service.buyer!)) - buyerUserStat.numFinishedServicesAsBuyer.plus(ONE) + buyerUserStat.numFinishedServicesAsBuyer = buyerUserStat.numFinishedServicesAsBuyer.plus(ONE) buyerUserStat.save() const sellerUserStat = getOrCreateUserStat(BigInt.fromString(service.seller!)) - sellerUserStat.numFinishedServicesAsSeller.plus(ONE) + sellerUserStat.numFinishedServicesAsSeller = sellerUserStat.numFinishedServicesAsSeller.plus(ONE) sellerUserStat.save() } diff --git a/src/mappings/talent-layer-review.ts b/src/mappings/talent-layer-review.ts index 0c473df8..a46bf1ab 100644 --- a/src/mappings/talent-layer-review.ts +++ b/src/mappings/talent-layer-review.ts @@ -20,11 +20,12 @@ export function handleMint(event: Mint): void { if (!receiver) return + receiverStats.numGivenReviews = receiverStats.numGivenReviews.plus(ONE) receiver.rating .times(receiverStats.numReceivedReviews.toBigDecimal()) .plus(event.params.rating.toBigDecimal()) - .div(receiverStats.numReceivedReviews.plus(ONE).toBigDecimal()) - receiverStats.numGivenReviews.plus(ONE) + .div(receiverStats.numReceivedReviews.toBigDecimal()) + receiver.save() receiverStats.save() @@ -33,10 +34,10 @@ export function handleMint(event: Mint): void { const sellerStats = getOrCreateUserStat(BigInt.fromString(service.seller!)) if (receiverStats.id == buyerStats.id) { - sellerStats.numGivenReviews.plus(ONE) + sellerStats.numGivenReviews sellerStats.save() } else { - buyerStats.numGivenReviews.plus(ONE) + buyerStats.numGivenReviews buyerStats.save() } diff --git a/src/mappings/talent-layer-service.ts b/src/mappings/talent-layer-service.ts index 914b24ca..66eea876 100644 --- a/src/mappings/talent-layer-service.ts +++ b/src/mappings/talent-layer-service.ts @@ -23,7 +23,7 @@ import { ONE } from '../constants' export function handleServiceCreated(event: ServiceCreated): void { const buyerStats = getOrCreateUserStat(event.params.ownerId) - buyerStats.numCreatedServices.plus(ONE) + buyerStats.numCreatedServices = buyerStats.numCreatedServices.plus(ONE) buyerStats.save() const service = getOrCreateService(event.params.id) @@ -72,7 +72,7 @@ export function handleServiceDetailedUpdated(event: ServiceDetailedUpdated): voi export function handleProposalCreated(event: ProposalCreated): void { const sellerStats = getOrCreateUserStat(event.params.ownerId) - sellerStats.numCreatedProposals.plus(ONE) + sellerStats.numCreatedProposals = sellerStats.numCreatedProposals.plus(ONE) sellerStats.save() const proposalId = generateIdFromTwoElements(event.params.serviceId.toString(), event.params.ownerId.toString()) From 8d5b240eb7af9739ef2527507547321b74a82e8d Mon Sep 17 00:00:00 2001 From: 0xRomain Date: Sat, 4 Nov 2023 23:50:21 +0100 Subject: [PATCH 3/4] keep the s to prevent regression --- schema.graphql | 4 ++-- src/getters.ts | 2 +- src/mappings/talent-layer-id.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/schema.graphql b/schema.graphql index f7da8c75..3a63dceb 100644 --- a/schema.graphql +++ b/schema.graphql @@ -90,10 +90,10 @@ type User @entity { cid: String #cid of the description description: UserDescription # User description (off chain data) delegates: [String!]! # list of user delegators - userStat: UserStat # User proposal, service & reviews statistics + userStats: UserStat # User proposal, service & reviews statistics } -type UserStat @entity { +type UserStat @entity { # no s no fix plural id: ID! # ID of the user numReceivedReviews: BigInt! # number of reviews user has received numGivenReviews: BigInt! # number of reviews user has given diff --git a/src/getters.ts b/src/getters.ts index 74c0183a..eb34d3cd 100644 --- a/src/getters.ts +++ b/src/getters.ts @@ -72,7 +72,7 @@ export function getOrCreateUser(id: BigInt): User { user.delegates = [] user.save() - user.userStat = getOrCreateUserStat(id).id + user.userStats = getOrCreateUserStat(id).id user.save() } diff --git a/src/mappings/talent-layer-id.ts b/src/mappings/talent-layer-id.ts index 9d547d1f..ccefbe06 100644 --- a/src/mappings/talent-layer-id.ts +++ b/src/mappings/talent-layer-id.ts @@ -39,7 +39,7 @@ export function handleCidUpdated(event: CidUpdated): void { export function handleMint(event: Mint): void { const user = getOrCreateUser(event.params.profileId) - user.userStat = event.params.profileId.toString() + user.userStats = event.params.profileId.toString() user.address = event.params.user.toHex() user.handle = event.params.handle user.createdAt = event.block.timestamp From 418b3b76dc22dc282e3454f0a687d31135409173 Mon Sep 17 00:00:00 2001 From: 0xRomain Date: Sat, 4 Nov 2023 23:50:33 +0100 Subject: [PATCH 4/4] prevent div by zero --- src/mappings/talent-layer-review.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mappings/talent-layer-review.ts b/src/mappings/talent-layer-review.ts index a46bf1ab..1687dd38 100644 --- a/src/mappings/talent-layer-review.ts +++ b/src/mappings/talent-layer-review.ts @@ -20,11 +20,12 @@ export function handleMint(event: Mint): void { if (!receiver) return - receiverStats.numGivenReviews = receiverStats.numGivenReviews.plus(ONE) receiver.rating - .times(receiverStats.numReceivedReviews.toBigDecimal()) + .times(receiverStats.numReceivedReviews.plus(ONE).toBigDecimal()) .plus(event.params.rating.toBigDecimal()) - .div(receiverStats.numReceivedReviews.toBigDecimal()) + .div(receiverStats.numReceivedReviews.plus(ONE).toBigDecimal()) + + receiverStats.numGivenReviews = receiverStats.numGivenReviews.plus(ONE) receiver.save() receiverStats.save()