@leosprograms/vf-graphql-holochain
Version:
GraphQL schema bindings for the Holochain implementation of ValueFlows
78 lines (72 loc) • 3.06 kB
text/typescript
/**
* Resolvers for ResourceSpecification fields
*
* @package: HoloREA
* @since: 2019-08-27
*/
import { DNAIdMappings, DEFAULT_VF_MODULES, VfModule, ById, ByRevision, AddressableIdentifier } from '../types.js'
import { mapZomeFn } from '../connection.js'
import {
Maybe,
EconomicResourceConnection,
ResourceSpecification,
ResourceSpecificationResponse,
Unit,
UnitResponse,
} from '@leosprograms/vf-graphql'
import { EconomicResourceSearchInput } from './zomeSearchInputTypes.js'
export default (enabledVFModules: VfModule[] = DEFAULT_VF_MODULES, dnaConfig: DNAIdMappings, conductorUri: string) => {
const hasHistory = -1 !== enabledVFModules.indexOf(VfModule.History)
const hasMeasurement = -1 !== enabledVFModules.indexOf(VfModule.Measurement)
const hasIntent = -1 !== enabledVFModules.indexOf(VfModule.Intent)
const hasCommitment = -1 !== enabledVFModules.indexOf(VfModule.Commitment)
const hasObservation = -1 !== enabledVFModules.indexOf(VfModule.Observation)
const readRevision = mapZomeFn<ByRevision, ResourceSpecificationResponse>(dnaConfig, conductorUri, 'combined', 'resource_specification', 'get_revision')
const queryResources = mapZomeFn<EconomicResourceSearchInput, EconomicResourceConnection>(dnaConfig, conductorUri, 'combined', 'indexing', 'query_economic_resources')
const readUnit = mapZomeFn<ById, UnitResponse>(dnaConfig, conductorUri, 'combined', 'unit', 'get_unit')
return Object.assign(
(hasObservation ? {
conformingResources: async (record: ResourceSpecification): Promise<EconomicResourceConnection> => {
return await queryResources({ params: { conformsTo: record.id } })
},
economicEvents: () => {
throw new Error('resolver unimplemented')
},
} : {}),
(hasCommitment ? {
commitments: () => {
throw new Error('resolver unimplemented')
},
} : {}),
(hasIntent ? {
intents: () => {
throw new Error('resolver unimplemented')
},
} : {}),
(hasMeasurement ? {
defaultUnitOfResourceId: async (record: { defaultUnitOfResource: AddressableIdentifier }) => {
if (!record.defaultUnitOfResource) {
return null
}
return record.defaultUnitOfResource
},
defaultUnitOfResource: async (record: { defaultUnitOfResource: AddressableIdentifier }) => {
if (!record.defaultUnitOfResource) {
return null
}
return (await readUnit({ id: record.defaultUnitOfResource })).unit
},
defaultUnitOfEffort: async (record: { defaultUnitOfEffort: AddressableIdentifier }): Promise<Maybe<Unit>> => {
if (!record.defaultUnitOfEffort) {
return null
}
return (await readUnit({ id: record.defaultUnitOfEffort })).unit
},
} : {}),
(hasHistory ? {
revision: async (record: ResourceSpecification, args: { revisionId: AddressableIdentifier }): Promise<ResourceSpecification> => {
return (await readRevision(args)).resourceSpecification
},
} : {}),
)
}