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