File

src/request/request.controller.ts

Prefix

api/v1/request

Index

Methods

Methods

create
create(request: AuthRequest, createRequestDto: CreateRequestDto)
Decorators :
@UseGuards(undefined)
@Post('/')
Parameters :
Name Type Optional
request AuthRequest No
createRequestDto CreateRequestDto No
Returns : any
findAll
findAll(request: AuthRequest, filterFundDTO: FilterRequestDto)
Decorators :
@UseGuards(undefined)
@Get('/')
Parameters :
Name Type Optional
request AuthRequest No
filterFundDTO FilterRequestDto No
Returns : any
Async findOne
findOne(undefined: AuthRequest, id: string)
Decorators :
@UseGuards(undefined)
@Get('/:id')
Parameters :
Name Type Optional
AuthRequest No
id string No
Returns : unknown
update
update(id: string, updateRequestDto: UpdateRequestDto)
Decorators :
@UseGuards(new RolesAuthGuard())
@Put('/:id')
Parameters :
Name Type Optional
id string No
updateRequestDto UpdateRequestDto No
Returns : any
import {
  Body,
  Controller,
  Get,
  Param,
  Post,
  Put,
  Req,
  UseGuards,
  Query,
  UnauthorizedException,
} from "@nestjs/common";
import { AuthGuard } from "@nestjs/passport";

import { CreateRequestDto } from "./dto/create-request.dto";
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import { RequestService } from "./request.service";
import { UpdateRequestDto } from "./dto/update-request.dto";
import { RolesAuthGuard } from "src/auth/guards/roles-auth.guard";
import { AuthRequest } from "src/common/interfaces";
import { FilterRequestDto } from "./dto/filter-requesr.dto";

@Controller("api/v1/request")
export class RequestController {
  constructor(private readonly RequestService: RequestService) {}

  @UseGuards(AuthGuard("jwt"))
  @Post("/")
  create(
    @Req() request: AuthRequest,
    @Body() createRequestDto: CreateRequestDto,
  ) {
    return this.RequestService.create(createRequestDto, request.user.email);
  }

  @UseGuards(AuthGuard("jwt"))
  @Get("/")
  findAll(
    @Req() request: AuthRequest,
    @Query() filterFundDTO: FilterRequestDto,
  ) {
    if (request.user.role === "admin") {
      return this.RequestService.findAll(filterFundDTO);
    }
    return this.RequestService.findAll({
      ...filterFundDTO,
      submitterEmail: request.user.email,
    });
  }

  @UseGuards(AuthGuard("jwt"))
  @Get("/:id")
  async findOne(@Req() { user }: AuthRequest, @Param("id") id: string) {
    const request = await this.RequestService.findOne(id);
    if (user.email !== request.submitterEmail && user.role !== "admin") {
      throw new UnauthorizedException("Role is not authorized to this request");
    }
    return request;
  }

  @UseGuards(new RolesAuthGuard(["admin"]))
  @Put("/:id")
  update(@Param("id") id: string, @Body() updateRequestDto: UpdateRequestDto) {
    return this.RequestService.update(id, updateRequestDto);
  }
}

results matching ""

    No results matching ""