Skip to content

Commit 1acc900

Browse files
author
Artem
committed
#RI-4937 add utm parameters support for /me endpoint + fix schema
1 parent 736ef03 commit 1acc900

File tree

6 files changed

+39
-24
lines changed

6 files changed

+39
-24
lines changed

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.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/dto/create.cloud-job.dto.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
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,
57
IsNumber,
68
IsOptional,
79
ValidateNested,
810
} from 'class-validator';
9-
import { Expose } from 'class-transformer';
11+
import { Expose, Type } from 'class-transformer';
1012
import { CloudJobName } from 'src/modules/cloud/job/constants';
1113
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+
import { cloudJobDataTransformer } from 'src/modules/cloud/job/transformers/cloud-job-data.transformer';
1415

1516
export class CreateDatabaseCloudJobDataDto {
1617
@ApiProperty({
@@ -22,6 +23,7 @@ export class CreateDatabaseCloudJobDataDto {
2223
planId: number;
2324
}
2425

26+
@ApiExtraModels(CreateDatabaseCloudJobDataDto)
2527
export class CreateCloudJobDto {
2628
@ApiProperty({
2729
description: 'Job name to create',
@@ -45,13 +47,12 @@ export class CreateCloudJobDto {
4547
description: 'Any data for create a job.',
4648
oneOf: [
4749
{ $ref: getSchemaPath(CreateDatabaseCloudJobDataDto) },
48-
{ $ref: getSchemaPath(undefined) },
4950
],
50-
type: cloudJobDataTransformer,
5151
})
5252
@ValidateNested()
5353
@Expose()
5454
@IsNotEmpty()
5555
@IsOptional()
56+
@Type(cloudJobDataTransformer)
5657
data: CreateDatabaseCloudJobDataDto | undefined;
5758
}

redisinsight/api/src/modules/cloud/job/transformers/cloud-job-data.transformer.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { get } from 'lodash';
22
import { TypeHelpOptions } from 'class-transformer';
3-
// eslint-disable-next-line import/no-cycle
4-
import { CreateDatabaseCloudJobDataDto } from '../dto';
5-
import { CloudJobName } from '../constants';
3+
import { CreateDatabaseCloudJobDataDto } from 'src/modules/cloud/job/dto';
4+
import { CloudJobName } from 'src/modules/cloud/job/constants';
65

76
export const cloudJobDataTransformer = (data: TypeHelpOptions) => {
87
const jobName = get(data?.object, 'name');

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import {
22
ClassSerializerInterceptor,
3-
Controller, Get, Param, Put, UseInterceptors, UsePipes, ValidationPipe,
3+
Controller, Get, Param, Put, Query, UseInterceptors, UsePipes, ValidationPipe,
44
} from '@nestjs/common';
55
import { RequestSessionMetadata } from 'src/common/decorators';
66
import { ApiParam, ApiTags } from '@nestjs/swagger';
77
import { ApiEndpoint } from 'src/decorators/api-endpoint.decorator';
88
import { CloudUser } from 'src/modules/cloud/user/models';
99
import { CloudUserApiService } from 'src/modules/cloud/user/cloud-user.api.service';
10+
import { CloudRequestUtm } from 'src/modules/cloud/common/models';
1011

1112
@ApiTags('Cloud User')
1213
@UseInterceptors(ClassSerializerInterceptor)
@@ -23,8 +24,11 @@ export class CloudUserController {
2324
statusCode: 200,
2425
responses: [{ type: CloudUser }],
2526
})
26-
async me(@RequestSessionMetadata() sessionMetadata): Promise<CloudUser> {
27-
return this.service.me(sessionMetadata);
27+
async me(
28+
@RequestSessionMetadata() sessionMetadata,
29+
@Query() utm: CloudRequestUtm,
30+
): Promise<CloudUser> {
31+
return this.service.me(sessionMetadata, false, utm);
2832
}
2933

3034
@Put('/accounts/:id/current')

redisinsight/api/src/modules/cloud/user/providers/cloud-user.api.provider.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ export class CloudUserApiProvider extends CloudApiProvider {
3737
*/
3838
async getApiSessionId(credentials: ICloudApiCredentials, utm?: CloudRequestUtm): Promise<string> {
3939
try {
40-
const queryParameters = CloudApiProvider.generateUtmQuery(utm);
41-
const query = queryParameters ? `?${queryParameters.toString()}` : '';
42-
4340
const { headers } = await this.api.post(
44-
`login${query}`,
41+
'login',
4542
{},
46-
CloudApiProvider.getHeaders(credentials),
43+
{
44+
...CloudApiProvider.getHeaders(credentials),
45+
params: CloudApiProvider.generateUtmQuery(utm),
46+
},
4747
);
4848

4949
return get(headers, 'set-cookie', []).find(

0 commit comments

Comments
 (0)