feat: create junior

This commit is contained in:
Abdalhamid Alhamad
2024-12-09 13:11:18 +03:00
parent 3fd29b3905
commit 970a41c895
35 changed files with 625 additions and 26 deletions

View File

@ -1,6 +1,8 @@
import { BadRequestException, Injectable } from '@nestjs/common';
import { BadRequestException, forwardRef, Inject, Injectable } from '@nestjs/common';
import { FindOptionsWhere } from 'typeorm';
import { UpdateNotificationsSettingsRequestDto } from '~/customer/dtos/request';
import { CustomerService } from '~/customer/services';
import { Guardian } from '~/guardian/entities/guradian.entity';
import { CreateUnverifiedUserRequestDto } from '../dtos/request';
import { User } from '../entities';
import { Roles } from '../enums';
@ -8,7 +10,10 @@ import { UserRepository } from '../repositories';
@Injectable()
export class UserService {
constructor(private readonly userRepository: UserRepository) {}
constructor(
private readonly userRepository: UserRepository,
@Inject(forwardRef(() => CustomerService)) private readonly customerService: CustomerService,
) {}
async updateNotificationSettings(userId: string, body: UpdateNotificationsSettingsRequestDto) {
const user = await this.findUserOrThrow({ id: userId });
@ -19,7 +24,7 @@ export class UserService {
return notificationSettings;
}
findUser(where: FindOptionsWhere<User>) {
findUser(where: FindOptionsWhere<User> | FindOptionsWhere<User>[]) {
return this.userRepository.findOne(where);
}
@ -44,12 +49,19 @@ export class UserService {
}
if (user && user.roles.includes(Roles.JUNIOR)) {
throw new BadRequestException('USERS.JUNIOR_UPGRADE_NOT_SUPPORTED_YET');
//TODO add role Guardian to the existing user and send OTP
}
return user;
}
async createUser(data: Partial<User>) {
const user = await this.userRepository.createUser(data);
return user;
}
setEmail(userId: string, email: string) {
return this.userRepository.update(userId, { email });
}
@ -58,7 +70,14 @@ export class UserService {
return this.userRepository.update(userId, { password: passcode, salt, isProfileCompleted: true });
}
verifyUserAndCreateCustomer(user: User) {
return this.userRepository.verifyUserAndCreateCustomer(user);
async verifyUserAndCreateCustomer(user: User) {
await this.customerService.createCustomer(
{
guardian: Guardian.create({ id: user.id }),
},
user,
);
return this.findUserOrThrow({ id: user.id });
}
}