File

src/request-order/order-request.controller.ts

Prefix

api/v1/order-request

Index

Methods

Methods

Async getAllRequestOrders
getAllRequestOrders(filterRequestOrderDto: FilterRequestOrderDto)
Decorators :
@UseGuards(new RolesAuthGuard())
@Get('/')
Parameters :
Name Type Optional
filterRequestOrderDto FilterRequestOrderDto No
Returns : unknown
Async getOrderRequestById
getOrderRequestById(request: AuthRequest, orderId: string)
Decorators :
@UseGuards(new RolesAuthGuard())
@Get('/:orderId')
Parameters :
Name Type Optional
request AuthRequest No
orderId string No
Returns : unknown
Async updateStatus
updateStatus(request: AuthRequest, orderId: string, requestOrderDto: UpdateRequestOrderDto)
Decorators :
@UseGuards(new RolesAuthGuard())
@Put('/:orderId')
Parameters :
Name Type Optional
request AuthRequest No
orderId string No
requestOrderDto UpdateRequestOrderDto No
Returns : unknown
import {
  BadRequestException,
  Body,
  Controller,
  Get,
  Inject,
  InternalServerErrorException,
  NotFoundException,
  Param,
  Put,
  Query,
  Req,
  UnauthorizedException,
  UseGuards,
} from "@nestjs/common";
import { RolesAuthGuard } from "src/auth/guards/roles-auth.guard";
import { OrderRequestService } from "./order-request.service";
import { FilterRequestOrderDto } from "./dtos/filter-orderRequest.dto";
import { UpdateRequestOrderDto } from "./dtos/update-orderRequest.dto";
import { UserService } from "src/user/user.service";
import { AuthRequest, EndUserRoles } from "src/common/interfaces";

@Controller("api/v1/order-request")
export class OrderRequestController {
  @Inject(UserService)
  private readonly userService: UserService;
  constructor(private readonly orderRequestService: OrderRequestService) {}

  @UseGuards(new RolesAuthGuard(["fundAdmin", "admin", "dealer", "investor"]))
  @Get("/:orderId")
  async getOrderRequestById(
    @Req() request: AuthRequest,
    @Param("orderId") orderId: string,
  ) {
    try {
      let orderRequest;
      if (request.user.role === EndUserRoles.dealer) {
        orderRequest = await this.orderRequestService.findRequestOrderbyOrderId(
          orderId,
          request.user.email,
        );
      } else {
        orderRequest = await this.orderRequestService.findRequestOrderbyOrderId(
          orderId,
        );
      }
      if (!orderRequest) {
        throw new NotFoundException("Order request not found");
      }
      await this.userService.checkIfUserIsAllowedToFund(
        request.user,
        orderRequest.fundId,
      );

      return orderRequest;
    } catch (error) {
      console.error(error);
      if (error.status === 401) {
        throw new UnauthorizedException(error);
      }
      if (error.status === 404) {
        throw new NotFoundException(error);
      }
      throw new InternalServerErrorException(error);
    }
  }

  @UseGuards(new RolesAuthGuard(["fundAdmin", "admin"]))
  @Put("/:orderId")
  async updateStatus(
    @Req() request: AuthRequest,
    @Param("orderId") orderId: string,
    @Body() requestOrderDto: UpdateRequestOrderDto,
  ) {
    try {
      const orderRequest =
        await this.orderRequestService.findRequestOrderbyOrderId(orderId);
      await this.userService.checkIfUserIsAllowedToFund(
        request.user,
        orderRequest.fundId,
      );
      return await this.orderRequestService.update(
        orderRequest._id.toString(),
        {
          ...requestOrderDto,
          orderId,
        },
      );
    } catch (error) {
      console.error(error);
      if (error.status === 400) {
        throw new BadRequestException(error);
      }
      if (error.status === 401) {
        throw new UnauthorizedException(error);
      }
      throw new InternalServerErrorException(error);
    }
  }

  @UseGuards(new RolesAuthGuard(["admin"]))
  @Get("/")
  async getAllRequestOrders(
    @Query() filterRequestOrderDto: FilterRequestOrderDto,
  ) {
    try {
      return await this.orderRequestService.getRequestedOrders(
        filterRequestOrderDto,
      );
    } catch (error) {
      console.error(error);
      throw new InternalServerErrorException(error);
    }
  }
}

results matching ""

    No results matching ""