@leosprograms/vf-graphql-holochain
Version:
GraphQL schema bindings for the Holochain implementation of ValueFlows
151 lines (130 loc) • 4.49 kB
text/typescript
/**
* agent mutations
*
* @package: hREA
* @since: 2022-06-08
*/
import { AgentAddress, ByRevision, DNAIdMappings } from '../types.js'
import { mapZomeFn } from '../connection.js'
import { deleteHandler } from './'
import {
AgentCreateParams,
AgentUpdateParams,
PersonResponse,
OrganizationCreateParams,
OrganizationUpdateParams,
OrganizationResponse,
AccountingScope,
Person,
} from '@leosprograms/vf-graphql'
// export type AgentResponse = OrganizationResponse
export interface AgentResponse {
agent: AccountingScope,
}
export interface PersonCreateArgs {
person: AgentCreateParams,
}
export type createPersonHandler = (root: any, args: PersonCreateArgs) => Promise<PersonResponse>
export interface PersonUpdateArgs {
person: AgentUpdateParams,
}
export type updatePersonHandler = (root: any, args: PersonUpdateArgs) => Promise<PersonResponse>
export interface OrganizationCreateArgs {
organization: OrganizationCreateParams,
}
export type createOrganizationHandler = (root: any, args: OrganizationCreateArgs) => Promise<OrganizationResponse>
export interface OrganizationUpdateArgs {
organization: OrganizationUpdateParams,
}
export type updateOrganizationHandler = (root: any, args: OrganizationUpdateArgs) => Promise<OrganizationResponse>
export interface AgentCreateArgs {
agent: OrganizationCreateParams & { agentType: string },
}
export interface AgentUpdateArgs {
agent: OrganizationUpdateParams,
}
export interface AssociateAgentParams {
agentAddress: AgentAddress,
}
export default (dnaConfig: DNAIdMappings, conductorUri: string) => {
const runCreateAgent = mapZomeFn<AgentCreateArgs, AgentResponse>(dnaConfig, conductorUri, 'combined', 'agent', 'create_agent')
const runAssociateMyAgent = mapZomeFn<AssociateAgentParams, boolean>(dnaConfig, conductorUri, 'combined', 'agent', 'associate_my_agent')
const runUpdateAgent = mapZomeFn<AgentUpdateArgs, AgentResponse>(dnaConfig, conductorUri, 'combined', 'agent', 'update_agent')
const runDeleteAgent = mapZomeFn<ByRevision, boolean>(dnaConfig, conductorUri, 'combined', 'agent', 'delete_agent')
const createPerson: createPersonHandler = async (root, args) => {
const createAgentArgs = {
agent: {
...args.person,
agentType: 'Person',
}
}
return (await runCreateAgent(createAgentArgs)) as PersonResponse
}
const associateMyAgent = async (root, args: { agentId: AgentAddress }) => {
return runAssociateMyAgent({ agentAddress: args.agentId })
}
const updatePerson: updatePersonHandler = async (root, args) => {
const updateAgentArgs: AgentUpdateArgs = {
agent: {
...args.person,
}
}
return ( await runUpdateAgent(updateAgentArgs)) as PersonResponse
}
const deletePerson: deleteHandler = async (root, args) => {
return runDeleteAgent(args)
}
const createOrganization: createOrganizationHandler = async (root, args) => {
const createAgentArgs: AgentCreateArgs = {
agent: {
...args.organization,
agentType: 'Organization',
}
}
return (await runCreateAgent(createAgentArgs)) as OrganizationResponse
}
const updateOrganization: updateOrganizationHandler = async (root, args) => {
const updateAgentArgs: AgentUpdateArgs = {
agent: {
...args.organization,
}
}
return (await runUpdateAgent(updateAgentArgs)) as OrganizationResponse
}
const deleteOrganization: deleteHandler = async (root, args) => {
return runDeleteAgent(args)
}
const createAgentRelationship = () => {
throw new Error('mutation unimplemented')
}
const updateAgentRelationship = () => {
throw new Error('mutation unimplemented')
}
const deleteAgentRelationship = () => {
throw new Error('mutation unimplemented')
}
const createAgentRelationshipRole = () => {
throw new Error('mutation unimplemented')
}
const updateAgentRelationshipRole = () => {
throw new Error('mutation unimplemented')
}
const deleteAgentRelationshipRole = () => {
throw new Error('mutation unimplemented')
}
return {
associateMyAgent,
createPerson,
updatePerson,
deletePerson,
createOrganization,
updateOrganization,
deleteOrganization,
createAgentRelationship,
updateAgentRelationship,
deleteAgentRelationship,
createAgentRelationshipRole,
updateAgentRelationshipRole,
deleteAgentRelationshipRole,
}
}