HospitalRepository.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. import prisma from '../../prisma/PrismaClient';
  2. import { Hospital, Prisma } from '@prisma/client';
  3. interface FindAllParams {
  4. skip: number;
  5. take: number;
  6. where?: Prisma.HospitalWhereInput;
  7. orderBy?: Prisma.HospitalOrderByWithRelationInput;
  8. }
  9. const HospitalRepository = {
  10. findAll: async ({ skip, take, where, orderBy }: FindAllParams) => {
  11. const hospitalsRaw = await prisma.hospital.findMany({
  12. where,
  13. skip,
  14. take,
  15. orderBy,
  16. select: {
  17. id: true,
  18. name: true,
  19. hospital_code: true,
  20. type: true,
  21. ownership: true,
  22. province: { select: { id: true, name: true } },
  23. city: { select: { id: true, name: true } },
  24. address: true,
  25. // simrs_type: true,
  26. contact: true,
  27. email: true,
  28. image: true,
  29. progress_status: true,
  30. note: true,
  31. latitude: true,
  32. longitude: true,
  33. gmaps_url: true,
  34. created_by: true,
  35. createdAt: true,
  36. updatedAt: true,
  37. user: { select: { id: true, fullname: true } },
  38. vendor_experiences: {
  39. where: {
  40. status: 'active',
  41. deletedAt: null,
  42. },
  43. select: {
  44. vendor: {
  45. select: {
  46. id: true,
  47. name: true,
  48. name_pt: true,
  49. strengths: true,
  50. weaknesses: true,
  51. website: true,
  52. },
  53. },
  54. },
  55. },
  56. },
  57. });
  58. return hospitalsRaw.map((hospital) => {
  59. const { vendor_experiences, ...rest } = hospital;
  60. return {
  61. ...rest,
  62. vendor: vendor_experiences?.[0]?.vendor || null,
  63. };
  64. });
  65. },
  66. countAll: async (where: Prisma.HospitalWhereInput) => {
  67. return prisma.hospital.count({ where });
  68. },
  69. findById: async (id: string) => {
  70. const hospitalRaw = await prisma.hospital.findFirst({
  71. where: {
  72. id,
  73. deletedAt: null,
  74. },
  75. select: {
  76. id: true,
  77. name: true,
  78. hospital_code: true,
  79. type: true,
  80. ownership: true,
  81. province: { select: { id: true, name: true } },
  82. city: { select: { id: true, name: true } },
  83. address: true,
  84. // simrs_type: true,
  85. contact: true,
  86. email: true,
  87. image: true,
  88. progress_status: true,
  89. note: true,
  90. latitude: true,
  91. longitude: true,
  92. gmaps_url: true,
  93. created_by: true,
  94. createdAt: true,
  95. updatedAt: true,
  96. user: { select: { id: true, fullname: true } },
  97. vendor_experiences: {
  98. where: {
  99. status: 'active',
  100. deletedAt: null,
  101. },
  102. take: 1,
  103. select: {
  104. vendor: {
  105. select: {
  106. id: true,
  107. name: true,
  108. name_pt: true,
  109. strengths: true,
  110. weaknesses: true,
  111. website: true,
  112. },
  113. },
  114. },
  115. },
  116. },
  117. });
  118. if (!hospitalRaw) return null;
  119. const { vendor_experiences, ...rest } = hospitalRaw;
  120. return {
  121. ...rest,
  122. vendor: vendor_experiences?.[0]?.vendor || null,
  123. };
  124. },
  125. create: async (data: Prisma.HospitalCreateInput) => {
  126. return prisma.hospital.create({ data });
  127. },
  128. update: async (id: string, data: Prisma.HospitalUpdateInput) => {
  129. return prisma.hospital.update({
  130. where: { id },
  131. data,
  132. });
  133. },
  134. findByName: async (name: string, hospital_code: string): Promise<Hospital | null> => {
  135. return prisma.hospital.findFirst({
  136. where: {
  137. name,
  138. hospital_code,
  139. deletedAt: null,
  140. },
  141. });
  142. },
  143. };
  144. export default HospitalRepository;