feat: introduction of shared-requests (#3476)
* feat: added new property to existing shortcode model in prisma schema
* chore: created shared-requests module
* chore: created shared-request model
* chore: complete sharedRequest query
* chore: completed mutation to create a SharedRequest
* chore: completed subscription to create a SharedRequest
* chore: completed query to fetch all user created shared-requests
* chore: completed mutation to delete a SharedRequest
* chore: completed subscription to delete a SharedRequest
* chore: removed unused dependncues in share-requests module
* chore: added shared-requests into user deletion spec
* test: added all testcases for shared-request module
* test: modified all relevant tests in shortcode module
* chore: added deprecated label to all queries,mutations and subscriptions in the shortcode module
* chore: resolved all comments raised in review
* feat: added ability to update and listen to updates of shared-requests
* chore: added updatedOn field to shortcode model
* chore: fixed issue with updateSharedRequest method
* chore: fixed incorrect value getting updated
* chore: added all test-cases for updateSharedRequest method
* chore: created migration for shared-requests
* chore: moved shared-requests into shortcode module
* chore: added missing import in shortcode tests
* chore: changed properties to embedProperties in shortcode model
* feat: generated migrations file for new schema changes to Shortcodes table
* chore: changed target of old-backend service in docker-compose file
* chore: fixed issue with updatedOn field in shortcodes model
* chore: removed unused dependencies
* fix: handle invalid input for shortcode properties
* Revert "fix: handle invalid input for shortcode properties"
This reverts commit 4dcb0afb18.
* chore: changed updateShortcode method name to updateEmbedProperties
* chore: changed target of hoppscotch-old-backend service to prod
---------
Co-authored-by: Mir Arif Hasan <arif.ishan05@gmail.com>
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import {
|
||||
Args,
|
||||
Context,
|
||||
ID,
|
||||
Mutation,
|
||||
Query,
|
||||
@@ -11,14 +10,12 @@ import * as E from 'fp-ts/Either';
|
||||
import { UseGuards } from '@nestjs/common';
|
||||
import { Shortcode } from './shortcode.model';
|
||||
import { ShortcodeService } from './shortcode.service';
|
||||
import { UserService } from 'src/user/user.service';
|
||||
import { throwErr } from 'src/utils';
|
||||
import { GqlUser } from 'src/decorators/gql-user.decorator';
|
||||
import { GqlAuthGuard } from 'src/guards/gql-auth.guard';
|
||||
import { User } from 'src/user/user.model';
|
||||
import { PubSubService } from 'src/pubsub/pubsub.service';
|
||||
import { AuthUser } from '../types/AuthUser';
|
||||
import { JwtService } from '@nestjs/jwt';
|
||||
import { PaginationArgs } from 'src/types/input-types.args';
|
||||
import { GqlThrottlerGuard } from 'src/guards/gql-throttler.guard';
|
||||
import { SkipThrottle } from '@nestjs/throttler';
|
||||
@@ -28,9 +25,7 @@ import { SkipThrottle } from '@nestjs/throttler';
|
||||
export class ShortcodeResolver {
|
||||
constructor(
|
||||
private readonly shortcodeService: ShortcodeService,
|
||||
private readonly userService: UserService,
|
||||
private readonly pubsub: PubSubService,
|
||||
private jwtService: JwtService,
|
||||
) {}
|
||||
|
||||
/* Queries */
|
||||
@@ -64,20 +59,53 @@ export class ShortcodeResolver {
|
||||
@Mutation(() => Shortcode, {
|
||||
description: 'Create a shortcode for the given request.',
|
||||
})
|
||||
@UseGuards(GqlAuthGuard)
|
||||
async createShortcode(
|
||||
@GqlUser() user: AuthUser,
|
||||
@Args({
|
||||
name: 'request',
|
||||
description: 'JSON string of the request object',
|
||||
})
|
||||
request: string,
|
||||
@Context() ctx: any,
|
||||
@Args({
|
||||
name: 'properties',
|
||||
description: 'JSON string of the properties of the embed',
|
||||
nullable: true,
|
||||
})
|
||||
properties: string,
|
||||
) {
|
||||
const decodedAccessToken = this.jwtService.verify(
|
||||
ctx.req.cookies['access_token'],
|
||||
);
|
||||
const result = await this.shortcodeService.createShortcode(
|
||||
request,
|
||||
decodedAccessToken?.sub,
|
||||
properties,
|
||||
user,
|
||||
);
|
||||
|
||||
if (E.isLeft(result)) throwErr(result.left);
|
||||
return result.right;
|
||||
}
|
||||
|
||||
@Mutation(() => Shortcode, {
|
||||
description: 'Update a user generated Shortcode',
|
||||
})
|
||||
@UseGuards(GqlAuthGuard)
|
||||
async updateEmbedProperties(
|
||||
@GqlUser() user: AuthUser,
|
||||
@Args({
|
||||
name: 'code',
|
||||
type: () => ID,
|
||||
description: 'The Shortcode to update',
|
||||
})
|
||||
code: string,
|
||||
@Args({
|
||||
name: 'properties',
|
||||
description: 'JSON string of the properties of the embed',
|
||||
})
|
||||
properties: string,
|
||||
) {
|
||||
const result = await this.shortcodeService.updateEmbedProperties(
|
||||
code,
|
||||
user.uid,
|
||||
properties,
|
||||
);
|
||||
|
||||
if (E.isLeft(result)) throwErr(result.left);
|
||||
@@ -114,6 +142,16 @@ export class ShortcodeResolver {
|
||||
return this.pubsub.asyncIterator(`shortcode/${user.uid}/created`);
|
||||
}
|
||||
|
||||
@Subscription(() => Shortcode, {
|
||||
description: 'Listen for Shortcode updates',
|
||||
resolve: (value) => value,
|
||||
})
|
||||
@SkipThrottle()
|
||||
@UseGuards(GqlAuthGuard)
|
||||
myShortcodesUpdated(@GqlUser() user: AuthUser) {
|
||||
return this.pubsub.asyncIterator(`shortcode/${user.uid}/updated`);
|
||||
}
|
||||
|
||||
@Subscription(() => Shortcode, {
|
||||
description: 'Listen for shortcode deletion',
|
||||
resolve: (value) => value,
|
||||
|
||||
Reference in New Issue
Block a user