mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-11-26 00:24:54 +00:00
feat: update junior
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
import { Body, Controller, Get, Param, Post, Query, UseGuards } from '@nestjs/common';
|
||||
import { Body, Controller, Get, Param, Patch, Post, Query, UseGuards } from '@nestjs/common';
|
||||
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
|
||||
import { Roles } from '~/auth/enums';
|
||||
import { IJwtPayload } from '~/auth/interfaces';
|
||||
@ -8,7 +8,7 @@ import { ApiDataPageResponse, ApiDataResponse, ApiLangRequestHeader } from '~/co
|
||||
import { PageOptionsRequestDto } from '~/core/dtos';
|
||||
import { CustomParseUUIDPipe } from '~/core/pipes';
|
||||
import { ResponseFactory } from '~/core/utils';
|
||||
import { CreateJuniorRequestDto, SetThemeRequestDto } from '../dtos/request';
|
||||
import { CreateJuniorRequestDto, SetThemeRequestDto, UpdateJuniorRequestDto } from '../dtos/request';
|
||||
import { JuniorResponseDto, QrCodeValidationResponseDto, ThemeResponseDto } from '../dtos/response';
|
||||
import { JuniorService } from '../services';
|
||||
|
||||
@ -59,6 +59,20 @@ export class JuniorController {
|
||||
return ResponseFactory.data(new JuniorResponseDto(junior));
|
||||
}
|
||||
|
||||
@Patch(':juniorId')
|
||||
@UseGuards(RolesGuard)
|
||||
@AllowedRoles(Roles.GUARDIAN)
|
||||
@ApiDataResponse(JuniorResponseDto)
|
||||
async updateJunior(
|
||||
@AuthenticatedUser() user: IJwtPayload,
|
||||
@Param('juniorId', CustomParseUUIDPipe) juniorId: string,
|
||||
@Body() body: UpdateJuniorRequestDto,
|
||||
) {
|
||||
const junior = await this.juniorService.updateJunior(juniorId, body, user.sub);
|
||||
|
||||
return ResponseFactory.data(new JuniorResponseDto(junior));
|
||||
}
|
||||
|
||||
@Post('set-theme')
|
||||
@UseGuards(RolesGuard)
|
||||
@AllowedRoles(Roles.JUNIOR)
|
||||
|
||||
@ -1,2 +1,3 @@
|
||||
export * from './create-junior.request.dto';
|
||||
export * from './set-theme.request.dto';
|
||||
export * from './update-junior.request.dto';
|
||||
|
||||
6
src/junior/dtos/request/update-junior.request.dto.ts
Normal file
6
src/junior/dtos/request/update-junior.request.dto.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import { OmitType, PartialType } from '@nestjs/mapped-types';
|
||||
import { CreateJuniorRequestDto } from './create-junior.request.dto';
|
||||
|
||||
export class UpdateJuniorRequestDto extends PartialType(
|
||||
OmitType(CreateJuniorRequestDto, ['cardColor', 'cardPin'] as const),
|
||||
) {}
|
||||
@ -9,7 +9,7 @@ import { DocumentService, OciService } from '~/document/services';
|
||||
import { UserType } from '~/user/enums';
|
||||
import { UserService } from '~/user/services';
|
||||
import { UserTokenService } from '~/user/services/user-token.service';
|
||||
import { CreateJuniorRequestDto, SetThemeRequestDto } from '../dtos/request';
|
||||
import { CreateJuniorRequestDto, SetThemeRequestDto, UpdateJuniorRequestDto } from '../dtos/request';
|
||||
import { Junior } from '../entities';
|
||||
import { JuniorRepository } from '../repositories';
|
||||
import { QrcodeService } from './qrcode.service';
|
||||
@ -85,6 +85,42 @@ export class JuniorService {
|
||||
return junior;
|
||||
}
|
||||
|
||||
async updateJunior(juniorId: string, body: UpdateJuniorRequestDto, guardianId: string) {
|
||||
this.logger.log(`Updating junior ${juniorId}`);
|
||||
const junior = await this.findJuniorById(juniorId, false, guardianId);
|
||||
if (body.profilePictureId) {
|
||||
junior.customer.user.profilePictureId = body.profilePictureId;
|
||||
}
|
||||
if (body.firstName) {
|
||||
junior.customer.user.firstName = body.firstName;
|
||||
junior.customer.firstName = body.firstName;
|
||||
}
|
||||
if (body.lastName) {
|
||||
junior.customer.user.lastName = body.lastName;
|
||||
junior.customer.lastName = body.lastName;
|
||||
}
|
||||
if (body.email) {
|
||||
const existingUser = await this.userService.findUser({ email: body.email });
|
||||
if (existingUser && existingUser.id !== junior.customer.user.id) {
|
||||
this.logger.error(`User with email ${body.email} already exists`);
|
||||
throw new BadRequestException('USER.ALREADY_EXISTS');
|
||||
}
|
||||
junior.customer.user.email = body.email;
|
||||
}
|
||||
|
||||
if (body.dateOfBirth) {
|
||||
junior.customer.dateOfBirth = body.dateOfBirth;
|
||||
}
|
||||
if (body.relationship) {
|
||||
junior.relationship = body.relationship;
|
||||
}
|
||||
console.log('++++++');
|
||||
|
||||
await Promise.all([junior.save(), junior.customer.user.save(), junior.customer.save()]);
|
||||
this.logger.log(`Junior ${juniorId} updated successfully`);
|
||||
return junior;
|
||||
}
|
||||
|
||||
@Transactional()
|
||||
async setTheme(body: SetThemeRequestDto, juniorId: string) {
|
||||
this.logger.log(`Setting theme for junior ${juniorId}`);
|
||||
|
||||
Reference in New Issue
Block a user