-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathboot.ts
46 lines (41 loc) · 1.43 KB
/
boot.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
import fp from "fastify-plugin";
import { ApiService } from "../api";
import { EmailQueueService } from "../core/emails/queues/service";
import { IUserRepository, UserService } from "../core/users";
import { PgSQLUserRepository } from "../infra/pgsql";
export interface BootstrapperPluginOptions {
// Specify Bootstrapper plugin options here
}
// The use of fastify-plugin is required to be able
// to export the decorators to the outer scope
export default fp<BootstrapperPluginOptions>(
async (fastify, opts) => {
// const userRepository = new InMemoryUserRepository(fastify.getAllTimeZonesByHour);
const userRepository = new PgSQLUserRepository(fastify.prisma);
const userService = new UserService(
userRepository,
fastify.getAllTimeZonesByHour
);
const emailQueueService = new EmailQueueService(
userRepository,
userService,
new ApiService(process.env.EMAIL_SERVICE_URL)
);
fastify.decorate("userRepository", userRepository);
fastify.decorate("userService", userService);
fastify.decorate("emailQueueService", emailQueueService);
},
{
name: "bootstrapper",
dependencies: ["zones"],
}
);
export const autoload = false;
// When using .decorate you have to specify added properties for Typescript
declare module "fastify" {
export interface FastifyInstance {
userRepository: IUserRepository;
userService: UserService;
emailQueueService: EmailQueueService;
}
}