import { Console, Command, createSpinner } from 'nestjs-console' import { Patient } from '../../src/models' import { PatientRepository } from '../../src/repositories' import { SmartfitApi } from '../../src/services' import { LanguageCountryCode } from '../../src/utils' @Console({ command: 'patients', description: 'Patients services', }) export class PatientsCommand { constructor(private readonly patientRepository: PatientRepository, private readonly smartfitApi: SmartfitApi) {} @Command({ command: 'updateExtraData [locale]', description: 'List patients created between dates', }) async updateExtraData(from: string, until: string, locale = LanguageCountryCode.PT_BR): Promise { const spin = createSpinner() const notUpated = [] spin.info(`Updating pending patients between ${from} and ${until}`) const patients = await this.patientRepository.findPendingExtraDataBy(from, until, locale) spin.info(`Patients found ${patients.length}`) for (const patient of patients) { try { spin.info(`Trying to update patient id: ${patient.id} | doc: ${patient.document_number}`) await this.updatePatient(patient, spin) } catch (error) { spin.fail(`Erro on update: ${error.message}`) notUpated.push(patient.id) } } if (notUpated.length) spin.warn(`Patients not updated:\n${notUpated.join('\n')}`) spin.succeed('Patients update finished') } private async updatePatient(patient: Patient, spin: any) { spin.start(`Finding person at Smartfit`) const person = await this.smartfitApi.getPersonByLogin(patient.document_number) patient.smartfit_id = person.id patient.smartfit_main_purchase_id = person.mainPurchaseId patient.smartfit_unit_id = person.locationId spin.start(`Updating patient`) await this.patientRepository.updateSmartfitData(patient) spin.succeed(`Update successfully`) } }