62 lines
2.2 KiB
TypeScript
62 lines
2.2 KiB
TypeScript
import { FastifyPluginAsync, FastifyRequest, FastifyReply } from 'fastify';
|
|
import { UserController, UserRequestBody } from '../http/controllers/UserController';
|
|
import { UserService } from '../services/UserService';
|
|
import { UserRepository } from '../repositories/UserRepository';
|
|
import { UserRoleRepository } from '../repositories/UserRoleRepository';
|
|
import { User } from '../entities/user/_User';
|
|
import { UserRole } from '../entities/user/UserRole';
|
|
import auth from '../../../middleware/Auth';
|
|
|
|
declare module 'fastify' {
|
|
interface FastifyInstance {
|
|
userController: (request: FastifyRequest) => UserController;
|
|
}
|
|
}
|
|
|
|
const userRoutes: FastifyPluginAsync = async (app) => {
|
|
app.decorate('userController', (request: FastifyRequest) => {
|
|
const userRepository = new UserRepository(request.em, User);
|
|
const userRoleRepository = new UserRoleRepository(request.em, UserRole);
|
|
const userService = new UserService(request.em, userRepository, userRoleRepository);
|
|
return new UserController(userService);
|
|
});
|
|
|
|
app.get(
|
|
'/',
|
|
{ preHandler: auth(['admin', 'user']) },
|
|
async (request: FastifyRequest, reply: FastifyReply) => {
|
|
const userController = app.userController(request);
|
|
return userController.getAllUsers(request, reply);
|
|
}
|
|
);
|
|
|
|
app.get(
|
|
'/:id',
|
|
async (request: FastifyRequest<{ Params: { id: number } }>, reply: FastifyReply) => {
|
|
const userController = app.userController(request);
|
|
return userController.getUserById(request, reply);
|
|
}
|
|
);
|
|
|
|
app.post(
|
|
'/',
|
|
async (request: FastifyRequest<{ Body: UserRequestBody }>, reply: FastifyReply) => {
|
|
const userController = app.userController(request);
|
|
return userController.createUser(request, reply);
|
|
}
|
|
);
|
|
|
|
app.post(
|
|
'/login',
|
|
async (
|
|
request: FastifyRequest<{ Body: { username: string; password: string } }>,
|
|
reply: FastifyReply
|
|
) => {
|
|
const userController = app.userController(request);
|
|
return userController.loginUser(request, reply);
|
|
}
|
|
);
|
|
};
|
|
|
|
export default userRoutes;
|