ocean-subgraph/src/mappings/nftUpdate.ts

263 lines
7.9 KiB
TypeScript

import { Nft, NftUpdate } from '../@types/schema'
import {
MetadataCreated,
MetadataState,
MetadataUpdated,
TokenURIUpdate,
AddedManager,
AddedTo725StoreList,
AddedToCreateERC20List,
AddedToMetadataList,
RemovedFrom725StoreList,
RemovedFromCreateERC20List,
RemovedFromMetadataList,
RemovedManager,
CleanedPermissions,
Transfer
} from '../@types/templates/ERC721Template/ERC721Template'
import { NftUpdateType } from './utils/constants'
import { getNftToken, getNftTokenWithID } from './utils/tokenUtils'
import { getUser } from './utils/userUtils'
function getId(tx: string, nftAddress: string): string {
return `${tx}-${nftAddress}`
}
export function handleMetadataCreated(event: MetadataCreated): void {
const nftAddress = event.address.toHex()
const nft = Nft.load(nftAddress)
if (!nft) return
nft.assetState = event.params.state
nft.providerUrl = event.params.decryptorUrl.toString()
nft.hasMetadata = true
const nftUpdate = new NftUpdate(
getId(event.transaction.hash.toHex(), nftAddress)
)
nftUpdate.type = NftUpdateType.METADATA_CREATED
nftUpdate.userAddress = event.params.createdBy.toHex()
nftUpdate.assetState = event.params.state
nftUpdate.nft = nft.id
nftUpdate.providerUrl = nft.providerUrl
nftUpdate.tokenUri = nft.tokenUri
nftUpdate.timestamp = event.block.timestamp.toI32()
nftUpdate.tx = event.transaction.hash.toHex()
nftUpdate.block = event.block.number.toI32()
nftUpdate.save()
nft.save()
}
export function handleMetadataUpdated(event: MetadataUpdated): void {
const nftAddress = event.address.toHex()
const nft = Nft.load(nftAddress)
if (!nft) return
nft.assetState = event.params.state
nft.hasMetadata = true
const nftUpdate = new NftUpdate(
getId(event.transaction.hash.toHex(), nftAddress)
)
nftUpdate.nft = nft.id
nftUpdate.type = NftUpdateType.METADATA_UPDATED
nftUpdate.userAddress = event.params.updatedBy.toHex()
nftUpdate.assetState = event.params.state
nftUpdate.timestamp = event.block.timestamp.toI32()
nftUpdate.tx = event.transaction.hash.toHex()
nftUpdate.block = event.block.number.toI32()
nftUpdate.save()
nft.save()
}
export function handleMetadataState(event: MetadataState): void {
const nftAddress = event.address.toHex()
const nft = Nft.load(nftAddress)
if (!nft) return
nft.assetState = event.params.state
const nftUpdate = new NftUpdate(
getId(event.transaction.hash.toHex(), nftAddress)
)
nftUpdate.nft = nft.id
nftUpdate.type = NftUpdateType.STATE_UPDATED
nftUpdate.userAddress = event.params.updatedBy.toHex()
nftUpdate.assetState = event.params.state
nftUpdate.timestamp = event.block.timestamp.toI32()
nftUpdate.tx = event.transaction.hash.toHex()
nftUpdate.block = event.block.number.toI32()
nftUpdate.save()
nft.save()
}
export function handleTokenUriUpdate(event: TokenURIUpdate): void {
const nftAddress = event.address.toHex()
const nft = Nft.load(nftAddress)
if (!nft) return
nft.tokenUri = event.params.tokenURI.toString()
const nftUpdate = new NftUpdate(
getId(event.transaction.hash.toHex(), nftAddress)
)
nftUpdate.nft = nft.id
nftUpdate.type = NftUpdateType.TOKENURI_UPDATED
nftUpdate.userAddress = event.params.updatedBy.toHex()
nftUpdate.tokenUri = nft.tokenUri
nftUpdate.timestamp = event.block.timestamp.toI32()
nftUpdate.tx = event.transaction.hash.toHex()
nftUpdate.block = event.block.number.toI32()
nftUpdate.save()
nft.save()
}
// roles
export function handleAddedManager(event: AddedManager): void {
const nft = getNftToken(event.address)
let existingRoles: string[]
if (!nft.managerRole) existingRoles = []
else existingRoles = nft.managerRole as string[]
if (!existingRoles.includes(event.params.user.toHexString()))
existingRoles.push(event.params.user.toHexString())
nft.managerRole = existingRoles
nft.save()
}
export function handleRemovedManager(event: RemovedManager): void {
const nft = getNftToken(event.address)
const newList: string[] = []
let existingRoles: string[]
if (!nft.managerRole) existingRoles = []
else existingRoles = nft.managerRole as string[]
if (!existingRoles || existingRoles.length < 1) return
while (existingRoles.length > 0) {
const role = existingRoles.shift().toString()
if (!role) break
if (role !== event.params.user.toHexString()) newList.push(role)
}
nft.managerRole = newList
nft.save()
}
// storeUpdater
export function handleAddedTo725StoreList(event: AddedTo725StoreList): void {
const nft = getNftToken(event.address)
let existingRoles: string[]
if (!nft.storeUpdateRole) existingRoles = []
else existingRoles = nft.storeUpdateRole as string[]
if (!existingRoles.includes(event.params.user.toHexString()))
existingRoles.push(event.params.user.toHexString())
nft.storeUpdateRole = existingRoles
nft.save()
}
export function handleRemovedFrom725StoreList(
event: RemovedFrom725StoreList
): void {
const nft = getNftToken(event.address)
const newList: string[] = []
let existingRoles: string[]
if (!nft.storeUpdateRole) existingRoles = []
else existingRoles = nft.storeUpdateRole as string[]
if (!existingRoles || existingRoles.length < 1) return
while (existingRoles.length > 0) {
const role = existingRoles.shift().toString()
if (!role) break
if (role !== event.params.user.toHexString()) newList.push(role)
}
nft.storeUpdateRole = newList
nft.save()
}
// erc20Deployer
export function handleAddedToCreateERC20List(
event: AddedToCreateERC20List
): void {
const nft = getNftToken(event.address)
let existingRoles: string[]
if (!nft.erc20DeployerRole) existingRoles = []
else existingRoles = nft.erc20DeployerRole as string[]
if (!existingRoles.includes(event.params.user.toHexString()))
existingRoles.push(event.params.user.toHexString())
nft.erc20DeployerRole = existingRoles
nft.save()
}
export function handleRemovedFromCreateERC20List(
event: RemovedFromCreateERC20List
): void {
const nft = getNftToken(event.address)
const newList: string[] = []
let existingRoles: string[]
if (!nft.erc20DeployerRole) existingRoles = []
else existingRoles = nft.erc20DeployerRole as string[]
if (!existingRoles || existingRoles.length < 1) return
while (existingRoles.length > 0) {
const role = existingRoles.shift().toString()
if (!role) break
if (role !== event.params.user.toHexString()) newList.push(role)
}
nft.erc20DeployerRole = newList
nft.save()
}
// metadata updater
export function handleAddedToMetadataList(event: AddedToMetadataList): void {
const nft = getNftToken(event.address)
let existingRoles: string[]
if (!nft.metadataRole) existingRoles = []
else existingRoles = nft.metadataRole as string[]
if (!existingRoles.includes(event.params.user.toHexString()))
existingRoles.push(event.params.user.toHexString())
nft.metadataRole = existingRoles
nft.save()
}
export function handleRemovedFromMetadataList(
event: RemovedFromMetadataList
): void {
const nft = getNftToken(event.address)
const newList: string[] = []
let existingRoles: string[]
if (!nft.metadataRole) existingRoles = []
else existingRoles = nft.metadataRole as string[]
if (!existingRoles || existingRoles.length < 1) return
while (existingRoles.length > 0) {
const role = existingRoles.shift().toString()
if (!role) break
if (role !== event.params.user.toHexString()) newList.push(role)
}
nft.metadataRole = newList
nft.save()
}
export function handleCleanedPermissions(event: CleanedPermissions): void {
const nft = getNftToken(event.address)
const newList: string[] = []
nft.metadataRole = newList
nft.erc20DeployerRole = newList
nft.storeUpdateRole = newList
nft.managerRole = newList
nft.save()
}
export function handleNftTransferred(event: Transfer): void {
const id = event.address.toHex()
const nft = getNftTokenWithID(id)
const newOwner = getUser(event.params.to.toHexString())
nft.owner = newOwner.id
nft.save()
}