update user mutation

This commit is contained in:
2024-10-11 17:55:29 +07:00
parent 01b8400a7a
commit 2893b43d30
6 changed files with 88 additions and 36 deletions

View File

@@ -31,7 +31,7 @@ export class CenterSchema extends PothosSchema {
updatedAt: t.expose('updatedAt', { type: 'DateTime' }), updatedAt: t.expose('updatedAt', { type: 'DateTime' }),
services: t.relation('services'), services: t.relation('services'),
centerOwner: t.relation('centerOwner'), centerOwner: t.relation('centerOwner'),
// chatRoom: t.relation('chatRoom'), chatRoom: t.relation('chatRoom'),
centerStaff: t.relation('CenterStaff'), centerStaff: t.relation('CenterStaff'),
resume: t.relation('Resume'), resume: t.relation('Resume'),
}), }),
@@ -43,15 +43,43 @@ export class CenterSchema extends PothosSchema {
this.builder.queryFields((t) => ({ this.builder.queryFields((t) => ({
centers: t.prismaField({ centers: t.prismaField({
type: [this.center()], type: [this.center()],
args: this.builder.generator.findManyArgs('Center'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.center.findMany({
...query,
skip: args.skip ?? undefined,
take: args.take ?? 10,
orderBy: args.orderBy ?? undefined,
where: args.filter ?? undefined,
});
},
}),
center: t.prismaField({
type: this.center(),
args: this.builder.generator.findUniqueArgs('Center'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.center.findUnique({
...query,
where: args.where,
});
},
}),
}));
// mutation section
this.builder.mutationFields((t) => ({
createCenter: t.prismaField({
type: this.center(),
args: { args: {
skip: t.arg.int(), input: t.arg({
take: t.arg.int(), type: this.builder.generator.getCreateInput('Center'),
required: true,
}),
}, },
resolve: async (query, root, args, ctx, info) => { resolve: async (query, root, args, ctx, info) => {
const { skip, take } = args; return await this.prisma.center.create({
return await this.prisma.center.findMany({ ...query,
skip: skip ?? 0, data: args.input,
take: take ?? 10,
}); });
}, },
}), }),

View File

@@ -31,4 +31,23 @@ export class CenterStaffSchema extends PothosSchema {
}), }),
}); });
} }
@Pothos()
init(): void {
this.builder.queryFields((t) => ({
centerStaff: t.prismaField({
type: [this.centerStaff()],
args: this.builder.generator.findManyArgs('CenterStaff'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.centerStaff.findMany({
...query,
skip: args.skip ?? undefined,
take: args.take ?? 10,
orderBy: args.orderBy ?? undefined,
where: args.filter ?? undefined,
});
},
}),
}));
}
} }

View File

@@ -52,7 +52,7 @@ export class Builder extends SchemaBuilder<SchemaBuilderOption> {
this.addScalarType('DateTime', DateTimeResolver); this.addScalarType('DateTime', DateTimeResolver);
this.addScalarType('Json', JSONResolver); this.addScalarType('Json', JSONResolver);
this.queryType({}); this.queryType({});
// this.mutationType({}); this.mutationType({});
} }
} }
export type BuilderTypes = export type BuilderTypes =

View File

@@ -75,6 +75,14 @@ export class PrismaCrudGenerator<Types extends SchemaTypes> {
})); }));
} }
findUniqueArgs<Name extends string & keyof Types['PrismaTypes']>(
modelName: Name,
) {
return this.builder.args((t) => ({
where: t.field({ type: this.getWhereUnique(modelName), required: true }),
}));
}
getWhere<Name extends string & keyof Types['PrismaTypes']>( getWhere<Name extends string & keyof Types['PrismaTypes']>(
modelName: Name, modelName: Name,
without?: string[], without?: string[],

View File

@@ -39,14 +39,32 @@ export class ResumeSchema extends PothosSchema {
} }
@Pothos() @Pothos()
init() { init(): void {
this.builder.queryField('resumes', (t) => this.builder.queryFields((t) => ({
t.field({ resumes: t.prismaField({
type: [this.resume()], type: [this.resume()],
resolve: async () => { args: this.builder.generator.findManyArgs('Resume'),
return await this.prisma.resume.findMany(); resolve: async (query, root, args, ctx, info) => {
return await this.prisma.resume.findMany({
...query,
skip: args.skip ?? undefined,
take: args.take ?? 10,
orderBy: args.orderBy ?? undefined,
where: args.filter ?? undefined,
});
}, },
}), }),
);
resume: t.prismaField({
type: this.resume(),
args: this.builder.generator.findUniqueArgs('Resume'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.resume.findUnique({
...query,
where: args.where,
});
},
}),
}));
} }
} }

View File

@@ -1,30 +1,9 @@
import { Global, Module } from '@nestjs/common'; import { Global, Module } from '@nestjs/common';
import { UserSchema } from './user.schema'; import { UserSchema } from './user.schema';
import { Builder, BuilderTypes } from '../graphql/graphql.builder';
import { PrismaCrudGenerator } from 'src/graphql/graphql.generator';
import { PrismaService } from 'src/prisma/prisma.service'; import { PrismaService } from 'src/prisma/prisma.service';
@Global() @Global()
@Module({ @Module({
providers: [ providers: [PrismaService, UserSchema],
PrismaService,
UserSchema,
{
provide: Builder,
useFactory: (prisma: PrismaService) => new Builder(prisma),
inject: [PrismaService],
},
{
provide: PrismaCrudGenerator,
inject: [
{
token: Builder,
optional: false,
},
],
useFactory: (builder: Builder) =>
new PrismaCrudGenerator<BuilderTypes>(builder),
},
],
exports: [UserSchema], exports: [UserSchema],
}) })
export class UserModule {} export class UserModule {}