quasvel
Version:
Access and interact with Aragon Organizations and their apps.
65 lines (53 loc) • 1.79 kB
text/typescript
// Import event types from the contract ABI
import { DeployAPM as DeployAPMEvent } from '../../generated/ApmRegistryFactory/APMRegistryFactory'
// Import entity types from the schema
import {
RegistryFactory as RegistryFactoryEntity,
Registry as RegistryEntity,
} from '../../generated/schema'
// Import templates types
import { Registry as RegistryTemplate } from '../../generated/templates'
import {
APM_REGISTRY_NODE,
OPEN_REGISTRY_NODE,
HATCH_REGISTRY_NODE,
} from '../helpers/constants'
export function handleDeployAPM(event: DeployAPMEvent): void {
let factory = RegistryFactoryEntity.load('1')
const factoryAddress = event.address
// if no factory yet, set up empty
if (factory == null) {
factory = new RegistryFactoryEntity('1')
factory.address = factoryAddress
factory.registryCount = 0
factory.registries = []
}
factory.registryCount = factory.registryCount + 1
const registryId = event.params.apm.toHex()
const registryAddress = event.params.apm
const node = event.params.node
// solve registry name
let name = ''
if (node.toHex() == APM_REGISTRY_NODE) {
name = 'aragonpm.eth'
} else if (node.toHex() == OPEN_REGISTRY_NODE) {
name = 'open.aragonpm.eth'
} else if (node.toHex() == HATCH_REGISTRY_NODE) {
name = 'hatch.aragonpm.eth'
}
// create new registry
const registry = new RegistryEntity(registryId)
registry.address = registryAddress
registry.node = node
registry.name = name
registry.repoCount = 0
registry.repos = []
// add the registry to the factory
const currentRegistries = factory.registries
currentRegistries.push(registry.id)
factory.registries = currentRegistries
// save to the store
factory.save()
registry.save()
RegistryTemplate.create(registryAddress)
}