Преглед изворни кода

Merge branch 'update_fitur_sales' of gayuh/radar_farmagitechs into master

gayuh пре 2 месеци
родитељ
комит
b71fac3087

+ 3 - 3
entrypoint.sh

@@ -1,16 +1,16 @@
1 1
 #!/bin/sh
2 2
 
3 3
 echo "📦 Menjalankan Prisma generate..."
4
-npx prisma generate
4
+# npx prisma generate
5 5
 
6 6
 echo "🔃 Menjalankan migrasi dev..."
7
-npx prisma migrate dev --name init
7
+# npx prisma migrate dev --name init
8 8
 
9 9
 # echo "♻️ Reset database dan menjalankan seeder..."
10 10
 # npx prisma migrate reset --force
11 11
 
12 12
 echo "🌱 Menjalankan seeder (aman)..."
13
-npx prisma db seed
13
+# npx prisma db seed
14 14
 
15 15
 echo "🚀 Menjalankan aplikasi..."
16 16
 exec node index.js

+ 21 - 14
src/repository/admin/HospitalRepository.js

@@ -95,23 +95,30 @@ const HospitalRepository = {
95 95
         return prisma.hospital.create({ data });
96 96
     },
97 97
 
98
+    // update: async (id, data) => {
99
+    //     return prisma.hospital.update({
100
+    //         where: { id },
101
+    //         data: {
102
+    //             name: data.name,
103
+    //             hospital_code: data.hospital_code,
104
+    //             type: data.type,
105
+    //             ownership: data.ownership,
106
+    //             province: { connect: { id: data.province_id } },
107
+    //             city: { connect: { id: data.city_id } },
108
+    //             address: data.address,
109
+    //             // simrs_type: data.simrs_type,
110
+    //             contact: data.contact,
111
+    //             note: data.note,
112
+    //             image: data.image,
113
+    //             progress_status: data.progress_status,
114
+    //         }
115
+    //     });
116
+    // },
117
+
98 118
     update: async (id, data) => {
99 119
         return prisma.hospital.update({
100 120
             where: { id },
101
-            data: {
102
-                name: data.name,
103
-                hospital_code: data.hospital_code,
104
-                type: data.type,
105
-                ownership: data.ownership,
106
-                province: { connect: { id: data.province_id } },
107
-                city: { connect: { id: data.city_id } },
108
-                address: data.address,
109
-                // simrs_type: data.simrs_type,
110
-                contact: data.contact,
111
-                note: data.note,
112
-                image: data.image,
113
-                progress_status: data.progress_status,
114
-            }
121
+            data
115 122
         });
116 123
     },
117 124
 };

+ 20 - 14
src/repository/sales/HospitalRepository.js

@@ -63,23 +63,29 @@ const HospitalRepository = {
63 63
         });
64 64
     },
65 65
 
66
+    // update: async (id, data) => {
67
+    //     return prisma.hospital.update({
68
+    //         where: { id },
69
+    //         data: {
70
+    //             name: data.name,
71
+    //             hospital_code: data.hospital_code,
72
+    //             type: data.type,
73
+    //             ownership: data.ownership,
74
+    //             province: { connect: { id: data.province_id } },
75
+    //             city: { connect: { id: data.city_id } },
76
+    //             address: data.address,
77
+    //             // simrs_type: data.simrs_type,
78
+    //             contact: data.contact,
79
+    //             note: data.note,
80
+    //             image: data.image,
81
+    //             progress_status: data.progress_status,
82
+    //         }
83
+    //     });
84
+    // },
66 85
     update: async (id, data) => {
67 86
         return prisma.hospital.update({
68 87
             where: { id },
69
-            data: {
70
-                name: data.name,
71
-                hospital_code: data.hospital_code,
72
-                type: data.type,
73
-                ownership: data.ownership,
74
-                province: { connect: { id: data.province_id } },
75
-                city: { connect: { id: data.city_id } },
76
-                address: data.address,
77
-                // simrs_type: data.simrs_type,
78
-                contact: data.contact,
79
-                note: data.note,
80
-                image: data.image,
81
-                progress_status: data.progress_status,
82
-            }
88
+            data
83 89
         });
84 90
     },
85 91
 };

+ 22 - 15
src/services/admin/HospitalService.js

@@ -89,14 +89,18 @@ exports.updateHospitalService = async (validateData, id, req) => {
89 89
         throw new HttpException("Hospital data not found", 404);
90 90
     }
91 91
 
