🔥🔥🔥🔥🔥🔥

This commit is contained in:
2024-10-12 17:11:09 +07:00
parent ba77bd4e1c
commit 4fac0a052b
13 changed files with 354 additions and 4 deletions

View File

@@ -0,0 +1,8 @@
import { Module } from '@nestjs/common';
import { MessageSchema } from './message.schema';
@Module({
providers: [MessageSchema],
exports: [MessageSchema],
})
export class MessageModule {}

View File

@@ -0,0 +1,63 @@
import { Inject, Injectable } from '@nestjs/common';
import {
Pothos,
PothosRef,
PothosSchema,
SchemaBuilderToken,
} from '@smatch-corp/nestjs-pothos';
import { Builder } from '../Graphql/graphql.builder';
import { PrismaService } from '../Prisma/prisma.service';
@Injectable()
export class MessageSchema extends PothosSchema {
constructor(
@Inject(SchemaBuilderToken) private readonly builder: Builder,
private readonly prisma: PrismaService,
) {
super();
}
@PothosRef()
message() {
return this.builder.prismaObject('Message', {
fields: (t) => ({
id: t.exposeID('id'),
senderId: t.exposeID('senderId'),
chatRoomId: t.exposeID('chatRoomId'),
message: t.expose('message', { type: 'Json' as any }),
sentAt: t.expose('sentAt', { type: 'DateTime' }),
sender: t.relation('sender'),
chatRoom: t.relation('chatRoom'),
}),
});
}
@Pothos()
init(): void {
this.builder.queryFields((t) => ({
message: t.prismaField({
type: this.message(),
args: this.builder.generator.findUniqueArgs('Message'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.message.findUnique({
...query,
where: args.where,
});
},
}),
messages: t.prismaField({
type: [this.message()],
args: this.builder.generator.findManyArgs('Message'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.message.findMany({
...query,
skip: args.skip ?? 0,
take: args.take ?? 10,
orderBy: args.orderBy ?? undefined,
where: args.filter ?? undefined,
});
},
}),
}));
}
}

View File

@@ -0,0 +1,9 @@
import { Global, Module } from '@nestjs/common';
import { MilestoneSchema } from './milestone.schema';
@Global()
@Module({
providers: [MilestoneSchema],
exports: [MilestoneSchema],
})
export class MilestoneModule {}

View File

@@ -0,0 +1,63 @@
import { Inject, Injectable } from '@nestjs/common';
import {
Pothos,
PothosRef,
PothosSchema,
SchemaBuilderToken,
} from '@smatch-corp/nestjs-pothos';
import { Builder } from '../Graphql/graphql.builder';
import { PrismaService } from '../Prisma/prisma.service';
@Injectable()
export class MilestoneSchema extends PothosSchema {
constructor(
@Inject(SchemaBuilderToken) private readonly builder: Builder,
private readonly prisma: PrismaService,
) {
super();
}
@PothosRef()
milestone() {
return this.builder.prismaObject('Milestone', {
fields: (t) => ({
id: t.exposeID('id'),
name: t.exposeString('name'),
order: t.exposeInt('order'),
description: t.exposeString('description'),
createdAt: t.expose('createdAt', { type: 'DateTime' }),
updatedAt: t.expose('updatedAt', { type: 'DateTime' }),
service: t.relation('service'),
}),
});
}
@Pothos()
init(): void {
this.builder.queryFields((t) => ({
milestones: t.prismaField({
type: [this.milestone()],
args: this.builder.generator.findManyArgs('Milestone'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.milestone.findMany({
...query,
skip: args.skip ?? 0,
take: args.take ?? 10,
orderBy: args.orderBy ?? undefined,
where: args.filter ?? undefined,
});
},
}),
milestone: t.prismaField({
type: this.milestone(),
args: this.builder.generator.findUniqueArgs('Milestone'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.milestone.findUnique({
...query,
where: args.where,
});
},
}),
}));
}
}

View File

