From 7c5128b08196604e41ed7a433b49b09857536726 Mon Sep 17 00:00:00 2001
From: "prathviraj.thokal" <prathviraj.thokal@niveussolutions.com>
Date: Wed, 4 Jun 2025 18:17:15 +0530
Subject: [PATCH 01/11] added DR update API

---
 prisma/models/city_master.prisma              |   4 +-
 prisma/models/doctor_master.prisma            |   6 +-
 src/app.module.ts                             |   4 +-
 src/doctors/doctors.controller.spec.ts        |  61 +++++++
 src/doctors/doctors.controller.ts             |  56 +++++++
 src/doctors/doctors.module.ts                 |  21 +++
 src/doctors/doctors.service.spec.ts           | 117 ++++++++++++++
 src/doctors/doctors.service.ts                | 106 +++++++++++++
 src/doctors/dto/update-doctors-request.dto.ts | 149 ++++++++++++++++++
 .../dto/update-doctors-response.dto.ts        |  18 +++
 src/seed.ts                                   |  70 ++++++++
 11 files changed, 606 insertions(+), 6 deletions(-)
 create mode 100644 src/doctors/doctors.controller.spec.ts
 create mode 100644 src/doctors/doctors.controller.ts
 create mode 100644 src/doctors/doctors.module.ts
 create mode 100644 src/doctors/doctors.service.spec.ts
 create mode 100644 src/doctors/doctors.service.ts
 create mode 100644 src/doctors/dto/update-doctors-request.dto.ts
 create mode 100644 src/doctors/dto/update-doctors-response.dto.ts

diff --git a/prisma/models/city_master.prisma b/prisma/models/city_master.prisma
index 3c07059..d1c81a6 100644
--- a/prisma/models/city_master.prisma
+++ b/prisma/models/city_master.prisma
@@ -8,6 +8,6 @@ model city_master {
   hospital_bank_details hospital_bank_details[]
   hospital_corporate    hospital_corporate[]
   pincode_master        pincode_master[]
-  state                 state_master       @relation(fields: [state_id], references: [id])
-  doctor_master         doctor_master[]
+  state                 state_master            @relation(fields: [state_id], references: [id])
+  doctor_master         doctor_master[]         @relation("CityDoctorRelation")
 }
