hospital-log/backend/api/src/modules/rekammedis/rekammedis.service.ts

118 lines
2.9 KiB
TypeScript
Raw Normal View History

import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';
import { Prisma, rekam_medis } from '@dist/generated/prisma';
import { CreateRekamMedisDto } from './dto/create-rekammedis.dto';
import { CreateLogDto } from '../log/dto/create-log.dto';
@Injectable()
export class RekammedisService {
constructor(private prisma: PrismaService) {}
async getAllRekamMedis(params: {
take?: number;
skip?: number;
page?: number;
orderBy?: any;
no_rm?: string;
order?: 'asc' | 'desc';
}) {
const { skip, page, orderBy, order, no_rm } = params;
const take = params.take ? parseInt(params.take.toString()) : 10;
const skipValue = skip
? parseInt(skip.toString())
: page
? (parseInt(page.toString()) - 1) * take
: 0;
const results = await this.prisma.rekam_medis.findMany({
skip: skipValue,
take: take,
where: {
no_rm: no_rm ? no_rm : undefined,
},
orderBy: orderBy
? { [orderBy]: order || 'asc' }
: { waktu_visit: order ? order : 'asc' },
});
const count = await this.prisma.rekam_medis.count({
where: {
no_rm: no_rm ? { contains: no_rm } : undefined,
},
});
// console.log('Fetched Rekam Medis:', count);
return {
...results,
totalCount: count,
};
}
async createRekamMedis(data: CreateRekamMedisDto) {
const latestId = await this.prisma.rekam_medis.findFirst({
orderBy: { waktu_visit: 'desc' },
});
let newId = '';
let xCounter = 0;
let rekamMedis: Prisma.rekam_medisCreateInput;
for (let i = (latestId?.id_visit?.length ?? 0) - 1; i >= 0; i--) {
if (latestId?.id_visit[i] === 'X') {
xCounter++;
} else {
newId = latestId?.id_visit?.substring(0, i + 1) || '';
break;
}
}
if (xCounter < 1) {
newId = (parseInt(latestId?.id_visit || '0', 10) + 1).toString();
} else {
newId = (parseInt(newId || '0', 10) + 1).toString();
}
rekamMedis = {
...data,
id_visit: newId,
waktu_visit: new Date(),
};
const logData: CreateLogDto = {
event: 'rekam_medis_created',
payload: {
dokter_id: 123,
visit_id: newId,
anamnese: data.anamnese,
jenis_kasus: data.jenis_kasus,
tindak_lanjut: data.tindak_lanjut,
},
};
try {
const newRekamMedis = await this.prisma.$transaction(async (tx) => {
const createdRekamMedis = await tx.rekam_medis.create({
data: rekamMedis,
});
await tx.blockchain_log_queue.create({
data: {
event: logData.event,
user_id: 9,
payload: logData.payload,
},
});
// Input Into Fabric Here
return createdRekamMedis;
});
return newRekamMedis;
} catch (error) {
console.error('Error creating Rekam Medis:', error);
throw error;
}
}
}