diff --git a/schema.graphql b/schema.graphql index 586d8ed6..3a63dceb 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 + userStats: UserStat # User proposal, service & reviews statistics } -type UserStats @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 dbe18828..eb34d3cd 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.userStats = 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..1b0d11be 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 = 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 = sellerUserStat.numFinishedServicesAsSeller.plus(ONE) + sellerUserStat.save() } export function handlePayment(event: Payment): void { diff --git a/src/mappings/talent-layer-review.ts b/src/mappings/talent-layer-review.ts index 86b416ac..1687dd38 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,27 +16,29 @@ 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 receiver.rating - .times(receiverStats.numReceivedReviews.toBigDecimal()) + .times(receiverStats.numReceivedReviews.plus(ONE).toBigDecimal()) .plus(event.params.rating.toBigDecimal()) .div(receiverStats.numReceivedReviews.plus(ONE).toBigDecimal()) - receiverStats.numGivenReviews.plus(ONE) + + receiverStats.numGivenReviews = receiverStats.numGivenReviews.plus(ONE) + receiver.save() 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) { - sellerStats.numGivenReviews.plus(ONE) + if (receiverStats.id == buyerStats.id) { + 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 fce94544..66eea876 100644 --- a/src/mappings/talent-layer-service.ts +++ b/src/mappings/talent-layer-service.ts @@ -16,14 +16,14 @@ 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) - buyerStats.numCreatedServices.plus(ONE) + const buyerStats = getOrCreateUserStat(event.params.ownerId) + buyerStats.numCreatedServices = buyerStats.numCreatedServices.plus(ONE) buyerStats.save() const service = getOrCreateService(event.params.id) @@ -71,8 +71,8 @@ export function handleServiceDetailedUpdated(event: ServiceDetailedUpdated): voi } export function handleProposalCreated(event: ProposalCreated): void { - const sellerStats = getOrCreateUserStats(event.params.ownerId) - sellerStats.numCreatedProposals.plus(ONE) + const sellerStats = getOrCreateUserStat(event.params.ownerId) + sellerStats.numCreatedProposals = sellerStats.numCreatedProposals.plus(ONE) sellerStats.save() const proposalId = generateIdFromTwoElements(event.params.serviceId.toString(), event.params.ownerId.toString())