Skip to content

Commit 425a26e

Browse files
committed
ts avoid using ! in function logic
1 parent 58c0191 commit 425a26e

12 files changed

+95
-13498
lines changed

package-lock.json

+15-13,449
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app.module.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const ENV: string | undefined = process.env.NODE_ENV;
2727
TypeOrmModule.forRoot({
2828
type: 'mysql',
2929
host: process.env.DATABASE_HOST,
30-
port: +process.env.DATABASE_PORT!,
30+
port: +(process.env.DATABASE_PORT ?? 3306),
3131
username: process.env.DATABASE_USER,
3232
password: process.env.DATABASE_PASSWORD,
3333
database: process.env.DATABASE_DBNAME,

src/auth/auth.service.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Injectable } from '@nestjs/common';
1+
import { Injectable, UnauthorizedException } from '@nestjs/common';
22
import { JwtService } from '@nestjs/jwt';
33
import * as bcrypt from 'bcrypt';
44
import { User } from '../user/user.entity';
@@ -19,7 +19,9 @@ export class AuthService {
1919
return undefined;
2020
}
2121

22-
async login(user: User): Promise<User> {
22+
async login(user: User | undefined): Promise<User> {
23+
if (!user) throw new UnauthorizedException();
24+
2325
const payload: Payload = { username: user.username, id: user.id };
2426

2527
const accessToken = this.jwtService.sign(payload, {
@@ -34,7 +36,9 @@ export class AuthService {
3436
+process.env.SALT_ROUND!,
3537
);
3638
await User.save(user);
37-
user = (await User.findOneWithKeyword({ id: user.id }))!;
39+
user = await User.findOneWithKeyword({ id: user.id });
40+
41+
if (!user) throw new UnauthorizedException();
3842
user.access_token = accessToken;
3943
user.refresh_token = refreshToken;
4044

src/auth/jwt-access.strategy.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export class JwtAccessStrategy extends PassportStrategy(
1919
}
2020

2121
async validate(payload: Payload): Promise<User> {
22-
const user: User = (await User.findOne({ id: payload.id }))!;
22+
const user: User | undefined = await User.findOne({ id: payload.id });
2323
if (!user) throw new UnauthorizedException();
2424
return user;
2525
}

src/auth/jwt-refresh.strategy.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,15 @@ export class JwtRefreshStrategy extends PassportStrategy(
1919
}
2020

2121
async validate(request: Request, payload: Payload): Promise<User> {
22-
const refreshToken = request.headers.authorization!.replace('Bearer ', '');
23-
const user: User = (await User.findOneIfRefreshTokenMatches(
22+
if (!request.headers.authorization) throw new UnauthorizedException();
23+
const refreshToken: string = request.headers.authorization.replace(
24+
'Bearer ',
25+
'',
26+
);
27+
const user: User | undefined = await User.findOneIfRefreshTokenMatches(
2428
refreshToken,
2529
payload.id,
26-
))!;
30+
);
2731
if (!user) throw new UnauthorizedException();
2832
return user;
2933
}

src/auth/local.strategy.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ export class LocalStrategy extends PassportStrategy(Strategy) {
1111
}
1212

1313
async validate(username: string, password: string): Promise<User> {
14-
const user: User = (await this.authService.validateUser(
14+
const user: User | undefined = await this.authService.validateUser(
1515
username,
1616
password,
17-
))!;
17+
);
1818
if (!user) {
1919
throw new UnauthorizedException();
2020
}

src/department/department.init.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@ export const departmentInit = async (): Promise<void> => {
55
for (const departmentData of DEPARTMENTS) {
66
const { name, tags } = departmentData;
77

8-
let department: Department = (await Department.findOne({ name }))!;
8+
let department: Department | undefined = await Department.findOne({ name });
99
if (!department) {
1010
department = Department.create({ name });
1111
await Department.save(department);
1212
}
1313

1414
for (const tagName of tags) {
15-
let tag: Tag = (await Tag.findOne({ name: tagName, department }))!;
15+
let tag: Tag | undefined = await Tag.findOne({
16+
name: tagName,
17+
department,
18+
});
1619
if (!tag) {
1720
tag = Tag.create({ name: tagName, department });
1821
await Tag.save(tag);

src/department/department.service.ts

+19-13
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
Injectable,
66
NotFoundException,
77
Req,
8+
UnauthorizedException,
89
} from '@nestjs/common';
910
import { PreFollow, UserRequest } from '../types/custom-type';
1011
import { Department, Tag, UserTag } from './department.entity';
@@ -22,7 +23,7 @@ export class DepartmentService {
2223
return departments
2324
? await Promise.all(
2425
departments.map(async (department) => {
25-
department.follow = await this.getFollow(department, req.user!);
26+
department.follow = await this.getFollow(department, req.user);
2627
return department;
2728
}),
2829
)
@@ -33,19 +34,23 @@ export class DepartmentService {
3334
@Req() req: UserRequest,
3435
id: number,
3536
): Promise<Department> {
36-
const department: Department = (await Department.findOne(id, {
37+
const department: Department | undefined = await Department.findOne(id, {
3738
relations: ['tags'],
38-
}))!;
39+
});
3940
if (!department) {
4041
throw new NotFoundException('There is no department with the given id');
4142
}
4243

43-
department.follow = await this.getFollow(department, req.user!);
44+
department.follow = await this.getFollow(department, req.user);
4445
return department;
4546
}
4647

47-
async getFollow(department: Department, user: User): Promise<string[]> {
48-
user = (await User.findOne(user))!;
48+
async getFollow(
49+
department: Department,
50+
user: User | undefined,
51+
): Promise<string[]> {
52+
user = await User.findOne(user);
53+
if (!user) throw new UnauthorizedException();
4954
const tags: Tag[] = await Tag.find({
5055
department,
5156
});
@@ -65,26 +70,27 @@ export class DepartmentService {
6570
id: number,
6671
followData: FollowDto,
6772
): Promise<PreFollow> {
68-
const department: Department = (await Department.findOne(id, {
73+
const department: Department | undefined = await Department.findOne(id, {
6974
relations: ['tags'],
70-
}))!;
75+
});
7176
if (!department) {
7277
throw new NotFoundException('There is no department with the id');
7378
}
7479

75-
const tag: Tag = department.tags.find(
80+
const tag: Tag | undefined = department.tags.find(
7681
(tag) => tag.name === followData.follow,
77-
)!;
82+
);
7883
if (!tag) {
7984
throw new BadRequestException(
8085
`There is no tag with the given name: ${followData.follow}`,
8186
);
8287
}
83-
const user: User = (await User.findOne(req.user))!;
84-
const userTag: UserTag = (await UserTag.findOne({
88+
const user: User | undefined = await User.findOne(req.user);
89+
if (!user) throw new UnauthorizedException();
90+
const userTag: UserTag | undefined = await UserTag.findOne({
8591
user,
8692
tag,
87-
}))!;
93+
});
8894

8995
return {
9096
department,

src/types/custom-type.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ export class Payload {
88
}
99

1010
export interface UserRequest extends Request {
11-
user?: User;
11+
user: User;
1212
}
1313

1414
export interface PreFollow {
1515
department: Department;
1616
tag: Tag;
1717
user: User;
18-
userTag: UserTag;
18+
userTag?: UserTag;
1919
}

src/user/user.controller.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ export class UserController {
3434
async update(
3535
@Req() req: UserRequest,
3636
@Body() userData: UpdateUserDto,
37-
): Promise<User> {
38-
return (await this.userService.update(req, userData))!;
37+
): Promise<User | undefined> {
38+
return await this.userService.update(req, userData);
3939
}
4040

4141
@Post()
@@ -59,7 +59,7 @@ export class UserController {
5959
@Req() req: UserRequest,
6060
@Body() keywordData: KeywordDto,
6161
): Promise<User> {
62-
return (await this.userService.createKeyword(req, keywordData))!;
62+
return await this.userService.createKeyword(req, keywordData);
6363
}
6464

6565
@UseGuards(JwtAccessGuard)
@@ -68,6 +68,6 @@ export class UserController {
6868
@Req() req: UserRequest,
6969
@Body() keyword: KeywordDto,
7070
): Promise<User> {
71-
return (await this.userService.deleteKeyword(req, keyword))!;
71+
return await this.userService.deleteKeyword(req, keyword);
7272
}
7373
}

src/user/user.entity.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ export class User extends BaseEntity {
6868
refreshToken: string,
6969
id: number,
7070
): Promise<User | undefined> {
71-
const user: User = (await this.findOne(id))!;
71+
const user: User | undefined = await this.findOne(id);
72+
if (!user) return undefined;
7273

7374
if (await bcrypt.compare(refreshToken, user.refreshToken)) {
7475
return user;

src/user/user.service.ts

+30-17
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import {
22
BadRequestException,
3+
ForbiddenException,
34
HttpException,
45
HttpStatus,
56
Injectable,
7+
NotFoundException,
68
} from '@nestjs/common';
79
import { CreateUserDto } from './dto/create-user.dto';
810
import { Keyword, User, UserKeyword } from './user.entity';
@@ -24,11 +26,11 @@ export class UserService {
2426
}
2527

2628
async auth(req: UserRequest): Promise<User> {
27-
return await this.authService.login(req.user!);
29+
return await this.authService.login(req.user);
2830
}
2931

3032
async getUserMe(req: UserRequest): Promise<User | undefined> {
31-
return await User.findOneWithKeyword({ id: req.user!.id });
33+
return await User.findOneWithKeyword({ id: req.user.id });
3234
}
3335

3436
async update(
@@ -42,23 +44,23 @@ export class UserService {
4244
);
4345
}
4446
if (Object.keys(userData).length != 0) {
45-
await User.update(req.user!, userData);
47+
await User.update(req.user, userData);
4648
}
47-
return User.findOneWithKeyword({ id: req.user!.id });
49+
return User.findOneWithKeyword({ id: req.user.id });
4850
}
4951

5052
async createKeyword(
5153
req: UserRequest,
5254
keywordData: KeywordDto,
53-
): Promise<User | undefined> {
54-
let keyword: Keyword = (await Keyword.findOne({
55+
): Promise<User> {
56+
let keyword: Keyword | undefined = await Keyword.findOne({
5557
name: keywordData.keyword,
56-
}))!;
58+
});
5759
if (keyword) {
58-
const userKeyword: UserKeyword = (await UserKeyword.findOne({
60+
const userKeyword: UserKeyword | undefined = await UserKeyword.findOne({
5961
user: req.user,
6062
keyword,
61-
}))!;
63+
});
6264
if (userKeyword)
6365
throw new BadRequestException('keyword already added to this user');
6466
} else {
@@ -71,23 +73,29 @@ export class UserService {
7173
keyword,
7274
});
7375
await UserKeyword.save(userKeyword);
74-
return User.findOneWithKeyword({ id: req.user!.id });
76+
const user: User | undefined = await User.findOneWithKeyword({
77+
id: req.user.id,
78+
});
79+
if (!user) throw new BadRequestException();
80+
return user;
7581
}
7682

7783
async deleteKeyword(
7884
req: UserRequest,
7985
keywordData: KeywordDto,
80-
): Promise<User | undefined> {
81-
let keyword: Keyword = (await Keyword.findOne({
86+
): Promise<User> {
87+
let keyword: Keyword | undefined = await Keyword.findOne({
8288
name: keywordData.keyword,
83-
}))!;
89+
});
90+
91+
if (!keyword) throw new BadRequestException();
8492

85-
const userKeyword = keyword
93+
const userKeyword: UserKeyword | undefined = keyword
8694
? await UserKeyword.findOne({
8795
user: req.user,
8896
keyword: keyword,
8997
})
90-
: null;
98+
: undefined;
9199

92100
if (!userKeyword) {
93101
throw new HttpException(
@@ -98,7 +106,7 @@ export class UserService {
98106
);
99107
}
100108
await UserKeyword.delete(userKeyword.id);
101-
keyword = (await Keyword.findOne(keyword.id))!;
109+
keyword = await Keyword.findOne(keyword.id);
102110
if (
103111
keyword &&
104112
!(await UserKeyword.findOne({
@@ -108,6 +116,11 @@ export class UserService {
108116
await Keyword.delete(keyword);
109117
}
110118

111-
return User.findOneWithKeyword({ id: req.user!.id });
119+
const user: User | undefined = await User.findOneWithKeyword({
120+
id: req.user.id,
121+
});
122+
if (!user) throw ForbiddenException;
123+
124+
return user;
112125
}
113126
}

0 commit comments

Comments
 (0)