fusero-app-boilerplate/src/apps/_app/routes/UserRoutes.ts
2025-04-29 07:51:17 +02:00

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;