Storage modules

This commit is contained in:
Anton Vakhrushev 2020-07-18 17:32:54 +03:00
parent dfc7d48fd4
commit 349835bdb7
12 changed files with 45 additions and 45 deletions

View File

@ -12,7 +12,7 @@ import Vue from 'vue';
import Vuex from 'vuex';
import DashboardApp from './DashboardView/Dashboard.vue';
import { ConsoleLogger, Logger } from './Logger';
import { DataStorage } from './DataStorage';
import { DataStorage } from './Storage/DataStorage';
import { getBuildingPageAttributes, isBuildingPage } from './Page/PageDetector';
import { ExecutionStorage } from './Storage/ExecutionStorage';
import { VillageState } from './VillageState';

View File

@ -1,5 +1,5 @@
import { ConsoleLogger, Logger } from '../Logger';
import { DataStorage } from '../DataStorage';
import { DataStorage } from '../Storage/DataStorage';
import { Args } from './Args';
const NAMESPACE = 'actions.v1';

View File

@ -1,4 +1,4 @@
import { DataStorage } from '../DataStorage';
import { DataStorage } from '../Storage/DataStorage';
import { Task, TaskList, TaskProvider, uniqTaskId } from './TaskProvider';
const QUEUE_NAME = 'queue';

View File

@ -1,4 +1,5 @@
import { Logger, NullLogger } from './Logger';
import { Logger, NullLogger } from '../Logger';
import { createMapper, ObjectMapperOptions } from './Mapper';
const NAMESPACE = 'travian:v1';
@ -8,40 +9,6 @@ function join(...parts: Array<string>) {
return parts.map(p => p.replace(/[:]+$/g, '').replace(/^[:]+/g, '')).join(':');
}
interface EmptyObjectFactory<T> {
(): T;
}
interface ObjectMapper<T> {
(item: any): T;
}
interface ObjectMapperOptions<T> {
factory?: EmptyObjectFactory<T>;
mapper?: ObjectMapper<T>;
}
function createMapper<T>(options: ObjectMapperOptions<T>): ObjectMapper<T> {
const { mapper, factory } = options;
if (mapper) {
return mapper;
}
if (factory) {
return plain => {
let item = factory();
if (typeof plain === 'object' && typeof item === 'object') {
return Object.assign(item, plain) as T;
} else {
return item;
}
};
}
throw new Error('Factory or mapper must be specified');
}
export class DataStorage {
private readonly logger: Logger;
private readonly name: string;

View File

@ -1,4 +1,4 @@
import { DataStorage } from '../DataStorage';
import { DataStorage } from './DataStorage';
import { ExecutionSettings } from '../Executor';
const NAMESPACE = 'execution.v1';

View File

@ -1,4 +1,4 @@
import { DataStorage } from '../DataStorage';
import { DataStorage } from './DataStorage';
import { HeroAttributes } from '../Core/Hero';
const VILLAGE_ID_KEY = 'village_id';

View File

@ -1,4 +1,4 @@
import { DataStorage } from '../DataStorage';
import { DataStorage } from './DataStorage';
import { LogStorageInterface, StorageLogRecord } from '../Logger';
const RECORD_LIST_KEY = 'records';

33
src/Storage/Mapper.ts Normal file
View File

@ -0,0 +1,33 @@
interface EmptyObjectFactory<T> {
(): T;
}
interface ObjectMapper<T> {
(item: any): T;
}
export interface ObjectMapperOptions<T> {
factory?: EmptyObjectFactory<T>;
mapper?: ObjectMapper<T>;
}
export function createMapper<T>(options: ObjectMapperOptions<T>): ObjectMapper<T> {
const { mapper, factory } = options;
if (mapper) {
return mapper;
}
if (factory) {
return plain => {
let item = factory();
if (typeof plain === 'object' && typeof item === 'object') {
return Object.assign(item, plain) as T;
} else {
return item;
}
};
}
throw new Error('Factory or mapper must be specified');
}

View File

@ -1,4 +1,4 @@
import { DataStorage } from '../DataStorage';
import { DataStorage } from './DataStorage';
import { ResourceTransferReport } from '../ResourceTransfer';
const NAMESPACE = 'resource_transfer.v1';

View File

@ -1,4 +1,4 @@
import { DataStorage } from '../DataStorage';
import { DataStorage } from './DataStorage';
import { ActionStatistics, StatisticsStorageInterface } from '../Statistics';
const ACTION_STATISTICS_KEY = 'actions';

View File

@ -1,5 +1,5 @@
import { LogStorage } from './LogStorage';
import { DataStorage } from '../DataStorage';
import { DataStorage } from './DataStorage';
import { StatisticsStorage } from './StatisticsStorage';
export class StorageContainer {

View File

@ -1,4 +1,4 @@
import { DataStorage } from '../DataStorage';
import { DataStorage } from './DataStorage';
import { Resources, ResourcesInterface } from '../Core/Resources';
import { ResourceStorage } from '../Core/ResourceStorage';
import { IncomingMerchant, MerchantsInfo } from '../Core/Market';