developer239/node-type-orm-graphql

View on GitHub
src/modules/Core/resolvers/createResolver.ts

Summary

Maintainability
A
30 mins
Test Coverage
import { Resolver, Mutation, Arg, UseMiddleware, ClassType, Ctx } from 'type-graphql'
import { Middleware } from 'type-graphql/dist/interfaces/Middleware'
import { IAppContext } from '~/types'

export const createResolver = <IInputType extends ClassType>(
  entity: any,
  inputType: IInputType,
  middleware?: Middleware<any>[]
) => {
  @Resolver()
  class BaseResolver {
    @Mutation(() => entity, { name: `create${entity.className}` })
    @UseMiddleware(...(middleware || []))
    create(@Arg('data', () => inputType) data: any, @Ctx() ctx: IAppContext) {
      if (entity.belongsToUser) {
        return entity
          .create({
            ...data,
            userConnection: { id: ctx.req.session.userId },
          })
          .save()
      }

      return entity.create(data).save()
    }
  }

  return BaseResolver
}