Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
30 changes: 15 additions & 15 deletions src/getters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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 {
Expand Down
14 changes: 7 additions & 7 deletions src/mappings/talent-layer-escrow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
getOrCreateProtocol,
getOrCreateTransaction,
getOrCreateEvidence,
getOrCreateUserStats,
getOrCreateUserStat,
} from '../getters'
import {
Payment,
Expand Down Expand Up @@ -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 {
Expand Down
20 changes: 11 additions & 9 deletions src/mappings/talent-layer-review.ts
Original file line number Diff line number Diff line change
@@ -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'

Expand All @@ -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()
}

Expand Down
12 changes: 6 additions & 6 deletions src/mappings/talent-layer-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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())
Expand Down