import prisma from '../../prisma/PrismaClient'; import { Hospital, Prisma } from '@prisma/client'; interface FindAllParams { skip: number; take: number; where?: Prisma.HospitalWhereInput; orderBy?: Prisma.HospitalOrderByWithRelationInput; } const HospitalRepository = { findAll: async ({ skip, take, where, orderBy }: FindAllParams) => { const hospitalsRaw = await prisma.hospital.findMany({ where, skip, take, orderBy, select: { id: true, name: true, hospital_code: true, type: true, ownership: true, province: { select: { id: true, name: true } }, city: { select: { id: true, name: true } }, address: true, // simrs_type: true, contact: true, email: true, image: true, progress_status: true, note: true, latitude: true, longitude: true, gmaps_url: true, created_by: true, createdAt: true, updatedAt: true, user: { select: { id: true, fullname: true } }, vendor_experiences: { where: { status: 'active', deletedAt: null, }, select: { vendor: { select: { id: true, name: true, name_pt: true, strengths: true, weaknesses: true, website: true, }, }, }, }, }, }); return hospitalsRaw.map((hospital) => { const { vendor_experiences, ...rest } = hospital; return { ...rest, vendor: vendor_experiences?.[0]?.vendor || null, }; }); }, countAll: async (where: Prisma.HospitalWhereInput) => { return prisma.hospital.count({ where }); }, findById: async (id: string) => { const hospitalRaw = await prisma.hospital.findFirst({ where: { id, deletedAt: null, }, select: { id: true, name: true, hospital_code: true, type: true, ownership: true, province: { select: { id: true, name: true } }, city: { select: { id: true, name: true } }, address: true, // simrs_type: true, contact: true, email: true, image: true, progress_status: true, note: true, latitude: true, longitude: true, gmaps_url: true, created_by: true, createdAt: true, updatedAt: true, user: { select: { id: true, fullname: true } }, vendor_experiences: { where: { status: 'active', deletedAt: null, }, take: 1, select: { vendor: { select: { id: true, name: true, name_pt: true, strengths: true, weaknesses: true, website: true, }, }, }, }, }, }); if (!hospitalRaw) return null; const { vendor_experiences, ...rest } = hospitalRaw; return { ...rest, vendor: vendor_experiences?.[0]?.vendor || null, }; }, create: async (data: Prisma.HospitalCreateInput) => { return prisma.hospital.create({ data }); }, update: async (id: string, data: Prisma.HospitalUpdateInput) => { return prisma.hospital.update({ where: { id }, data, }); }, findByName: async (name: string, hospital_code: string): Promise => { return prisma.hospital.findFirst({ where: { name, hospital_code, deletedAt: null, }, }); }, }; export default HospitalRepository;