Skip to content

Commit b400be0

Browse files
authored
Merge pull request #57 from codeclannigeria/feat-lockout
Implemented user lockout
2 parents 40e15d0 + 1072049 commit b400be0

19 files changed

+363
-314
lines changed

docs/classes/PagedUserOutputDto.html

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,29 +93,32 @@ <h3>File</h3>
9393
@Expose()
9494
@MaxLength(columnSize.length64)
9595
firstName: string;
96-
@Expose()
9796

97+
@Expose()
9898
@MaxLength(columnSize.length64)
9999
lastName: string;
100-
@Expose()
101100

101+
@Expose()
102102
@MaxLength(columnSize.length64)
103103
@IsEmail()
104104
email: string;
105-
@Expose()
106105

106+
@Expose()
107107
@IsEnum(UserRole)
108108
@ApiProperty({ enum: UserRole })
109109
role?: UserRole &#x3D; UserRole.MENTEE;
110+
110111
@Expose()
111112
@IsOptional()
112113
@MaxLength(columnSize.length128)
113114
description?: string;
115+
114116
@Expose()
115117
@IsPhoneNumber(&quot;ZZ&quot;, { message: &#x27;Invalid phone number. Valid phone number sample +2347063644568&#x27; })
116118
@MaxLength(columnSize.length64)
117119
@IsOptional()
118120
phoneNumber?: string;
121+
119122
@Expose()
120123
@IsArray()
121124
@Length(1, columnSize.length32, { each: true })
@@ -127,6 +130,7 @@ <h3>File</h3>
127130
@Expose()
128131
@IsOptional()
129132
readonly photoUrl?: string;
133+
130134
@ApiProperty({ readOnly: true })
131135
@Expose()
132136
readonly tasks?: any[];

docs/classes/User.html

Lines changed: 57 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ <h6><b>Properties</b></h6>
114114
<span class="modifier">Optional</span>
115115
<a href="#lockOutEndDate">lockOutEndDate</a>
116116
</li>
117+
<li>
118+
<span class="modifier">Readonly</span>
119+
<a href="#loginAttemptCount">loginAttemptCount</a>
120+
</li>
117121
<li>
118122
<span class="modifier">Readonly</span>
119123
<a href="#password">password</a>
@@ -346,7 +350,7 @@ <h3 id="inputs">
346350
</tr>
347351
<tr>
348352
<td class="col-md-4">
349-
<div class="io-line">Defined in <a href="" data-line="94" class="link-to-prism">src/users/models/user.entity.ts:94</a></div>
353+
<div class="io-line">Defined in <a href="" data-line="98" class="link-to-prism">src/users/models/user.entity.ts:98</a></div>
350354
</td>
351355
</tr>
352356

@@ -420,7 +424,7 @@ <h3 id="inputs">
420424
</tr>
421425
<tr>
422426
<td class="col-md-4">
423-
<div class="io-line">Defined in <a href="" data-line="90" class="link-to-prism">src/users/models/user.entity.ts:90</a></div>
427+
<div class="io-line">Defined in <a href="" data-line="94" class="link-to-prism">src/users/models/user.entity.ts:94</a></div>
424428
</td>
425429
</tr>
426430

@@ -495,7 +499,44 @@ <h3 id="inputs">
495499
</tr>
496500
<tr>
497501
<td class="col-md-4">
498-
<div class="io-line">Defined in <a href="" data-line="92" class="link-to-prism">src/users/models/user.entity.ts:92</a></div>
502+
<div class="io-line">Defined in <a href="" data-line="96" class="link-to-prism">src/users/models/user.entity.ts:96</a></div>
503+
</td>
504+
</tr>
505+
506+
507+
</tbody>
508+
</table>
509+
<table class="table table-sm table-bordered">
510+
<tbody>
511+
<tr>
512+
<td class="col-md-4">
513+
<a name="loginAttemptCount"></a>
514+
<span class="name">
515+
<b>
516+
<span class="modifier">Readonly</span>
517+
loginAttemptCount</b>
518+
<a href="#loginAttemptCount"><span class="icon ion-ios-link"></span></a>
519+
</span>
520+
</td>
521+
</tr>
522+
<tr>
523+
<td class="col-md-4">
524+
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/number" target="_blank" >number</a></code>
525+
526+
</td>
527+
</tr>
528+
<tr>
529+
<td class="col-md-4">
530+
<b>Decorators : </b>
531+
<br />
532+
<code>
533+
@Exclude()<br />@prop({default: 0})<br />
534+
</code>
535+
</td>
536+
</tr>
537+
<tr>
538+
<td class="col-md-4">
539+
<div class="io-line">Defined in <a href="" data-line="84" class="link-to-prism">src/users/models/user.entity.ts:84</a></div>
499540
</td>
500541
</tr>
501542

@@ -647,7 +688,7 @@ <h3 id="inputs">
647688
</tr>
648689
<tr>
649690
<td class="col-md-4">
650-
<div class="io-line">Defined in <a href="" data-line="87" class="link-to-prism">src/users/models/user.entity.ts:87</a></div>
691+
<div class="io-line">Defined in <a href="" data-line="91" class="link-to-prism">src/users/models/user.entity.ts:91</a></div>
651692
</td>
652693
</tr>
653694

@@ -684,7 +725,7 @@ <h3 id="inputs">
684725
</tr>
685726
<tr>
686727
<td class="col-md-4">
687-
<div class="io-line">Defined in <a href="" data-line="96" class="link-to-prism">src/users/models/user.entity.ts:96</a></div>
728+
<div class="io-line">Defined in <a href="" data-line="100" class="link-to-prism">src/users/models/user.entity.ts:100</a></div>
688729
</td>
689730
</tr>
690731

@@ -1182,8 +1223,8 @@ <h3 id="methods">
11821223

11831224
<tr>
11841225
<td class="col-md-4">
1185-
<div class="io-line">Defined in <a href="" data-line="111"
1186-
class="link-to-prism">src/users/models/user.entity.ts:111</a></div>
1226+
<div class="io-line">Defined in <a href="" data-line="115"
1227+
class="link-to-prism">src/users/models/user.entity.ts:115</a></div>
11871228
</td>
11881229
</tr>
11891230

@@ -1221,8 +1262,8 @@ <h3 id="methods">
12211262

12221263
<tr>
12231264
<td class="col-md-4">
1224-
<div class="io-line">Defined in <a href="" data-line="106"
1225-
class="link-to-prism">src/users/models/user.entity.ts:106</a></div>
1265+
<div class="io-line">Defined in <a href="" data-line="110"
1266+
class="link-to-prism">src/users/models/user.entity.ts:110</a></div>
12261267
</td>
12271268
</tr>
12281269

@@ -1450,7 +1491,7 @@ <h3 id="accessors">
14501491
</tr>
14511492
<tr>
14521493
<td class="col-md-4">
1453-
<div class="io-line">Defined in <a href="" data-line="103" class="link-to-prism">src/users/models/user.entity.ts:103</a></div>
1494+
<div class="io-line">Defined in <a href="" data-line="107" class="link-to-prism">src/users/models/user.entity.ts:107</a></div>
14541495
</td>
14551496
</tr>
14561497
<tr>
@@ -1485,7 +1526,7 @@ <h3 id="accessors">
14851526
</tr>
14861527
<tr>
14871528
<td class="col-md-4">
1488-
<div class="io-line">Defined in <a href="" data-line="115" class="link-to-prism">src/users/models/user.entity.ts:115</a></div>
1529+
<div class="io-line">Defined in <a href="" data-line="119" class="link-to-prism">src/users/models/user.entity.ts:119</a></div>
14891530
</td>
14901531
</tr>
14911532

@@ -1575,7 +1616,11 @@ <h3 id="accessors">
15751616
@prop({ required: true, maxlength: columnSize.length64 })
15761617
@Exclude()
15771618
readonly password!: string;
1578-
1619+
@Exclude()
1620+
@prop({
1621+
default: 0
1622+
})
1623+
readonly loginAttemptCount!: number;
15791624
@prop({
15801625
enum: UserRole,
15811626
type: String,

docs/classes/UserDto.html

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ <h3 id="inputs">
181181
</tr>
182182
<tr>
183183
<td class="col-md-4">
184-
<div class="io-line">Defined in <a href="" data-line="31" class="link-to-prism">src/users/models/dto/user.dto.ts:31</a></div>
184+
<div class="io-line">Defined in <a href="" data-line="32" class="link-to-prism">src/users/models/dto/user.dto.ts:32</a></div>
185185
</td>
186186
</tr>
187187

@@ -326,7 +326,7 @@ <h3 id="inputs">
326326
</tr>
327327
<tr>
328328
<td class="col-md-4">
329-
<div class="io-line">Defined in <a href="" data-line="36" class="link-to-prism">src/users/models/dto/user.dto.ts:36</a></div>
329+
<div class="io-line">Defined in <a href="" data-line="38" class="link-to-prism">src/users/models/dto/user.dto.ts:38</a></div>
330330
</td>
331331
</tr>
332332

@@ -364,7 +364,7 @@ <h3 id="inputs">
364364
</tr>
365365
<tr>
366366
<td class="col-md-4">
367-
<div class="io-line">Defined in <a href="" data-line="47" class="link-to-prism">src/users/models/dto/user.dto.ts:47</a></div>
367+
<div class="io-line">Defined in <a href="" data-line="50" class="link-to-prism">src/users/models/dto/user.dto.ts:50</a></div>
368368
</td>
369369
</tr>
370370

@@ -444,7 +444,7 @@ <h3 id="inputs">
444444
</tr>
445445
<tr>
446446
<td class="col-md-4">
447-
<div class="io-line">Defined in <a href="" data-line="50" class="link-to-prism">src/users/models/dto/user.dto.ts:50</a></div>
447+
<div class="io-line">Defined in <a href="" data-line="54" class="link-to-prism">src/users/models/dto/user.dto.ts:54</a></div>
448448
</td>
449449
</tr>
450450

@@ -481,7 +481,7 @@ <h3 id="inputs">
481481
</tr>
482482
<tr>
483483
<td class="col-md-4">
484-
<div class="io-line">Defined in <a href="" data-line="42" class="link-to-prism">src/users/models/dto/user.dto.ts:42</a></div>
484+
<div class="io-line">Defined in <a href="" data-line="45" class="link-to-prism">src/users/models/dto/user.dto.ts:45</a></div>
485485
</td>
486486
</tr>
487487

@@ -645,29 +645,32 @@ <h3 id="inputs">
645645
@Expose()
646646
@MaxLength(columnSize.length64)
647647
firstName: string;
648-
@Expose()
649648

649+
@Expose()
650650
@MaxLength(columnSize.length64)
651651
lastName: string;
652-
@Expose()
653652

653+
@Expose()
654654
@MaxLength(columnSize.length64)
655655
@IsEmail()
656656
email: string;
657-
@Expose()
658657

658+
@Expose()
659659
@IsEnum(UserRole)
660660
@ApiProperty({ enum: UserRole })
661661
role?: UserRole &#x3D; UserRole.MENTEE;
662+
662663
@Expose()
663664
@IsOptional()
664665
@MaxLength(columnSize.length128)
665666
description?: string;
667+
666668
@Expose()
667669
@IsPhoneNumber(&quot;ZZ&quot;, { message: &#x27;Invalid phone number. Valid phone number sample +2347063644568&#x27; })
668670
@MaxLength(columnSize.length64)
669671
@IsOptional()
670672
phoneNumber?: string;
673+
671674
@Expose()
672675
@IsArray()
673676
@Length(1, columnSize.length32, { each: true })
@@ -679,6 +682,7 @@ <h3 id="inputs">
679682
@Expose()
680683
@IsOptional()
681684
readonly photoUrl?: string;
685+
682686
@ApiProperty({ readOnly: true })
683687
@Expose()
684688
readonly tasks?: any[];

docs/classes/UsersController.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,11 @@ <h3 id="methods">
293293
const exist &#x3D; await this.usersService.findOneAsync({
294294
title: input.email.toLowerCase()
295295
});
296-
if (exist)
296+
if (exist) {
297297
throw new ConflictException(
298298
&#x60;User with the email &quot;${exist.email}&quot; already exists&#x60;
299299
);
300+
}
300301
return super.create(input);
301302
}
302303
}

docs/controllers/AppController.html

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,8 @@ <h3 id="methods">
124124

125125
<tr>
126126
<td class="col-md-4">
127-
<div class="io-line">Defined in <a href="" data-line="9"
128-
class="link-to-prism">src/app.controller.ts:9</a></div>
127+
<div class="io-line">Defined in <a href="" data-line="11"
128+
class="link-to-prism">src/app.controller.ts:11</a></div>
129129
</td>
130130
</tr>
131131

@@ -147,10 +147,12 @@ <h3 id="methods">
147147
<div class="tab-pane fade tab-source-code" id="c-source">
148148
<pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { Controller, Get } from &#x27;@nestjs/common&#x27;;
149149
import { AppService } from &#x27;./app.service&#x27;;
150+
import { ApiTags } from &#x27;@nestjs/swagger&#x27;;
150151

151152
@Controller()
153+
@ApiTags(&quot;Health-Check&quot;)
152154
export class AppController {
153-
constructor(private readonly appService: AppService) {}
155+
constructor(private readonly appService: AppService) { }
154156

155157
@Get()
156158
getHello(): string {

docs/coverage.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@
157157
<td>AuthService</td>
158158
<td align="right" data-sort="0">
159159
<span class="coverage-percent">0 %</span>
160-
<span class="coverage-count">(0/11)</span>
160+
<span class="coverage-count">(0/8)</span>
161161
</td>
162162
</tr>
163163
<tr class="low">
@@ -1393,7 +1393,7 @@
13931393
<td>User</td>
13941394
<td align="right" data-sort="10">
13951395
<span class="coverage-percent">10 %</span>
1396-
<span class="coverage-count">(3/29)</span>
1396+
<span class="coverage-count">(3/30)</span>
13971397
</td>
13981398
</tr>
13991399
<tr class="low">
@@ -1441,7 +1441,7 @@
14411441
<td>UsersService</td>
14421442
<td align="right" data-sort="0">
14431443
<span class="coverage-percent">0 %</span>
1444-
<span class="coverage-count">(0/28)</span>
1444+
<span class="coverage-count">(0/30)</span>
14451445
</td>
14461446
</tr>
14471447
<tr class="low">

0 commit comments

Comments
 (0)