Skip to content

Commit

Permalink
feat(project): refactor project structure
Browse files Browse the repository at this point in the history
  • Loading branch information
MartinMinkov committed Aug 17, 2023
1 parent 5f6403f commit b44a1b6
Show file tree
Hide file tree
Showing 19 changed files with 149 additions and 130 deletions.
2 changes: 2 additions & 0 deletions src/blockchain/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export const DEFAULT_TOKEN_ID =
'wSHV2S4qX9jFsLjQo8r1BsMLH2ZRKsZx6EJd1sbozGPieEC4Jf' as const;
65 changes: 65 additions & 0 deletions src/blockchain/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import { ArchiveNodeDatabaseRow } from 'src/db/sql/events-actions/types';

export type Transactions = Map<string, ArchiveNodeDatabaseRow[]>;

export type BlocksWithTransactionsMap = Map<string, Transactions>;

export type FieldElementIdWithValueMap = Map<string, string>;

export enum BlockStatusFilter {
all = 'ALL',
pending = 'PENDING',
canonical = 'CANONICAL',
}

export type Event = {
transactionInfo: TransactionInfo;
data: string[];
};

export type Action = {
accountUpdateId: string;
transactionInfo: TransactionInfo;
data: string[];
};

export type BlockInfo = {
height: number;
stateHash: string;
parentHash: string;
ledgerHash: string;
chainStatus: string;
timestamp: string;
globalSlotSinceHardfork: number;
globalSlotSinceGenesis: number;
distanceFromMaxBlockHeight: number;
lastVrfOutput: string;
minWindowDensity: number;
subWindowDensities: number[];
};

export type TransactionInfo = {
status: string;
hash: string;
memo: string;
authorizationKind: string;
};

export type Events = {
eventData: Event[];
blockInfo: BlockInfo;
}[];

export type ActionStates = {
actionStateOne: string;
actionStateTwo: string;
actionStateThree: string;
actionStateFour: string;
actionStateFive: string;
};

export type Actions = {
actionState: ActionStates;
actionData: Action[];
blockInfo: BlockInfo;
}[];
9 changes: 2 additions & 7 deletions src/models/utils.ts → src/blockchain/utils.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
import type {
BlockInfo,
TransactionInfo,
Event,
Action,
ArchiveNodeDatabaseRow,
} from './types';
import type { BlockInfo, TransactionInfo, Event, Action } from './types';
import type { ArchiveNodeDatabaseRow } from 'src/db/sql/events-actions/types';

