Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: replace various any with types and simpler interface naming #2348

Merged
merged 7 commits into from
Mar 31, 2019
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import { Database } from "@arkecosystem/core-interfaces";
import { models } from "@arkecosystem/crypto";

export class DatabaseConnectionStub implements Database.IDatabaseConnection {
export class DatabaseConnectionStub implements Database.IConnection {
public blocksRepository: Database.IBlocksRepository;
public roundsRepository: Database.IRoundsRepository;
public transactionsRepository: Database.ITransactionsRepository;
Expand Down Expand Up @@ -32,7 +32,7 @@ export class DatabaseConnectionStub implements Database.IDatabaseConnection {

public enqueueDeleteRound(height: number): any {}

public async make(): Promise<Database.IDatabaseConnection> {
public async make(): Promise<Database.IConnection> {
return this;
}

Expand Down
2 changes: 1 addition & 1 deletion __tests__/unit/core-database/database-service.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { StateStorageStub } from "./__fixtures__/state-storage-stub";
const { Block } = models;
const { SATOSHI, TransactionTypes } = constants;

let connection: Database.IDatabaseConnection;
let connection: Database.IConnection;
let databaseService: DatabaseService;
let walletManager: Database.IWalletManager;
let container;
Expand Down
6 changes: 3 additions & 3 deletions __tests__/unit/core-transaction-pool/connection.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { dato } from "@faustbrian/dato";
import delay from "delay";
import cloneDeep from "lodash.clonedeep";
import randomSeed from "random-seed";
import { TransactionPool } from "../../../packages/core-transaction-pool/src";
import { Connection } from "../../../packages/core-transaction-pool/src";
import { defaults } from "../../../packages/core-transaction-pool/src/defaults";
import { MemPoolTransaction } from "../../../packages/core-transaction-pool/src/mem-pool-transaction";
import { generators } from "../../utils";
Expand All @@ -23,10 +23,10 @@ const { generateTransfer } = generators;
const delegatesSecrets = delegates.map(d => d.secret);
const maxTransactionAge = 4036608000;

let connection: TransactionPool;
let connection: Connection;

beforeAll(async () => {
connection = new TransactionPool(defaults);
connection = new Connection(defaults);
await connection.make();
});

Expand Down
4 changes: 2 additions & 2 deletions __tests__/unit/core-transaction-pool/guard.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import "./mocks/core-container";
import { configManager, constants, slots } from "@arkecosystem/crypto";
import "jest-extended";
import { config as localConfig } from "../../../packages/core-transaction-pool/src/config";
import { TransactionPool } from "../../../packages/core-transaction-pool/src/connection";
import { Connection } from "../../../packages/core-transaction-pool/src/connection";
import { defaults } from "../../../packages/core-transaction-pool/src/defaults";
import { TransactionGuard } from "../../../packages/core-transaction-pool/src/guard";
import { MemPoolTransaction } from "../../../packages/core-transaction-pool/src/mem-pool-transaction";
Expand All @@ -20,7 +20,7 @@ let transactionPool;
beforeAll(async () => {
localConfig.init(defaults);

transactionPool = new TransactionPool(defaults);
transactionPool = new Connection(defaults);
await transactionPool.make();
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ class TestTransactionHandler extends TransactionHandler {
return;
}

public canEnterTransactionPool(data: ITransactionData, guard: TransactionPool.ITransactionGuard): boolean {
public canEnterTransactionPool(data: ITransactionData, guard: TransactionPool.IGuard): boolean {
return true;
}
}
Expand Down
3 changes: 2 additions & 1 deletion __tests__/utils/helpers/blockchain.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { app } from "@arkecosystem/core-container";
import { Blockchain, TransactionPool } from "@arkecosystem/core-interfaces";

export const resetBlockchain = async () => {
// Resets everything so that it can be used in beforeAll to start clean a test suite
// Now resets: blocks (remove blocks other than genesis), transaction pool
Expand All @@ -12,6 +13,6 @@ export const resetBlockchain = async () => {
await blockchain.removeBlocks(height - 1);
}

const transactionPool = app.resolvePlugin<TransactionPool.ITransactionPool>("transaction-pool");
const transactionPool = app.resolvePlugin<TransactionPool.IConnection>("transaction-pool");
transactionPool.flush();
};
4 changes: 2 additions & 2 deletions deprecated/core-graphql/src/repositories/repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import { app } from "@arkecosystem/core-container";
import { Database, TransactionPool } from "@arkecosystem/core-interfaces";

export abstract class Repository {
public databaseService = app.resolvePlugin<Database.IDatabaseService>("database");
public transactionPool = app.resolvePlugin<TransactionPool.ITransactionPool>("transaction-pool");
public readonly databaseService = app.resolvePlugin<Database.IDatabaseService>("database");
public readonly transactionPool = app.resolvePlugin<TransactionPool.IConnection>("transaction-pool");
public cache = this.databaseService.cache;
public model = this.getModel();
public query = this.model.query();
Expand Down
2 changes: 1 addition & 1 deletion packages/core-api/src/repositories/repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { IRepository } from "../interfaces";
export abstract class Repository implements IRepository {
public databaseService = app.resolvePlugin<Database.IDatabaseService>("database");
public cache = this.databaseService.cache;
public transactionPool = app.resolvePlugin<TransactionPool.ITransactionPool>("transaction-pool");
public transactionPool = app.resolvePlugin<TransactionPool.IConnection>("transaction-pool");
public model = this.getModel();
public query = this.model.query();
public columns: string[] = [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import Hapi from "hapi";
import { Controller } from "../shared/controller";

export class TransactionsController extends Controller {
protected transactionPool = app.resolvePlugin<TransactionPool.ITransactionPool>("transaction-pool");
protected transactionPool = app.resolvePlugin<TransactionPool.IConnection>("transaction-pool");

public constructor() {
super();
Expand Down
13 changes: 4 additions & 9 deletions packages/core-api/src/versions/2/transactions/controller.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
import { app } from "@arkecosystem/core-container";
import { P2P } from "@arkecosystem/core-interfaces";
import { P2P, TransactionPool } from "@arkecosystem/core-interfaces";
import { TransactionGuard } from "@arkecosystem/core-transaction-pool";
import { constants } from "@arkecosystem/crypto";
import Boom from "boom";
import Hapi from "hapi";
import { Controller } from "../shared/controller";

import { TransactionGuard, TransactionPool } from "@arkecosystem/core-transaction-pool";
import { constants } from "@arkecosystem/crypto";

export class TransactionsController extends Controller {
private transactionPool = app.resolvePlugin<TransactionPool>("transaction-pool");

public constructor() {
super();
}
private readonly transactionPool = app.resolvePlugin<TransactionPool.IConnection>("transaction-pool");

public async index(request: Hapi.Request, h: Hapi.ResponseToolkit) {
try {
Expand Down
2 changes: 1 addition & 1 deletion packages/core-blockchain/src/blockchain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export class Blockchain implements blockchain.IBlockchain {
* @return {TransactionPool}
*/
get transactionPool() {
return app.resolvePlugin<TransactionPool.ITransactionPool>("transaction-pool");
return app.resolvePlugin<TransactionPool.IConnection>("transaction-pool");
}

/**
Expand Down
50 changes: 25 additions & 25 deletions packages/core-database-postgres/src/postgres-connection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { MigrationsRepository } from "./repositories/migrations";
import { QueryExecutor } from "./sql/query-executor";
import { camelizeColumns } from "./utils";

export class PostgresConnection implements Database.IDatabaseConnection {
export class PostgresConnection implements Database.IConnection {
public logger = app.resolvePlugin<Logger.ILogger>("logger");
public models: { [key: string]: Model } = {};
public query: QueryExecutor;
Expand All @@ -30,9 +30,10 @@ export class PostgresConnection implements Database.IDatabaseConnection {

public constructor(readonly options: any, private walletManager: Database.IWalletManager) {}

public async buildWallets() {
public async buildWallets(): Promise<boolean> {
try {
const result = await new IntegrityVerifier(this.query, this.walletManager).run();

return result;
} catch (error) {
this.logger.error(error.stack);
Expand All @@ -42,7 +43,7 @@ export class PostgresConnection implements Database.IDatabaseConnection {
return false;
}

public async commitQueuedQueries() {
public async commitQueuedQueries(): Promise<void> {
if (!this.queuedQueries || this.queuedQueries.length === 0) {
return;
}
Expand All @@ -60,10 +61,11 @@ export class PostgresConnection implements Database.IDatabaseConnection {
}
}

public async connect() {
public async connect(): Promise<void> {
this.emitter.emit(Database.DatabaseEvents.PRE_CONNECT);

const initialization = {
receive(data, result, e) {
receive(data) {
camelizeColumns(pgp, data);
},
extend(object) {
Expand All @@ -79,22 +81,22 @@ export class PostgresConnection implements Database.IDatabaseConnection {
this.db = this.pgp(this.options.connection);
}

public async deleteBlock(block: models.Block) {
public async deleteBlock(block: models.Block): Promise<void> {
try {
const queries = [
this.transactionsRepository.deleteByBlockId(block.data.id),
this.blocksRepository.delete(block.data.id),
];

await this.db.tx(t => t.batch(queries));
await this.db.tx(t =>
t.batch([
this.transactionsRepository.deleteByBlockId(block.data.id),
this.blocksRepository.delete(block.data.id),
]),
);
} catch (error) {
this.logger.error(error.stack);

throw error;
}
}

public async disconnect() {
public async disconnect(): Promise<void> {
this.logger.debug("Disconnecting from database");
this.emitter.emit(Database.DatabaseEvents.PRE_DISCONNECT);

Expand All @@ -111,24 +113,22 @@ export class PostgresConnection implements Database.IDatabaseConnection {
this.logger.debug("Disconnected from database");
}

public enqueueDeleteBlock(block: models.Block): any {
const queries = [
public enqueueDeleteBlock(block: models.Block): void {
this.enqueueQueries([
this.transactionsRepository.deleteByBlockId(block.data.id),
this.blocksRepository.delete(block.data.id),
];

this.enqueueQueries(queries);
]);
}

public enqueueDeleteRound(height: number): any {
public enqueueDeleteRound(height: number): void {
const { round, nextRound, maxDelegates } = roundCalculator.calculateRound(height);

if (nextRound === round + 1 && height >= maxDelegates) {
this.enqueueQueries([this.roundsRepository.delete(nextRound)]);
}
}

public async make(): Promise<Database.IDatabaseConnection> {
public async make(): Promise<Database.IConnection> {
if (this.db) {
throw new Error("Database connection already initialised");
}
Expand All @@ -155,7 +155,7 @@ export class PostgresConnection implements Database.IDatabaseConnection {
return null;
}

public async saveBlock(block: models.Block) {
public async saveBlock(block: models.Block): Promise<void> {
try {
const queries = [this.blocksRepository.insert(block.data)];

Expand Down Expand Up @@ -260,7 +260,7 @@ export class PostgresConnection implements Database.IDatabaseConnection {
* Register all models.
* @return {void}
*/
private async registerModels() {
private async registerModels(): Promise<void> {
for (const [key, Value] of Object.entries(require("./models"))) {
this.models[key.toLowerCase()] = new (Value as any)(this.pgp);
}
Expand All @@ -270,19 +270,19 @@ export class PostgresConnection implements Database.IDatabaseConnection {
* Register the query builder.
* @return {void}
*/
private registerQueryExecutor() {
private registerQueryExecutor(): void {
this.query = new QueryExecutor(this);
}

private enqueueQueries(queries) {
private enqueueQueries(queries): void {
if (!this.queuedQueries) {
this.queuedQueries = [];
}

(this.queuedQueries as any).push(...queries);
}

private exposeRepositories() {
private exposeRepositories(): void {
this.blocksRepository = this.db.blocks;
this.transactionsRepository = this.db.transactions;
this.roundsRepository = this.db.rounds;
Expand Down
4 changes: 2 additions & 2 deletions packages/core-database/src/database-service-factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import { DelegatesBusinessRepository } from "./repositories/delegates-business-r
import { TransactionsBusinessRepository } from "./repositories/transactions-business-repository";
import { WalletsBusinessRepository } from "./repositories/wallets-business-repository";

// Allow extenders of core-database to provide, optionally, a IWalletManager concrete in addition to a IDatabaseConnection, but keep the business repos common
// Allow extenders of core-database to provide, optionally, a IWalletManager concrete in addition to a IConnection, but keep the business repos common
export const databaseServiceFactory = async (
opts: any,
walletManager: Database.IWalletManager,
connection: Database.IDatabaseConnection,
connection: Database.IConnection,
): Promise<Database.IDatabaseService> => {
let databaseService: DatabaseService;
databaseService = new DatabaseService(
Expand Down
4 changes: 2 additions & 2 deletions packages/core-database/src/database-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { WalletManager } from "./wallet-manager";
const { Block } = models;

export class DatabaseService implements Database.IDatabaseService {
public connection: Database.IDatabaseConnection;
public connection: Database.IConnection;
public walletManager: Database.IWalletManager;
public logger = app.resolvePlugin<Logger.ILogger>("logger");
public emitter = app.resolvePlugin<EventEmitter.EventEmitter>("event-emitter");
Expand All @@ -29,7 +29,7 @@ export class DatabaseService implements Database.IDatabaseService {

constructor(
options: any,
connection: Database.IDatabaseConnection,
connection: Database.IConnection,
walletManager: Database.IWalletManager,
walletsBusinessRepository: Database.IWalletsBusinessRepository,
delegatesBusinessRepository: Database.IDelegatesBusinessRepository,
Expand Down
9 changes: 3 additions & 6 deletions packages/core-database/src/manager.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Database } from "@arkecosystem/core-interfaces";

export class DatabaseManager {
public connections: { [key: string]: Database.IDatabaseConnection };
public connections: { [key: string]: Database.IConnection };

/**
* Create a new database manager instance.
Expand All @@ -16,7 +16,7 @@ export class DatabaseManager {
* @param {String} name
* @return {DatabaseConnection}
*/
public connection(name = "default"): Database.IDatabaseConnection {
public connection(name = "default"): Database.IConnection {
return this.connections[name];
}

Expand All @@ -26,10 +26,7 @@ export class DatabaseManager {
* @param {String} name
* @return {void}
*/
public async makeConnection(
connection: Database.IDatabaseConnection,
name = "default",
): Promise<Database.IDatabaseConnection> {
public async makeConnection(connection: Database.IConnection, name = "default"): Promise<Database.IConnection> {
this.connections[name] = await connection.make();
return this.connection(name);
}
Expand Down
6 changes: 3 additions & 3 deletions packages/core-interfaces/src/core-blockchain/blockchain.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { models, Transaction } from "@arkecosystem/crypto";
import { IMonitor } from "../core-p2p";
import { ITransactionPool } from "../core-transaction-pool";
import { IConnection } from "../core-transaction-pool";
import { IStateStorage } from "./state-storage";

export interface IBlockchain {
Expand All @@ -17,9 +17,9 @@ export interface IBlockchain {

/**
* Get the transaction handler.
* @return {ITransactionPool}
* @return {IConnection}
*/
readonly transactionPool: ITransactionPool;
readonly transactionPool: IConnection;

/**
* Get the database connection.
Expand Down
Loading