Skip to content

Commit 0262753

Browse files
committed
fixing registration flow
1 parent 4e51355 commit 0262753

12 files changed

+46
-17
lines changed

migrations/1696849524727-createUsersTable.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ export class CreateUsersTable1696849524727 implements MigrationInterface {
77
name: 'users',
88
columns: [
99
{name: "id",type: "int",isPrimary: true,isGenerated: true},
10+
{name: "code",type: "varchar",isNullable: false},
11+
{name: "referral",type: "varchar",isNullable: true},
1012
{name: "uuid",type: "varchar",isUnique: true},
1113
{name: "name", type: "varchar"},
1214
{name: "username",type: "varchar",isUnique: true},

migrations/1697109279164-CreateNewAdminUser.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { hash } from 'bcrypt';
2+
import { getRandomValues } from 'crypto';
23
import { MigrationInterface, QueryRunner } from "typeorm"
34
import { v4 } from 'uuid';
45

@@ -15,6 +16,7 @@ export class CreateNewAdminUser1697109279164 implements MigrationInterface {
1516

1617
const query = queryRunner.manager.createQueryBuilder();
1718
await query.insert().into('users').values([{
19+
"code": "ABCDEF",
1820
"uuid": v4(),
1921
"username": "admin",
2022
"name": "Admin",

migrations/1697110840362-CreateUserDevices.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ export class CreateUserDevices1697110840362 implements MigrationInterface {
1313
{ name: 'brand', type: 'varchar' },
1414
{ name: 'os', type: 'varchar' },
1515
{ name: 'platform', type: 'varchar' },
16-
{ name: 'last_login', type: 'json' },
17-
{ name: 'current_login', type: 'json' },
16+
{ name: 'last_login', type: 'json', isNullable: true },
17+
{ name: 'current_login', type: 'json', isNullable: true },
1818
{ name: 'access_token', type: 'varchar', isNullable: true },
1919
{ name: 'refresh_token', type: 'varchar', isNullable: true },
20-
{ name: 'fcm_token', type: 'varchar' },
21-
{ name: 'preference', type: 'varchar' },
22-
{ name: 'status', type: 'varchar' },
23-
{ name: 'status_reason', type: 'varchar' },
20+
{ name: 'fcm_token', type: 'varchar', isNullable: true },
21+
{ name: 'preference', type: 'json', isNullable: true },
22+
{ name: 'status', type: 'varchar', isNullable: true },
23+
{ name: 'status_reason', type: 'varchar', isNullable: true },
2424
{ name: 'updated_at', type: 'timestamp', default: 'now()' },
2525
{ name: 'created_at', type: 'timestamp', default: 'now()' },
2626
],

nest-cli.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
"include": "i18n/**/*",
1515
"watchAssets": true,
1616
"outDir": "dist"
17+
},
18+
{
19+
"include": "shared/send-email/templates/**/*",
20+
"watchAssets": true,
21+
"outDir": "dist"
1722
}
1823
]
1924
}

src/apps/auth/auth.controller.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export class AuthController {
5151

5252
@Post('/register')
5353
@HttpCode(HttpStatus.CREATED)
54+
@ApiBody({type: () => RegisterDTO})
5455
async register(
5556
@I18n() i18n: I18nContext,
5657
@Req() req: Request,

src/apps/auth/auth.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ import { User } from 'src/entities/user.entity';
66
import { UserDevice } from 'src/entities/user-device.entity';
77
import { AccessTokenStrategy, RefreshTokenStrategy } from './strategies';
88
import { RedisModule } from 'src/shared/redis/redis.module';
9+
import { SendEmailModule } from 'src/shared/send-email/send-email.module';
910

1011
@Module({
1112
imports: [
1213
TypeOrmModule.forFeature([User, UserDevice]),
1314
RedisModule,
15+
SendEmailModule
1416
],
1517
providers: [AuthService, AccessTokenStrategy, RefreshTokenStrategy],
1618
controllers: [AuthController]

src/apps/auth/auth.service.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { UserDevice } from 'src/entities/user-device.entity';
1212
import { DeviceDTO } from './dto/device.dto';
1313
import { RedisService } from 'src/shared/redis/redis.service';
1414
import { I18nService } from 'nestjs-i18n';
15+
import { SendEmailService } from 'src/shared/send-email/send-email.service';
1516

1617
@Injectable()
1718
export class AuthService {
@@ -25,6 +26,7 @@ export class AuthService {
2526
private readonly redisService: RedisService,
2627
private readonly jwtService: JwtService,
2728
private readonly configService: ConfigService,
29+
private readonly sendEmailService: SendEmailService<User>,
2830
) {}
2931

3032
async logout(userAuth: UserInAuth) {
@@ -178,6 +180,12 @@ export class AuthService {
178180
access_token: await this.makeHash(tokens.access_token),
179181
refresh_token: await this.makeHash(tokens.refresh_token),
180182
status: 'allowed',
183+
current_login: {
184+
ip: req.ip,
185+
app_version: req.header('x-app-version'),
186+
timestamp: new Date().getTime(),
187+
coordinate,
188+
},
181189
last_login: {
182190
ip: req.ip,
183191
app_version: req.header('x-app-version'),
@@ -193,6 +201,9 @@ export class AuthService {
193201
id: newUser.id,
194202
}, manager)
195203

204+
await this.sendEmailService.welcomeRegisterEmail(newUser.email, newUser)
205+
206+
196207
// Return any additional information you may want to provide after successful registration
197208
// For example, you can return the newly created user entity with sensitive information (like password) removed.
198209
return {

src/apps/auth/dto/register.dto.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,36 @@
1-
import { IsNotEmpty } from "class-validator";
1+
import { ApiProperty } from "@nestjs/swagger";
2+
import { IsEmail, IsNotEmpty } from "class-validator";
23
import { Unique } from "typeorm";
34
import { CoordinateDTO } from "./coordinate.dto";
45
import { DeviceDTO } from "./device.dto";
56

67
export class RegisterDTO {
8+
9+
@ApiProperty({example: "John Doe"})
710
@IsNotEmpty()
811
name: string;
912

13+
@ApiProperty({example: "john.doe"})
1014
@IsNotEmpty()
1115
@Unique('users', ['username'])
1216
username: string;
1317

18+
@ApiProperty({example: "[email protected]"})
19+
@IsEmail()
1420
email: string;
1521

22+
@ApiProperty({example: "085717453300"})
1623
phone: string;
1724

25+
@ApiProperty({example: "secret"})
1826
password: string;
1927

28+
@ApiProperty()
2029
coordinate: CoordinateDTO;
2130

31+
@ApiProperty()
2232
device: DeviceDTO;
2333

34+
@ApiProperty({example: ""})
2435
refferal_code: string;
2536
}

src/apps/user/user.service.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ export class UserService {
2525
select: {
2626
id: true,
2727
code: true,
28-
referral_code: true,
29-
referral_link: true,
28+
referral: true,
3029
uuid: true,
3130
username: true,
3231
name: true,

src/config/mail.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ export const mailerConfigAsync: MailerAsyncOptions = {
2929
from: process.env.MAIL_FROM_DEFAULT,
3030
},
3131
template: {
32-
dir: __dirname + '/../utils/send-email/templates',
32+
//src/shared/send-email/templates
33+
dir: __dirname + '/../shared/send-email/templates',
3334
adapter: new EjsAdapter(),
3435
options: {
3536
// strict: true, // locals.contextData

0 commit comments

Comments
 (0)