Remove User and AdminUser controllers; update import paths in UserModule to reflect new directory structure.

This commit is contained in:
2025-11-18 09:33:50 +03:30
parent 8975a9fcc7
commit 7bc94b4126
4 changed files with 63 additions and 20 deletions
+50
View File
@@ -0,0 +1,50 @@
import { CanActivate, ExecutionContext, Injectable, UnauthorizedException, Inject } from '@nestjs/common';
import { Request } from 'express';
import { JwtService } from '@nestjs/jwt';
import { ConfigService } from '@nestjs/config';
import { IAdminTokenPayload, ITokenPayload } from '../interfaces/IToken-payload';
export interface AdminAuthRequest extends Request {
adminId: string;
restId: string;
}
@Injectable()
export class AuthGuard implements CanActivate {
constructor(
@Inject(JwtService)
private readonly jwtService: JwtService,
@Inject(ConfigService)
private readonly configService: ConfigService,
) {}
async canActivate(context: ExecutionContext) {
const request = context.switchToHttp().getRequest<AdminAuthRequest>();
try {
const secret = this.configService.get<string>('JWT_SECRET');
const token = this.extractTokenFromHeader(request);
if (!token) {
throw new UnauthorizedException();
}
try {
const payload = await this.jwtService.verifyAsync<ITokenPayload>(token, {
secret,
});
request['userId'] = payload.userId;
request['restId'] = payload.restId;
} catch {
throw new UnauthorizedException();
}
return true;
} catch (err) {
console.log('error in AuthGuard', err);
throw new UnauthorizedException('Invalid or expired token');
}
}
private extractTokenFromHeader(request: Request): string | undefined {
const [type, token] = request.headers.authorization?.split(' ') ?? [];
return type === 'Bearer' ? token : undefined;
}
}
@@ -1,11 +1,13 @@
import { Controller, Get, UseGuards, Query, ValidationPipe } from '@nestjs/common'; import { Controller, Get, UseGuards, Query, ValidationPipe } from '@nestjs/common';
import { ApiTags, ApiBearerAuth, ApiOperation, ApiOkResponse } from '@nestjs/swagger'; import { ApiTags, ApiBearerAuth, ApiOperation, ApiOkResponse } from '@nestjs/swagger';
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard'; import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
import { UserService } from './user.service'; import { UserService } from '../user.service';
import { FindUsersDto } from './dto/find-user.dto'; import { FindUsersDto } from '../dto/find-user.dto';
import { UserId } from 'src/common/decorators/user-id.decorator'; import { UserId } from 'src/common/decorators/user-id.decorator';
import { RestId } from 'src/common/decorators'; import { RestId } from 'src/common/decorators';
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@ApiTags('Admin/User') @ApiTags('Admin/User')
@Controller('admin/user') @Controller('admin/user')
export class AdminUserController { export class AdminUserController {
@@ -1,41 +1,32 @@
import { Controller, Get, UseGuards, Patch, Body, ValidationPipe } from '@nestjs/common'; import { Controller, Get, UseGuards, Patch, Body, ValidationPipe } from '@nestjs/common';
import { ApiTags, ApiBearerAuth, ApiOperation } from '@nestjs/swagger'; import { ApiTags, ApiBearerAuth, ApiOperation, ApiBody } from '@nestjs/swagger';
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard'; import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
import { UserService } from './user.service'; import { UserService } from '../user.service';
import { UpdateUserDto } from './dto/update-user.dto'; import { UpdateUserDto } from '../dto/update-user.dto';
import { UserId } from 'src/common/decorators/user-id.decorator'; import { UserId } from 'src/common/decorators/user-id.decorator';
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@ApiTags('User') @ApiTags('User')
@Controller('user') @Controller('user')
export class UserController { export class UserController {
constructor(private readonly userService: UserService) {} constructor(private readonly userService: UserService) {}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@ApiOperation({ summary: 'Get the current authenticated user profile' }) @ApiOperation({ summary: 'Get the current authenticated user profile' })
@Get('/me') @Get('/me')
async getUser(@UserId() userId: string) { async getUser(@UserId() userId: string) {
const user = await this.userService.findById(userId); const user = await this.userService.findById(userId);
return { return user;
message: `GET request: Retrieving profile for authenticated user`,
user,
userId,
};
} }
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
@ApiOperation({ summary: 'Update the authenticated user profile' }) @ApiOperation({ summary: 'Update the authenticated user profile' })
@ApiBody({ type: UpdateUserDto })
@Patch('/') @Patch('/')
async updateUser( async updateUser(
@UserId() userId: string, @UserId() userId: string,
@Body(new ValidationPipe({ transform: true, whitelist: true })) dto: UpdateUserDto, @Body(new ValidationPipe({ transform: true, whitelist: true })) dto: UpdateUserDto,
) { ) {
const user = await this.userService.updateUser(userId, dto); const user = await this.userService.updateUser(userId, dto);
return { return user;
message: `PATCH request: Updating profile for user ${userId}`,
userId,
user,
};
} }
} }
+1 -1
View File
@@ -1,6 +1,6 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { UserService } from './user.service'; import { UserService } from './user.service';
import { AdminUserController } from './adminUser.controller'; import { AdminUserController } from './controllers/adminUser.controller';
import { MikroOrmModule } from '@mikro-orm/nestjs'; import { MikroOrmModule } from '@mikro-orm/nestjs';
import { User } from './entities/user.entity'; import { User } from './entities/user.entity';
import { JwtModule } from '@nestjs/jwt'; import { JwtModule } from '@nestjs/jwt';