File

src/profile/profile.controller.ts

Prefix

api/v1/profile

Index

Methods

Methods

Async allowInvestor
allowInvestor(request: AuthRequest, id: string, instrumentId: string)
Decorators :
@UseInterceptors(CustomCacheInterceptor)
@UseGuards(new RolesAuthGuard())
@Get('/investor/:id/verify/:instrumentId')
Parameters :
Name Type Optional
request AuthRequest No
id string No
instrumentId string No
Returns : unknown
Async createRole
createRole(request: AuthRequest, createRole: CreateRoleDto)
Decorators :
@UseGuards(undefined)
@Post('/role/create')
Parameters :
Name Type Optional
request AuthRequest No
createRole CreateRoleDto No
Returns : unknown
Async deleteModule
deleteModule(request: AuthRequest, ModuleDto: ModuleDto)
Decorators :
@UseGuards(new RolesAuthGuard())
@Delete('/module/delete')
Parameters :
Name Type Optional
request AuthRequest No
ModuleDto ModuleDto No
Returns : unknown
Async getProfile
getProfile(request: AuthRequest)
Decorators :
@UseInterceptors(CustomCacheInterceptor)
@UseGuards(undefined)
@Get('/')
Parameters :
Name Type Optional
request AuthRequest No
Returns : unknown
Async grantAccess
grantAccess(request: AuthRequest, manageRoleDto: ManageRoleAccessDto)
Decorators :
@UseGuards(undefined)
@Post('/role/grant/access')
Parameters :
Name Type Optional
request AuthRequest No
manageRoleDto ManageRoleAccessDto No
Returns : unknown
Async grantRole
grantRole(request: AuthRequest, createRole: GrantRoleDto)
Decorators :
@UseGuards(undefined)
@Post('/role/grant')
Parameters :
Name Type Optional
request AuthRequest No
createRole GrantRoleDto No
Returns : unknown
Async registerModule
registerModule(request: AuthRequest, moduleDto: ModuleDto)
Decorators :
@UseGuards(new RolesAuthGuard())
@Post('/module/register')
Parameters :
Name Type Optional
request AuthRequest No
moduleDto ModuleDto No
Returns : unknown
Async resetRole
resetRole(request: AuthRequest, resetRoleDto: ResetRoleDto)
Decorators :
@UseGuards(undefined)
@Post('/role/reset')
Parameters :
Name Type Optional
request AuthRequest No
resetRoleDto ResetRoleDto No
Returns : unknown
Async restrictInvestor
restrictInvestor(request: AuthRequest, id: string, restrictInvestorDto: RestrictInvestorDto)
Decorators :
@UseGuards(new RolesAuthGuard())
@Post('/investor/:id/restrict')
Parameters :
Name Type Optional
request AuthRequest No
id string No
restrictInvestorDto RestrictInvestorDto No
Returns : unknown
Async revokeRole
revokeRole(request: AuthRequest, manageRoleDto: ManageRoleAccessDto)
Decorators :
@UseGuards(undefined)
@Post('/role/revoke')
Parameters :
Name Type Optional
request AuthRequest No
manageRoleDto ManageRoleAccessDto No
Returns : unknown
Async setForAllUsers
setForAllUsers(request: AuthRequest, id: string, dynamicFieldsDto: DynamicFieldsDto)
Decorators :
@UseGuards(undefined)
@Post('/registries/:id/dynamic-fields/')
Parameters :
Name Type Optional
request AuthRequest No
id string No
dynamicFieldsDto DynamicFieldsDto No
Returns : unknown
Async setSanction
setSanction(request: AuthRequest, id: string, investorSanctionDto: InvestorSanctionDto)
Decorators :
@UseGuards(new RolesAuthGuard())
@Post('/investor/:id/sanction')
Parameters :
Name Type Optional
request AuthRequest No
id string No
investorSanctionDto InvestorSanctionDto No
Returns : unknown
Async summary
summary(request: AuthRequest)
Decorators :
@UseInterceptors(CustomCacheInterceptor)
@UseGuards(new RolesAuthGuard())
@Get('/summary')
Parameters :
Name Type Optional
request AuthRequest No
Returns : unknown
Async updateModule
updateModule(request: AuthRequest, updateModuleDto: UpdateModuleDto)
Decorators :
@UseGuards(new RolesAuthGuard())
@Put('/module/update')
Parameters :
Name Type Optional
request AuthRequest No
updateModuleDto UpdateModuleDto No
Returns : unknown
import {
  Controller,
  Get,
  ServiceUnavailableException,
  Request,
  Inject,
  UseGuards,
  Post,
  Put,
  Delete,
  Param,
  Body,
  UseInterceptors,
  UnauthorizedException,
} from "@nestjs/common";
import { AuthRequest, EndUserRoles } from "src/common/interfaces";
import { ProfileService } from "./profile.service";
import { AuthGuard } from "@nestjs/passport";
import { RolesAuthGuard } from "src/auth/guards/roles-auth.guard";
import { UpdateModuleDto } from "src/module-manager/dto/update-module.dto";
import { RestrictInvestorDto } from "./dto/restirct-investor.dto";
import { DynamicFieldsDto } from "./dto/dynamicfields-investor.dto";
import { InvestorSanctionDto } from "./dto/investor-sanction.dto";
import { CreateRoleDto } from "./dto/create-role.dto";
import { GrantRoleDto } from "./dto/grant-role.dto";
import { ManageRoleAccessDto } from "./dto/manage-role.dto";
import { ResetRoleDto } from "./dto/reset-role.dto";
import { encodeBytes32String, hexlify, keccak256, toUtf8Bytes } from "ethers";
import { OnChainDataField } from "src/shared/onchainDataFields/entities/onChainDataField.entity";
import { ModuleDto } from "src/module-manager/dto/module.dto";
import { UserService } from "src/user/user.service";
import { CustomCacheInterceptor } from "src/interceptor/cache.interceptor";
import { SummaryService } from "./summary.service";

