chore: complete sharedRequest query

This commit is contained in:
Balu Babu
2023-10-25 21:06:42 +05:30
parent f149582a62
commit 7876c42312
4 changed files with 95 additions and 6 deletions

View File

@@ -1,8 +1,12 @@
import { Module } from '@nestjs/common';
import { SharedRequestService } from './shared-request.service';
import { SharedRequestResolver } from './shared-request.resolver';
import { PubSubModule } from 'src/pubsub/pubsub.module';
import { UserModule } from 'src/user/user.module';
import { PrismaModule } from 'src/prisma/prisma.module';
@Module({
providers: [SharedRequestService, SharedRequestResolver]
imports: [PrismaModule, UserModule, PubSubModule],
providers: [SharedRequestService, SharedRequestResolver],
})
export class SharedRequestModule {}

View File

@@ -1,4 +1,39 @@
import { Resolver } from '@nestjs/graphql';
import { Args, ID, Resolver, Query } from '@nestjs/graphql';
import { SharedRequest } from './shared-requests.model';
import { GqlThrottlerGuard } from 'src/guards/gql-throttler.guard';
import { UseGuards } from '@nestjs/common';
import { SharedRequestService } from './shared-request.service';
import { UserService } from 'src/user/user.service';
import { PubSubService } from 'src/pubsub/pubsub.service';
import * as E from 'fp-ts/Either';
import { GqlAuthGuard } from 'src/guards/gql-auth.guard';
import { throwErr } from 'src/utils';
@Resolver()
export class SharedRequestResolver {}
@UseGuards(GqlThrottlerGuard)
@Resolver(() => SharedRequest)
export class SharedRequestResolver {
constructor(
private readonly sharedRequestService: SharedRequestService,
private readonly userService: UserService,
private readonly pubsub: PubSubService,
) {}
/* Queries */
@Query(() => SharedRequest, {
description: 'Resolves and returns a shared-request data',
})
@UseGuards(GqlAuthGuard)
async sharedRequest(
@Args({
name: 'code',
type: () => ID,
description: 'The shared-request to fetch',
})
code: string,
) {
const result = await this.sharedRequestService.getSharedRequest(code);
if (E.isLeft(result)) throwErr(result.left);
return result.right;
}
}

View File

@@ -1,4 +1,48 @@
import { Injectable } from '@nestjs/common';
import { PrismaService } from 'src/prisma/prisma.service';
import { PubSubService } from 'src/pubsub/pubsub.service';
import { Shortcode as DBSharedRequest } from '@prisma/client';
import { UserService } from 'src/user/user.service';
import * as E from 'fp-ts/Either';
import { SharedRequest } from './shared-requests.model';
import { SHARED_REQUEST_NOT_FOUND } from 'src/errors';
@Injectable()
export class SharedRequestService {}
export class SharedRequestService {
constructor(
private readonly prisma: PrismaService,
private readonly pubsub: PubSubService,
private readonly userService: UserService,
) {}
/**
* Converts a Prisma SharedRequest type into the SharedRequest model
*
* @param sharedRequestInfo Prisma SharedRequest type
* @returns GQL SharedRequest
*/
private cast(sharedRequestInfo: DBSharedRequest): SharedRequest {
return <SharedRequest>{
id: sharedRequestInfo.id,
request: JSON.stringify(sharedRequestInfo.request),
properties: JSON.stringify(sharedRequestInfo.properties),
createdOn: sharedRequestInfo.createdOn,
};
}
/**
* Fetch details regarding a SharedRequest
*
* @param sharedRequestID SharedRequest
* @returns Either of SharedRequest details or error
*/
async getSharedRequest(sharedRequestID: string) {
try {
const sharedRequest = await this.prisma.shortcode.findFirstOrThrow({
where: { id: sharedRequestID },
});
return E.right(this.cast(sharedRequest));
} catch (error) {
return E.left(SHARED_REQUEST_NOT_FOUND);
}
}
}