-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfix3.js
More file actions
62 lines (49 loc) · 3.35 KB
/
Copy pathfix3.js
File metadata and controls
62 lines (49 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
const fs = require('fs');
const glob = require('glob');
const controllers = glob.sync('src/Controllers/**/*.ts');
for (const file of controllers) {
let content = fs.readFileSync(file, 'utf8');
// Fix req.params extraction
content = content.replace(/const\s+\{\s*([a-zA-Z0-9_]+)\s*\}\s*=\s*req\.params;/g, 'const $1 = req.params.$1 as string;');
content = content.replace(/const\s+\{\s*([a-zA-Z0-9_]+),\s*([a-zA-Z0-9_]+)\s*\}\s*=\s*req\.params;/g, 'const $1 = req.params.$1 as string;\n const $2 = req.params.$2 as string;');
// Fix req.query extraction
content = content.replace(/req\.query\.([a-zA-Z0-9_]+)\s+as\s+string/g, 'String(req.query.$1)');
// If the word "status as string" is manually passed:
content = content.replace(/status\s+as\s+string\s+as\s+string/g, 'status as string');
// Some controllers pass status directly without cast
content = content.replace(/getConsultationsByFarm\(farmId, userId, status\)/g, 'getConsultationsByFarm(farmId, userId, status as string)');
content = content.replace(/updateConsultationStatus\(consultationId, userId, status\)/g, 'updateConsultationStatus(consultationId, userId, status as string)');
content = content.replace(/getFarmMonthlySummary\(farmId, userId, status\)/g, 'getFarmMonthlySummary(farmId, userId, status as string)');
fs.writeFileSync(file, content);
}
console.log('Fixed controllers');
const services = glob.sync('src/Services/**/*.ts');
for (const file of services) {
let content = fs.readFileSync(file, 'utf8');
// Add .lean() to Mongoose finds in livestock-health.service.ts
if (file.includes('livestock-health.service.ts')) {
content = content.replace(/return\s+([A-Za-z]+)\.find\((.*)\)\.sort\((.*)\);/g, 'return $1.find($2).sort($3).lean() as any;');
content = content.replace(/return\s+([A-Za-z]+)\.find\(([^)]+)\);/g, 'return $1.find($2).lean() as any;');
// Also fix findByIdAndUpdate returning Mongoose document
content = content.replace(/return\s+vaccination;/g, 'return vaccination as any;');
content = content.replace(/return\s+treatment;/g, 'return treatment as any;');
content = content.replace(/return\s+illness;/g, 'return illness as any;');
content = content.replace(/return\s+checkup;/g, 'return checkup as any;');
content = content.replace(/return\s+record;/g, 'return record as any;');
}
// Fix farmId in ResilienceProfile.findOne
if (file.includes('farm.service.ts')) {
content = content.replace(/ResilienceProfile\.findOne\(\{\s*farmId:\s*farm\._id\s*\}\)/g, 'ResilienceProfile.findOne({ farmId: String(farm._id) })');
}
// Fix aiResult typed error in diagnosisJob.service.ts
if (file.includes('diagnosisJob.service.ts')) {
content = content.replace(/const\s+aiResult\s*=\s*await\s+analyzeCropImage\((.*)\);/g, 'const aiResult = await analyzeCropImage($1) as any;');
}
// Fix Types.ObjectId casting in livestock-feed-breeding.service.ts
if (file.includes('livestock-feed-breeding.service.ts')) {
content = content.replace(/new\s+Types\.ObjectId\(data\.livestockId\s+as\s+string\)/g, 'new Types.ObjectId(String(data.livestockId))');
content = content.replace(/farmId:\s+farmId\s*,/g, 'farmId: farmId as any,'); // specific fix for the error: Type 'string | string[]' is not assignable to type 'ObjectId & string'. Wait, no. Let's fix it manually.
}
fs.writeFileSync(file, content);
}
console.log('Fixed services');