-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathuser.providers.ts
80 lines (67 loc) · 3.09 KB
/
user.providers.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import { Provider } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { BcryptHashingService } from 'src/infrastructure/services/bcrypt-hashing.service';
import { ConfirmationTokenRepository } from './database/confirmation-token/confirmation-token.repository';
import { ConfirmationTokenRepositoryPort } from './database/confirmation-token/confirmation-token.repository.interface';
import { UserRepository } from './database/user.repository';
import { AuthService } from './use-cases/authenticate-user/authenticate-user.service';
import { ConfirmUserEmailService } from './use-cases/confirm-user-email/confirm-user-email.service';
import { CreateConfirmationTokenService } from './use-cases/create-confirmation-token/create-confirmation-token.service';
import { CreateUserService } from './use-cases/create-user/create-user.service';
import { RefreshTokenService } from './use-cases/refresh-token/refresh-token.service';
import { DeleteUserService } from './use-cases/remove-user/delete-user.service';
/* Constructing providers to avoid having framework decorators
in application core. */
export const authUserSymbol = Symbol('authUser');
export const authUserProvider: Provider = {
provide: authUserSymbol,
useFactory: (
userRepo: UserRepository,
jwtService: JwtService,
hashService: BcryptHashingService,
): AuthService => new AuthService(userRepo, jwtService, hashService),
inject: [UserRepository, JwtService, BcryptHashingService],
};
export const createUserSymbol = Symbol('createUser');
export const createUserProvider: Provider = {
provide: createUserSymbol,
useFactory: (
userRepo: UserRepository,
hashService: BcryptHashingService,
): CreateUserService => new CreateUserService(userRepo, hashService),
inject: [UserRepository, BcryptHashingService],
};
export const refreshTokenSymbol = Symbol('refreshToken');
export const refreshTokenProvider: Provider = {
provide: refreshTokenSymbol,
useFactory: (
jwtService: JwtService,
authService: AuthService,
): RefreshTokenService => new RefreshTokenService(jwtService, authService),
inject: [JwtService, AuthService],
};
export const removeUserSymbol = Symbol('removeUser');
export const removeUserProvider: Provider = {
provide: removeUserSymbol,
useFactory: (userRepo: UserRepository): DeleteUserService =>
new DeleteUserService(userRepo),
inject: [UserRepository],
};
export const createConfirmationTokenSymbol = Symbol('createConfirmationToken');
export const createConfirmationTokenProvider: Provider = {
provide: createConfirmationTokenSymbol,
useFactory: (
tokenRepo: ConfirmationTokenRepository,
): CreateConfirmationTokenService =>
new CreateConfirmationTokenService(tokenRepo),
inject: [ConfirmationTokenRepository],
};
export const confirmUserEmailSymbol = Symbol('confirmUserEmail');
export const confirmUserEmailProvider: Provider = {
provide: confirmUserEmailSymbol,
useFactory: (
tokenRepo: ConfirmationTokenRepositoryPort,
userRepo: UserRepository,
) => new ConfirmUserEmailService(tokenRepo, userRepo),
inject: [ConfirmationTokenRepository, UserRepository],
};