File

src/module-manager/module-manager.service.ts

Index

Methods

Constructor

constructor(moduleManager: Model<ModuleManagerDocument>)
Parameters :
Name Type Optional
moduleManager Model<ModuleManagerDocument> No

Methods

Async create
create(createModuleManagerDto: CreateModuleManagerDto)
Parameters :
Name Type Optional
createModuleManagerDto CreateModuleManagerDto No
Returns : Promise<ModuleManager>
Async findAll
findAll()
Returns : Promise<IModule[]>
Async findByFilter
findByFilter(filterModuleManagerDto: FilterModuleManagerDto)
Parameters :
Name Type Optional
filterModuleManagerDto FilterModuleManagerDto No
Returns : Promise<ModuleManager[]>
Async findOne
findOne(id: string)
Parameters :
Name Type Optional
id string No
Returns : Promise<IModule>
getDynamicInput
getDynamicInput(abis: IAbis[])
Parameters :
Name Type Optional
abis IAbis[] No
Returns : TransactionInput[]
getParsSolidityTypesToTypescript
getParsSolidityTypesToTypescript(solidityType: string)
Parameters :
Name Type Optional
solidityType string No
Returns : "string" | "boolean" | "number"
import { Injectable } from "@nestjs/common";
import { InjectModel } from "@nestjs/mongoose";
import { Model } from "mongoose";

import { IAbis, TransactionInput } from "src/common/interfaces";
import { CreateModuleManagerDto } from "./dto/create-ModuleManager.dto";
import { FilterModuleManagerDto } from "./dto/filter-ModuleManager.dto";
import { IModule } from "./module-manager.interface";
import {
  ModuleManager,
  ModuleManagerDocument,
} from "./schemas/ModuleManager.schema";

@Injectable()
export class ModuleManagerService {
  constructor(
    @InjectModel(ModuleManager.name)
    private readonly moduleManager: Model<ModuleManagerDocument>,
  ) {}

  async create(
    createModuleManagerDto: CreateModuleManagerDto,
  ): Promise<ModuleManager> {
    return this.moduleManager.create({
      ...createModuleManagerDto,
      abi: JSON.stringify(createModuleManagerDto.abi),
    });
  }

  async findOne(id: string): Promise<IModule> {
    const moduleManager: ModuleManager = await this.moduleManager
      .findById(id)
      .exec();
    if (!moduleManager) {
      return null;
    }
    const transactionsInput = this.getDynamicInput(
      JSON.parse(moduleManager.abi),
    );
    return { ...moduleManager, transactionsInput };
  }

  async findAll(): Promise<IModule[]> {
    const modules = await this.moduleManager.find().exec();
    return modules.map((moduleManager) => {
      const transactionsInput = this.getDynamicInput(
        JSON.parse(moduleManager.abi),
      );
      return { ...moduleManager.toObject(), transactionsInput };
    });
  }
  async findByFilter(
    filterModuleManagerDto: FilterModuleManagerDto,
  ): Promise<ModuleManager[]> {
    const modules = await this.moduleManager
      .find(filterModuleManagerDto)
      .exec();
    return modules.map((moduleManager) => {
      const transactionsInput = this.getDynamicInput(
        JSON.parse(moduleManager.abi),
      );
      return { ...moduleManager.toObject(), transactionsInput };
    });
  }

  getDynamicInput(abis: IAbis[]): TransactionInput[] {
    return abis.map((abi) => {
      return {
        transactionName: abi.name,
        inputs: abi.inputs.map((input) => {
          return {
            ...input,
            type: this.getParsSolidityTypesToTypescript(input.type),
          };
        }),
      };
    });
  }
  getParsSolidityTypesToTypescript(solidityType: string) {
    if (solidityType === "address" || solidityType === "bytes") {
      return "string";
    }
    if (solidityType === "bool") {
      return "boolean";
    }
    if (solidityType.includes("uint")) {
      return "number";
    }
    return "string";
  }
}

results matching ""

    No results matching ""