Improve strategy assign values

This commit is contained in:
Julian Merlo 2023-11-28 09:29:47 -03:00
parent fd402b189d
commit 1ef763fcfb
3 changed files with 35 additions and 27 deletions

View File

@ -14,7 +14,7 @@ import { RepositoriesStrategy } from "./repositories/strategies/RepositoriesStra
export class RepositoriesBuilder {
private cfg: Config;
private snsClient?: SNSClient;
private repositories = new Map();
private repositories = new Map<string, any>();
constructor(cfg: Config) {
this.cfg = cfg;
@ -25,12 +25,13 @@ export class RepositoriesBuilder {
this.snsClient = this.createSnsClient();
const repositoryStrategy = new RepositoriesStrategy(this.snsClient, this.cfg);
this.repositories = repositoryStrategy.executeStatic();
this.cfg.supportedChains.forEach((chain) => {
if (!this.cfg.platforms[chain]) throw new Error(`No config for chain ${chain}`);
this.repositories = repositoryStrategy.executeChain(chain);
});
const staticRepositories = repositoryStrategy.executeStatic();
const dynamicRepositories = repositoryStrategy.executeDynamic();
this.repositories = staticRepositories;
this.repositories = {...this.repositories, dynamicRepositories}
dynamicRepositories.forEach((instance, name) => { this.repositories.set(name, instance) });
this.repositories.set(
"jobs",

View File

@ -8,7 +8,6 @@ import { Web3SolanaSlotRepository } from "../Web3SolanaSlotRepository";
import { Connection } from "@solana/web3.js";
export class RepositoriesStrategy {
private repositoriesMap = new Map<string, any>();
private snsClient?: SNSClient;
private cfg: Config;
@ -18,6 +17,8 @@ export class RepositoriesStrategy {
}
executeStatic(): Map<string, any> {
let staticRepositories = new Map();
const repositories = [
new SnsEventRepository(this.snsClient!, this.cfg),
new FileMetadataRepository(this.cfg, this.cfg.metadata?.dir!),
@ -26,25 +27,31 @@ export class RepositoriesStrategy {
repositories.forEach((repository) => {
if (repository.apply())
this.repositoriesMap.set(repository.getName(), repository.createInstance());
staticRepositories.set(repository.getName(), repository.createInstance());
});
return this.repositoriesMap;
return staticRepositories;
}
executeChain(chain: string): Map<string, any> {
const config = this.cfg.platforms[chain];
executeDynamic(): Map<string, any> {
let dynamicRepositories = new Map();
const repositories = [
new EvmJsonRPCBlockRepository(this.cfg, chain),
new Web3SolanaSlotRepository(new Connection(config.rpcs[0]), this.cfg, chain),
];
this.cfg.supportedChains.forEach((chain) => {
const config = this.cfg.platforms[chain];
repositories.forEach((repository) => {
if (repository.apply())
this.repositoriesMap.set(repository.getName(), repository.createInstance());
const repositories = [
new EvmJsonRPCBlockRepository(this.cfg, chain),
new Web3SolanaSlotRepository(new Connection(config.rpcs[0]), this.cfg, chain),
];
if (!this.cfg.platforms[chain]) throw new Error(`No config for chain ${chain}`);
repositories.forEach((repository) => {
if (repository.apply())
dynamicRepositories.set(repository.getName(), repository.createInstance());
});
});
return this.repositoriesMap;
return dynamicRepositories;
}
}

View File

@ -12,34 +12,34 @@ describe("Web3SolanaSlotRepository", () => {
// Given
const connectionMock = {};
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg, "solana");
// When
const result = await repo.apply();
// Then
expect(result).toBe(true);
});
it("should be get name metadata", async () => {
// Given
const connectionMock = {};
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg, chain);
// When
const result = await repo.getName();
// Then
expect(result).toBe("solana-slotRepo");
});
it("should be create instance", async () => {
// Given
const connectionMock = {};
const repo = new Web3SolanaSlotRepository(connectionMock as any, cfg, chain);
// When
const result = await repo.createInstance();
// Then
expect(result).toBeInstanceOf(Web3SolanaSlotRepository);
});