Skip to content

Commit

Permalink
feat: allow every store to participate in transaction (#3016)
Browse files Browse the repository at this point in the history
  • Loading branch information
kwasniew committed Jan 30, 2023
1 parent cb9414a commit 96b21f0
Show file tree
Hide file tree
Showing 37 changed files with 110 additions and 99 deletions.
6 changes: 3 additions & 3 deletions src/lib/db/access-store.ts
@@ -1,5 +1,4 @@
import { EventEmitter } from 'events';
import { Knex } from 'knex';
import metricsHelper from '../util/metrics-helper';
import { DB_TIME } from '../metric-events';
import { Logger } from '../logger';
Expand All @@ -17,6 +16,7 @@ import {
ENVIRONMENT_PERMISSION_TYPE,
ROOT_PERMISSION_TYPE,
} from '../util/constants';
import { Db } from './db';

const T = {
ROLE_USER: 'role_user',
Expand Down Expand Up @@ -47,9 +47,9 @@ export class AccessStore implements IAccessStore {

private timer: Function;

private db: Knex;
private db: Db;

constructor(db: Knex, eventBus: EventEmitter, getLogger: Function) {
constructor(db: Db, eventBus: EventEmitter, getLogger: Function) {
this.db = db;
this.logger = getLogger('access-store.ts');
this.timer = (action: string) =>
Expand Down
6 changes: 3 additions & 3 deletions src/lib/db/account-store.ts
@@ -1,10 +1,10 @@
import { Knex } from 'knex';
import { Logger, LogProvider } from '../logger';
import User from '../types/user';

import NotFoundError from '../error/notfound-error';
import { IUserLookup } from '../types/stores/user-store';
import { IAccountStore } from '../types';
import { Db } from './db';

const TABLE = 'users';

Expand Down Expand Up @@ -47,11 +47,11 @@ const rowToUser = (row) => {
};

export class AccountStore implements IAccountStore {
private db: Knex;
private db: Db;

private logger: Logger;

constructor(db: Knex, getLogger: LogProvider) {
constructor(db: Db, getLogger: LogProvider) {
this.db = db;
this.logger = getLogger('account-store.ts');
}
Expand Down
6 changes: 3 additions & 3 deletions src/lib/db/addon-store.ts
@@ -1,11 +1,11 @@
import { Knex } from 'knex';
import EventEmitter from 'events';
import { Logger, LogProvider } from '../logger';
import { IAddon, IAddonDto, IAddonStore } from '../types/stores/addon-store';

import metricsHelper from '../util/metrics-helper';
import { DB_TIME } from '../metric-events';
import NotFoundError from '../error/notfound-error';
import { Db } from './db';

const COLUMNS = [
'id',
Expand All @@ -20,13 +20,13 @@ const COLUMNS = [
const TABLE = 'addons';

export default class AddonStore implements IAddonStore {
private db: Knex;
private db: Db;

private logger: Logger;

private readonly timer: Function;

constructor(db: Knex, eventBus: EventEmitter, getLogger: LogProvider) {
constructor(db: Db, eventBus: EventEmitter, getLogger: LogProvider) {
this.db = db;
this.logger = getLogger('addons-store.ts');
this.timer = (action) =>
Expand Down
6 changes: 3 additions & 3 deletions src/lib/db/api-token-store.ts
@@ -1,5 +1,4 @@
import { EventEmitter } from 'events';
import { Knex } from 'knex';
import metricsHelper from '../util/metrics-helper';
import { DB_TIME } from '../metric-events';
import { Logger, LogProvider } from '../logger';
Expand All @@ -12,6 +11,7 @@ import {
isAllProjects,
} from '../types/models/api-token';
import { ALL_PROJECTS } from '../util/constants';
import { Db } from './db';

const TABLE = 'api_tokens';
const API_LINK_TABLE = 'api_token_project';
Expand Down Expand Up @@ -80,9 +80,9 @@ export class ApiTokenStore implements IApiTokenStore {

private timer: Function;

private db: Knex;
private db: Db;

constructor(db: Knex, eventBus: EventEmitter, getLogger: LogProvider) {
constructor(db: Db, eventBus: EventEmitter, getLogger: LogProvider) {
this.db = db;
this.logger = getLogger('api-tokens.js');
this.timer = (action: string) =>
Expand Down
6 changes: 3 additions & 3 deletions src/lib/db/client-applications-store.ts
@@ -1,12 +1,12 @@
import EventEmitter from 'events';
import { Knex } from 'knex';
import NotFoundError from '../error/notfound-error';
import {
IClientApplication,
IClientApplicationsStore,
} from '../types/stores/client-applications-store';
import { Logger, LogProvider } from '../logger';
import { IApplicationQuery } from '../types/query';
import { Db } from './db';

const COLUMNS = [
'app_name',
Expand Down Expand Up @@ -60,11 +60,11 @@ const remapRow = (input) => {
export default class ClientApplicationsStore
implements IClientApplicationsStore
{
private db: Knex;
private db: Db;

private logger: Logger;

constructor(db: Knex, eventBus: EventEmitter, getLogger: LogProvider) {
constructor(db: Db, eventBus: EventEmitter, getLogger: LogProvider) {
this.db = db;
this.logger = getLogger('client-applications-store.ts');
}
Expand Down
6 changes: 3 additions & 3 deletions src/lib/db/client-instance-store.ts
@@ -1,5 +1,4 @@
import EventEmitter from 'events';
import { Knex } from 'knex';
import { Logger, LogProvider } from '../logger';
import {
IClientInstance,
Expand All @@ -8,6 +7,7 @@ import {
} from '../types/stores/client-instance-store';
import { hoursToMilliseconds, subDays } from 'date-fns';
import Timeout = NodeJS.Timeout;
import { Db } from './db';

const metricsHelper = require('../util/metrics-helper');
const { DB_TIME } = require('../metric-events');
Expand Down Expand Up @@ -43,7 +43,7 @@ const mapToDb = (client) => ({
});

export default class ClientInstanceStore implements IClientInstanceStore {
private db: Knex;
private db: Db;

private logger: Logger;

Expand All @@ -53,7 +53,7 @@ export default class ClientInstanceStore implements IClientInstanceStore {

private timer: Timeout;

constructor(db: Knex, eventBus: EventEmitter, getLogger: LogProvider) {
constructor(db: Db, eventBus: EventEmitter, getLogger: LogProvider) {
this.db = db;
this.eventBus = eventBus;
this.logger = getLogger('client-instance-store.ts');
Expand Down
6 changes: 3 additions & 3 deletions src/lib/db/client-metrics-store-v2.ts
@@ -1,4 +1,3 @@
import { Knex } from 'knex';
import { Logger, LogProvider } from '../logger';
import {
IClientMetricsEnv,
Expand All @@ -8,6 +7,7 @@ import {
import NotFoundError from '../error/notfound-error';
import { startOfHour } from 'date-fns';
import { collapseHourlyMetrics } from '../util/collapseHourlyMetrics';
import { Db } from './db';

interface ClientMetricsEnvTable {
feature_name: string;
Expand Down Expand Up @@ -39,11 +39,11 @@ const toRow = (metric: IClientMetricsEnv): ClientMetricsEnvTable => ({
});

export class ClientMetricsStoreV2 implements IClientMetricsStoreV2 {
private db: Knex;
private db: Db;

private logger: Logger;

constructor(db: Knex, getLogger: LogProvider) {
constructor(db: Db, getLogger: LogProvider) {
this.db = db;
this.logger = getLogger('client-metrics-store-v2.js');
}
Expand Down
6 changes: 3 additions & 3 deletions src/lib/db/context-field-store.ts
@@ -1,4 +1,4 @@
import { Knex } from 'knex';
import { Db } from './db';
import { Logger, LogProvider } from '../logger';
import {
IContextField,
Expand Down Expand Up @@ -45,11 +45,11 @@ interface ICreateContextField {
}

class ContextFieldStore implements IContextFieldStore {
private db: Knex;
private db: Db;

private logger: Logger;

constructor(db: Knex, getLogger: LogProvider) {
constructor(db: Db, getLogger: LogProvider) {
this.db = db;
this.logger = getLogger('context-field-store.ts');
}
Expand Down
3 changes: 3 additions & 0 deletions src/lib/db/db.ts
@@ -0,0 +1,3 @@
import { Knex } from 'knex';

export type Db = Knex | Knex.Transaction;
6 changes: 3 additions & 3 deletions src/lib/db/environment-store.ts
@@ -1,5 +1,5 @@
import EventEmitter from 'events';
import { Knex } from 'knex';
import { Db } from './db';
import { Logger, LogProvider } from '../logger';
import metricsHelper from '../util/metrics-helper';
import { DB_TIME } from '../metric-events';
Expand Down Expand Up @@ -95,11 +95,11 @@ const TABLE = 'environments';
export default class EnvironmentStore implements IEnvironmentStore {
private logger: Logger;

private db: Knex;
private db: Db;

private timer: (string) => any;

constructor(db: Knex, eventBus: EventEmitter, getLogger: LogProvider) {
constructor(db: Db, eventBus: EventEmitter, getLogger: LogProvider) {
this.db = db;
this.logger = getLogger('db/environment-store.ts');
this.timer = (action) =>
Expand Down
7 changes: 4 additions & 3 deletions src/lib/db/event-store.ts
@@ -1,10 +1,11 @@
import { Knex } from 'knex';
import { IEvent, IBaseEvent } from '../types/events';
import { LogProvider, Logger } from '../logger';
import { IEventStore } from '../types/stores/event-store';
import { ITag } from '../types/model';
import { SearchEventsSchema } from '../openapi/spec/search-events-schema';
import { AnyEventEmitter } from '../util/anyEventEmitter';
import { Db } from './db';
import { Knex } from 'knex';

const EVENT_COLUMNS = [
'id',
Expand Down Expand Up @@ -76,11 +77,11 @@ export interface IEventTable {
const TABLE = 'events';

class EventStore extends AnyEventEmitter implements IEventStore {
private db: Knex;
private db: Db;

private logger: Logger;

constructor(db: Knex, getLogger: LogProvider) {
constructor(db: Db, getLogger: LogProvider) {
super();
this.db = db;
this.logger = getLogger('lib/db/event-store.ts');
Expand Down
6 changes: 3 additions & 3 deletions src/lib/db/favorite-features-store.ts
@@ -1,9 +1,9 @@
import EventEmitter from 'events';
import { IFavoriteFeaturesStore } from '../types';
import { Logger, LogProvider } from '../logger';
import { Knex } from 'knex';
import { IFavoriteFeatureKey } from '../types/stores/favorite-features';
import { IFavoriteFeature } from '../types/favorites';
import { Db } from './db';

const T = {
FAVORITE_FEATURES: 'favorite_features',
Expand All @@ -28,9 +28,9 @@ export class FavoriteFeaturesStore implements IFavoriteFeaturesStore {

private eventBus: EventEmitter;

private db: Knex;
private db: Db;

constructor(db: Knex, eventBus: EventEmitter, getLogger: LogProvider) {
constructor(db: Db, eventBus: EventEmitter, getLogger: LogProvider) {
this.db = db;
this.eventBus = eventBus;
this.logger = getLogger('lib/db/favorites-store.ts');
Expand Down
6 changes: 3 additions & 3 deletions src/lib/db/favorite-projects-store.ts
@@ -1,11 +1,11 @@
import EventEmitter from 'events';
import { Logger, LogProvider } from '../logger';
import { Knex } from 'knex';
import { IFavoriteProject } from '../types/favorites';
import {
IFavoriteProjectKey,
IFavoriteProjectsStore,
} from '../types/stores/favorite-projects';
import { Db } from './db';

const T = {
FAVORITE_PROJECTS: 'favorite_projects',
Expand All @@ -30,9 +30,9 @@ export class FavoriteProjectsStore implements IFavoriteProjectsStore {

private eventBus: EventEmitter;

private db: Knex;
private db: Db;

constructor(db: Knex, eventBus: EventEmitter, getLogger: LogProvider) {
constructor(db: Db, eventBus: EventEmitter, getLogger: LogProvider) {
this.db = db;
this.eventBus = eventBus;
this.logger = getLogger('lib/db/favorites-store.ts');
Expand Down
6 changes: 3 additions & 3 deletions src/lib/db/feature-environment-store.ts
@@ -1,5 +1,4 @@
import EventEmitter from 'events';
import { Knex } from 'knex';
import {
FeatureEnvironmentKey,
IFeatureEnvironmentStore,
Expand All @@ -10,6 +9,7 @@ import { DB_TIME } from '../metric-events';
import { IFeatureEnvironment, IVariant } from '../types/model';
import NotFoundError from '../error/notfound-error';
import { v4 as uuidv4 } from 'uuid';
import { Db } from './db';

const T = {
featureEnvs: 'feature_environments',
Expand All @@ -30,13 +30,13 @@ interface ISegmentRow {
}

export class FeatureEnvironmentStore implements IFeatureEnvironmentStore {
private db: Knex;
private db: Db;

private logger: Logger;

private readonly timer: Function;

constructor(db: Knex, eventBus: EventEmitter, getLogger: LogProvider) {
constructor(db: Db, eventBus: EventEmitter, getLogger: LogProvider) {
this.db = db;
this.logger = getLogger('feature-environment-store.ts');
this.timer = (action) =>
Expand Down
5 changes: 3 additions & 2 deletions src/lib/db/feature-strategy-store.ts
Expand Up @@ -23,6 +23,7 @@ import { mapValues } from '../util/map-values';
import { IFlagResolver } from '../types/experimental';
import { IFeatureProjectUserParams } from '../routes/admin-api/project/features';
import Raw = Knex.Raw;
import { Db } from './db';

const COLUMNS = [
'id',
Expand Down Expand Up @@ -117,7 +118,7 @@ function mapStrategyUpdate(
}

class FeatureStrategiesStore implements IFeatureStrategiesStore {
private db: Knex;
private db: Db;

private logger: Logger;

Expand All @@ -126,7 +127,7 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
private flagResolver: IFlagResolver;

constructor(
db: Knex,
db: Db,
eventBus: EventEmitter,
getLogger: LogProvider,
flagResolver: IFlagResolver,
Expand Down
6 changes: 3 additions & 3 deletions src/lib/db/feature-tag-store.ts
@@ -1,4 +1,3 @@
import { Knex } from 'knex';
import { EventEmitter } from 'stream';
import { Logger, LogProvider } from '../logger';
import { ITag } from '../types/model';
Expand All @@ -11,6 +10,7 @@ import {
IFeatureTag,
IFeatureTagStore,
} from '../types/stores/feature-tag-store';
import { Db } from './db';

const COLUMNS = ['feature_name', 'tag_type', 'tag_value'];
const TABLE = 'feature_tag';
Expand All @@ -22,13 +22,13 @@ interface FeatureTagTable {
}

class FeatureTagStore implements IFeatureTagStore {
private db: Knex;
private db: Db;

private logger: Logger;

private readonly timer: Function;

constructor(db: Knex, eventBus: EventEmitter, getLogger: LogProvider) {
constructor(db: Db, eventBus: EventEmitter, getLogger: LogProvider) {
this.db = db;
this.logger = getLogger('feature-tag-store.ts');
this.timer = (action) =>
Expand Down

0 comments on commit 96b21f0

Please sign in to comment.