diff --git a/.github/workflows/build_prs_jest_report.yaml b/.github/workflows/build_prs_jest_report.yaml index 7a34807384..ca7c5ee8c8 100644 --- a/.github/workflows/build_prs_jest_report.yaml +++ b/.github/workflows/build_prs_jest_report.yaml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest permissions: contents: read - pull_requests: write + pull-requests: write name: build # temporary solution to trick branch protection rules services: diff --git a/src/lib/db/event-store.ts b/src/lib/db/event-store.ts index 402a8aac0c..8bd71d40f9 100644 --- a/src/lib/db/event-store.ts +++ b/src/lib/db/event-store.ts @@ -1,4 +1,4 @@ -import EventStore from '../features/events/event-store.js'; +import { EventStore } from '../features/events/event-store.js'; // For backward compatibility export * from '../features/events/event-store.js'; export default EventStore; diff --git a/src/lib/db/index.ts b/src/lib/db/index.ts index 696731e28c..1b5344d762 100644 --- a/src/lib/db/index.ts +++ b/src/lib/db/index.ts @@ -7,7 +7,7 @@ import { ReleasePlanTemplateStore, } from '../types/index.js'; -import EventStore from '../features/events/event-store.js'; +import { EventStore } from '../features/events/event-store.js'; import FeatureToggleStore from '../features/feature-toggle/feature-toggle-store.js'; import FeatureTypeStore from './feature-type-store.js'; import StrategyStore from './strategy-store.js'; diff --git a/src/lib/features/client-feature-toggles/delta/createClientFeatureToggleDelta.ts b/src/lib/features/client-feature-toggles/delta/createClientFeatureToggleDelta.ts index b2793f15bc..be00ea35ec 100644 --- a/src/lib/features/client-feature-toggles/delta/createClientFeatureToggleDelta.ts +++ b/src/lib/features/client-feature-toggles/delta/createClientFeatureToggleDelta.ts @@ -1,5 +1,5 @@ import { ClientFeatureToggleDelta } from './client-feature-toggle-delta.js'; -import EventStore from '../../events/event-store.js'; +import { EventStore } from '../../events/event-store.js'; import ConfigurationRevisionService from '../../feature-toggle/configuration-revision-service.js'; import type { IUnleashConfig } from '../../../types/index.js'; import type { Db } from '../../../db/db.js'; diff --git a/src/lib/features/events/createEventsService.ts b/src/lib/features/events/createEventsService.ts index 4f01550c5d..21faea87aa 100644 --- a/src/lib/features/events/createEventsService.ts +++ b/src/lib/features/events/createEventsService.ts @@ -1,7 +1,7 @@ import FakeEventStore from '../../../test/fixtures/fake-event-store.js'; import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store.js'; import type { Db } from '../../db/db.js'; -import EventStore from './event-store.js'; +import { EventStore } from './event-store.js'; import FeatureTagStore from '../../db/feature-tag-store.js'; import { EventService } from '../../services/index.js'; import type { diff --git a/src/lib/features/events/event-created-by-migration.test.ts b/src/lib/features/events/event-created-by-migration.test.ts index f3fd35ba25..13b5434249 100644 --- a/src/lib/features/events/event-created-by-migration.test.ts +++ b/src/lib/features/events/event-created-by-migration.test.ts @@ -1,4 +1,4 @@ -import EventStore from './event-store.js'; +import { EventStore } from './event-store.js'; import getLogger from '../../../test/fixtures/no-logger.js'; import dbInit, { type ITestDb, diff --git a/src/lib/features/events/event-store.test.ts b/src/lib/features/events/event-store.test.ts index 3933c5ed0d..909cd27ae9 100644 --- a/src/lib/features/events/event-store.test.ts +++ b/src/lib/features/events/event-store.test.ts @@ -1,5 +1,5 @@ import knex from 'knex'; -import EventStore from './event-store.js'; +import { EventStore } from './event-store.js'; import getLogger from '../../../test/fixtures/no-logger.js'; import { subHours, formatRFC3339 } from 'date-fns'; import dbInit from '../../../test/e2e/helpers/database-init.js'; diff --git a/src/lib/features/events/event-store.ts b/src/lib/features/events/event-store.ts index d06fe038bc..0b08abf52e 100644 --- a/src/lib/features/events/event-store.ts +++ b/src/lib/features/events/event-store.ts @@ -101,7 +101,7 @@ export interface IEventTable { const TABLE = 'events'; -class EventStore implements IEventStore { +export class EventStore implements IEventStore { private db: Db; // only one shared event emitter should exist across all event store instances @@ -375,7 +375,7 @@ class EventStore implements IEventStore { ): Promise { const query = this.buildSearchQuery(queryParams, params.query) .select(options?.withIp ? [...EVENT_COLUMNS, 'ip'] : EVENT_COLUMNS) - .orderBy('created_at', 'desc') + .orderBy('created_at', params.order || 'desc') .limit(Number(params.limit) ?? 100) .offset(Number(params.offset) ?? 0); diff --git a/src/lib/features/feature-lifecycle/createFeatureLifecycle.ts b/src/lib/features/feature-lifecycle/createFeatureLifecycle.ts index 124095d60d..97b3713f03 100644 --- a/src/lib/features/feature-lifecycle/createFeatureLifecycle.ts +++ b/src/lib/features/feature-lifecycle/createFeatureLifecycle.ts @@ -3,7 +3,7 @@ import { FakeFeatureLifecycleStore } from './fake-feature-lifecycle-store.js'; import { FeatureLifecycleService } from './feature-lifecycle-service.js'; import FakeEnvironmentStore from '../project-environments/fake-environment-store.js'; import type { IUnleashConfig } from '../../types/index.js'; -import EventStore from '../../db/event-store.js'; +import { EventStore } from '../../db/event-store.js'; import type { Db } from '../../db/db.js'; import { FeatureLifecycleStore } from './feature-lifecycle-store.js'; import EnvironmentStore from '../project-environments/environment-store.js'; diff --git a/src/lib/features/instance-stats/createInstanceStatsService.ts b/src/lib/features/instance-stats/createInstanceStatsService.ts index d4ebbbf1fb..79d5776d37 100644 --- a/src/lib/features/instance-stats/createInstanceStatsService.ts +++ b/src/lib/features/instance-stats/createInstanceStatsService.ts @@ -20,7 +20,7 @@ import SegmentStore from '../segment/segment-store.js'; import RoleStore from '../../db/role-store.js'; import SettingStore from '../../db/setting-store.js'; import ClientInstanceStore from '../../db/client-instance-store.js'; -import EventStore from '../events/event-store.js'; +import { EventStore } from '../events/event-store.js'; import { ApiTokenStore } from '../../db/api-token-store.js'; import { ClientMetricsStoreV2 } from '../metrics/client-metrics/client-metrics-store-v2.js'; import VersionService from '../../services/version-service.js'; diff --git a/src/lib/features/personal-dashboard/createPersonalDashboardService.ts b/src/lib/features/personal-dashboard/createPersonalDashboardService.ts index 10deaeadff..c446ebc254 100644 --- a/src/lib/features/personal-dashboard/createPersonalDashboardService.ts +++ b/src/lib/features/personal-dashboard/createPersonalDashboardService.ts @@ -7,7 +7,7 @@ import { ProjectOwnersReadModel } from '../project/project-owners-read-model.js' import { FakeProjectOwnersReadModel } from '../project/fake-project-owners-read-model.js'; import { ProjectReadModel } from '../project/project-read-model.js'; import { FakeProjectReadModel } from '../project/fake-project-read-model.js'; -import EventStore from '../../db/event-store.js'; +import { EventStore } from '../../db/event-store.js'; import { FeatureEventFormatterMd } from '../../addons/feature-event-formatter-md.js'; import FakeEventStore from '../../../test/fixtures/fake-event-store.js'; import { FakePrivateProjectChecker } from '../private-project/fakePrivateProjectChecker.js'; diff --git a/src/lib/features/project-status/createProjectStatusService.ts b/src/lib/features/project-status/createProjectStatusService.ts index 2981bbe834..6d9b2a8ba4 100644 --- a/src/lib/features/project-status/createProjectStatusService.ts +++ b/src/lib/features/project-status/createProjectStatusService.ts @@ -1,6 +1,6 @@ import type { Db, IUnleashConfig } from '../../types/index.js'; import { ProjectStatusService } from './project-status-service.js'; -import EventStore from '../events/event-store.js'; +import { EventStore } from '../events/event-store.js'; import FakeEventStore from '../../../test/fixtures/fake-event-store.js'; import ProjectStore from '../project/project-store.js'; import FakeProjectStore from '../../../test/fixtures/fake-project-store.js'; diff --git a/src/lib/features/project/createProjectService.ts b/src/lib/features/project/createProjectService.ts index cf124e6491..03051e44b6 100644 --- a/src/lib/features/project/createProjectService.ts +++ b/src/lib/features/project/createProjectService.ts @@ -1,5 +1,5 @@ import type { Db, IUnleashConfig } from '../../types/index.js'; -import EventStore from '../events/event-store.js'; +import { EventStore } from '../events/event-store.js'; import GroupStore from '../../db/group-store.js'; import { AccountStore } from '../../db/account-store.js'; import EnvironmentStore from '../project-environments/environment-store.js'; diff --git a/src/lib/server-impl.ts b/src/lib/server-impl.ts index 48999593a8..a86a005ff7 100644 --- a/src/lib/server-impl.ts +++ b/src/lib/server-impl.ts @@ -126,7 +126,7 @@ import metricsHelper from './util/metrics-helper.js'; import type { ReleasePlanMilestoneWriteModel } from './features/release-plans/release-plan-milestone-store.js'; import type { ReleasePlanMilestoneStrategyWriteModel } from './features/release-plans/release-plan-milestone-strategy-store.js'; import type { IChangeRequestAccessReadModel } from './features/change-request-access-service/change-request-access-read-model.js'; -import EventStore from './db/event-store.js'; +import { EventStore } from './db/event-store.js'; import RoleStore from './db/role-store.js'; import { AccessStore } from './db/access-store.js'; import { diff --git a/src/lib/types/stores/event-store.ts b/src/lib/types/stores/event-store.ts index 581cd03316..41331db1c1 100644 --- a/src/lib/types/stores/event-store.ts +++ b/src/lib/types/stores/event-store.ts @@ -15,6 +15,7 @@ export interface IEventSearchParams { createdBy?: string; type?: string; environment?: string; + order?: 'asc' | 'desc'; // desc by default offset: number; limit: number; }