File

src/docusign/docusign.controller.ts

Prefix

api/v1/docusign

Index

Methods

Methods

Async fetchCustomField
fetchCustomField(request: AuthRequest, orderId: string)
Decorators :
@UseInterceptors(CustomCacheInterceptor)
@UseGuards(undefined)
@Get('/custom-fields/:orderId')
Parameters :
Name Type Optional
request AuthRequest No
orderId string No
Returns : unknown
Async fetchDocument
fetchDocument(request: AuthRequest, orderId: string)
Decorators :
@UseInterceptors(CustomCacheInterceptor)
@UseGuards(undefined)
@Get('/document/:orderId')
Parameters :
Name Type Optional
request AuthRequest No
orderId string No
Returns : unknown
Async fetchEnvelop
fetchEnvelop(request: AuthRequest, orderId: string)
Decorators :
@UseInterceptors(CustomCacheInterceptor)
@UseGuards(undefined)
@Get('/envelop/:orderId')
Parameters :
Name Type Optional
request AuthRequest No
orderId string No
Returns : unknown
Async getDealerSubmittedDocuments
getDealerSubmittedDocuments(request: AuthRequest, filterContractStatusDto: FilterContractStatusDto)
Decorators :
@UseInterceptors(CustomCacheInterceptor)
@UseGuards(new RolesAuthGuard())
@Get('/')
Parameters :
Name Type Optional
request AuthRequest No
filterContractStatusDto FilterContractStatusDto No
Returns : unknown
Async getDocuments
getDocuments(req: AuthRequest, filterContractStatusDto: FilterContractStatusDto)
Decorators :
@UseInterceptors(CustomCacheInterceptor)
@UseGuards(new RolesAuthGuard())
@Get('fund/')
Parameters :
Name Type Optional
req AuthRequest No
filterContractStatusDto FilterContractStatusDto No
Returns : unknown
Async sendContract
sendContract(request: AuthRequest, sendContractDto: SendContractDto)
Decorators :
@UseGuards(new RolesAuthGuard())
@Post('/')
Parameters :
Name Type Optional
request AuthRequest No
sendContractDto SendContractDto No
Returns : unknown
import {
  Body,
  Controller,
  Post,
  UseGuards,
  Request,
  Get,
  Param,
  Query,
  ServiceUnavailableException,
  Inject,
  UnauthorizedException,
  BadRequestException,
  UseInterceptors,
} from "@nestjs/common";
import { DocuSignService } from "./docusign.service";
import { RolesAuthGuard } from "src/auth/guards/roles-auth.guard";
import { SendContractDto } from "./dtos/send-contract.dto";
import { AuthRequest, EndUserRoles } from "src/common/interfaces";
import { FilterContractStatusDto } from "./dtos/filter-status.dto";
import { UserService } from "src/user/user.service";
import { CustomCacheInterceptor } from "src/interceptor/cache.interceptor";
import { AuthGuard } from "@nestjs/passport";

@Controller("api/v1/docusign")
export class DocuSignController {
  @Inject(UserService)
  private readonly userService: UserService;
  constructor(private readonly docuSignService: DocuSignService) {}

  @UseGuards(new RolesAuthGuard(["dealer", "investor"]))
  @Post("/")
  async sendContract(
    @Request() request: AuthRequest,
    @Body() sendContractDto: SendContractDto,
  ) {
    try {
      await this.userService.checkIfUserIsAllowedToFund(
        request.user,
        sendContractDto.fundId,
      );
      return await this.docuSignService.createAnEnvelope({
        ...sendContractDto,
        dealerEmail: request.user.email,
      });
    } catch (error) {
      console.error(error);
      if (error.status === 401) {
        throw new UnauthorizedException(error);
      }
      if (error.status === 400) {
        throw new BadRequestException(error);
      }
      throw new ServiceUnavailableException(error);
    }
  }

  @UseInterceptors(CustomCacheInterceptor)
  @UseGuards(new RolesAuthGuard(["dealer"]))
  @Get("/")
  async getDealerSubmittedDocuments(
    @Request() request: AuthRequest,
    @Query() filterContractStatusDto: FilterContractStatusDto,
  ) {
    try {
      return await this.docuSignService.getDealerSubmittedDocuments({
        customFieldName: "dealerEmail",
        customFieldValue: request.user.email,
        status: filterContractStatusDto.status,
        docuSignStatus: filterContractStatusDto.docuSignStatus,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseInterceptors(CustomCacheInterceptor)
  @UseGuards(AuthGuard("jwt"))
  @Get("/custom-fields/:orderId")
  async fetchCustomField(
    @Request() request: AuthRequest,
    @Param("orderId") orderId: string,
  ) {
    try {
      if (request.user.role === "admin") {
        return this.docuSignService.fetchCustomFields(orderId);
      }
      const customFields = await this.docuSignService.fetchCustomFields(
        orderId,
      );
      const dealerEmailField = customFields.textCustomFields.find(
        (textField) => {
          return textField.name === "dealerEmail";
        },
      );
      if (
        dealerEmailField.value !== request.user.email &&
        request.user.role === EndUserRoles.dealer
      ) {
        throw new UnauthorizedException(
          "The dealer is not assigned to this order",
        );
      }
      await this.userService.checkIfUserIsAllowedToFund(
        request.user,
        customFields.textCustomFields.find((customField) => {
          if (customField.name === "fundId") {
            return customField;
          }
        }).value,
      );
      return customFields;
    } catch (error) {
      console.error(error);
      if (error.status === 401) {
        throw new UnauthorizedException(error);
      }
      throw new ServiceUnavailableException(error);
    }
  }

  @UseInterceptors(CustomCacheInterceptor)
  @UseGuards(AuthGuard("jwt"))
  @Get("/envelop/:orderId")
  async fetchEnvelop(
    @Request() request: AuthRequest,
    @Param("orderId") orderId: string,
  ) {
    try {
      return await this.docuSignService.fetchEnvelop(orderId, request.user);
    } catch (error) {
      console.error(error);
      if (error.status === 401) {
        throw new UnauthorizedException(error);
      }
      throw new ServiceUnavailableException(error);
    }
  }

  @UseInterceptors(CustomCacheInterceptor)
  @UseGuards(AuthGuard("jwt"))
  @Get("/document/:orderId")
  async fetchDocument(
    @Request() request: AuthRequest,
    @Param("orderId") orderId: string,
  ) {
    try {
      return await this.docuSignService.fetchDocument(orderId, request.user);
    } catch (error) {
      console.error(error);
      if (error.status === 400) {
        throw new BadRequestException(error);
      }
      if (error.status === 401) {
        throw new UnauthorizedException(error);
      }
      throw new ServiceUnavailableException(error);
    }
  }

  @UseInterceptors(CustomCacheInterceptor)
  @UseGuards(new RolesAuthGuard(["fundAdmin", "admin"]))
  @Get("fund/")
  async getDocuments(
    @Request() req: AuthRequest,
    @Query() filterContractStatusDto: FilterContractStatusDto,
  ) {
    try {
      return await this.docuSignService.getContracts(
        req.user,
        filterContractStatusDto,
      );
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }
}

results matching ""

    No results matching ""