@Controller("api/v1/profile")
export class ProfileController {
  @Inject(ProfileService)
  private readonly profileService: ProfileService;
  @Inject(UserService)
  private readonly userService: UserService;

  @Inject(SummaryService)
  private readonly summaryService: SummaryService;

  @UseInterceptors(CustomCacheInterceptor)
  @UseGuards(AuthGuard("jwt"))
  @Get("/")
  async getProfile(@Request() request: AuthRequest) {
    try {
      return await this.profileService.getMyProfile(request.user);
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseGuards(AuthGuard("jwt"))
  @Post("/registries/:id/dynamic-fields/")
  async setForAllUsers(
    @Request() request: AuthRequest,
    @Param("id") id: string,
    @Body() dynamicFieldsDto: DynamicFieldsDto,
  ) {
    try {
      const idInBytes = encodeBytes32String(id);
      const onchainFields: OnChainDataField[] = [];

      const registriesWithId = dynamicFieldsDto.registries.map((registry) => {
        onchainFields.push({
          name: registry.dataFieldName,
          hash: keccak256(hexlify(toUtf8Bytes(registry.dataFieldName))),
          linkedName: "",
          linkedHash: "",
          linkedType: "",
        });
        return { ...registry, id: idInBytes };
      });
      return await this.userService.setRegistryData({
        ...dynamicFieldsDto,
        registries: registriesWithId,
        userJwtPayload: request.user,
        onchainFields,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseInterceptors(CustomCacheInterceptor)
  @UseGuards(new RolesAuthGuard(["dealer", "investor"]))
  @Get("/summary")
  async summary(@Request() request: AuthRequest) {
    try {
      if (request.user.role === EndUserRoles.dealer) {
        return await this.summaryService.getDealerSummary(request.user);
      }
      return await this.summaryService.getInvestorSummary(request.user);
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseGuards(new RolesAuthGuard(["dealer", "fundAdmin"]))
  @Post("/module/register")
  async registerModule(
    @Request() request: AuthRequest,
    @Body() moduleDto: ModuleDto,
  ) {
    try {
      return await this.profileService.userRegisterModule({
        userJwtPayload: request.user,
        contractAddress: moduleDto.contractAddress,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseGuards(new RolesAuthGuard(["dealer", "fundAdmin"]))
  @Put("/module/update")
  async updateModule(
    @Request() request: AuthRequest,
    updateModuleDto: UpdateModuleDto,
  ) {
    try {
      return await this.profileService.userEnableDisableModule({
        userJwtPayload: request.user,
        contractAddress: updateModuleDto.contractAddress,
        status: updateModuleDto.status,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseGuards(new RolesAuthGuard(["dealer", "fundAdmin"]))
  @Delete("/module/delete")
  async deleteModule(@Request() request: AuthRequest, ModuleDto: ModuleDto) {
    try {
      return await this.profileService.userDeleteModule({
        userJwtPayload: request.user,
        contractAddress: ModuleDto.contractAddress,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseInterceptors(CustomCacheInterceptor)
  @UseGuards(new RolesAuthGuard(["dealer", "investor"]))
  @Get("/investor/:id/verify/:instrumentId")
  async allowInvestor(
    @Request() request: AuthRequest,
    @Param("id") id: string,
    @Param("instrumentId") instrumentId: string,
  ) {
    try {
      if (request.user.role === EndUserRoles.investor) {
        const investor = await this.userService.findUserByProperty({
          email: request.user.email,
        });
        if (investor._id.toString() !== id) {
          throw new UnauthorizedException(
            "Investor can check his avilablilty only",
          );
        }
      }
      return await this.profileService.verifyInvestor({
        investorId: id,
        instrumentId,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseGuards(new RolesAuthGuard(["admin", "dealer"]))
  @Post("/investor/:id/sanction")
  async setSanction(
    @Request() request: AuthRequest,
    @Param("id") id: string,
    @Body() investorSanctionDto: InvestorSanctionDto,
  ) {
    try {
      return await this.profileService.setSanction({
        userJwtPayload: request.user,
        investorId: id,
        investorSanction: investorSanctionDto,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseGuards(new RolesAuthGuard(["dealer"]))
  @Post("/investor/:id/restrict")
  async restrictInvestor(
    @Request() request: AuthRequest,
    @Param("id") id: string,
    @Body() restrictInvestorDto: RestrictInvestorDto,
  ) {
    try {
      return await this.profileService.setInvestorRestriction({
        userJwtPayload: request.user,
        investorId: id,
        ...restrictInvestorDto,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseGuards(AuthGuard("jwt"))
  @Post("/role/create")
  async createRole(
    @Request() request: AuthRequest,
    @Body() createRole: CreateRoleDto,
  ) {
    try {
      return await this.profileService.createRole({
        ...createRole,
        user: request.user,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseGuards(AuthGuard("jwt"))
  @Post("/role/grant")
  async grantRole(
    @Request() request: AuthRequest,
    @Body() createRole: GrantRoleDto,
  ) {
    try {
      return await this.profileService.grantRole({
        ...createRole,
        user: request.user,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }
  @UseGuards(AuthGuard("jwt"))
  @Post("/role/grant/access")
  async grantAccess(
    @Request() request: AuthRequest,
    @Body() manageRoleDto: ManageRoleAccessDto,
  ) {
    try {
      return await this.profileService.manageRoleAccess("grant", {
        ...manageRoleDto,
        user: request.user,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseGuards(AuthGuard("jwt"))
  @Post("/role/revoke")
  async revokeRole(
    @Request() request: AuthRequest,
    @Body() manageRoleDto: ManageRoleAccessDto,
  ) {
    try {
      return await this.profileService.manageRoleAccess("revoke", {
        ...manageRoleDto,
        user: request.user,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }

  @UseGuards(AuthGuard("jwt"))
  @Post("/role/reset")
  async resetRole(
    @Request() request: AuthRequest,
    @Body() resetRoleDto: ResetRoleDto,
  ) {
    try {
      return await this.profileService.resetAccess({
        ...resetRoleDto,
        user: request.user,
      });
    } catch (error) {
      console.error(error);
      throw new ServiceUnavailableException(error);
    }
  }
}

results matching ""

    No results matching ""