src/module-manager/module-manager.service.ts
Methods |
|
constructor(moduleManager: Model<ModuleManagerDocument>)
|
||||||
|
Parameters :
|
| Async create | ||||||
create(createModuleManagerDto: CreateModuleManagerDto)
|
||||||
|
Parameters :
Returns :
Promise<ModuleManager>
|
| Async findAll |
findAll()
|
|
Returns :
Promise<IModule[]>
|
| Async findByFilter | ||||||
findByFilter(filterModuleManagerDto: FilterModuleManagerDto)
|
||||||
|
Parameters :
Returns :
Promise<ModuleManager[]>
|
| Async findOne | ||||||
findOne(id: string)
|
||||||
|
Parameters :
Returns :
Promise<IModule>
|
| getDynamicInput | ||||||
getDynamicInput(abis: IAbis[])
|
||||||
|
Parameters :
Returns :
TransactionInput[]
|
| getParsSolidityTypesToTypescript | ||||||
getParsSolidityTypesToTypescript(solidityType: string)
|
||||||
|
Parameters :
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";
}
}