61 lines
1.7 KiB
TypeScript
61 lines
1.7 KiB
TypeScript
import SchemaBuilder from '@pothos/core';
|
|
import PrismaPlugin, {
|
|
PothosPrismaDatamodel,
|
|
PrismaClient,
|
|
} from '@pothos/plugin-prisma';
|
|
import PrismaUtils from '@pothos/plugin-prisma-utils';
|
|
import { Request, Response } from 'express';
|
|
import type PrismaTypes from '../types/pothos.generated';
|
|
import { getDatamodel } from '../types/pothos.generated';
|
|
import { DateTimeResolver, JSONObjectResolver } from 'graphql-scalars';
|
|
import { Injectable } from '@nestjs/common';
|
|
import { PrismaCrudGenerator } from './graphql.generator';
|
|
|
|
export interface SchemaContext {
|
|
req: Request;
|
|
res: Response;
|
|
generator: PrismaCrudGenerator<BuilderTypes>;
|
|
}
|
|
|
|
export interface SchemaBuilderOption {
|
|
Context: SchemaContext;
|
|
PrismaTypes: PrismaTypes;
|
|
DataModel: PothosPrismaDatamodel;
|
|
Scalars: {
|
|
DateTime: {
|
|
Input: Date;
|
|
Output: Date;
|
|
};
|
|
Json: {
|
|
Input: JSON;
|
|
Output: JSON;
|
|
};
|
|
};
|
|
}
|
|
|
|
@Injectable()
|
|
export class Builder extends SchemaBuilder<SchemaBuilderOption> {
|
|
public generator: PrismaCrudGenerator<BuilderTypes>;
|
|
|
|
constructor(private readonly prisma: PrismaClient) {
|
|
super({
|
|
plugins: [PrismaPlugin, PrismaUtils],
|
|
prisma: {
|
|
client: prisma,
|
|
exposeDescriptions: true,
|
|
filterConnectionTotalCount: true,
|
|
onUnusedQuery: process.env.NODE_ENV === 'production' ? null : 'warn',
|
|
dmmf: getDatamodel(),
|
|
},
|
|
});
|
|
this.generator = new PrismaCrudGenerator<BuilderTypes>(this);
|
|
this.addScalarType('DateTime', DateTimeResolver);
|
|
this.addScalarType('Json', JSONObjectResolver);
|
|
|
|
this.queryType({});
|
|
this.mutationType({});
|
|
}
|
|
}
|
|
export type BuilderTypes =
|
|
PothosSchemaTypes.ExtendDefaultTypes<SchemaBuilderOption>;
|