Skip to content

Commit a757684

Browse files
committed
feat(user): add UTM parameters support in user creation and sign-up
1 parent 81dcb5f commit a757684

3 files changed

Lines changed: 48 additions & 5 deletions

File tree

src/models/usersFactory.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,23 @@ export default class UsersFactory extends AbstractModelFactory<UserDBScheme, Use
6262
* Creates new user in DB and returns it
6363
* @param email - user email
6464
* @param password - user password
65+
* @param utm - UTM parameters
6566
*/
66-
public async create(email: string, password?: string): Promise<UserModel> {
67-
const generatedPassword = password || await UserModel.generatePassword();
67+
public async create(email: string, password?: string, utm?: any): Promise<UserModel> {
68+
const generatedPassword = password || (await UserModel.generatePassword());
6869
const hashedPassword = await UserModel.hashPassword(generatedPassword);
6970

70-
const userData = {
71+
const userData: any = {
7172
email,
7273
password: hashedPassword,
7374
notifications: UserModel.generateDefaultNotificationsSettings(email),
7475
};
76+
77+
// Add UTM data if provided
78+
if (utm && Object.keys(utm).length > 0) {
79+
userData.utm = utm;
80+
}
81+
7582
const userId = (await this.collection.insertOne(userData)).insertedId;
7683

7784
const user = new UserModel({

src/resolvers/user.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,18 @@ export default {
3737
* Register user with provided email
3838
* @param _obj - parent object (undefined for this resolver)
3939
* @param email - user email
40+
* @param utm - UTM parameters
4041
* @param factories - factories for working with models
4142
*/
4243
async signUp(
4344
_obj: undefined,
44-
{ email }: {email: string},
45+
{ email, utm }: { email: string; utm?: any },
4546
{ factories }: ResolverContextBase
4647
): Promise<boolean | string> {
4748
let user;
4849

4950
try {
50-
user = await factories.usersFactory.create(email);
51+
user = await factories.usersFactory.create(email, undefined, utm);
5152

5253
const password = user.generatedPassword!;
5354

src/typeDefs/user.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,36 @@ import { gql } from 'apollo-server-express';
22
import isE2E from '../utils/isE2E';
33

44
export default gql`
5+
"""
6+
UTM parameters input type
7+
"""
8+
input UtmInput {
9+
"""
10+
UTM source
11+
"""
12+
source: String
13+
14+
"""
15+
UTM medium
16+
"""
17+
medium: String
18+
19+
"""
20+
UTM campaign
21+
"""
22+
campaign: String
23+
24+
"""
25+
UTM content
26+
"""
27+
content: String
28+
29+
"""
30+
UTM term
31+
"""
32+
term: String
33+
}
34+
535
"""
636
Authentication token
737
"""
@@ -72,6 +102,11 @@ export default gql`
72102
Registration email
73103
"""
74104
email: String! @validate(isEmail: true)
105+
106+
"""
107+
UTM parameters
108+
"""
109+
utm: UtmInput
75110
): ${isE2E ? 'String!' : 'Boolean!'}
76111
77112
"""

0 commit comments

Comments
 (0)