chore: complete sharedRequest query
This commit is contained in:
@@ -621,3 +621,9 @@ export const MAILER_SMTP_URL_UNDEFINED = 'mailer/smtp_url_undefined' as const;
|
|||||||
*/
|
*/
|
||||||
export const MAILER_FROM_ADDRESS_UNDEFINED =
|
export const MAILER_FROM_ADDRESS_UNDEFINED =
|
||||||
'mailer/from_address_undefined' as const;
|
'mailer/from_address_undefined' as const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SharedRequest not found in DB
|
||||||
|
* (SharedRequestService)
|
||||||
|
*/
|
||||||
|
export const SHARED_REQUEST_NOT_FOUND = 'shared_request/not_found' as const;
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
import { Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
import { SharedRequestService } from './shared-request.service';
|
import { SharedRequestService } from './shared-request.service';
|
||||||
import { SharedRequestResolver } from './shared-request.resolver';
|
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({
|
@Module({
|
||||||
providers: [SharedRequestService, SharedRequestResolver]
|
imports: [PrismaModule, UserModule, PubSubModule],
|
||||||
|
providers: [SharedRequestService, SharedRequestResolver],
|
||||||
})
|
})
|
||||||
export class SharedRequestModule {}
|
export class SharedRequestModule {}
|
||||||
|
|||||||
@@ -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()
|
@UseGuards(GqlThrottlerGuard)
|
||||||
export class SharedRequestResolver {}
|
@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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,48 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
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()
|
@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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user