\ No newline at end of file
diff --git a/prisma/models/doctor_master.prisma b/prisma/models/doctor_master.prisma
index 6b30e2d..e31694e 100644
--- a/prisma/models/doctor_master.prisma
+++ b/prisma/models/doctor_master.prisma
@@ -1,5 +1,5 @@
 model doctor_master {
-  id                                  String                      @id @db.Uuid
+  id                                  String                      @id @default(uuid()) @db.Uuid
   name                                String                      @db.VarChar(100)
   registration_no                     String                      @unique @db.VarChar(100)
   qualification_id                    String                      @db.Uuid
@@ -18,8 +18,8 @@ model doctor_master {
   updated_by                          String                      @db.Uuid
   is_active                           Boolean
   created_at                          DateTime                    @default(now())
-  updated_at                          DateTime
-  city_master                         city_master                 @relation(fields: [city_id], references: [id])
+  updated_at                          DateTime                    @updatedAt
+  city_master                         city_master                 @relation("CityDoctorRelation", fields: [city_id], references: [id])
   user_doctor_master_created_byTouser user                        @relation("doctor_master_created_byTouser", fields: [created_by], references: [id])
   pincode_master                      pincode_master              @relation(fields: [pincode_id], references: [id])
   doctor_qualification_master         doctor_qualification_master @relation(fields: [qualification_id], references: [id])
diff --git a/src/app.module.ts b/src/app.module.ts
index c3faa7c..c8dc314 100755
--- a/src/app.module.ts
+++ b/src/app.module.ts
@@ -14,6 +14,7 @@ import { ThrottlerModule, ThrottlerStorage } from '@nestjs/throttler';
 import { GlobalThrottlerGuard, TraceIdInterceptor } from 'nest-common-utilities';
 import { MicroserviceModule } from './microservices/microservice.module'
 import { HospitalModule } from './hospital/hospital.module';
+import { DoctorsModule } from './doctors/doctors.module';
 
 /**
  * The root application module that imports and configures all feature modules,
@@ -25,7 +26,8 @@ import { HospitalModule } from './hospital/hospital.module';
     ConfigModule.forRoot({ isGlobal: true }),
     HealthCheckModule,
     MicroserviceModule,
-    HospitalModule
+    HospitalModule,
+    DoctorsModule
   ],
   controllers: [AppController],
   providers: [
diff --git a/src/doctors/doctors.controller.spec.ts b/src/doctors/doctors.controller.spec.ts
new file mode 100644
index 0000000..d664d02
--- /dev/null
+++ b/src/doctors/doctors.controller.spec.ts
@@ -0,0 +1,61 @@
+import { Test, TestingModule } from '@nestjs/testing';
+import { DoctorsController } from './doctors.controller';
+import { DoctorsService } from './doctors.service';
+import { UpdateDoctorsRequestDto } from './dto/update-doctors-request.dto';
+import { UpdateDoctorsResponseDto } from './dto/update-doctors-response.dto';
+
+describe('DoctorsController', () => {
+  let doctorsController: DoctorsController;
+  let doctorsService: DoctorsService;
+
+  beforeEach(async () => {
+    const moduleRef: TestingModule = await Test.createTestingModule({
+      controllers: [DoctorsController],
+      providers: [
+        {
+          provide: DoctorsService,
+          useValue: {
+            updateDoctorById: jest.fn(),
+          },
+        },
+      ],
+    }).compile();
+
+    doctorsController = moduleRef.get<DoctorsController>(DoctorsController);
+    doctorsService = moduleRef.get<DoctorsService>(DoctorsService);
+  });
+
+  describe('updateDoctors', () => {
+    it('should update doctor and return the updated doctorId', async () => {
+      const dto: UpdateDoctorsRequestDto = {
+        doctorId: '53f12c09-7be7-407b-8c5d-26892a354c26',
+        userId: '6f6b90a9-331e-4874-a374-ebf65a1bce2a',
+        doctorName: 'Dr. Prathviraj Thokal',
+        doctorRegNo: 'RED-1111',
+        doctorSpecialityId: 'b9fc627e-93f3-4b93-9ac3-3f3c3ad1e007',
+        doctorQualificationId: '58c1b3f1-0007-4444-aaaa-000000000007',
+        contactNo: '7208806389',
+        hprCode: 'HPR-111',
+        emailId: 'prathviraj@abc.com',
+        pan_no: 'SLEUS7686D',
+        address: 'Mumbai',
+        stateId: 'f77da58f-422f-4b26-b6ab-ab02fe9cd00d',
+        cityId: 'e9af1491-7b1e-4010-9542-af36700d5f89',
+        pincode: '2c1fe645-989c-4705-91ef-36f3c78c0d08',
+        latitude: 73.383683,
+        longitude: 82.2882872,
+      };
+
+      const response: UpdateDoctorsResponseDto = {
+        doctorId: 'new-doctor-uuid',
+      };
+
+      (doctorsService.updateDoctorById as jest.Mock).mockResolvedValue(response);
+
+      const result = await doctorsController.updateDoctors(dto);
+
+      expect(doctorsService.updateDoctorById).toHaveBeenCalledWith(dto);
+      expect(result).toEqual(response);
+    });
+  });
+});
diff --git a/src/doctors/doctors.controller.ts b/src/doctors/doctors.controller.ts
new file mode 100644
index 0000000..cee5e00
--- /dev/null
+++ b/src/doctors/doctors.controller.ts
@@ -0,0 +1,56 @@
+/**
+ @file        <file name>
+ @description  <description>
+ @author      <Your Name>
+ @created     <YYYY-MM-DD>
+**/
+
+import {
+  Controller,
+  Post,
+  Body,
+} from '@nestjs/common';
+import {
+  Logger,
+} from 'nest-common-utilities';
+import { ApiOperation, ApiResponse } from '@nestjs/swagger';
+import { DoctorsService } from './doctors.service';
+import { UpdateDoctorsRequestDto } from './dto/update-doctors-request.dto';
+import { UpdateDoctorsResponseDto } from './dto/update-doctors-response.dto';
+
+/**
+ * Controller to manage doctor-related API endpoints.
+ */
+
+@Controller('doctors')
+export class DoctorsController {
+  private logger = new Logger(DoctorsController.name);
+
+  /**
+   * Initializes the DoctorsController.
+   *
+   * @param doctorsService - Service for handling doctors business logic.
+   */
+
+  constructor(private readonly doctorsService: DoctorsService) {}
+
+  /**
+   * Update doctor master based on the request parameters.
+   *
+   * @param {UpdateDoctorsRequestDto} UpdateDoctorsRequestDto - The data transfer object containing the information for updating doctor.
+   * @returns {Promise<UpdateDoctorsResponseDto>} The updated doctor information.
+   */
+
+  @Post('/update')
+  @ApiOperation({ summary: 'Update Doctor details' })
+  @ApiResponse({
+    status: 200,
+    description: 'Doctor Details Updated Successfully.',
+  })
+  @ApiResponse({ status: 400, description: 'Bad Request.' })
+  async updateDoctors(
+    @Body() UpdateDoctorsRequestDto: UpdateDoctorsRequestDto,
+  ): Promise<UpdateDoctorsResponseDto> {
+    return this.doctorsService.updateDoctorById(UpdateDoctorsRequestDto);
+  }
+}
diff --git a/src/doctors/doctors.module.ts b/src/doctors/doctors.module.ts
new file mode 100644
index 0000000..06a1a70
--- /dev/null
+++ b/src/doctors/doctors.module.ts
@@ -0,0 +1,21 @@
+/**
+ @file        <file name>
+ @description  <description>
+ @author      <Your Name>
+ @created     <YYYY-MM-DD>
+**/
+
+import { Module } from '@nestjs/common';
+import { DoctorsController } from './doctors.controller';
+import { PrismaModule } from '../prisma/prisma.module'
+import { DoctorsService } from './doctors.service';
+
+/**
+ *
+ */
+@Module({
+  imports : [PrismaModule],
+  controllers: [DoctorsController],
+  providers: [DoctorsService]
+})
+export class DoctorsModule { }
\ No newline at end of file
diff --git a/src/doctors/doctors.service.spec.ts b/src/doctors/doctors.service.spec.ts
new file mode 100644
index 0000000..7b7c553
--- /dev/null
+++ b/src/doctors/doctors.service.spec.ts
@@ -0,0 +1,117 @@
+import { Test, TestingModule } from '@nestjs/testing';
+import { DoctorsService } from './doctors.service';
+import { PrismaService } from '../prisma/prisma.service';
+import { AppException } from 'nest-common-utilities';
+import { UpdateDoctorsRequestDto } from './dto/update-doctors-request.dto';
+
+describe('DoctorsService', () => {
+  let doctorsService: DoctorsService;
+  let prismaService: PrismaService;
+
+  beforeEach(async () => {
+    const moduleRef: TestingModule = await Test.createTestingModule({
+      providers: [
+        DoctorsService,
+        {
+          provide: PrismaService,
+          useValue: {
+            doctor_master: {
+              findUnique: jest.fn(),
+              update: jest.fn(),
+              create: jest.fn(),
+            },
+          },
+        },
+      ],
+    }).compile();
+
+    doctorsService = moduleRef.get<DoctorsService>(DoctorsService);
+    prismaService = moduleRef.get<PrismaService>(PrismaService);
+  });
+
+  const dto: UpdateDoctorsRequestDto = {
+    doctorId: '53f12c09-7be7-407b-8c5d-26892a354c26',
+    userId: '6f6b90a9-331e-4874-a374-ebf65a1bce2a',
+    doctorName: 'Dr. Prathviraj Thokal',
+    doctorRegNo: 'RED-1111',
+    doctorSpecialityId: 'b9fc627e-93f3-4b93-9ac3-3f3c3ad1e007',
+    doctorQualificationId: '58c1b3f1-0007-4444-aaaa-000000000007',
+    contactNo: '7208806389',
+    hprCode: 'HPR-111',
+    emailId: 'prathviraj@abc.com',
+    pan_no: 'SLEUS7686D',
+    address: 'Mumbai',
+    stateId: 'f77da58f-422f-4b26-b6ab-ab02fe9cd00d',
+    cityId: 'e9af1491-7b1e-4010-9542-af36700d5f89',
+    pincode: '2c1fe645-989c-4705-91ef-36f3c78c0d08',
+    latitude: 73.383683,
+    longitude: 82.2882872,
+  };
+
+  it('should throw AppException if doctor not found', async () => {
+    (prismaService.doctor_master.findUnique as jest.Mock).mockResolvedValue(null);
+
+    await expect(doctorsService.updateDoctorById(dto)).rejects.toThrow(AppException);
+    expect(prismaService.doctor_master.findUnique).toHaveBeenCalledWith({
+      where: { id: dto.doctorId },
+    });
+  });
+
+  it('should throw AppException if duplicate registration number found', async () => {
+    (prismaService.doctor_master.findUnique as jest.Mock).mockResolvedValue({
+      id: dto.doctorId,
+      registration_no: dto.doctorRegNo,
+    });
+
+    await expect(doctorsService.updateDoctorById(dto)).rejects.toThrow(AppException);
+  });
+
+  it('should deactivate old doctor and create new doctor record', async () => {
+    (prismaService.doctor_master.findUnique as jest.Mock).mockResolvedValue({
+      id: dto.doctorId,
+      registration_no: 'OLD_REG_NO',
+    });
+
+    (prismaService.doctor_master.update as jest.Mock).mockResolvedValue({
+      id: dto.doctorId,
+      is_active: false,
+    });
+
+    const newDoctorRecord = { id: 'new-doctor-uuid' };
+    (prismaService.doctor_master.create as jest.Mock).mockResolvedValue(newDoctorRecord);
+
+    const result = await doctorsService.updateDoctorById(dto);
+
+    expect(prismaService.doctor_master.update).toHaveBeenCalledWith({
+      where: { id: dto.doctorId },
+      data: expect.objectContaining({
+        is_active: false,
+        updated_by: dto.userId,
+      }),
+    });
+
+    expect(prismaService.doctor_master.create).toHaveBeenCalledWith({
+      data: expect.objectContaining({
+        name: dto.doctorName,
+        registration_no: dto.doctorRegNo,
+        speciality_id: dto.doctorSpecialityId,
+        qualification_id: dto.doctorQualificationId,
+        doctor_contact: dto.contactNo,
+        hpr_code: dto.hprCode,
+        doctor_email_id: dto.emailId,
+        pan_no: expect.any(Uint8Array),
+        address: dto.address,
+        pincode_id: dto.pincode,
+        latitude: dto.latitude,
+        longitude: dto.longitude,
+        state_id: dto.stateId,
+        city_id: dto.cityId,
+        is_active: true,
+        created_by: dto.userId,
+        updated_by: dto.userId,
+      }),
+    });
+
+    expect(result).toEqual({ doctorId: newDoctorRecord.id });
+  });
+});
diff --git a/src/doctors/doctors.service.ts b/src/doctors/doctors.service.ts
new file mode 100644
index 0000000..b117c68
--- /dev/null
+++ b/src/doctors/doctors.service.ts
@@ -0,0 +1,106 @@
+/**
+ @file        <file name>
+ @description  <description>
+ @author      <Your Name>
+ @created     <YYYY-MM-DD>
+**/
+
+import { Injectable } from '@nestjs/common';
+import { PrismaService } from '../prisma/prisma.service';
+import { Logger, AppException, errorCode } from 'nest-common-utilities';
+import { UpdateDoctorsRequestDto } from './dto/update-doctors-request.dto';
+import { UpdateDoctorsResponseDto } from './dto/update-doctors-response.dto';
+
+/**
+ * Service to encapsulate doctors domain logic such as create doctor update doctor.
+ */
+
+@Injectable()
+export class DoctorsService {
+  private logger = new Logger(DoctorsService.name);
+
+  /**
+   * Constructs the DoctorsService.
+   *
+   * @param prisma - The Prisma service for database interactions.
+   */
+  constructor(private prisma: PrismaService) {}
+
+  /**
+   * Update the doctor details by using doctor ID
+   *
+   * @param {UpdateDoctorsRequestDto} dto - The data transfer object containing the doctor information to be updated.
+   * @returns {Promise<UpdateDoctorsResponseDto>} A promise that resolves to the updated doctor's data.
+   */
+
+  async updateDoctorById(
+    dto: UpdateDoctorsRequestDto,
+  ): Promise<UpdateDoctorsResponseDto> {
+    const {
+      doctorId,
+      userId,
+      doctorName,
+      doctorRegNo,
+      doctorSpecialityId,
+      doctorQualificationId,
+      contactNo,
+      hprCode,
+      emailId,
+      pan_no,
+      address,
+      pincode,
+      latitude,
+      longitude,
+      stateId,
+      cityId,
+    } = dto;
+    const existingDoctor = await this.prisma.doctor_master.findUnique({
+      where: { id: doctorId },
+    });
+    
+    if (!existingDoctor) {
+      throw new AppException(
+        `Doctor with ID ${doctorId} not found`,
+        errorCode.DATA_NOT_FOUND,
+      );
+    }
+
+    if (existingDoctor?.registration_no == doctorRegNo) {
+      throw new AppException(`Duplicate registration number found.`, '409');
+    }
+
+    // Deactivate the old doctor record
+    await this.prisma.doctor_master.update({
+      where: { id: doctorId },
+      data: {
+        is_active: false,
+        updated_by: userId,
+        updated_at: new Date(),
+      },
+    });
+
+    const data = {
+      name: doctorName ?? '',
+      registration_no: doctorRegNo ?? '',
+      speciality_id: doctorSpecialityId ?? '',
+      qualification_id: doctorQualificationId ?? '',
+      doctor_contact: contactNo ?? '',
+      hpr_code: hprCode ?? '',
+      doctor_email_id: emailId ?? '',
+      pan_no: pan_no ? new TextEncoder().encode(pan_no) : new Uint8Array(),
+      address: address ?? '',
+      pincode_id: pincode ?? '',
+      latitude: latitude ?? 33.34444,
+      longitude: longitude ?? 34.44444,
+      state_id: stateId ?? '',
+      city_id: cityId ?? '',
+      is_active: true,
+      created_by: userId ?? '',
+      updated_by: userId ?? '',
+    };
+    const newDoctor = await this.prisma.doctor_master.create({ data });
+    return {
+      doctorId: newDoctor.id,
+    };
+  }
+}
diff --git a/src/doctors/dto/update-doctors-request.dto.ts b/src/doctors/dto/update-doctors-request.dto.ts
new file mode 100644
index 0000000..909ce0f
--- /dev/null
+++ b/src/doctors/dto/update-doctors-request.dto.ts
@@ -0,0 +1,149 @@
+/**
+ @file        <file name>
+ @description  <description>
+ @author      <Your Name>
+ @created     <YYYY-MM-DD>
+**/
+
+import {
+  IsString,
+  IsEmail,
+  IsOptional,
+  IsNumber,
+  IsUUID,
+  IsNotEmpty,
+} from 'class-validator';
+import { ApiProperty } from '@nestjs/swagger';
+import { Type } from 'class-transformer';
+
+export class UpdateDoctorsRequestDto {
+  @IsUUID()
+  @IsNotEmpty({ message: 'Doctor ID must be a valid UUID' })
+  @ApiProperty({ example: 'uuid', description: 'Doctor ID' })
+  doctorId?: string;
+
+  @IsUUID()
+  @IsNotEmpty({ message: 'User ID must be a valid UUID' })
+  @ApiProperty({ example: '2733a326-f4e2-4005-ad18-3b8f67a7613c', description: 'User ID' })
+  userId?: string;
+
+  @IsOptional()
+  @IsString({ message: 'Doctor name must be a string' })
+  @ApiProperty({
+    example: 'Dr. Prathviraj Thokal',
+    description: 'Name of the doctor',
+  })
+  doctorName?: string;
+
+  @IsOptional()
+  @IsString({ message: 'Doctor registration number must be a string' })
+  @ApiProperty({
+    example: 'DRREG-112',
+    description: 'Registration number of the doctor',
+  })
+  doctorRegNo?: string;
+
+  @IsOptional()
+  @IsUUID()
+  @IsNotEmpty({ message: 'Doctor speciality ID must be a valid UUID' })
+  @ApiProperty({
+    example: '2733a326-f4e2-4005-ad18-3b8f67a7613c',
+    description: 'Doctor speciality ID',
+  })
+  doctorSpecialityId?: string;
+
+  @IsOptional()
+  @IsUUID()
+  @IsNotEmpty({ message: 'Doctor qualification ID must be a valid UUID' })
+  @ApiProperty({
+    example: '2733a326-f4e2-4005-ad18-3b8f67a7613c',
+    description: 'Doctor qualification ID',
+  })
+  doctorQualificationId?: string;
+
+  @IsOptional()
+  @IsString({ message: 'Contact number must be a string' })
+  @ApiProperty({
+    example: '7208806389',
+    description: 'Contact number of the doctor',
+  })
+  contactNo?: string;
+
+  @IsOptional()
+  @IsString({ message: 'HPR code must be a string' })
+  @ApiProperty({
+    example: 'HPR-112',
+    description: 'HPR code of the doctor',
+  })
+  hprCode?: string;
+
+  @IsOptional()
+  @IsEmail({}, { message: 'Invalid email format' })
+  @ApiProperty({
+    example: 'niveus@example.com',
+    description: 'Email of the doctor',
+  })
+  emailId?: string;
+
+  // @IsOptional()
+  @IsString({ message: 'Pan number must be a string' })
+  @ApiProperty({
+    example: 'HSLDY8769P',
+    description: 'Pan number of the doctor',
+  })
+  pan_no?: string;
+
+  @IsOptional()
+  @IsString({ message: 'Address must be a string' })
+  @ApiProperty({
+    example: 'Mumbai',
+    description: 'Address of the doctor',
+  })
+  address?: string;
+
+  @IsOptional()
+  @IsUUID()
+  @IsNotEmpty({ message: 'Pincode ID must be a valid UUID' })
+  @ApiProperty({
+    example: '2733a326-f4e2-4005-ad18-3b8f67a7613c',
+    description: 'Pincode ID',
+  })
+  pincode?: string;
+
+  @IsOptional()
+  @Type(() => Number)
+  @IsNumber()
+  @ApiProperty({
+    example: 76.22222,
+    description: 'Latitude',
+  })
+  latitude?: number;
+
+  @IsOptional()
+  @Type(() => Number)
+  @IsNumber()
+  @ApiProperty({
+    example: 76.22222,
+    description: 'Longitude',
+  })
+  longitude?: number;
+
+  //State and city ID 
+  @IsOptional()
+  @IsUUID()
+  @IsNotEmpty({ message: 'State ID must be a valid UUID' })
+  @ApiProperty({
+    example: '2733a326-f4e2-4005-ad18-3b8f67a7613c',
+    description: 'State ID',
+  })
+  stateId?: string;
+
+  @IsOptional()
+  @IsUUID()
+  @IsNotEmpty({ message: 'City ID must be a valid UUID' })
+  @ApiProperty({
+    example: '2733a326-f4e2-4005-ad18-3b8f67a7613c',
+    description: 'City ID',
+  })
+  cityId?: string;
+}
diff --git a/src/doctors/dto/update-doctors-response.dto.ts b/src/doctors/dto/update-doctors-response.dto.ts
new file mode 100644
index 0000000..01d600f
--- /dev/null
+++ b/src/doctors/dto/update-doctors-response.dto.ts
@@ -0,0 +1,18 @@
+/**
+ @file        <file name>
+ @description  <description>
+ @author      <Your Name>
+ @created     <YYYY-MM-DD>
+**/
+
+import { Expose } from 'class-transformer';
+import { ApiProperty } from '@nestjs/swagger';
+
+export class UpdateDoctorsResponseDto {
+    @Expose()
+    @ApiProperty({
+      example: '550e8400-e29b-41d4-a716-446655440002',
+      description: 'UUID of the Doctor',
+    })
+    doctorId: string;
+}
\ No newline at end of file
diff --git a/src/seed.ts b/src/seed.ts
index e050032..37662ca 100644
--- a/src/seed.ts
+++ b/src/seed.ts
@@ -26,6 +26,20 @@ const userData = [
     password: '123456',
     role: 'user',
   },
+  {
+    name: 'Prathviraj',
+    email: 'prathvirajadmin@niveus.com',
+    hashemail: 'prathvirajadmin@niveus.com',
+    password: '123456',
+    role: 'admin',
+  },
+  {
+    name: 'Prathvirajuser',
+    email: 'prathvirajuser@niveus.com',
+    hashemail: 'prathvirajuser@niveus.com',
+    password: '123456',
+    role: 'user',
+  },
 ];
 
 const hospitalSpecialtyMasterData = [
@@ -558,6 +572,59 @@ const hospitalForeignKeys: ForeignKeyConfig<typeof hospitals[0]>[] = [
 
 ];
 
+const doctorSpecialityMaster = [
+  { name: "General Practitioner (GP)", is_active: true },
+  { name: "Pediatrician", is_active: true },
+  { name: "Dermatologist", is_active: true },
+  { name: "Cardiologist", is_active: true },
+  { name: "Ophthalmologist", is_active: true },
+  { name: "Orthopaedic Surgeon", is_active: true },
+  { name: "Neurologist", is_active: true },
+  { name: "Psychiatrist", is_active: true },
+  { name: "OBS/GYN", is_active: true },
+  { name: "Anesthesiologist", is_active: true },
+  { name: "Radiologist", is_active: true },
+  { name: "ENT Specialist", is_active: true },
+  { name: "Urologist", is_active: true },
+  { name: "Endocrinologist", is_active: true },
+  { name: "Gastroenterologist", is_active: true },
+  { name: "Pulmonologist", is_active: true },
+  { name: "Nephrologist", is_active: true },
+  { name: "Oncologist", is_active: true },
+  { name: "Rheumatologist", is_active: true },
+  { name: "Allergist/Immunologist", is_active: true },
+  { name: "Emergency Medicine Physician", is_active: true },
+  { name: "Pathologist", is_active: true },
+  { name: "Infectious Disease Specialist", is_active: true },
+];
+
+const doctorQualifications = [
+  { name: 'BHMS', is_active: true },
+  { name: 'BAMS', is_active: true },
+  { name: 'BUMS', is_active: true },
+  { name: 'BPT', is_active: true },
+  { name: 'MPT', is_active: true },
+  { name: 'BIMS', is_active: true },
+  { name: 'MBBS', is_active: true },
+  { name: 'MD', is_active: true },
+  { name: 'MS', is_active: true },
+  { name: 'BDS', is_active: true },
+  { name: 'MDS', is_active: true },
+  { name: 'DHMS', is_active: true },
+  { name: 'DA', is_active: true },
+  { name: 'DCH', is_active: true },
+  { name: 'DGO', is_active: true },
+  { name: 'DLO', is_active: true },
+  { name: 'DMRD', is_active: true },
+  { name: 'DO', is_active: true },
+  { name: 'PGDMCH', is_active: true },
+  { name: 'PGDIM', is_active: true },
+  { name: 'PGMT', is_active: true },
+  { name: 'PGD-MLRN', is_active: true },
+  { name: 'PGD-CM', is_active: true },
+  { name: 'PGD-OTN', is_active: true },
+  { name: 'BMLT', is_active: true }
+];
 
 /**
  * Seeds the user model with initial data.
@@ -651,6 +718,9 @@ async function run() {
       hospitalForeignKeys
     );
 
+    await seedModel(prisma, 'doctor_speciality_master' as keyof PrismaService, doctorSpecialityMaster);
+    await seedModel(prisma, 'doctor_qualification_master' as keyof PrismaService, doctorQualifications);
+
     console.log('Data seeded successfully.');
   } catch (error) {
     console.error('Error seeding data:', error);
-- 
GitLab


From 6884657ecdc27d1ea4548797afbfdd68cb9cb5f0 Mon Sep 17 00:00:00 2001
From: "prathviraj.thokal" <prathviraj.thokal@niveussolutions.com>
Date: Thu, 5 Jun 2025 11:49:10 +0530
Subject: [PATCH 02/11] Changes in encoded pan number

---
 src/config/prisma.config.ts    | 1 +
 src/doctors/doctors.service.ts | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/config/prisma.config.ts b/src/config/prisma.config.ts
index 5b8b090..8009153 100755
--- a/src/config/prisma.config.ts
+++ b/src/config/prisma.config.ts
@@ -6,6 +6,7 @@
 **/
 const encryptedFields = {
     user: ['hashemail'],
+    doctor_master: ['pan_no']
 };
 
 export default encryptedFields;
diff --git a/src/doctors/doctors.service.ts b/src/doctors/doctors.service.ts
index b117c68..d3d39e8 100644
--- a/src/doctors/doctors.service.ts
+++ b/src/doctors/doctors.service.ts
@@ -87,7 +87,7 @@ export class DoctorsService {
       doctor_contact: contactNo ?? '',
       hpr_code: hprCode ?? '',
       doctor_email_id: emailId ?? '',
-      pan_no: pan_no ? new TextEncoder().encode(pan_no) : new Uint8Array(),
+      pan_no: pan_no,
       address: address ?? '',
       pincode_id: pincode ?? '',
       latitude: latitude ?? 33.34444,
@@ -98,6 +98,7 @@ export class DoctorsService {
       created_by: userId ?? '',
       updated_by: userId ?? '',
     };
+    //@ts-ignore
     const newDoctor = await this.prisma.doctor_master.create({ data });
     return {
       doctorId: newDoctor.id,
-- 
GitLab


From 29012cae1909a2d302c2110d17b5660339d6c6a1 Mon Sep 17 00:00:00 2001
From: "prathviraj.thokal" <prathviraj.thokal@niveussolutions.com>
Date: Thu, 5 Jun 2025 14:36:46 +0530
Subject: [PATCH 03/11] Added percommit lines

---
 src/doctors/doctors.controller.spec.ts         |  6 ++++++
 src/doctors/doctors.controller.ts              | 11 +++++++++++
 src/doctors/doctors.service.spec.ts            |  6 ++++++
 src/doctors/doctors.service.ts                 |  7 +++++++
 src/doctors/dto/update-doctors-request.dto.ts  |  3 +++
 src/doctors/dto/update-doctors-response.dto.ts |  3 +++
 6 files changed, 36 insertions(+)

diff --git a/src/doctors/doctors.controller.spec.ts b/src/doctors/doctors.controller.spec.ts
index d664d02..6e8935e 100644
--- a/src/doctors/doctors.controller.spec.ts
+++ b/src/doctors/doctors.controller.spec.ts
@@ -1,3 +1,9 @@
+/**
+ @file        <file name>
+ @description  <description>
+ @author      <Your Name>
+ @created     <YYYY-MM-DD>
+**/
 import { Test, TestingModule } from '@nestjs/testing';
 import { DoctorsController } from './doctors.controller';
 import { DoctorsService } from './doctors.service';
diff --git a/src/doctors/doctors.controller.ts b/src/doctors/doctors.controller.ts
index cee5e00..4b813ae 100644
--- a/src/doctors/doctors.controller.ts
+++ b/src/doctors/doctors.controller.ts
@@ -22,6 +22,9 @@ import { UpdateDoctorsResponseDto } from './dto/update-doctors-response.dto';
  * Controller to manage doctor-related API endpoints.
  */
 
+/**
+ *
+ */
 @Controller('doctors')
 export class DoctorsController {
   private logger = new Logger(DoctorsController.name);
@@ -32,6 +35,10 @@ export class DoctorsController {
    * @param doctorsService - Service for handling doctors business logic.
    */
 
+  /**
+   *
+   * @param doctorsService
+   */
   constructor(private readonly doctorsService: DoctorsService) {}
 
   /**
@@ -41,6 +48,10 @@ export class DoctorsController {
    * @returns {Promise<UpdateDoctorsResponseDto>} The updated doctor information.
    */
 
+  /**
+   *
+   * @param UpdateDoctorsRequestDto
+   */
   @Post('/update')
   @ApiOperation({ summary: 'Update Doctor details' })
   @ApiResponse({
diff --git a/src/doctors/doctors.service.spec.ts b/src/doctors/doctors.service.spec.ts
index 7b7c553..2be179f 100644
--- a/src/doctors/doctors.service.spec.ts
+++ b/src/doctors/doctors.service.spec.ts
@@ -1,3 +1,9 @@
+/**
+ @file        <file name>
+ @description  <description>
+ @author      <Your Name>
+ @created     <YYYY-MM-DD>
+**/
 import { Test, TestingModule } from '@nestjs/testing';
 import { DoctorsService } from './doctors.service';
 import { PrismaService } from '../prisma/prisma.service';
diff --git a/src/doctors/doctors.service.ts b/src/doctors/doctors.service.ts
index d3d39e8..f9abf26 100644
--- a/src/doctors/doctors.service.ts
+++ b/src/doctors/doctors.service.ts
@@ -15,6 +15,9 @@ import { UpdateDoctorsResponseDto } from './dto/update-doctors-response.dto';
  * Service to encapsulate doctors domain logic such as create doctor update doctor.
  */
 
+/**
+ *
+ */
 @Injectable()
 export class DoctorsService {
   private logger = new Logger(DoctorsService.name);
@@ -33,6 +36,10 @@ export class DoctorsService {
    * @returns {Promise<UpdateDoctorsResponseDto>} A promise that resolves to the updated doctor's data.
    */
 
+  /**
+   *
+   * @param dto
+   */
   async updateDoctorById(
     dto: UpdateDoctorsRequestDto,
   ): Promise<UpdateDoctorsResponseDto> {
diff --git a/src/doctors/dto/update-doctors-request.dto.ts b/src/doctors/dto/update-doctors-request.dto.ts
index 909ce0f..8754716 100644
--- a/src/doctors/dto/update-doctors-request.dto.ts
+++ b/src/doctors/dto/update-doctors-request.dto.ts
@@ -16,6 +16,9 @@ import {
 import { ApiProperty } from '@nestjs/swagger';
 import { Type } from 'class-transformer';
 
+/**
+ *
+ */
 export class UpdateDoctorsRequestDto {
   @IsUUID()
   @IsNotEmpty({ message: 'Doctor ID must be a valid UUID' })
diff --git a/src/doctors/dto/update-doctors-response.dto.ts b/src/doctors/dto/update-doctors-response.dto.ts
index 01d600f..bb7c14d 100644
--- a/src/doctors/dto/update-doctors-response.dto.ts
+++ b/src/doctors/dto/update-doctors-response.dto.ts
@@ -8,6 +8,9 @@
 import { Expose } from 'class-transformer';
 import { ApiProperty } from '@nestjs/swagger';
 
+/**
+ *
+ */
 export class UpdateDoctorsResponseDto {
     @Expose()
     @ApiProperty({
-- 
GitLab


From 6c9c018544959d19d86d9ad1a961caa842a4c96f Mon Sep 17 00:00:00 2001
From: "prathviraj.thokal" <prathviraj.thokal@niveussolutions.com>
Date: Thu, 5 Jun 2025 16:33:28 +0530
Subject: [PATCH 04/11] resloved comments

---
 src/doctors/doctors.controller.ts             | 1 +
 src/doctors/doctors.service.ts                | 1 +
 src/doctors/dto/update-doctors-request.dto.ts | 4 ++--
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/doctors/doctors.controller.ts b/src/doctors/doctors.controller.ts
index 4b813ae..730a3b8 100644
--- a/src/doctors/doctors.controller.ts
+++ b/src/doctors/doctors.controller.ts
@@ -57,6 +57,7 @@ export class DoctorsController {
   @ApiResponse({
     status: 200,
     description: 'Doctor Details Updated Successfully.',
+    type: UpdateDoctorsResponseDto
   })
   @ApiResponse({ status: 400, description: 'Bad Request.' })
   async updateDoctors(
diff --git a/src/doctors/doctors.service.ts b/src/doctors/doctors.service.ts
index f9abf26..d84f670 100644
--- a/src/doctors/doctors.service.ts
+++ b/src/doctors/doctors.service.ts
@@ -72,6 +72,7 @@ export class DoctorsService {
       );
     }
 
+    //in DB Unique key constraints for registration_no. Will throw error if body has duplicate registration_no 
     if (existingDoctor?.registration_no == doctorRegNo) {
       throw new AppException(`Duplicate registration number found.`, '409');
     }
diff --git a/src/doctors/dto/update-doctors-request.dto.ts b/src/doctors/dto/update-doctors-request.dto.ts
index 8754716..96fdf62 100644
--- a/src/doctors/dto/update-doctors-request.dto.ts
+++ b/src/doctors/dto/update-doctors-request.dto.ts
@@ -23,12 +23,12 @@ export class UpdateDoctorsRequestDto {
   @IsUUID()
   @IsNotEmpty({ message: 'Doctor ID must be a valid UUID' })
   @ApiProperty({ example: 'uuid', description: 'Doctor ID' })
-  doctorId?: string;
+  doctorId: string;
 
   @IsUUID()
   @IsNotEmpty({ message: 'User ID must be a valid UUID' })
   @ApiProperty({ example: '2733a326-f4e2-4005-ad18-3b8f67a7613c', description: 'User ID' })
-  userId?: string;
+  userId: string;
 
   @IsOptional()
   @IsString({ message: 'Doctor name must be a string' })
-- 
GitLab


From 19537d5af295792095144c37c81af42b68b452f8 Mon Sep 17 00:00:00 2001
From: "prathviraj.thokal" <prathviraj.thokal@niveussolutions.com>
Date: Thu, 5 Jun 2025 16:36:19 +0530
Subject: [PATCH 05/11] resloved comments

---
 src/doctors/doctors.service.ts | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/src/doctors/doctors.service.ts b/src/doctors/doctors.service.ts
index d84f670..3e53fb6 100644
--- a/src/doctors/doctors.service.ts
+++ b/src/doctors/doctors.service.ts
@@ -72,11 +72,6 @@ export class DoctorsService {
       );
     }
 
-    //in DB Unique key constraints for registration_no. Will throw error if body has duplicate registration_no 
-    if (existingDoctor?.registration_no == doctorRegNo) {
-      throw new AppException(`Duplicate registration number found.`, '409');
-    }
-
     // Deactivate the old doctor record
     await this.prisma.doctor_master.update({
       where: { id: doctorId },
-- 
GitLab


From b7980027964c66138bdd3ac76dd336c0a5d16820 Mon Sep 17 00:00:00 2001
From: "prathviraj.thokal" <prathviraj.thokal@niveussolutions.com>
Date: Fri, 6 Jun 2025 12:46:43 +0530
Subject: [PATCH 06/11] Resolved commits

---
 src/doctors/doctors.controller.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/doctors/doctors.controller.ts b/src/doctors/doctors.controller.ts
index 730a3b8..c717cc1 100644
--- a/src/doctors/doctors.controller.ts
+++ b/src/doctors/doctors.controller.ts
@@ -61,8 +61,8 @@ export class DoctorsController {
   })
   @ApiResponse({ status: 400, description: 'Bad Request.' })
   async updateDoctors(
-    @Body() UpdateDoctorsRequestDto: UpdateDoctorsRequestDto,
+    @Body() updateDoctorsRequestDto: UpdateDoctorsRequestDto,
   ): Promise<UpdateDoctorsResponseDto> {
-    return this.doctorsService.updateDoctorById(UpdateDoctorsRequestDto);
+    return this.doctorsService.updateDoctorById(updateDoctorsRequestDto);
   }
 }
-- 
GitLab


From 5502c037843e0f74996549d5f216d7c3c5030d4b Mon Sep 17 00:00:00 2001
From: "prathviraj.thokal" <prathviraj.thokal@niveussolutions.com>
Date: Fri, 6 Jun 2025 14:12:30 +0530
Subject: [PATCH 07/11] ES lint changes

---
 src/doctors/doctors.controller.spec.ts        |  6 ++--
 src/doctors/doctors.controller.ts             | 18 ++++++++----
 src/doctors/doctors.service.spec.ts           | 28 +++++++++---------
 src/doctors/doctors.service.ts                | 29 ++++++++++++++-----
 src/doctors/dto/update-doctors-request.dto.ts |  9 ++++--
 5 files changed, 58 insertions(+), 32 deletions(-)

diff --git a/src/doctors/doctors.controller.spec.ts b/src/doctors/doctors.controller.spec.ts
index 6e8935e..d23601b 100644
--- a/src/doctors/doctors.controller.spec.ts
+++ b/src/doctors/doctors.controller.spec.ts
@@ -43,7 +43,7 @@ describe('DoctorsController', () => {
         contactNo: '7208806389',
         hprCode: 'HPR-111',
         emailId: 'prathviraj@abc.com',
-        pan_no: 'SLEUS7686D',
+        panNo: 'SLEUS7686D',
         address: 'Mumbai',
         stateId: 'f77da58f-422f-4b26-b6ab-ab02fe9cd00d',
         cityId: 'e9af1491-7b1e-4010-9542-af36700d5f89',
@@ -56,7 +56,9 @@ describe('DoctorsController', () => {
         doctorId: 'new-doctor-uuid',
       };
 
-      (doctorsService.updateDoctorById as jest.Mock).mockResolvedValue(response);
+      (doctorsService.updateDoctorById as jest.Mock).mockResolvedValue(
+        response,
+      );
 
       const result = await doctorsController.updateDoctors(dto);
 
diff --git a/src/doctors/doctors.controller.ts b/src/doctors/doctors.controller.ts
index c717cc1..e0d5e8b 100644
--- a/src/doctors/doctors.controller.ts
+++ b/src/doctors/doctors.controller.ts
@@ -36,28 +36,36 @@ export class DoctorsController {
    */
 
   /**
+   * Service for handling doctor-related API endpoints.
    *
-   * @param doctorsService
+   * @param doctorsService - Service providing business logic for doctor
+   * operations.
    */
   constructor(private readonly doctorsService: DoctorsService) {}
 
   /**
    * Update doctor master based on the request parameters.
    *
-   * @param {UpdateDoctorsRequestDto} UpdateDoctorsRequestDto - The data transfer object containing the information for updating doctor.
-   * @returns {Promise<UpdateDoctorsResponseDto>} The updated doctor information.
+   * @param {UpdateDoctorsRequestDto} UpdateDoctorsRequestDto - The 
+   * data transfer object containing the information for updating doctor.
+   * @returns {Promise<UpdateDoctorsResponseDto>} The updated 
+   * doctor information.
    */
 
   /**
+   * Handles the HTTP POST request to update an existing doctor's details.
+   * Delegates the logic to the doctorsService. Returns the updated doctor
+   * information in the response.
    *
-   * @param UpdateDoctorsRequestDto
+   * @param updateDoctorsRequestDto - The DTO containing doctor update data.
+   * @returns A promise that resolves to the updated doctor response DTO.
    */
   @Post('/update')
   @ApiOperation({ summary: 'Update Doctor details' })
   @ApiResponse({
     status: 200,
     description: 'Doctor Details Updated Successfully.',
-    type: UpdateDoctorsResponseDto
+    type: UpdateDoctorsResponseDto,
   })
   @ApiResponse({ status: 400, description: 'Bad Request.' })
   async updateDoctors(
diff --git a/src/doctors/doctors.service.spec.ts b/src/doctors/doctors.service.spec.ts
index 2be179f..566649f 100644
--- a/src/doctors/doctors.service.spec.ts
+++ b/src/doctors/doctors.service.spec.ts
@@ -45,7 +45,7 @@ describe('DoctorsService', () => {
     contactNo: '7208806389',
     hprCode: 'HPR-111',
     emailId: 'prathviraj@abc.com',
-    pan_no: 'SLEUS7686D',
+    panNo: 'SLEUS7686D',
     address: 'Mumbai',
     stateId: 'f77da58f-422f-4b26-b6ab-ab02fe9cd00d',
     cityId: 'e9af1491-7b1e-4010-9542-af36700d5f89',
@@ -55,27 +55,22 @@ describe('DoctorsService', () => {
   };
 
   it('should throw AppException if doctor not found', async () => {
-    (prismaService.doctor_master.findUnique as jest.Mock).mockResolvedValue(null);
+    (prismaService.doctor_master.findUnique as jest.Mock).mockResolvedValue(
+      null,
+    );
+
+    await expect(doctorsService.updateDoctorById(dto)).rejects.toThrow(
+      AppException,
+    );
 
-    await expect(doctorsService.updateDoctorById(dto)).rejects.toThrow(AppException);
     expect(prismaService.doctor_master.findUnique).toHaveBeenCalledWith({
       where: { id: dto.doctorId },
     });
   });
 
-  it('should throw AppException if duplicate registration number found', async () => {
-    (prismaService.doctor_master.findUnique as jest.Mock).mockResolvedValue({
-      id: dto.doctorId,
-      registration_no: dto.doctorRegNo,
-    });
-
-    await expect(doctorsService.updateDoctorById(dto)).rejects.toThrow(AppException);
-  });
-
   it('should deactivate old doctor and create new doctor record', async () => {
     (prismaService.doctor_master.findUnique as jest.Mock).mockResolvedValue({
       id: dto.doctorId,
-      registration_no: 'OLD_REG_NO',
     });
 
     (prismaService.doctor_master.update as jest.Mock).mockResolvedValue({
@@ -84,7 +79,9 @@ describe('DoctorsService', () => {
     });
 
     const newDoctorRecord = { id: 'new-doctor-uuid' };
-    (prismaService.doctor_master.create as jest.Mock).mockResolvedValue(newDoctorRecord);
+    (prismaService.doctor_master.create as jest.Mock).mockResolvedValue(
+      newDoctorRecord,
+    );
 
     const result = await doctorsService.updateDoctorById(dto);
 
@@ -93,6 +90,7 @@ describe('DoctorsService', () => {
       data: expect.objectContaining({
         is_active: false,
         updated_by: dto.userId,
+        updated_at: expect.any(Date),
       }),
     });
 
@@ -105,7 +103,7 @@ describe('DoctorsService', () => {
         doctor_contact: dto.contactNo,
         hpr_code: dto.hprCode,
         doctor_email_id: dto.emailId,
-        pan_no: expect.any(Uint8Array),
+        pan_no: dto.panNo,
         address: dto.address,
         pincode_id: dto.pincode,
         latitude: dto.latitude,
diff --git a/src/doctors/doctors.service.ts b/src/doctors/doctors.service.ts
index 3e53fb6..a8659f2 100644
--- a/src/doctors/doctors.service.ts
+++ b/src/doctors/doctors.service.ts
@@ -12,7 +12,8 @@ import { UpdateDoctorsRequestDto } from './dto/update-doctors-request.dto';
 import { UpdateDoctorsResponseDto } from './dto/update-doctors-response.dto';
 
 /**
- * Service to encapsulate doctors domain logic such as create doctor update doctor.
+ * Service to encapsulate doctors 
+ * domain logic such as create doctor update doctor.
  */
 
 /**
@@ -32,13 +33,27 @@ export class DoctorsService {
   /**
    * Update the doctor details by using doctor ID
    *
-   * @param {UpdateDoctorsRequestDto} dto - The data transfer object containing the doctor information to be updated.
-   * @returns {Promise<UpdateDoctorsResponseDto>} A promise that resolves to the updated doctor's data.
+   * @param {UpdateDoctorsRequestDto} dto - The data transfer 
+   * object containing the doctor information to be updated.
+   * @returns {Promise<UpdateDoctorsResponseDto>} A promise 
+   * that resolves to the updated doctor's data.
    */
 
   /**
+   * Updates an existing doctor record by deactivating the old entry and
+   * creating a new one with updated details.
    *
-   * @param dto
+   * This method checks if the doctor with the given ID exists. If not,
+   * it throws an exception. If the doctor exists, it marks the current
+   * record as inactive, then inserts a new record with the updated data.
+   *
+   * @param {UpdateDoctorsRequestDto} dto - The DTO containing updated
+   * doctor information.
+   *
+   * @returns {Promise<UpdateDoctorsResponseDto>} The response containing
+   * the ID of the newly created doctor record.
+   *
+   * @throws {AppException} If no doctor is found with the given ID.
    */
   async updateDoctorById(
     dto: UpdateDoctorsRequestDto,
@@ -53,7 +68,7 @@ export class DoctorsService {
       contactNo,
       hprCode,
       emailId,
-      pan_no,
+      panNo,
       address,
       pincode,
       latitude,
@@ -64,7 +79,7 @@ export class DoctorsService {
     const existingDoctor = await this.prisma.doctor_master.findUnique({
       where: { id: doctorId },
     });
-    
+
     if (!existingDoctor) {
       throw new AppException(
         `Doctor with ID ${doctorId} not found`,
@@ -90,7 +105,7 @@ export class DoctorsService {
       doctor_contact: contactNo ?? '',
       hpr_code: hprCode ?? '',
       doctor_email_id: emailId ?? '',
-      pan_no: pan_no,
+      pan_no: panNo,
       address: address ?? '',
       pincode_id: pincode ?? '',
       latitude: latitude ?? 33.34444,
diff --git a/src/doctors/dto/update-doctors-request.dto.ts b/src/doctors/dto/update-doctors-request.dto.ts
index 96fdf62..ddf296e 100644
--- a/src/doctors/dto/update-doctors-request.dto.ts
+++ b/src/doctors/dto/update-doctors-request.dto.ts
@@ -27,7 +27,10 @@ export class UpdateDoctorsRequestDto {
 
   @IsUUID()
   @IsNotEmpty({ message: 'User ID must be a valid UUID' })
-  @ApiProperty({ example: '2733a326-f4e2-4005-ad18-3b8f67a7613c', description: 'User ID' })
+  @ApiProperty({
+    example: '2733a326-f4e2-4005-ad18-3b8f67a7613c',
+    description: 'User ID',
+  })
   userId: string;
 
   @IsOptional()
@@ -94,7 +97,7 @@ export class UpdateDoctorsRequestDto {
     example: 'HSLDY8769P',
     description: 'Pan number of the doctor',
   })
-  pan_no?: string;
+  panNo?: string;
 
   @IsOptional()
   @IsString({ message: 'Address must be a string' })
@@ -131,7 +134,7 @@ export class UpdateDoctorsRequestDto {
   })
   longitude?: number;
 
-  //State and city ID 
+  //State and city ID
   @IsOptional()
   @IsUUID()
   @IsNotEmpty({ message: 'State ID must be a valid UUID' })
-- 
GitLab


From d27bc12ca8c0588ffa21f4b0cd75257050767d90 Mon Sep 17 00:00:00 2001
From: "prathviraj.thokal" <prathviraj.thokal@niveussolutions.com>
Date: Fri, 6 Jun 2025 14:13:32 +0530
Subject: [PATCH 08/11] Added default

---
 prisma/models/doctor_qualification_master.prisma | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/prisma/models/doctor_qualification_master.prisma b/prisma/models/doctor_qualification_master.prisma
index 9c3ecdb..868afed 100644
--- a/prisma/models/doctor_qualification_master.prisma
+++ b/prisma/models/doctor_qualification_master.prisma
@@ -1,5 +1,5 @@
 model doctor_qualification_master {
-  id            String          @id @db.Uuid
+  id            String          @id @default(uuid()) @db.Uuid
   name          String
   is_active     Boolean
   created_at    DateTime        @default(now())
-- 
GitLab


From 92b7666812da30d99eab53fbb7c2eea3353b3fd4 Mon Sep 17 00:00:00 2001
From: "prathviraj.thokal" <prathviraj.thokal@niveussolutions.com>
Date: Fri, 6 Jun 2025 14:20:33 +0530
Subject: [PATCH 09/11] added updated at

---
 prisma/models/doctor_qualification_master.prisma | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/prisma/models/doctor_qualification_master.prisma b/prisma/models/doctor_qualification_master.prisma
index 868afed..f3180a2 100644
--- a/prisma/models/doctor_qualification_master.prisma
+++ b/prisma/models/doctor_qualification_master.prisma
@@ -3,6 +3,6 @@ model doctor_qualification_master {
   name          String
   is_active     Boolean
   created_at    DateTime        @default(now())
-  updated_at    DateTime
+  updated_at    DateTime        @updatedAt
   doctor_master doctor_master[]
 }
\ No newline at end of file
-- 
GitLab


From 8c507ab59f65929a89ee3923a54a83743afef91a Mon Sep 17 00:00:00 2001
From: "prathviraj.thokal" <prathviraj.thokal@niveussolutions.com>
Date: Fri, 6 Jun 2025 14:39:13 +0530
Subject: [PATCH 10/11] Resolved comments

---
 src/doctors/doctors.service.ts                | 4 ++--
 src/doctors/dto/update-doctors-request.dto.ts | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/doctors/doctors.service.ts b/src/doctors/doctors.service.ts
index a8659f2..2c45fb2 100644
--- a/src/doctors/doctors.service.ts
+++ b/src/doctors/doctors.service.ts
@@ -108,8 +108,8 @@ export class DoctorsService {
       pan_no: panNo,
       address: address ?? '',
       pincode_id: pincode ?? '',
-      latitude: latitude ?? 33.34444,
-      longitude: longitude ?? 34.44444,
+      latitude: latitude ?? '',
+      longitude: longitude ?? '',
       state_id: stateId ?? '',
       city_id: cityId ?? '',
       is_active: true,
diff --git a/src/doctors/dto/update-doctors-request.dto.ts b/src/doctors/dto/update-doctors-request.dto.ts
index ddf296e..2ca0937 100644
--- a/src/doctors/dto/update-doctors-request.dto.ts
+++ b/src/doctors/dto/update-doctors-request.dto.ts
@@ -91,7 +91,7 @@ export class UpdateDoctorsRequestDto {
   })
   emailId?: string;
 
-  // @IsOptional()
+  @IsOptional()
   @IsString({ message: 'Pan number must be a string' })
   @ApiProperty({
     example: 'HSLDY8769P',
-- 
GitLab


From 3f3aa79b1e99be8ab23d69afb903b962bf475475 Mon Sep 17 00:00:00 2001
From: "prathviraj.thokal" <prathviraj.thokal@niveussolutions.com>
Date: Fri, 6 Jun 2025 14:59:20 +0530
Subject: [PATCH 11/11] Made lat lon as null

---
 prisma/models/doctor_master.prisma | 4 ++--
 src/doctors/doctors.service.ts     | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/prisma/models/doctor_master.prisma b/prisma/models/doctor_master.prisma
index e31694e..a5d6fb0 100644
--- a/prisma/models/doctor_master.prisma
+++ b/prisma/models/doctor_master.prisma
@@ -12,8 +12,8 @@ model doctor_master {
   state_id                            String                      @db.Uuid
   city_id                             String                      @db.Uuid
   pincode_id                          String                      @db.Uuid
-  latitude                            Decimal                     @db.Decimal(9, 6)
-  longitude                           Decimal                     @db.Decimal(9, 6)
+  latitude                            Decimal?                    @db.Decimal(9, 6)
+  longitude                           Decimal?                    @db.Decimal(9, 6)
   created_by                          String                      @db.Uuid
   updated_by                          String                      @db.Uuid
   is_active                           Boolean
diff --git a/src/doctors/doctors.service.ts b/src/doctors/doctors.service.ts
index 2c45fb2..8360f41 100644
--- a/src/doctors/doctors.service.ts
+++ b/src/doctors/doctors.service.ts
@@ -108,8 +108,8 @@ export class DoctorsService {
       pan_no: panNo,
       address: address ?? '',
       pincode_id: pincode ?? '',
-      latitude: latitude ?? '',
-      longitude: longitude ?? '',
+      latitude: latitude ?? null,
+      longitude: longitude ?? null,
       state_id: stateId ?? '',
       city_id: cityId ?? '',
       is_active: true,
-- 
GitLab