@@ -37,8 +37,8 @@ export class OrderSchema extends PothosSchema {
}),
});
}
@PothosRef()
@Pothos()
init(): void {
// query section
this.builder.queryFields((t) => ({

View File

@@ -0,0 +1,9 @@
import { Global, Module } from '@nestjs/common';
import { ScheduleSchema } from './schedule.schema';
@Global()
@Module({
providers: [ScheduleSchema],
exports: [ScheduleSchema],
})
export class ScheduleModule {}

View File

@@ -0,0 +1,62 @@
import { Inject, Injectable } from '@nestjs/common';
import {
Pothos,
PothosRef,
PothosSchema,
SchemaBuilderToken,
} from '@smatch-corp/nestjs-pothos';
import { Builder } from '../Graphql/graphql.builder';
import { PrismaService } from '../Prisma/prisma.service';
@Injectable()
export class ScheduleSchema extends PothosSchema {
constructor(
@Inject(SchemaBuilderToken) private readonly builder: Builder,
private readonly prisma: PrismaService,
) {
super();
}
@PothosRef()
schedule() {
return this.builder.prismaObject('Schedule', {
fields: (t) => ({
id: t.exposeID('id'),
serviceId: t.exposeID('serviceId'),
service: t.relation('service'),
dates: t.expose('dates', { type: 'Json' as any }),
status: t.exposeString('status'),
}),
});
}
@Pothos()
init(): void {
this.builder.queryFields((t) => ({
schedule: t.prismaField({
type: this.schedule(),
args: this.builder.generator.findUniqueArgs('Schedule'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.schedule.findUnique({
...query,
where: args.where,
});
},
}),
schedules: t.prismaField({
type: [this.schedule()],
args: this.builder.generator.findManyArgs('Schedule'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.schedule.findMany({
...query,
skip: args.skip ?? 0,
take: args.take ?? 10,
orderBy: args.orderBy ?? undefined,
where: args.filter ?? undefined,
});
},
}),
}));
}
}

View File

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

View File

@@ -0,0 +1,9 @@
import { Global, Module } from '@nestjs/common';
import { ServiceMeetingRoomSchema } from './servicemeetingroom.schema';
@Global()
@Module({
providers: [ServiceMeetingRoomSchema],
exports: [ServiceMeetingRoomSchema],
})
export class ServiceMeetingRoomModule {}

View File

@@ -0,0 +1,59 @@
import { Inject, Injectable } from '@nestjs/common';
import {
Pothos,
PothosRef,
PothosSchema,
SchemaBuilderToken,
} from '@smatch-corp/nestjs-pothos';
import { Builder } from '../Graphql/graphql.builder';
import { PrismaService } from '../Prisma/prisma.service';
@Injectable()
export class ServiceMeetingRoomSchema extends PothosSchema {
constructor(
@Inject(SchemaBuilderToken) private readonly builder: Builder,
private readonly prisma: PrismaService,
) {
super();
}
@PothosRef()
serviceMeetingRoom() {
return this.builder.prismaObject('ServiceMeetingRoom', {
fields: (t) => ({
id: t.exposeID('id'),
chattingRoomId: t.exposeString('chattingRoomId'),
chattingRoom: t.relation('chattingRoom'),
}),
});
}
@Pothos()
init(): void {
this.builder.queryFields((t) => ({
serviceMeetingRoom: t.prismaField({
type: this.serviceMeetingRoom(),
args: this.builder.generator.findUniqueArgs('ServiceMeetingRoom'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.serviceMeetingRoom.findUnique({
...query,
where: args.where,
});
},
}),
serviceMeetingRooms: t.prismaField({
type: [this.serviceMeetingRoom()],
args: this.builder.generator.findManyArgs('ServiceMeetingRoom'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.serviceMeetingRoom.findMany({
...query,
skip: args.skip ?? 0,
take: args.take ?? 10,
orderBy: args.orderBy ?? undefined,
where: args.filter ?? undefined,
});
},
}),
}));
}
}

View File

@@ -22,7 +22,47 @@ export class ChatroomSchema extends PothosSchema {
return this.builder.prismaObject('ChatRoom', {
fields: (t) => ({
id: t.exposeID('id'),
type: t.exposeString('type'),
customerId: t.exposeID('customerId'),
centerId: t.exposeID('centerId'),
centerStaffId: t.exposeID('centerStaffId'),
createdAt: t.expose('createdAt', { type: 'DateTime' }),
message: t.relation('message'),
customer: t.relation('customer'),
center: t.relation('center'),
centerStaff: t.relation('centerStaff'),
meetingRoom: t.relation('meetingRoom'),
}),
});
}
@Pothos()
init(): void {
this.builder.queryFields((t) => ({
chatRoom: t.prismaField({
type: this.chatRoom(),
args: this.builder.generator.findUniqueArgs('ChatRoom'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.chatRoom.findUnique({
...query,
where: args.where,
});
},
}),
chatRooms: t.prismaField({
type: [this.chatRoom()],
args: this.builder.generator.findManyArgs('ChatRoom'),
resolve: async (query, root, args, ctx, info) => {
return await this.prisma.chatRoom.findMany({
...query,
skip: args.skip ?? 0,
take: args.take ?? 10,
orderBy: args.orderBy ?? undefined,
where: args.filter ?? undefined,
});
},
}),
}));
}
}

View File

@@ -7,7 +7,7 @@ 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, JSONResolver } from 'graphql-scalars';
import { DateTimeResolver, JSONObjectResolver } from 'graphql-scalars';
import { Injectable } from '@nestjs/common';
import { PrismaCrudGenerator } from './graphql.generator';
@@ -50,7 +50,8 @@ export class Builder extends SchemaBuilder<SchemaBuilderOption> {
});
this.generator = new PrismaCrudGenerator<BuilderTypes>(this);
this.addScalarType('DateTime', DateTimeResolver);
this.addScalarType('Json', JSONResolver);
this.addScalarType('Json', JSONObjectResolver);
this.queryType({});
this.mutationType({});
}

View File

@@ -23,6 +23,10 @@ import { RefundTicketModule } from '../RefundTicket/refundticket.module';
import { ServiceAndCategoryModule } from '../ServiceAndCategory/serviceandcategory.module';
import { CategoryModule } from '../Category/category.module';
import { ServiceFeedbackModule } from '../ServiceFeedback/servicefeedback.module';
import { MilestoneModule } from '../Milestone/milestone.module';
import { ScheduleModule } from '../Schedule/schedule.module';
import { MessageModule } from '../Message/message.module';
import { ServiceMeetingRoomModule } from '../ServiceMeetingRoom/servicemeetingroom.module';
@Global()
@Module({
imports: [
@@ -42,6 +46,10 @@ import { ServiceFeedbackModule } from '../ServiceFeedback/servicefeedback.module
ServiceAndCategoryModule,
CategoryModule,
ServiceFeedbackModule,
MilestoneModule,
ScheduleModule,
MessageModule,
ServiceMeetingRoomModule,
PothosModule.forRoot({
builder: {
inject: [PrismaService],