diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 99988d37..65f0d242 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,8 +65,6 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@v4 - with: - version: 11 - name: Setup Node uses: actions/setup-node@v4 @@ -113,8 +111,6 @@ jobs: - name: Setup pnpm uses: pnpm/action-setup@v4 - with: - version: 11 - name: Setup Node uses: actions/setup-node@v4 diff --git a/package.json b/package.json index 52b02196..ab34f06b 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "author": "", "private": true, "license": "UNLICENSED", + "packageManager": "pnpm@9.1.0", + "prNote": "Added packageManager field per issue #1209", "scripts": { "license:scan": "node scripts/scan-licenses.js", "build": "nest build", diff --git a/src/ab-testing/entities/experiment-metric.entity.ts b/src/ab-testing/entities/experiment-metric.entity.ts index e03e83b4..5f481b85 100644 --- a/src/ab-testing/entities/experiment-metric.entity.ts +++ b/src/ab-testing/entities/experiment-metric.entity.ts @@ -6,6 +6,7 @@ import { UpdateDateColumn, ManyToOne, VersionColumn, + Index, } from 'typeorm'; import { Experiment } from './experiment.entity'; export enum MetricType { @@ -20,6 +21,10 @@ export enum MetricType { * Represents the experiment Metric entity. */ @Entity({ name: 'experiment_metrics' }) +@Index('IDX_experiment_metrics_experiment_id', ['experiment']) +@Index('IDX_experiment_metrics_type', ['type']) +@Index('IDX_experiment_metrics_created_at', ['createdAt']) +@Index('IDX_experiment_metrics_experiment_is_primary', ['experiment', 'isPrimary']) export class ExperimentMetric { @PrimaryGeneratedColumn('uuid') id: string; diff --git a/src/ab-testing/entities/variant-metric.entity.ts b/src/ab-testing/entities/variant-metric.entity.ts index 4355ddce..6da09579 100644 --- a/src/ab-testing/entities/variant-metric.entity.ts +++ b/src/ab-testing/entities/variant-metric.entity.ts @@ -6,12 +6,14 @@ import { UpdateDateColumn, ManyToOne, VersionColumn, + Index, } from 'typeorm'; import { IExperimentVariant } from './experiment-variant.entity'; /** * Represents the variant Metric entity. */ +@Index('IDX_variant_metrics_variant_createdAt', ['variant', 'createdAt']) @Entity({ name: 'variant_metrics' }) export class VariantMetric { @PrimaryGeneratedColumn('uuid') diff --git a/src/achievements/achievements.seed.ts b/src/achievements/achievements.seed.ts index 3435280a..2e0e373a 100644 --- a/src/achievements/achievements.seed.ts +++ b/src/achievements/achievements.seed.ts @@ -1,5 +1,4 @@ import { AchievementType, AchievementDifficulty } from './entities/achievement.entity'; -import { Logger } from '@nestjs/common'; /** * Seed data for default achievements diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index c17cd1db..197e54c4 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -20,7 +20,6 @@ import { RegisterDto } from './dto/register.dto'; import { RefreshTokenDto } from './dto/refresh-token.dto'; import { InjectRepository } from '@nestjs/typeorm'; import { User } from '../users/entities/user.entity'; -import { Tenant } from '../tenancy/entities/tenant.entity'; import { Repository } from 'typeorm'; import * as bcrypt from 'bcrypt'; import { JwtAuthGuard } from './guards/jwt-auth.guard'; diff --git a/src/email-marketing/automation/automation.service.ts b/src/email-marketing/automation/automation.service.ts index db4f4215..e6ec21a9 100644 --- a/src/email-marketing/automation/automation.service.ts +++ b/src/email-marketing/automation/automation.service.ts @@ -22,7 +22,7 @@ import { TriggerType } from '../enums/trigger-type.enum'; import { ActionType } from '../enums/action-type.enum'; import { WorkflowStatus } from '../enums/workflow-status.enum'; -function validateWebhookUrl(urlStr: string): void { +function _validateWebhookUrl(urlStr: string): void { if (!urlStr) return; let parsedUrl: URL; try { diff --git a/src/migrations/1599999999999-BaselineSchema.ts b/src/migrations/1599999999999-BaselineSchema.ts index c85bb6a6..58db203f 100644 --- a/src/migrations/1599999999999-BaselineSchema.ts +++ b/src/migrations/1599999999999-BaselineSchema.ts @@ -2310,7 +2310,7 @@ export class BaselineSchema1599999999999 implements MigrationInterface { `); } - public async down(queryRunner: QueryRunner): Promise { + public async down(_queryRunner: QueryRunner): Promise { // Dropping the entire baseline schema is handled by `migration:revert` // in reverse order; the tables are dropped as their corresponding // migrations are reverted. diff --git a/src/migrations/1801000000000-add-experiment-metric-indexes.ts b/src/migrations/1801000000000-add-experiment-metric-indexes.ts new file mode 100644 index 00000000..25b0289d --- /dev/null +++ b/src/migrations/1801000000000-add-experiment-metric-indexes.ts @@ -0,0 +1,34 @@ +import { MigrationInterface, QueryRunner, TableIndex } from 'typeorm'; + +export class AddExperimentMetricIndexes1801000000000 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createIndices('experiment_metrics', [ + new TableIndex({ + name: 'IDX_experiment_metrics_experiment_id', + columnNames: ['experimentId'], + }), + new TableIndex({ + name: 'IDX_experiment_metrics_type', + columnNames: ['type'], + }), + new TableIndex({ + name: 'IDX_experiment_metrics_created_at', + columnNames: ['createdAt'], + }), + new TableIndex({ + name: 'IDX_experiment_metrics_experiment_is_primary', + columnNames: ['experimentId', 'isPrimary'], + }), + ]); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropIndex( + 'experiment_metrics', + 'IDX_experiment_metrics_experiment_is_primary', + ); + await queryRunner.dropIndex('experiment_metrics', 'IDX_experiment_metrics_created_at'); + await queryRunner.dropIndex('experiment_metrics', 'IDX_experiment_metrics_type'); + await queryRunner.dropIndex('experiment_metrics', 'IDX_experiment_metrics_experiment_id'); + } +} diff --git a/src/migrations/1802000000000-add-variant-metric-indexes.ts b/src/migrations/1802000000000-add-variant-metric-indexes.ts new file mode 100644 index 00000000..21b48a3f --- /dev/null +++ b/src/migrations/1802000000000-add-variant-metric-indexes.ts @@ -0,0 +1,16 @@ +import { MigrationInterface, QueryRunner, TableIndex } from 'typeorm'; + +export class AddVariantMetricIndexes1802000000000 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.createIndices('variant_metrics', [ + new TableIndex({ + name: 'IDX_variant_metrics_variant_createdAt', + columnNames: ['variantId', 'createdAt'], + }), + ]); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.dropIndex('variant_metrics', 'IDX_variant_metrics_variant_createdAt'); + } +} diff --git a/src/payments/providers/payment-provider.service.ts b/src/payments/providers/payment-provider.service.ts index ec21c9dc..64c7ab4e 100644 --- a/src/payments/providers/payment-provider.service.ts +++ b/src/payments/providers/payment-provider.service.ts @@ -38,7 +38,7 @@ export class PaymentProviderService { userId: string, amount: number, currency: string, - metadata: Record = {}, + _metadata: Record = {}, ): Promise { // TODO: replace with real Stripe call: // const intent = await stripe.paymentIntents.create({ amount: Math.round(amount * 100), currency, ... }); @@ -58,7 +58,7 @@ export class PaymentProviderService { userId: string, amount: number, currency: string, - metadata: Record = {}, + _metadata: Record = {}, ): Promise { // TODO: replace with real Stripe call: // const credit = await stripe.customers.createBalanceTransaction(customerId, { amount: -Math.round(amount * 100), currency });