VendorRepository.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. const prisma = require('../../prisma/PrismaClient.js');
  2. const timeLocal = require('../../utils/TimeLocal.js');
  3. const VendorRepository = {
  4. findAll: async ({ skip, take, where, orderBy }) => {
  5. const vendors = await prisma.vendor.findMany({
  6. where,
  7. skip,
  8. take,
  9. orderBy,
  10. select: {
  11. id: true,
  12. name: true,
  13. name_pt: true,
  14. strengths: true,
  15. weaknesses: true,
  16. website: true,
  17. created_by: true,
  18. _count: {
  19. select: {
  20. vendor_histories: {
  21. where: {
  22. deletedAt: null
  23. }
  24. }
  25. }
  26. },
  27. createdAt: true,
  28. updatedAt: true,
  29. },
  30. });
  31. const formattedVendors = vendors.map(v => {
  32. const { _count, ...rest } = v;
  33. return {
  34. ...rest,
  35. count_hospitals: _count.vendor_histories,
  36. };
  37. });
  38. return formattedVendors;
  39. },
  40. countAll: async (where) => {
  41. return prisma.vendor.count({ where });
  42. },
  43. findById: async (id) => {
  44. const vendor = await prisma.vendor.findFirst({
  45. where: {
  46. id,
  47. deletedAt: null
  48. },
  49. select: {
  50. id: true,
  51. name: true,
  52. name_pt: true,
  53. strengths: true,
  54. weaknesses: true,
  55. website: true,
  56. created_by: true,
  57. _count: {
  58. select: {
  59. vendor_histories: {
  60. where: {
  61. deletedAt: null
  62. }
  63. }
  64. }
  65. },
  66. createdAt: true,
  67. updatedAt: true,
  68. },
  69. });
  70. const { _count, ...rest } = vendor;
  71. return {
  72. ...rest,
  73. count_hospitals: _count.vendor_histories
  74. };
  75. },
  76. create: async (data) => {
  77. return prisma.vendor.create({ data });
  78. },
  79. update: async (id, data) => {
  80. return prisma.vendor.update({
  81. where: { id },
  82. data
  83. });
  84. },
  85. delete: async (id) => {
  86. // delete vendor
  87. const vendor = await prisma.vendor.update({
  88. where: { id },
  89. data: {
  90. deletedAt: timeLocal.now().toDate()
  91. }
  92. });
  93. // Unlink vendor_id di vendor_histories
  94. await prisma.vendorHistory.updateMany({
  95. where: {
  96. vendor_id: id,
  97. deletedAt: null
  98. },
  99. data: {
  100. vendor_id: null
  101. }
  102. });
  103. return vendor;
  104. },
  105. };
  106. module.exports = VendorRepository;