diff --git a/src/Category/category.module.ts b/src/Category/category.module.ts new file mode 100644 index 0000000..6fc5741 --- /dev/null +++ b/src/Category/category.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { CategorySchema } from './category.schema'; + +@Global() +@Module({ + providers: [CategorySchema], + exports: [CategorySchema], +}) +export class CategoryModule {} diff --git a/src/Category/category.schema.ts b/src/Category/category.schema.ts new file mode 100644 index 0000000..d65225e --- /dev/null +++ b/src/Category/category.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 CategorySchema extends PothosSchema { + constructor( + @Inject(SchemaBuilderToken) private readonly builder: Builder, + private readonly prisma: PrismaService, + ) { + super(); + } + + @PothosRef() + category() { + return this.builder.prismaObject('Category', { + fields: (t) => ({ + id: t.exposeID('id'), + name: t.exposeString('name'), + serviceAndCategory: t.relation('serviceAndCategory'), + }), + }); + } + + @PothosRef() + init(): void { + this.builder.queryFields((t) => ({ + categories: t.prismaField({ + type: [this.category()], + args: this.builder.generator.findManyArgs('Category'), + resolve: async (query, root, args, ctx, info) => { + return await this.prisma.category.findMany({ + ...query, + skip: args.skip ?? undefined, + take: args.take ?? 10, + orderBy: args.orderBy ?? undefined, + where: args.filter ?? undefined, + }); + }, + }), + category: t.prismaField({ + type: this.category(), + args: this.builder.generator.findUniqueArgs('Category'), + resolve: async (query, root, args, ctx, info) => { + return await this.prisma.category.findUnique({ + ...query, + where: args.where ?? undefined, + }); + }, + }), + })); + } +} diff --git a/src/Order/order.module.ts b/src/Order/order.module.ts new file mode 100644 index 0000000..e0ca88c --- /dev/null +++ b/src/Order/order.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { OrderSchema } from './order.schema'; + +@Global() +@Module({ + providers: [OrderSchema], + exports: [OrderSchema], +}) +export class OrderModule {} diff --git a/src/Order/order.schema.ts b/src/Order/order.schema.ts new file mode 100644 index 0000000..2094083 --- /dev/null +++ b/src/Order/order.schema.ts @@ -0,0 +1,70 @@ +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 'src/Prisma/prisma.service'; + +@Injectable() +export class OrderSchema extends PothosSchema { + constructor( + @Inject(SchemaBuilderToken) private readonly builder: Builder, + private readonly prisma: PrismaService, + ) { + super(); + } + + // Types section + @PothosRef() + order() { + return this.builder.prismaObject('Order', { + fields: (t) => ({ + id: t.exposeID('id'), + paymentId: t.exposeString('paymentId'), + userId: t.exposeID('userId'), + serviceId: t.exposeID('serviceId'), + status: t.exposeString('status'), + total: t.exposeInt('total'), + createdAt: t.expose('createdAt', { type: 'DateTime' }), + updatedAt: t.expose('updatedAt', { type: 'DateTime' }), + user: t.relation('user'), + payment: t.relation('payment'), + service: t.relation('service'), + refundTicket: t.relation('refundTicket'), + }), + }); + } + + @PothosRef() + init(): void { + // query section + this.builder.queryFields((t) => ({ + orders: t.prismaField({ + type: [this.order()], + args: this.builder.generator.findManyArgs('Order'), + resolve: async (query, root, args, ctx, info) => { + return await this.prisma.order.findMany({ + ...query, + take: args.take ?? 10, + skip: args.skip ?? 0, + orderBy: args.orderBy ?? undefined, + where: args.filter ?? undefined, + }); + }, + }), + order: t.prismaField({ + type: this.order(), + args: this.builder.generator.findUniqueArgs('Order'), + resolve: async (query, root, args, ctx, info) => { + return await this.prisma.order.findUnique({ + ...query, + where: args.where, + }); + }, + }), + })); + } +} diff --git a/src/Payment/payment.module.ts b/src/Payment/payment.module.ts new file mode 100644 index 0000000..8eb8387 --- /dev/null +++ b/src/Payment/payment.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { PaymentSchema } from './payment.schema'; + +@Global() +@Module({ + providers: [PaymentSchema], + exports: [PaymentSchema], +}) +export class PaymentModule {} diff --git a/src/Payment/payment.schema.ts b/src/Payment/payment.schema.ts new file mode 100644 index 0000000..ec441e1 --- /dev/null +++ b/src/Payment/payment.schema.ts @@ -0,0 +1,65 @@ +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 'src/Prisma/prisma.service'; + +@Injectable() +export class PaymentSchema extends PothosSchema { + constructor( + @Inject(SchemaBuilderToken) private readonly builder: Builder, + private readonly prisma: PrismaService, + ) { + super(); + } + + // Types section + @PothosRef() + payment() { + return this.builder.prismaObject('Payment', { + fields: (t) => ({ + id: t.exposeID('id'), + amount: t.exposeFloat('amount'), + status: t.exposeString('status'), + createdAt: t.expose('createdAt', { type: 'DateTime' }), + updatedAt: t.expose('updatedAt', { type: 'DateTime' }), + order: t.relation('Order'), + }), + }); + } + + // Queries section + @Pothos() + init(): void { + this.builder.queryFields((t) => ({ + payment: t.prismaField({ + type: this.payment(), + args: this.builder.generator.findUniqueArgs('Payment'), + resolve: async (query, root, args, ctx, info) => { + return await this.prisma.payment.findUnique({ + ...query, + where: args.where, + }); + }, + }), + payments: t.prismaField({ + type: [this.payment()], + args: this.builder.generator.findManyArgs('Payment'), + resolve: async (query, root, args, ctx, info) => { + return await this.prisma.payment.findMany({ + ...query, + where: args.filter ?? undefined, + orderBy: args.orderBy ?? undefined, + cursor: args.cursor ?? undefined, + take: args.take ?? 10, + skip: args.skip ?? 0, + }); + }, + }), + })); + } +} diff --git a/src/RefundTicket/refundticket.module.ts b/src/RefundTicket/refundticket.module.ts new file mode 100644 index 0000000..a76ad07 --- /dev/null +++ b/src/RefundTicket/refundticket.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { RefundTicketSchema } from './refundticket.schema'; + +@Global() +@Module({ + providers: [RefundTicketSchema], + exports: [RefundTicketSchema], +}) +export class RefundTicketModule {} diff --git a/src/RefundTicket/refundticket.schema.ts b/src/RefundTicket/refundticket.schema.ts new file mode 100644 index 0000000..e6f3863 --- /dev/null +++ b/src/RefundTicket/refundticket.schema.ts @@ -0,0 +1,55 @@ +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 'src/Prisma/prisma.service'; + +@Injectable() +export class RefundTicketSchema extends PothosSchema { + constructor( + @Inject(SchemaBuilderToken) private readonly builder: Builder, + private readonly prisma: PrismaService, + ) { + super(); + } + + // Types section + @PothosRef() + refundTicket() { + return this.builder.prismaObject('RefundTicket', { + fields: (t) => ({ + id: t.exposeID('id'), + amount: t.exposeFloat('amount'), + status: t.exposeString('status'), + createdAt: t.expose('createdAt', { type: 'DateTime' }), + updatedAt: t.expose('updatedAt', { type: 'DateTime' }), + order: t.relation('order'), + }), + }); + } + + // Queries section + @Pothos() + init(): void { + this.builder.queryFields((t) => ({ + refundTickets: t.prismaField({ + type: [this.refundTicket()], + args: this.builder.generator.findManyArgs('RefundTicket'), + resolve: async (query, root, args, ctx, info) => { + return await this.prisma.refundTicket.findMany({ + ...query, + where: args.filter ?? undefined, + orderBy: args.orderBy ?? undefined, + cursor: args.cursor ?? undefined, + take: args.take ?? 10, + skip: args.skip ?? 0, + }); + }, + }), + })); + } +} diff --git a/src/ServiceAndCategory/serviceandcategory.module.ts b/src/ServiceAndCategory/serviceandcategory.module.ts new file mode 100644 index 0000000..8d9d3da --- /dev/null +++ b/src/ServiceAndCategory/serviceandcategory.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { ServiceAndCategorySchema } from './serviceandcategory.schema'; + +@Global() +@Module({ + providers: [ServiceAndCategorySchema], + exports: [ServiceAndCategorySchema], +}) +export class ServiceAndCategoryModule {} diff --git a/src/ServiceAndCategory/serviceandcategory.schema.ts b/src/ServiceAndCategory/serviceandcategory.schema.ts new file mode 100644 index 0000000..03d6927 --- /dev/null +++ b/src/ServiceAndCategory/serviceandcategory.schema.ts @@ -0,0 +1,31 @@ +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 ServiceAndCategorySchema extends PothosSchema { + constructor( + @Inject(SchemaBuilderToken) private readonly builder: Builder, + private readonly prisma: PrismaService, + ) { + super(); + } + + @PothosRef() + serviceAndCategory() { + return this.builder.prismaObject('ServiceAndCategory', { + fields: (t) => ({ + serviceId: t.exposeID('serviceId'), + categoryId: t.exposeID('categoryId'), + service: t.relation('service'), + category: t.relation('category'), + }), + }); + } +} diff --git a/src/ServiceFeedback/servicefeedback.module.ts b/src/ServiceFeedback/servicefeedback.module.ts new file mode 100644 index 0000000..9769f87 --- /dev/null +++ b/src/ServiceFeedback/servicefeedback.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common'; +import { ServiceFeedbackSchema } from './servicefeedback.schema'; + +@Global() +@Module({ + providers: [ServiceFeedbackSchema], + exports: [ServiceFeedbackSchema], +}) +export class ServiceFeedbackModule {} diff --git a/src/ServiceFeedback/servicefeedback.schema.ts b/src/ServiceFeedback/servicefeedback.schema.ts new file mode 100644 index 0000000..fbbee52 --- /dev/null +++ b/src/ServiceFeedback/servicefeedback.schema.ts @@ -0,0 +1,55 @@ +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 ServiceFeedbackSchema extends PothosSchema { + constructor( + @Inject(SchemaBuilderToken) private readonly builder: Builder, + private readonly prisma: PrismaService, + ) { + super(); + } + + @PothosRef() + serviceFeedback() { + return this.builder.prismaObject('ServiceFeedback', { + fields: (t) => ({ + id: t.exposeID('id'), + userId: t.exposeID('userId'), + serviceId: t.exposeID('serviceId'), + rating: t.exposeFloat('rating'), + comments: t.exposeString('comments'), + createdAt: t.expose('createdAt', { type: 'DateTime' }), + updatedAt: t.expose('updatedAt', { type: 'DateTime' }), + user: t.relation('user'), + service: t.relation('service'), + }), + }); + } + + @Pothos() + init(): void { + this.builder.queryFields((t) => ({ + serviceFeedbacks: t.prismaField({ + type: [this.serviceFeedback()], + args: this.builder.generator.findManyArgs('ServiceFeedback'), + resolve: async (query, root, args, ctx, info) => { + return await this.prisma.serviceFeedback.findMany({ + ...query, + skip: args.skip ?? 0, + take: args.take ?? 10, + orderBy: args.orderBy ?? undefined, + where: args.filter ?? undefined, + }); + }, + }), + })); + } +} diff --git a/src/app.module.ts b/src/app.module.ts index 100be33..07e21ab 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,7 +1,7 @@ import { Module } from '@nestjs/common'; -import { GraphqlModule } from './graphql/graphql.module'; -import { ClerkModule } from './clerk/clerk.module'; -import { RestfulModule } from './restful/restful.module'; +import { GraphqlModule } from './Graphql/graphql.module'; +import { ClerkModule } from './Clerk/clerk.module'; +import { RestfulModule } from './Restful/restful.module'; @Module({ imports: [GraphqlModule, ClerkModule, RestfulModule], diff --git a/src/center/center.schema.ts b/src/center/center.schema.ts index 55f8098..c5cd8b7 100644 --- a/src/center/center.schema.ts +++ b/src/center/center.schema.ts @@ -5,8 +5,8 @@ import { PothosSchema, SchemaBuilderToken, } from '@smatch-corp/nestjs-pothos'; -import { Builder } from '../graphql/graphql.builder'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { Builder } from '../Graphql/graphql.builder'; +import { PrismaService } from 'src/Prisma/prisma.service'; @Injectable() export class CenterSchema extends PothosSchema { diff --git a/src/centerstaff/centerstaff.module.ts b/src/centerstaff/centerstaff.module.ts index 70d72ea..b7a954f 100644 --- a/src/centerstaff/centerstaff.module.ts +++ b/src/centerstaff/centerstaff.module.ts @@ -1,5 +1,5 @@ import { Global, Module } from '@nestjs/common'; -import { CenterStaffSchema } from './centerstaff.schema'; +import { CenterStaffSchema } from './centerstaff.schema'; @Global() @Module({ diff --git a/src/centerstaff/centerstaff.schema.ts b/src/centerstaff/centerstaff.schema.ts index dcc0ddc..92a4376 100644 --- a/src/centerstaff/centerstaff.schema.ts +++ b/src/centerstaff/centerstaff.schema.ts @@ -5,8 +5,8 @@ import { PothosSchema, SchemaBuilderToken, } from '@smatch-corp/nestjs-pothos'; -import { Builder } from '../graphql/graphql.builder'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { Builder } from '../Graphql/graphql.builder'; +import { PrismaService } from 'src/Prisma/prisma.service'; @Injectable() export class CenterStaffSchema extends PothosSchema { diff --git a/src/chatroom/chatroom.schema.ts b/src/chatroom/chatroom.schema.ts index 555b198..f24601e 100644 --- a/src/chatroom/chatroom.schema.ts +++ b/src/chatroom/chatroom.schema.ts @@ -5,8 +5,8 @@ import { PothosSchema, SchemaBuilderToken, } from '@smatch-corp/nestjs-pothos'; -import { Builder } from '../graphql/graphql.builder'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { Builder } from '../Graphql/graphql.builder'; +import { PrismaService } from 'src/Prisma/prisma.service'; @Injectable() export class ChatroomSchema extends PothosSchema { diff --git a/src/common/utils/cors.utils.ts b/src/common/utils/cors.utils.ts index 23b9bfd..1343c50 100644 --- a/src/common/utils/cors.utils.ts +++ b/src/common/utils/cors.utils.ts @@ -1,4 +1,6 @@ -export const cors = { +import { CorsOptions } from '@nestjs/common/interfaces/external/cors-options.interface'; + +export const cors: CorsOptions = { origin: process.env.CORS_ORIGIN, methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], allowedHeaders: ['Content-Type', 'Authorization'], diff --git a/src/graphql/graphql.module.ts b/src/graphql/graphql.module.ts index e247e5f..3e9a8f5 100644 --- a/src/graphql/graphql.module.ts +++ b/src/graphql/graphql.module.ts @@ -4,20 +4,25 @@ import { GraphQLModule } from '@nestjs/graphql'; import { PothosModule } from '@smatch-corp/nestjs-pothos'; import { PothosApolloDriver } from '@smatch-corp/nestjs-pothos-apollo-driver'; import { Builder } from './graphql.builder'; -import { PrismaService } from '../prisma/prisma.service'; -import { GraphQLValidationMiddleware } from 'src/middlewares/graphql.middleware'; -import { PrismaModule } from 'src/prisma/prisma.module'; -import { UserModule } from 'src/user/user.module'; -import { CenterModule } from 'src/center/center.module'; -import { ServiceModule } from 'src/service/service.module'; -import { ChatroomModule } from 'src/chatroom/chatroom.module'; -import { CenterStaffModule } from 'src/centerstaff/centerstaff.module'; -import { ResumeModule } from 'src/resume/resume.module'; -import { WorkshopModule } from 'src/workshop/workshop.module'; -import { WorkshopOrganizationModule } from 'src/workshoporganization/workshoporganization.module'; -import { WorkshopSubscriptionModule } from 'src/workshopsubscription/workshopsubscription.module'; +import { PrismaService } from '../Prisma/prisma.service'; +import { GraphQLValidationMiddleware } from '../middlewares/graphql.middleware'; +import { PrismaModule } from '../Prisma/prisma.module'; +import { UserModule } from '../User/user.module'; +import { CenterModule } from '../Center/center.module'; +import { ServiceModule } from '../Service/service.module'; +import { ChatroomModule } from '../ChatRoom/chatroom.module'; +import { CenterStaffModule } from '../CenterStaff/centerstaff.module'; +import { ResumeModule } from '../Resume/resume.module'; +import { WorkshopModule } from '../Workshop/workshop.module'; +import { WorkshopOrganizationModule } from '../WorkshopOrganization/workshoporganization.module'; +import { WorkshopSubscriptionModule } from '../WorkshopSubscription/workshopsubscription.module'; import { PrismaCrudGenerator } from './graphql.generator'; - +import { OrderModule } from '../Order/order.module'; +import { PaymentModule } from '../Payment/payment.module'; +import { RefundTicketModule } from '../RefundTicket/refundticket.module'; +import { ServiceAndCategoryModule } from '../ServiceAndCategory/serviceandcategory.module'; +import { CategoryModule } from '../Category/category.module'; +import { ServiceFeedbackModule } from '../ServiceFeedback/servicefeedback.module'; @Global() @Module({ imports: [ @@ -31,6 +36,12 @@ import { PrismaCrudGenerator } from './graphql.generator'; WorkshopModule, WorkshopOrganizationModule, WorkshopSubscriptionModule, + PaymentModule, + OrderModule, + RefundTicketModule, + ServiceAndCategoryModule, + CategoryModule, + ServiceFeedbackModule, PothosModule.forRoot({ builder: { inject: [PrismaService], diff --git a/src/main.ts b/src/main.ts index 2992e70..62fbe8b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,12 +10,12 @@ async function bootstrap() { const config = new DocumentBuilder() .setTitle('EPESS API') .setDescription('API documentation for EPESS application') - .setVersion('1.0') + .setVersion('0.0.1') .addBearerAuth() .build(); const document = SwaggerModule.createDocument(app, config); - SwaggerModule.setup('api', app, document); + SwaggerModule.setup(process.env.SWAGGER_PATH ?? 'v1', app, document); document.paths['/graphql'] = { get: { diff --git a/src/middlewares/prisma-context.middleware.ts b/src/middlewares/prisma-context.middleware.ts index 7e6f031..f52c5cc 100644 --- a/src/middlewares/prisma-context.middleware.ts +++ b/src/middlewares/prisma-context.middleware.ts @@ -1,5 +1,5 @@ import { Injectable, NestMiddleware } from '@nestjs/common'; -import { PrismaService } from '../prisma/prisma.service'; +import { PrismaService } from '../Prisma/prisma.service'; @Injectable() export class PrismaContextMiddleware implements NestMiddleware { diff --git a/src/resume/resume.schema.ts b/src/resume/resume.schema.ts index db85119..1ad2e6a 100644 --- a/src/resume/resume.schema.ts +++ b/src/resume/resume.schema.ts @@ -5,8 +5,8 @@ import { PothosSchema, SchemaBuilderToken, } from '@smatch-corp/nestjs-pothos'; -import { Builder } from '../graphql/graphql.builder'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { Builder } from '../Graphql/graphql.builder'; +import { PrismaService } from 'src/Prisma/prisma.service'; @Injectable() export class ResumeSchema extends PothosSchema { diff --git a/src/service/service.module.ts b/src/service/service.module.ts index 0f6da83..992752a 100644 --- a/src/service/service.module.ts +++ b/src/service/service.module.ts @@ -1,10 +1,9 @@ import { Global, Module } from '@nestjs/common'; import { ServiceSchema } from './service.schema'; -import { PrismaCrudGenerator } from 'src/graphql/graphql.generator'; @Global() @Module({ - providers: [ServiceSchema, PrismaCrudGenerator], + providers: [ServiceSchema], exports: [ServiceSchema], }) export class ServiceModule {} diff --git a/src/service/service.schema.ts b/src/service/service.schema.ts index f53c8a5..d79d532 100644 --- a/src/service/service.schema.ts +++ b/src/service/service.schema.ts @@ -5,8 +5,8 @@ import { PothosSchema, SchemaBuilderToken, } from '@smatch-corp/nestjs-pothos'; -import { Builder } from '../graphql/graphql.builder'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { Builder } from '../Graphql/graphql.builder'; +import { PrismaService } from 'src/Prisma/prisma.service'; @Injectable() export class ServiceSchema extends PothosSchema { @@ -49,8 +49,8 @@ export class ServiceSchema extends PothosSchema { ...query, where: args.filter ?? undefined, orderBy: args.orderBy ?? undefined, - skip: args.skip ?? undefined, - take: args.take ?? undefined, + skip: args.skip ?? 0, + take: args.take ?? 10, }); }, }), diff --git a/src/user/user.module.ts b/src/user/user.module.ts index 0a01dc5..3bce2ca 100644 --- a/src/user/user.module.ts +++ b/src/user/user.module.ts @@ -1,9 +1,8 @@ import { Global, Module } from '@nestjs/common'; import { UserSchema } from './user.schema'; -import { PrismaService } from 'src/prisma/prisma.service'; @Global() @Module({ - providers: [PrismaService, UserSchema], + providers: [UserSchema], exports: [UserSchema], }) export class UserModule {} diff --git a/src/user/user.schema.ts b/src/user/user.schema.ts index 22c0cae..14f66d2 100644 --- a/src/user/user.schema.ts +++ b/src/user/user.schema.ts @@ -5,8 +5,9 @@ import { PothosSchema, SchemaBuilderToken, } from '@smatch-corp/nestjs-pothos'; -import { Builder } from '../graphql/graphql.builder'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { Builder } from '../Graphql/graphql.builder'; +import { PrismaService } from 'src/Prisma/prisma.service'; +import { clerkClient, } from '@clerk/clerk-sdk-node'; @Injectable() export class UserSchema extends PothosSchema { @@ -27,7 +28,7 @@ export class UserSchema extends PothosSchema { email: t.exposeString('email'), phoneNumber: t.exposeString('phoneNumber'), oauthToken: t.exposeString('oauthToken', { nullable: true }), - // role: t.exposeString('role'), + role: t.exposeString('role'), createdAt: t.expose('createdAt', { type: 'DateTime' }), updatedAt: t.expose('updatedAt', { type: 'DateTime' }), center: t.relation('center'), @@ -55,19 +56,28 @@ export class UserSchema extends PothosSchema { user: t.prismaField({ type: this.user(), - args: { - id: t.arg.id({ - description: 'The ID of the user to retrieve', - }), - }, + args: this.builder.generator.findUniqueArgs('User'), resolve: async (query, root, args, ctx, info) => { - const { id } = args; - if (!id) { - throw new Error('User ID is required'); - } - return await this.prisma.user.findUnique({ where: { id } }); + return await this.prisma.user.findUnique({ + ...query, + where: args.where, + }); }, }), + // userByToken: t.prismaField({ + // type: this.user(), + // args: this.builder.args({ + // oauthToken: t.arg.string({ required: true }), + // }), + // resolve: async (query, root, args, ctx, info) => { + // // check if the token is valid + // const { user } = await clerkClient.verifyToken + // return await this.prisma.user.findFirst({ + // ...query, + // where: args.where, + // }); + // }, + // }), })); // Mutation section diff --git a/src/workshop/workshop.schema.ts b/src/workshop/workshop.schema.ts index a1ce9d9..e33394c 100644 --- a/src/workshop/workshop.schema.ts +++ b/src/workshop/workshop.schema.ts @@ -5,8 +5,8 @@ import { PothosSchema, SchemaBuilderToken, } from '@smatch-corp/nestjs-pothos'; -import { Builder } from '../graphql/graphql.builder'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { Builder } from '../Graphql/graphql.builder'; +import { PrismaService } from 'src/Prisma/prisma.service'; @Injectable() export class WorkshopSchema extends PothosSchema { diff --git a/src/workshoporganization/workshoporganization.schema.ts b/src/workshoporganization/workshoporganization.schema.ts index c251f3f..ed8ec02 100644 --- a/src/workshoporganization/workshoporganization.schema.ts +++ b/src/workshoporganization/workshoporganization.schema.ts @@ -5,8 +5,8 @@ import { PothosSchema, SchemaBuilderToken, } from '@smatch-corp/nestjs-pothos'; -import { Builder } from '../graphql/graphql.builder'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { Builder } from '../Graphql/graphql.builder'; +import { PrismaService } from 'src/Prisma/prisma.service'; @Injectable() export class WorkshopOrganizationSchema extends PothosSchema { diff --git a/src/workshopsubscription/workshopsubscription.schema.ts b/src/workshopsubscription/workshopsubscription.schema.ts index 2f14065..32d13f6 100644 --- a/src/workshopsubscription/workshopsubscription.schema.ts +++ b/src/workshopsubscription/workshopsubscription.schema.ts @@ -5,8 +5,8 @@ import { PothosSchema, SchemaBuilderToken, } from '@smatch-corp/nestjs-pothos'; -import { Builder } from '../graphql/graphql.builder'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { Builder } from '../Graphql/graphql.builder'; +import { PrismaService } from '../Prisma/prisma.service'; @Injectable() export class WorkshopSubscriptionSchema extends PothosSchema {