ScheduleVisitationRepository.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import prisma from '../../prisma/PrismaClient';
  2. import { Prisma } from '@prisma/client';
  3. import { ScheduleVisitationDTO } from '../../types/admin/schedule_visitation/ScheduleVisitationDTO';
  4. interface FindAllParams {
  5. skip: number;
  6. take: number;
  7. where?: Prisma.ScheduleVisitationWhereInput;
  8. orderBy?: Prisma.ScheduleVisitationOrderByWithRelationInput;
  9. }
  10. const ScheduleVisitationRepository = {
  11. findAll: async ({ skip, take, where, orderBy }: FindAllParams) => {
  12. return prisma.scheduleVisitation.findMany({
  13. where,
  14. skip,
  15. take,
  16. orderBy,
  17. include: {
  18. hospital: {
  19. select: {
  20. id: true,
  21. name: true,
  22. hospital_code: true,
  23. type: true,
  24. ownership: true,
  25. address: 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. province: {
  35. select: {
  36. id: true,
  37. name: true,
  38. },
  39. },
  40. city: {
  41. select: {
  42. id: true,
  43. name: true,
  44. },
  45. },
  46. }
  47. },
  48. user_created: { select: { id: true, fullname: true } },
  49. sales_visit: { select: { id: true, fullname: true } },
  50. },
  51. });
  52. },
  53. countAll: async (where?: Prisma.ScheduleVisitationWhereInput) => {
  54. return prisma.scheduleVisitation.count({ where });
  55. },
  56. findById: async (id: string) => {
  57. return await prisma.scheduleVisitation.findFirst({
  58. where: { id, deletedAt: null },
  59. select: {
  60. id: true,
  61. date_visit: true,
  62. notes: true,
  63. hospital: {
  64. select: {
  65. id: true,
  66. name: true,
  67. hospital_code: true,
  68. type: true,
  69. ownership: true,
  70. address: true,
  71. contact: true,
  72. email: true,
  73. image: true,
  74. progress_status: true,
  75. note: true,
  76. latitude: true,
  77. longitude: true,
  78. gmaps_url: true,
  79. province: {
  80. select: {
  81. id: true,
  82. name: true,
  83. },
  84. },
  85. city: {
  86. select: {
  87. id: true,
  88. name: true,
  89. },
  90. },
  91. vendor_experiences: {
  92. where: {
  93. // status: "active",
  94. deletedAt: null
  95. },
  96. select: {
  97. id: true,
  98. vendor: {
  99. select: { id: true, name: true }
  100. },
  101. category: {
  102. select: { id: true, name: true }
  103. },
  104. user: {
  105. select: { id: true, fullname: true }
  106. },
  107. content: true
  108. // contract_start_date: true,
  109. // contract_expired_date: true,
  110. // simrs_type: true,
  111. }
  112. },
  113. executives_histories: {
  114. where: { status: "active", deletedAt: null },
  115. select: {
  116. id: true,
  117. executive_name: true,
  118. contact: true,
  119. start_term: true,
  120. end_term: true,
  121. }
  122. }
  123. },
  124. },
  125. user_created: { select: { id: true, fullname: true } },
  126. sales_visit: { select: { id: true, fullname: true } },
  127. createdAt: true,
  128. updatedAt: true,
  129. },
  130. });
  131. },
  132. create: async (data: Prisma.ScheduleVisitationCreateInput) => {
  133. return prisma.scheduleVisitation.create({ data });
  134. },
  135. update: async (id: string, data: Prisma.ScheduleVisitationUpdateInput) => {
  136. return prisma.scheduleVisitation.update({
  137. where: { id },
  138. data,
  139. });
  140. },
  141. };
  142. export default ScheduleVisitationRepository;