amplify-category-api icon indicating copy to clipboard operation
amplify-category-api copied to clipboard

Append custom resolvers to auto generated DDB resolvers

Open cliren opened this issue 3 years ago • 18 comments

Is this feature request related to a new or existing Amplify category?

function

Is this related to another service?

No

Describe the feature you'd like to request

GIVEN Todo model, amplify auto generates createTodo mutation attached to DynamoDB resolver. Allow side effects on autogenerated mutations to perform custom operations. Example: Send an email (lambda function) after createTodo mutation. Currently there is no option to perform side affects on auto generated operations.

Describe the solution you'd like

Since all resolvers are pipeline resolvers, provide a way to append, prepend user-defined resolvers during schema design.

Auto-generated mutation:

Type Mutation {
  createTodo(input:CreateTodoInput): Todo
}

Proposal

  1. Append to auto-generated resolver - executes after generated resolver
# @appendResolvers will append any user defined @function resolvers onto amplify generated resolvers.
# pipelineResolvers = [originalDDBCreateTodo, FunctionName-${env}]
# we need some kind of @ts-ignore to ignore compile time error on a future generated input ie, CreateTodoInput
Type Mutation {
  @appendResolvers
  createTodo(@ts-ignore input:CreateTodoInput): Todo  @function(name: “FunctionName-${env}”)
}
  1. Prepend to auto-generated resolver - executes before generated resolver
# @prependResolvers will prepend any user defined @function resolvers onto amplify generated resolvers.
# pipelineResolvers = [FunctionName-${env}, originalDDBCreateTodo]
# we need some kind of @ts-ignore to ignore compile time error on a future generated input ie, CreateTodoInput
Type Mutation {
  @prependResolvers
  createTodo(@ts-ignore input:CreateTodoInput): Todo  @function(name: “FunctionName-${env}”)
}

Describe alternatives you've considered

  1. Described solution for this feature request can be achieved using AppSync console manually - doesn't work in a CI/CD environment where manual change are overwritten on deployments.
  2. Move DDB resolvers to lambda - this is more manual work, slows down development beats the purpose of amplify.

Additional context

This is very important to our requirements to have side effects and simplify developer workflow to make it more intuitive by generating side effects from schema.

Is this something that you'd be interested in working on?

  • [ ] 👋 I may be able to implement this feature request
  • [ ] ⚠️ This feature might incur a breaking change

cliren avatar Jan 03 '22 22:01 cliren