export function createBlockInfo(row: ArchiveNodeDatabaseRow): BlockInfo {
return {
Expand Down
1 change: 1 addition & 0 deletions src/consensus/config.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import fs from 'fs';
import path from 'path';

export { CONFIG };

type Config = {
Expand Down
2 changes: 1 addition & 1 deletion src/consensus/mina-consensus.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { CONFIG } from './config';
import { blake2bHex } from 'blakejs';
import { type BlockInfo } from 'src/models/types';
import { type BlockInfo } from 'src/blockchain/types';

export { select, getAllPredicate, filterBestTip };

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
import postgres from 'postgres';
import { Actions, Events } from 'src/models/types';
import { getTables, USED_TABLES } from './queries';
import type { DatabaseAdapter } from 'src/db/index';
import type { Actions, Events } from 'src/blockchain/types';
import type { DatabaseAdapter } from './archive-node-adapter';
import type {
ActionFilterOptionsInput,
EventFilterOptionsInput,
} from 'src/resolvers-types';
import { EventsService } from './events-service';
import { ActionsService } from './actions-service';
import { getTraceInfoFromOptions } from '../../tracing';
import { TracingService } from '../../tracing/tracing';
import { getTraceInfoFromOptions } from 'src/tracing';
import { getTables, USED_TABLES } from 'src/db/sql/events-actions/queries';
import { EventsService } from 'src/services/events-service/events-service';
import { IEventsService } from 'src/services/events-service/events-service.interface';
import { ActionsService } from 'src/services/actions-service/actions-service';
import { IActionsService } from 'src/services/actions-service/actions-service.interface';
import { TracingService } from 'src/services/tracing-service/tracing-service';
import { ITracingService } from 'src/services/tracing-service/tracing-service.interface';

export class ArchiveNodeAdapter implements DatabaseAdapter {
/**
Expand All @@ -19,9 +22,9 @@ export class ArchiveNodeAdapter implements DatabaseAdapter {
* `postgres.Sql` instance across the adapter is safe.
*/
private client: postgres.Sql;
private tracingService: TracingService | null;
private eventsService: EventsService | null;
private actionsService: ActionsService | null;
private tracingService: ITracingService | null;
private eventsService: IEventsService | null;
private actionsService: IActionsService | null;

constructor(connectionString: string | undefined) {
if (!connectionString)
Expand Down
12 changes: 12 additions & 0 deletions src/db/archive-node-adapter/archive-node-adapter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import type { EventFilterOptionsInput } from 'src/resolvers-types';
import type { Actions, Events } from 'src/blockchain/types';

export { DatabaseAdapter };

interface DatabaseAdapter {
getEvents(input: EventFilterOptionsInput, options?: unknown): Promise<Events>;
getActions(
input: EventFilterOptionsInput,
options?: unknown
): Promise<Actions>;
}
13 changes: 0 additions & 13 deletions src/db/index.ts

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type postgres from 'postgres';
import { ArchiveNodeDatabaseRow } from 'src/models/types';
import { BlockStatusFilter } from '../../resolvers-types';
import { ArchiveNodeDatabaseRow } from './types';
import { BlockStatusFilter } from 'src/blockchain/types';

function fullChainCTE(db_client: postgres.Sql) {
return db_client`
Expand Down
67 changes: 0 additions & 67 deletions src/models/types.ts → src/db/sql/events-actions/types.ts
Original file line number Diff line number Diff line change
@@ -1,70 +1,3 @@
export const DEFAULT_TOKEN_ID =
'wSHV2S4qX9jFsLjQo8r1BsMLH2ZRKsZx6EJd1sbozGPieEC4Jf' as const;

export type Transactions = Map<string, ArchiveNodeDatabaseRow[]>;

export type BlocksWithTransactionsMap = Map<string, Transactions>;

export type FieldElementIdWithValueMap = Map<string, string>;

export enum BlockStatusFilter {
all = 'ALL',
pending = 'PENDING',
canonical = 'CANONICAL',
}

export type Event = {
transactionInfo: TransactionInfo;
data: string[];
};

export type Action = {
accountUpdateId: string;
transactionInfo: TransactionInfo;
data: string[];
};

export type BlockInfo = {
height: number;
stateHash: string;
parentHash: string;
ledgerHash: string;
chainStatus: string;
timestamp: string;
globalSlotSinceHardfork: number;
globalSlotSinceGenesis: number;
distanceFromMaxBlockHeight: number;
lastVrfOutput: string;
minWindowDensity: number;
subWindowDensities: number[];
};

export type TransactionInfo = {
status: string;
hash: string;
memo: string;
authorizationKind: string;
};

export type Events = {
eventData: Event[];
blockInfo: BlockInfo;
}[];

export type ActionStates = {
actionStateOne: string;
actionStateTwo: string;
actionStateThree: string;
actionStateFour: string;
actionStateFive: string;
};

export type Actions = {
actionState: ActionStates;
actionData: Action[];
blockInfo: BlockInfo;
}[];

/**
* Type representing a database row with detailed information related to the archive node.
* This includes fields such as block-related hashes, account information, action states, and more.
Expand Down
2 changes: 1 addition & 1 deletion src/resolvers-types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BlockStatusFilter } from './models/types';
import { BlockStatusFilter } from './blockchain/types';
import { GraphQLResolveInfo } from 'graphql';
import { GraphQLContext } from './context';
export type Maybe<T> = T | null;
Expand Down
6 changes: 6 additions & 0 deletions src/services/actions-service/actions-service.interface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { Actions } from 'src/blockchain/types';
import { ActionFilterOptionsInput } from 'src/resolvers-types';

export interface IActionsService {
getActions(input: ActionFilterOptionsInput): Promise<Actions>;
}
Original file line number Diff line number Diff line change
@@ -1,30 +1,32 @@
import type postgres from 'postgres';

import {
BlockStatusFilter,
BlocksWithTransactionsMap,
DEFAULT_TOKEN_ID,
FieldElementIdWithValueMap,
Action,
Actions,
} from '../../models/types';
import { ActionFilterOptionsInput } from 'src/resolvers-types';
import { TracingService } from 'src/tracing/tracing';
import { getActionsQuery } from './queries';
} from 'src/blockchain/types';
import type { ActionFilterOptionsInput } from 'src/resolvers-types';
import type { ITracingService } from 'src/services/tracing-service/tracing-service.interface';
import { DEFAULT_TOKEN_ID } from 'src/blockchain/constants';
import { createBlockInfo } from 'src/blockchain/utils';
import { getActionsQuery } from 'src/db/sql/events-actions/queries';
import {
partitionBlocks,
getElementIdFieldValues,
mapActionOrEvent,
removeRedundantEmittedFields,
sortAndFilterBlocks,
} from './utils';
import { createBlockInfo } from '../../models/utils';
} from 'src/services/utils/utils';
import { IActionsService } from './actions-service.interface';

export { ActionsService };

class ActionsService {
class ActionsService implements IActionsService {
constructor(
private client: postgres.Sql,
private tracingService: TracingService
private tracingService: ITracingService
) {
this.client = client;
this.tracingService = tracingService;
Expand Down
6 changes: 6 additions & 0 deletions src/services/events-service/events-service.interface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { Events } from 'src/blockchain/types';
import { EventFilterOptionsInput } from 'src/resolvers-types';

export interface IEventsService {
getEvents(input: EventFilterOptionsInput): Promise<Events>;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,35 @@ import type postgres from 'postgres';
import {
BlockStatusFilter,
BlocksWithTransactionsMap,
DEFAULT_TOKEN_ID,
FieldElementIdWithValueMap,
Events,
Event,
} from '../../models/types';
import { EventFilterOptionsInput } from 'src/resolvers-types';
import { TracingService } from 'src/tracing/tracing';
import { getEventsQuery } from './queries';
} from 'src/blockchain/types';
import type { ITracingService } from 'src/services/tracing-service/tracing-service.interface';
import type { EventFilterOptionsInput } from 'src/resolvers-types';
import { createBlockInfo } from 'src/blockchain/utils';
import { DEFAULT_TOKEN_ID } from 'src/blockchain/constants';
import { getEventsQuery } from 'src/db/sql/events-actions/queries';
import {
partitionBlocks,
getElementIdFieldValues,
mapActionOrEvent,
removeRedundantEmittedFields,
sortAndFilterBlocks,
} from './utils';
import { createBlockInfo } from '../../models/utils';
} from 'src/services/utils/utils';
import { IEventsService } from './events-service.interface';

export { EventsService };

class EventsService {
class EventsService implements IEventsService {
constructor(
private client: postgres.Sql,
private tracingService: TracingService
private tracingService: ITracingService
) {
this.client = client;
}

setTracingService(tracingService: TracingService) {
setTracingService(tracingService: ITracingService) {
this.tracingService = tracingService;
}

Expand Down
4 changes: 4 additions & 0 deletions src/services/tracing-service/tracing-service.interface.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export interface ITracingService {
startSpan(name: string): void;
endSpan(): void;
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { TraceInfo } from './index';
import { Span } from '@opentelemetry/api';
import type { Span } from '@opentelemetry/api';
import type { TraceInfo } from 'src/tracing';
import type { ITracingService } from './tracing-service.interface';

export { TracingService };

class TracingService {
class TracingService implements ITracingService {
private spanStack: Span[];
private traceInfo: TraceInfo;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import {
import type {
Action,
Event,
ArchiveNodeDatabaseRow,
BlocksWithTransactionsMap,
FieldElementIdWithValueMap,
BlockInfo,
} from 'src/models/types';
} from 'src/blockchain/types';
import type { ArchiveNodeDatabaseRow } from 'src/db/sql/events-actions/types';
import {
createTransactionInfo,
createEvent,
createAction,
} from '../../models/utils';
import { filterBestTip } from '../../consensus/mina-consensus';
} from 'src/blockchain/utils';
import { filterBestTip } from 'src/consensus/mina-consensus';

export {
partitionBlocks,
Expand Down
Loading

0 comments on commit b44a1b6

Please sign in to comment.