normalize phone

This commit is contained in:
2025-12-06 22:42:26 +03:30
parent 3978065400
commit 01631c147a
9 changed files with 100 additions and 27 deletions
+10 -1
View File
@@ -1,6 +1,7 @@
import { Cascade, Collection, Entity, OneToMany, Property } from '@mikro-orm/core';
import { BaseEntity } from '../../../common/entities/base.entity';
import { AdminRole } from './adminRole.entity';
import { normalizePhone } from '../../utils/phone.util';
@Entity({ tableName: 'admins' })
export class Admin extends BaseEntity {
@@ -10,8 +11,16 @@ export class Admin extends BaseEntity {
@Property({ nullable: true })
lastName?: string;
private _phone!: string;
@Property({ unique: true })
phone!: string;
get phone(): string {
return this._phone;
}
set phone(value: string) {
this._phone = normalizePhone(value);
}
// Add the new role property
@OneToMany(() => AdminRole, adminRole => adminRole.admin, {
+9 -5
View File
@@ -9,6 +9,7 @@ import { CacheService } from '../../utils/cache.service';
import { CreateMyRestaurantAdminDto } from '../dto/create-my-restaurant-admin.dto';
import { UpdateAdminDto } from '../dto/update-admin.dto';
import { AdminRole } from '../entities/adminRole.entity';
import { normalizePhone } from '../../utils/phone.util';
@Injectable()
export class AdminService {
@@ -22,7 +23,8 @@ export class AdminService {
) {}
async findByPhone(phone: string): Promise<Admin | null> {
return this.adminRepository.findOne({ phone });
const normalizedPhone = normalizePhone(phone);
return this.adminRepository.findOne({ phone: normalizedPhone });
}
async findById(adminId: string, restId: string): Promise<Admin | null> {
@@ -39,13 +41,14 @@ export class AdminService {
async createAdminForMyRestaurant(restId: string, dto: CreateMyRestaurantAdminDto) {
const { phone, firstName, lastName, roleId } = dto;
const normalizedPhone = normalizePhone(phone);
let admin: Admin | null = null;
admin = await this.adminRepository.findOne({
phone,
phone: normalizedPhone,
});
if (!admin) {
admin = this.adminRepository.create({
phone,
phone: normalizedPhone,
firstName,
lastName,
});
@@ -123,11 +126,12 @@ export class AdminService {
admin.lastName = rest.lastName;
}
if (rest.phone !== undefined && rest.phone !== admin.phone) {
const exists = await this.adminRepository.findOne({ phone: rest.phone });
const normalizedPhone = normalizePhone(rest.phone);
const exists = await this.adminRepository.findOne({ phone: normalizedPhone });
if (exists) {
throw new ConflictException('This Phone Number is already taken');
}
admin.phone = rest.phone;
admin.phone = normalizedPhone;
}
// Update role if roleId is provided
@@ -3,6 +3,7 @@ import { Admin } from '../entities/admin.entity';
import { AdminRole } from '../entities/adminRole.entity';
import { RestRepository } from '../../restaurants/repositories/rest.repository';
import { Injectable } from '@nestjs/common';
import { normalizePhone } from '../../utils/phone.util';
@Injectable()
export class AdminRepository extends EntityRepository<Admin> {
@@ -14,6 +15,7 @@ export class AdminRepository extends EntityRepository<Admin> {
}
async findByPhoneAndRestaurantSlug(phone: string, slug: string): Promise<Admin | null> {
const normalizedPhone = normalizePhone(phone);
// First, find the restaurant by slug using the same repository as auth service
const restaurant = await this.restRepository.findOne({ slug });
if (!restaurant) {
@@ -24,7 +26,7 @@ export class AdminRepository extends EntityRepository<Admin> {
const adminRole = await this.em.findOne(
AdminRole,
{
admin: { phone },
admin: { phone: normalizedPhone },
restaurant: { id: restaurant.id },
},
{ populate: ['admin', 'admin.roles', 'role', 'role.permissions', 'restaurant'] },