diff --git a/src/Message/message.module.ts b/src/Message/message.module.ts new file mode 100644 index 0000000..02e1514 --- /dev/null +++ b/src/Message/message.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { MessageSchema } from './message.schema'; + +@Module({ + providers: [MessageSchema], + exports: [MessageSchema], +}) +export class MessageModule {} diff --git a/src/Message/message.schema.ts b/src/Message/message.schema.ts new file mode 100644 index 0000000..00e54d5 --- /dev/null +++ b/src/Message/message.schema.ts @@ -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, + }); + }, + }), + })); + } +} diff --git a/src/Milestone/milestone.module.ts b/src/Milestone/milestone.module.ts new file mode 100644 index 0000000..d03714d --- /dev/null +++ b/src/Milestone/milestone.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { MilestoneSchema } from './milestone.schema'; + +@Global() +@Module({ + providers: [MilestoneSchema], + exports: [MilestoneSchema], +}) +export class MilestoneModule {} diff --git a/src/Milestone/milestone.schema.ts b/src/Milestone/milestone.schema.ts new file mode 100644 index 0000000..c79cd9b --- /dev/null +++ b/src/Milestone/milestone.schema.ts @@ -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, + }); + }, + }), + })); + } +} diff --git a/src/Order/order.schema.ts b/src/Order/order.schema.ts index 2094083..e913b5f 100644 --- a/src/Order/order.schema.ts +++ b/src/Order/order.schema.ts @@ -37,8 +37,8 @@ export class OrderSchema extends PothosSchema { }), }); } - - @PothosRef() + + @Pothos() init(): void { // query section this.builder.queryFields((t) => ({ diff --git a/src/Schedule/schedule.module.ts b/src/Schedule/schedule.module.ts new file mode 100644 index 0000000..2c7021d --- /dev/null +++ b/src/Schedule/schedule.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { ScheduleSchema } from './schedule.schema'; + +@Global() +@Module({ + providers: [ScheduleSchema], + exports: [ScheduleSchema], +}) +export class ScheduleModule {} diff --git a/src/Schedule/schedule.schema.ts b/src/Schedule/schedule.schema.ts new file mode 100644 index 0000000..1007981 --- /dev/null +++ b/src/Schedule/schedule.schema.ts @@ -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, + }); + }, + }), + })); + } +} diff --git a/src/ServiceAndCategory/serviceandcategory.schema.ts b/src/ServiceAndCategory/serviceandcategory.schema.ts index 03d6927..096188e 100644 --- a/src/ServiceAndCategory/serviceandcategory.schema.ts +++ b/src/ServiceAndCategory/serviceandcategory.schema.ts @@ -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, + }); + }, + }), + })); + } } diff --git a/src/ServiceMeetingRoom/servicemeetingroom.module.ts b/src/ServiceMeetingRoom/servicemeetingroom.module.ts new file mode 100644 index 0000000..45aae36 --- /dev/null +++ b/src/ServiceMeetingRoom/servicemeetingroom.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { ServiceMeetingRoomSchema } from './servicemeetingroom.schema'; + +@Global() +@Module({ + providers: [ServiceMeetingRoomSchema], + exports: [ServiceMeetingRoomSchema], +}) +export class ServiceMeetingRoomModule {} diff --git a/src/ServiceMeetingRoom/servicemeetingroom.schema.ts b/src/ServiceMeetingRoom/servicemeetingroom.schema.ts new file mode 100644 index 0000000..4acc406 --- /dev/null +++ b/src/ServiceMeetingRoom/servicemeetingroom.schema.ts @@ -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, + }); + }, + }), + })); + } +} diff --git a/src/chatroom/chatroom.schema.ts b/src/chatroom/chatroom.schema.ts index f24601e..5388f6f 100644 --- a/src/chatroom/chatroom.schema.ts +++ b/src/chatroom/chatroom.schema.ts @@ -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, + }); + }, + }), + })); + } } diff --git a/src/graphql/graphql.builder.ts b/src/graphql/graphql.builder.ts index 4aaa4c4..2ffa3e9 100644 --- a/src/graphql/graphql.builder.ts +++ b/src/graphql/graphql.builder.ts @@ -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 { }); this.generator = new PrismaCrudGenerator(this); this.addScalarType('DateTime', DateTimeResolver); - this.addScalarType('Json', JSONResolver); + this.addScalarType('Json', JSONObjectResolver); + this.queryType({}); this.mutationType({}); } diff --git a/src/graphql/graphql.module.ts b/src/graphql/graphql.module.ts index 3e9a8f5..3400933 100644 --- a/src/graphql/graphql.module.ts +++ b/src/graphql/graphql.module.ts @@ -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],