diff --git a/src/modules/admin/controllers/admin.controller.ts b/src/modules/admin/controllers/admin.controller.ts index 480d517..b53da6f 100644 --- a/src/modules/admin/controllers/admin.controller.ts +++ b/src/modules/admin/controllers/admin.controller.ts @@ -2,6 +2,7 @@ import { Controller, Post, Body, Get, UseGuards, Patch, Param, Delete } from '@n import { AdminService } from '../providers/admin.service'; import { CreateAdminDto } from '../dto/create-admin.dto'; import { UpdateAdminDto } from '../dto/update-admin.dto'; +import { UpdateAdminMeDto } from '../dto/update-admin-me.dto'; import { ApiTags, ApiOperation, ApiBearerAuth } from '@nestjs/swagger'; import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard'; import { AdminId } from 'src/common/decorators/admin-id.decorator'; @@ -38,13 +39,18 @@ export class AdminController { } @Get('admin/admins/me') - @Permissions(PermissionEnum.MANAGE_ADMINS) - @ApiOperation({ summary: 'admin' }) + @ApiOperation({ summary: 'Get current authenticated admin profile' }) async getMe(@AdminId() adminId: string,) { const admin = await this.adminService.findById(adminId,); return admin; } + @Patch('admin/admins/me') + @ApiOperation({ summary: 'Update current authenticated admin profile' }) + updateMe(@AdminId() adminId: string, @Body() dto: UpdateAdminMeDto,): Promise { + return this.adminService.updateMe(adminId, dto); + } + @Get('admin/dashboard/counts') @ApiOperation({ summary: 'Get dashboard entity counts for admin panel' }) getDashboardCounts() { diff --git a/src/modules/admin/dto/update-admin-me.dto.ts b/src/modules/admin/dto/update-admin-me.dto.ts new file mode 100644 index 0000000..6dc98fe --- /dev/null +++ b/src/modules/admin/dto/update-admin-me.dto.ts @@ -0,0 +1,25 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsMobilePhone, IsOptional, IsString } from 'class-validator'; + +export class UpdateAdminMeDto { + @ApiProperty({ description: 'Mobile phone number', required: false }) + @IsOptional() + @IsString() + @IsMobilePhone('fa-IR') + phone?: string; + + @ApiProperty({ description: 'First name', required: false }) + @IsOptional() + @IsString() + firstName?: string; + + @ApiProperty({ description: 'Last name', required: false }) + @IsOptional() + @IsString() + lastName?: string; + + @ApiProperty({ description: 'Avatar S3 key', required: false }) + @IsOptional() + @IsString() + avatarUrl?: string; +} diff --git a/src/modules/admin/providers/admin.service.ts b/src/modules/admin/providers/admin.service.ts index f40a0fc..7d84a28 100644 --- a/src/modules/admin/providers/admin.service.ts +++ b/src/modules/admin/providers/admin.service.ts @@ -3,6 +3,7 @@ import { Admin } from '../entities/admin.entity'; import { Role } from '../../roles/entities/role.entity'; import { EntityManager } from '@mikro-orm/postgresql'; import { UpdateAdminDto } from '../dto/update-admin.dto'; +import { UpdateAdminMeDto } from '../dto/update-admin-me.dto'; import { CreateAdminDto } from '../dto/create-admin.dto'; import { AdminRepository } from '../repositories/admin.repository'; import { RoleRepository } from 'src/modules/roles/respository/role.repository'; @@ -73,6 +74,10 @@ export class AdminService { return this.adminRepository.find({}, { populate: ['role'] }); } + async updateMe(adminId: string, dto: UpdateAdminMeDto): Promise { + return this.update(adminId, dto); + } + async update(adminId: string, dto: UpdateAdminDto): Promise { const admin = await this.adminRepository.findOne( { id: adminId },