Skip to content

Commit 6d6b4db

Browse files
authored
Merge pull request #2574 from RedisInsight/feature/RI-4926-send_utm_parameters
Feature/ri 4926 send utm parameters
2 parents bc1384a + 82f0332 commit 6d6b4db

20 files changed

+202
-59
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"start:web:public": "cross-env PUBLIC_DEV=true NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack serve --config ./configs/webpack.config.web.dev.ts",
4343
"test": "jest ./redisinsight/ui -w 1",
4444
"test:watch": "jest ./redisinsight/ui --watch -w 1",
45-
"test:cov": "jest ./redisinsight/ui --coverage -w 1",
45+
"test:cov": "jest ./redisinsight/ui --coverage --runInBand",
4646
"test:cov:unit": "jest ./redisinsight/ui --group=-component --coverage -w 1",
4747
"test:cov:component": "jest ./redisinsight/ui --group=component --coverage -w 1",
4848
"type-check:ui": "tsc --project redisinsight/ui --noEmit"

redisinsight/api/src/modules/cloud/common/models/cloud-request-utm.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ export class CloudRequestUtm {
1919
@IsOptional()
2020
@IsString()
2121
@IsNotEmpty()
22-
medium?: string;
22+
@Default('app')
23+
medium? = 'app';
2324

2425
@ApiPropertyOptional({
2526
type: String,

redisinsight/api/src/modules/cloud/common/providers/cloud.api.provider.spec.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,12 @@ const generateUtmQueryTests = [
1010
input: { source: 'source' },
1111
expected: new URLSearchParams([
1212
['utm_source', 'source'],
13-
['utm_medium', 'undefined'],
14-
['utm_campaign', 'undefined'],
1513
]),
1614
},
1715
{
1816
input: { medium: 'medium' },
1917
expected: new URLSearchParams([
20-
['utm_source', 'undefined'],
2118
['utm_medium', 'medium'],
22-
['utm_campaign', 'undefined'],
2319
]),
2420
},
2521
{
@@ -33,8 +29,6 @@ const generateUtmQueryTests = [
3329
{
3430
input: { campaign: 'campaign' },
3531
expected: new URLSearchParams([
36-
['utm_source', 'undefined'],
37-
['utm_medium', 'undefined'],
3832
['utm_campaign', 'campaign'],
3933
]),
4034
},

redisinsight/api/src/modules/cloud/common/providers/cloud.api.provider.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,28 @@ export class CloudApiProvider {
1818
return null;
1919
}
2020

21-
return new URLSearchParams([
22-
['utm_source', utm?.source],
23-
['utm_medium', utm?.medium],
24-
['utm_campaign', utm?.campaign],
25-
]);
21+
const params = new URLSearchParams();
22+
23+
if (utm?.source) {
24+
params.append('utm_source', utm.source);
25+
}
26+
27+
if (utm?.medium) {
28+
params.append('utm_medium', utm.medium);
29+
}
30+
31+
if (utm?.campaign) {
32+
params.append('utm_campaign', utm.campaign);
33+
}
34+
35+
return params;
2636
}
2737

2838
/**
2939
* Prepare header for authorized requests
3040
* @param credentials
3141
*/
32-
static getHeaders(credentials: ICloudApiCredentials) {
42+
static getHeaders(credentials: ICloudApiCredentials): { headers: {} } {
3343
const headers = {};
3444

3545
if (credentials?.accessToken) {

redisinsight/api/src/modules/cloud/job/cloud-job.controller.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import {
44
Controller, Get, Param, Post, UseInterceptors, UsePipes, ValidationPipe,
55
} from '@nestjs/common';
66
import { RequestSessionMetadata } from 'src/common/decorators';
7-
import { ApiTags } from '@nestjs/swagger';
7+
import { ApiExtraModels, ApiTags } from '@nestjs/swagger';
88
import { ApiEndpoint } from 'src/decorators/api-endpoint.decorator';
99
import { CloudJobService } from 'src/modules/cloud/job/cloud-job.service';
10-
import { CreateCloudJobDto } from 'src/modules/cloud/job/dto';
10+
import { CreateDatabaseCloudJobDataDto } from 'src/modules/cloud/job/dto/create-database.cloud-job.data.dto';
11+
import { CreateCloudJobDto } from 'src/modules/cloud/job/dto/create.cloud-job.dto';
1112
import { CloudJobInfo } from 'src/modules/cloud/job/models';
1213
import { CloudRequestUtm } from 'src/modules/cloud/common/models';
1314

15+
@ApiExtraModels(CreateDatabaseCloudJobDataDto)
1416
@ApiTags('Cloud Jobs')
1517
@UseInterceptors(ClassSerializerInterceptor)
1618
@Controller('cloud/me/jobs')

redisinsight/api/src/modules/cloud/job/cloud-job.gateway.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import {
55
WebSocketServer, WsException,
66
} from '@nestjs/websockets';
77
import {
8-
Logger, ValidationPipe
8+
Logger, ValidationPipe,
99
} from '@nestjs/common';
1010
import config from 'src/utils/config';
1111
import { CloudJobEvents } from 'src/modules/cloud/common/constants';
1212
import { CloudJobService } from 'src/modules/cloud/job/cloud-job.service';
13-
import { MonitorCloudJobDto } from 'src/modules/cloud/job/dto';
13+
import { MonitorCloudJobDto } from 'src/modules/cloud/job/dto/monitor.cloud-job.dto';
1414
import { Validator } from 'class-validator';
1515
import { plainToClass } from 'class-transformer';
1616
import { DEFAULT_SESSION_ID, DEFAULT_USER_ID } from 'src/common/constants';

redisinsight/api/src/modules/cloud/job/cloud-job.provider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { filter } from 'lodash';
22
import { CloudJob } from 'src/modules/cloud/job/jobs';
33
import { SessionMetadata } from 'src/common/models';
4-
import { CreateCloudJobDto } from 'src/modules/cloud/job/dto';
4+
import { CreateCloudJobDto } from 'src/modules/cloud/job/dto/create.cloud-job.dto';
55
import { CloudJobInfo, CloudJobRunMode } from 'src/modules/cloud/job/models';
66
import { CloudJobFactory } from 'src/modules/cloud/job/cloud-job.factory';
77
import { wrapHttpError } from 'src/common/utils';

redisinsight/api/src/modules/cloud/job/cloud-job.service.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ForbiddenException, Injectable } from '@nestjs/common';
22
import { SessionMetadata } from 'src/common/models';
3-
import { CreateCloudJobDto, MonitorCloudJobDto } from 'src/modules/cloud/job/dto';
3+
import { CreateCloudJobDto } from 'src/modules/cloud/job/dto/create.cloud-job.dto';
4+
import { MonitorCloudJobDto } from 'src/modules/cloud/job/dto/monitor.cloud-job.dto';
45
import { wrapHttpError } from 'src/common/utils';
56
import { CloudJobProvider } from 'src/modules/cloud/job/cloud-job.provider';
67
import { CloudJobInfo } from 'src/modules/cloud/job/models';
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { ApiProperty } from '@nestjs/swagger';
2+
import { IsNotEmpty, IsNumber } from 'class-validator';
3+
4+
export class CreateDatabaseCloudJobDataDto {
5+
@ApiProperty({
6+
description: 'Plan id for create a subscription.',
7+
type: Number,
8+
})
9+
@IsNumber()
10+
@IsNotEmpty()
11+
planId: number;
12+
}
Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,20 @@
1-
import { ApiProperty, ApiPropertyOptional, getSchemaPath } from '@nestjs/swagger';
1+
import {
2+
ApiExtraModels, ApiProperty, ApiPropertyOptional, getSchemaPath,
3+
} from '@nestjs/swagger';
24
import {
35
IsEnum,
46
IsNotEmpty,
5-
IsNumber,
7+
IsNotEmptyObject,
68
IsOptional,
79
ValidateNested,
810
} from 'class-validator';
9-
import { Expose } from 'class-transformer';
11+
import { Expose, Type } from 'class-transformer';
12+
import { cloudJobDataTransformer } from 'src/modules/cloud/job/transformers/cloud-job-data.transformer';
1013
import { CloudJobName } from 'src/modules/cloud/job/constants';
1114
import { CloudJobRunMode } from 'src/modules/cloud/job/models';
12-
// eslint-disable-next-line import/no-cycle
13-
import { cloudJobDataTransformer } from '../transformers/cloud-job-data.transformer';
14-
15-
export class CreateDatabaseCloudJobDataDto {
16-
@ApiProperty({
17-
description: 'Plan id for create a subscription.',
18-
type: Number,
19-
})
20-
@IsNumber()
21-
@IsNotEmpty()
22-
planId: number;
23-
}
15+
import { CreateDatabaseCloudJobDataDto } from 'src/modules/cloud/job/dto/create-database.cloud-job.data.dto';
2416

17+
@ApiExtraModels(CreateDatabaseCloudJobDataDto)
2518
export class CreateCloudJobDto {
2619
@ApiProperty({
2720
description: 'Job name to create',
@@ -45,13 +38,12 @@ export class CreateCloudJobDto {
4538
description: 'Any data for create a job.',
4639
oneOf: [
4740
{ $ref: getSchemaPath(CreateDatabaseCloudJobDataDto) },
48-
{ $ref: getSchemaPath(undefined) },
4941
],
50-
type: cloudJobDataTransformer,
5142
})
52-
@ValidateNested()
5343
@Expose()
54-
@IsNotEmpty()
5544
@IsOptional()
56-
data: CreateDatabaseCloudJobDataDto | undefined;
45+
@IsNotEmptyObject()
46+
@Type(cloudJobDataTransformer)
47+
@ValidateNested()
48+
data?: CreateDatabaseCloudJobDataDto;
5749
}

0 commit comments

Comments
 (0)