VendorRepository.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import prisma from '../../prisma/PrismaClient';
  2. import { now } from '../../utils/TimeLocal';
  3. import { Prisma, Vendor } from '@prisma/client';
  4. type FindAllOptions = {
  5. skip?: number;
  6. take?: number;
  7. where?: Prisma.VendorWhereInput;
  8. orderBy?: Prisma.VendorOrderByWithRelationInput;
  9. };
  10. const VendorRepository = {
  11. findAll: async ({ skip, take, where, orderBy }: FindAllOptions) => {
  12. const vendors = await prisma.vendor.findMany({
  13. where,
  14. skip,
  15. take,
  16. orderBy,
  17. select: {
  18. id: true,
  19. name: true,
  20. name_pt: true,
  21. strengths: true,
  22. weaknesses: true,
  23. website: true,
  24. user: { select: { id: true, fullname: true } },
  25. _count: {
  26. select: {
  27. vendor_experiences: {
  28. where: {
  29. deletedAt: null,
  30. status: "active"
  31. },
  32. },
  33. },
  34. },
  35. createdAt: true,
  36. updatedAt: true,
  37. },
  38. });
  39. const formattedVendors = vendors.map(v => {
  40. const { _count, ...rest } = v;
  41. return {
  42. ...rest,
  43. count_hospitals: _count.vendor_experiences,
  44. };
  45. });
  46. return formattedVendors;
  47. },
  48. countAll: async (where?: Prisma.VendorWhereInput) => {
  49. return prisma.vendor.count({ where });
  50. },
  51. findById: async (id: string) => {
  52. const vendor = await prisma.vendor.findFirst({
  53. where: {
  54. id,
  55. deletedAt: null,
  56. },
  57. select: {
  58. id: true,
  59. name: true,
  60. name_pt: true,
  61. strengths: true,
  62. weaknesses: true,
  63. website: true,
  64. user: { select: { id: true, fullname: true } },
  65. _count: {
  66. select: {
  67. vendor_experiences: {
  68. where: {
  69. deletedAt: null,
  70. },
  71. },
  72. },
  73. },
  74. createdAt: true,
  75. updatedAt: true,
  76. },
  77. });
  78. if (!vendor) return null;
  79. const { _count, ...rest } = vendor;
  80. return {
  81. ...rest,
  82. count_hospitals: _count.vendor_experiences,
  83. };
  84. },
  85. create: async (data: Prisma.VendorCreateInput) => {
  86. return prisma.vendor.create({ data });
  87. },
  88. update: async (id: string, data: Prisma.VendorUpdateInput) => {
  89. return prisma.vendor.update({
  90. where: { id },
  91. data,
  92. });
  93. },
  94. delete: async (id: string) => {
  95. const vendor = await prisma.vendor.update({
  96. where: { id },
  97. data: {
  98. deletedAt: now().toDate(),
  99. },
  100. });
  101. await prisma.vendorExperience.updateMany({
  102. where: {
  103. vendor_id: id,
  104. deletedAt: null,
  105. },
  106. data: {
  107. vendor_id: null,
  108. },
  109. });
  110. return vendor;
  111. },
  112. findByName: async (name: string, name_pt: string): Promise<Vendor | null> => {
  113. return prisma.vendor.findFirst({
  114. where: {
  115. name,
  116. name_pt,
  117. deletedAt: null,
  118. },
  119. });
  120. },
  121. };
  122. export default VendorRepository;