92
-    const province = await ProvinceRepository.findById(validateData.province_id);
93
-    if (!province) {
94
-        throw new HttpException('Province not found', 404);
92
+    if (validateData.province_id) {
93
+        const province = await ProvinceRepository.findById(validateData.province_id);
94
+        if (!province) {
95
+            throw new HttpException('Province not found', 404);
96
+        }
95 97
     }
96 98
 
97
-    const city = await CityRepository.findById(validateData.city_id);
98
-    if (!city) {
99
-        throw new HttpException('City not found', 404);
99
+    if (validateData.city_id) {
100
+        const city = await CityRepository.findById(validateData.city_id);
101
+        if (!city) {
102
+            throw new HttpException('City not found', 404);
103
+        }
100 104
     }
101 105
 
102 106
     if (validateData.progress_status && !validProgressStatuses.includes(validateData.progress_status)) {
@@ -106,16 +110,19 @@ exports.updateHospitalService = async (validateData, id, req) => {
106 110
         );
107 111
     }
108 112
 
109
-    const existingHospital = await prisma.hospital.findFirst({
110
-        where: {
111
-            name: validateData.name,
112
-            city_id: validateData.city_id,
113
-            deletedAt: null
113
+    if (validateData.name && validateData.city_id) {
114
+        const existingHospital = await prisma.hospital.findFirst({
115
+            where: {
116
+                name: validateData.name,
117
+                city_id: validateData.city_id,
118
+                deletedAt: null,
119
+                NOT: { id }
120
+            }
121
+        });
122
+
123
+        if (existingHospital) {
124
+            throw new HttpException('Hospital with same name in this city already exists', 400);
114 125
         }
115
-    });
116
-
117
-    if (existingHospital) {
118
-        throw new HttpException('Hospital with same name in this city already exists', 400);
119 126
     }
120 127
 
121 128
     // Jika ada file baru, replace image

+ 22 - 15
src/services/sales/HospitalService.js

@@ -165,14 +165,18 @@ exports.updateHospitalService = async (validateData, id, req) => {
165 165
         throw new HttpException("You are not authorized to update hospital in this province", 403);
166 166
     }
167 167
 
168
-    const province = await ProvinceRepository.findById(validateData.province_id);
169
-    if (!province) {
170
-        throw new HttpException('Province not found', 404);
168
+    if (validateData.province_id) {
169
+        const province = await ProvinceRepository.findById(validateData.province_id);
170
+        if (!province) {
171
+            throw new HttpException('Province not found', 404);
172
+        }
171 173
     }
172 174
 
173
-    const city = await CityRepository.findById(validateData.city_id);
174
-    if (!city) {
175
-        throw new HttpException('City not found', 404);
175
+    if (validateData.city_id) {
176
+        const city = await CityRepository.findById(validateData.city_id);
177
+        if (!city) {
178
+            throw new HttpException('City not found', 404);
179
+        }
176 180
     }
177 181
 
178 182
     if (validateData.progress_status && !validProgressStatuses.includes(validateData.progress_status)) {
@@ -182,16 +186,19 @@ exports.updateHospitalService = async (validateData, id, req) => {
182 186
         );
183 187
     }
184 188
 
185
-    const existingHospital = await prisma.hospital.findFirst({
186
-        where: {
187
-            name: validateData.name,
188
-            city_id: validateData.city_id,
189
-            deletedAt: null
189
+    if (validateData.name && validateData.city_id) {
190
+        const existingHospital = await prisma.hospital.findFirst({
191
+            where: {
192
+                name: validateData.name,
193
+                city_id: validateData.city_id,
194
+                deletedAt: null,
195
+                NOT: { id }
196
+            }
197
+        });
198
+
199
+        if (existingHospital) {
200
+            throw new HttpException('Hospital with same name in this city already exists', 400);
190 201
         }
191
-    });
192
-
193
-    if (existingHospital) {
194
-        throw new HttpException('Hospital with same name in this city already exists', 400);
195 202
     }
196 203
 
197 204
     // Jika ada file baru, replace image

+ 10 - 61
src/validators/admin/hospital/HospitalValidators.js

@@ -66,67 +66,16 @@ exports.validateStoreHospitalRequest = (body) => {
66 66
 exports.validateUpdateHospitalRequest = (body) => {
67 67
     const { name, hospital_code, type, ownership, province_id, city_id, address, progress_status, contact, note } = body;
68 68
 
69
-    const errors = {};
70
-
71
-    if (!name || name.trim() === '') {
72
-        errors.name = ['name is required'];
73
-    }
74
-
75
-    if (!hospital_code || hospital_code.trim() === '') {
76
-        errors.hospital_code = ['hospital code is required'];
77
-    }
78
-
79
-    if (!type || type.trim() === '') {
80
-        errors.type = ['type is required'];
81
-    }
82
-
83
-    if (!ownership || ownership.trim() === '') {
84
-        errors.ownership = ['ownership is required'];
85
-    }
86
-
87
-    if (!province_id || province_id.trim() === '') {
88
-        errors.province_id = ['province id is required'];
89
-    }
90
-
91
-    if (!city_id || city_id.trim() === '') {
92
-        errors.city_id = ['city id is required'];
93
-    }
94
-
95
-    if (!address || address.trim() === '') {
96
-        errors.address = ['address is required'];
97
-    }
98
-
99
-    // if (!simrs_type || simrs_type.trim() === '') {
100
-    //     errors.simrs_type = ['simrs type is required'];
101
-    // }
102
-
103
-    if (!progress_status || progress_status.trim() === '') {
104
-        errors.progress_status = ['progress status is required'];
105
-    }
106
-
107
-    if (!contact || contact.trim() === '') {
108
-        errors.contact = ['contact is required'];
109
-    }
110
-
111
-    if (!note || note.trim() === '') {
112
-        errors.note = ['note is required'];
113
-    }
114
-
115
-    if (Object.keys(errors).length > 0) {
116
-        throw new HttpException(errors, 422);
117
-    }
118
-
119 69
     return {
120
-        name: name.trim(),
121
-        hospital_code: hospital_code.trim(),
122
-        type: type.trim(),
123
-        ownership: ownership.trim(),
124
-        province_id: province_id.trim(),
125
-        city_id: city_id.trim(),
126
-        address: address.trim(),
127
-        // simrs_type: simrs_type.trim(),
128
-        progress_status: progress_status.trim(),
129
-        contact: contact.trim(),
130
-        note: note.trim(),
70
+        name,
71
+        hospital_code,
72
+        type,
73
+        ownership,
74
+        province_id,
75
+        city_id,
76
+        address,
77
+        progress_status,
78
+        contact,
79
+        note,
131 80
     };
132 81
 };

BIN
storage/img/1751436316148-835632934.png