123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- 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<Hospital | null> => {
- return prisma.hospital.findFirst({
- where: {
- name,
- hospital_code,
- deletedAt: null,
- },
- });
- },
- };
- export default HospitalRepository;
|