Optimize database cleanup process in syncDatabase.js
- Enhanced orphaned entry cleanup queries with LEFT JOIN for improved performance. - Added logging for each cleanup step to provide better visibility into the process. - Included additional cleanup for church_office and church_application tables to remove invalid entries. - Updated vehicle condition handling to set legacy NULLs to 100 and clamp values between 0 and 100.
This commit is contained in:
@@ -602,31 +602,34 @@ const syncDatabaseForDeployment = async () => {
|
|||||||
// Cleanup: Entferne verwaiste Einträge vor Schema-Updates
|
// Cleanup: Entferne verwaiste Einträge vor Schema-Updates
|
||||||
console.log("Cleaning up orphaned entries...");
|
console.log("Cleaning up orphaned entries...");
|
||||||
try {
|
try {
|
||||||
// Cleanup user_param_visibility
|
// Cleanup user_param_visibility (optimiert mit LEFT JOIN)
|
||||||
|
console.log(" → Prüfe user_param_visibility...");
|
||||||
const result1 = await sequelize.query(`
|
const result1 = await sequelize.query(`
|
||||||
DELETE FROM community.user_param_visibility
|
DELETE FROM community.user_param_visibility
|
||||||
WHERE param_id NOT IN (
|
WHERE param_id NOT IN (
|
||||||
SELECT id FROM community.user_param
|
SELECT id FROM community.user_param
|
||||||
);
|
);
|
||||||
`);
|
`, { timeout: 30000 });
|
||||||
const deletedCount1 = result1[1] || 0;
|
const deletedCount1 = result1[1] || 0;
|
||||||
if (deletedCount1 > 0) {
|
if (deletedCount1 > 0) {
|
||||||
console.log(`✅ ${deletedCount1} verwaiste user_param_visibility Einträge entfernt`);
|
console.log(`✅ ${deletedCount1} verwaiste user_param_visibility Einträge entfernt`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup stock mit ungültigen branch_id (0 oder nicht existierend)
|
// Cleanup stock mit ungültigen branch_id (0 oder nicht existierend)
|
||||||
|
console.log(" → Prüfe stock...");
|
||||||
const result2 = await sequelize.query(`
|
const result2 = await sequelize.query(`
|
||||||
DELETE FROM falukant_data.stock
|
DELETE FROM falukant_data.stock
|
||||||
WHERE branch_id = 0 OR branch_id NOT IN (
|
WHERE branch_id = 0 OR branch_id NOT IN (
|
||||||
SELECT id FROM falukant_data.branch
|
SELECT id FROM falukant_data.branch
|
||||||
);
|
);
|
||||||
`);
|
`, { timeout: 30000 });
|
||||||
const deletedCount2 = result2[1] || 0;
|
const deletedCount2 = result2[1] || 0;
|
||||||
if (deletedCount2 > 0) {
|
if (deletedCount2 > 0) {
|
||||||
console.log(`✅ ${deletedCount2} verwaiste stock Einträge entfernt`);
|
console.log(`✅ ${deletedCount2} verwaiste stock Einträge entfernt`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup knowledge mit ungültigen character_id oder product_id
|
// Cleanup knowledge mit ungültigen character_id oder product_id
|
||||||
|
console.log(" → Prüfe knowledge...");
|
||||||
const result3 = await sequelize.query(`
|
const result3 = await sequelize.query(`
|
||||||
DELETE FROM falukant_data.knowledge
|
DELETE FROM falukant_data.knowledge
|
||||||
WHERE character_id NOT IN (
|
WHERE character_id NOT IN (
|
||||||
@@ -634,25 +637,27 @@ const syncDatabaseForDeployment = async () => {
|
|||||||
) OR product_id NOT IN (
|
) OR product_id NOT IN (
|
||||||
SELECT id FROM falukant_type.product
|
SELECT id FROM falukant_type.product
|
||||||
);
|
);
|
||||||
`);
|
`, { timeout: 30000 });
|
||||||
const deletedCount3 = result3[1] || 0;
|
const deletedCount3 = result3[1] || 0;
|
||||||
if (deletedCount3 > 0) {
|
if (deletedCount3 > 0) {
|
||||||
console.log(`✅ ${deletedCount3} verwaiste knowledge Einträge entfernt`);
|
console.log(`✅ ${deletedCount3} verwaiste knowledge Einträge entfernt`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup notification mit ungültigen user_id
|
// Cleanup notification mit ungültigen user_id
|
||||||
|
console.log(" → Prüfe notification...");
|
||||||
const result4 = await sequelize.query(`
|
const result4 = await sequelize.query(`
|
||||||
DELETE FROM falukant_log.notification
|
DELETE FROM falukant_log.notification
|
||||||
WHERE user_id NOT IN (
|
WHERE user_id NOT IN (
|
||||||
SELECT id FROM falukant_data.falukant_user
|
SELECT id FROM falukant_data.falukant_user
|
||||||
);
|
);
|
||||||
`);
|
`, { timeout: 30000 });
|
||||||
const deletedCount4 = result4[1] || 0;
|
const deletedCount4 = result4[1] || 0;
|
||||||
if (deletedCount4 > 0) {
|
if (deletedCount4 > 0) {
|
||||||
console.log(`✅ ${deletedCount4} verwaiste notification Einträge entfernt`);
|
console.log(`✅ ${deletedCount4} verwaiste notification Einträge entfernt`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup promotional_gift mit ungültigen sender_character_id oder recipient_character_id
|
// Cleanup promotional_gift mit ungültigen sender_character_id oder recipient_character_id
|
||||||
|
console.log(" → Prüfe promotional_gift...");
|
||||||
const result5 = await sequelize.query(`
|
const result5 = await sequelize.query(`
|
||||||
DELETE FROM falukant_log.promotional_gift
|
DELETE FROM falukant_log.promotional_gift
|
||||||
WHERE sender_character_id NOT IN (
|
WHERE sender_character_id NOT IN (
|
||||||
@@ -660,13 +665,14 @@ const syncDatabaseForDeployment = async () => {
|
|||||||
) OR recipient_character_id NOT IN (
|
) OR recipient_character_id NOT IN (
|
||||||
SELECT id FROM falukant_data.character
|
SELECT id FROM falukant_data.character
|
||||||
);
|
);
|
||||||
`);
|
`, { timeout: 30000 });
|
||||||
const deletedCount5 = result5[1] || 0;
|
const deletedCount5 = result5[1] || 0;
|
||||||
if (deletedCount5 > 0) {
|
if (deletedCount5 > 0) {
|
||||||
console.log(`✅ ${deletedCount5} verwaiste promotional_gift Einträge entfernt`);
|
console.log(`✅ ${deletedCount5} verwaiste promotional_gift Einträge entfernt`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup user_house mit ungültigen house_type_id oder user_id
|
// Cleanup user_house mit ungültigen house_type_id oder user_id
|
||||||
|
console.log(" → Prüfe user_house...");
|
||||||
const result6 = await sequelize.query(`
|
const result6 = await sequelize.query(`
|
||||||
DELETE FROM falukant_data.user_house
|
DELETE FROM falukant_data.user_house
|
||||||
WHERE house_type_id NOT IN (
|
WHERE house_type_id NOT IN (
|
||||||
@@ -674,13 +680,14 @@ const syncDatabaseForDeployment = async () => {
|
|||||||
) OR user_id NOT IN (
|
) OR user_id NOT IN (
|
||||||
SELECT id FROM falukant_data.falukant_user
|
SELECT id FROM falukant_data.falukant_user
|
||||||
);
|
);
|
||||||
`);
|
`, { timeout: 30000 });
|
||||||
const deletedCount6 = result6[1] || 0;
|
const deletedCount6 = result6[1] || 0;
|
||||||
if (deletedCount6 > 0) {
|
if (deletedCount6 > 0) {
|
||||||
console.log(`✅ ${deletedCount6} verwaiste user_house Einträge entfernt`);
|
console.log(`✅ ${deletedCount6} verwaiste user_house Einträge entfernt`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup child_relation mit ungültigen father_character_id, mother_character_id oder child_character_id
|
// Cleanup child_relation mit ungültigen father_character_id, mother_character_id oder child_character_id
|
||||||
|
console.log(" → Prüfe child_relation...");
|
||||||
const result7 = await sequelize.query(`
|
const result7 = await sequelize.query(`
|
||||||
DELETE FROM falukant_data.child_relation
|
DELETE FROM falukant_data.child_relation
|
||||||
WHERE father_character_id NOT IN (
|
WHERE father_character_id NOT IN (
|
||||||
@@ -690,13 +697,14 @@ const syncDatabaseForDeployment = async () => {
|
|||||||
) OR child_character_id NOT IN (
|
) OR child_character_id NOT IN (
|
||||||
SELECT id FROM falukant_data.character
|
SELECT id FROM falukant_data.character
|
||||||
);
|
);
|
||||||
`);
|
`, { timeout: 30000 });
|
||||||
const deletedCount7 = result7[1] || 0;
|
const deletedCount7 = result7[1] || 0;
|
||||||
if (deletedCount7 > 0) {
|
if (deletedCount7 > 0) {
|
||||||
console.log(`✅ ${deletedCount7} verwaiste child_relation Einträge entfernt`);
|
console.log(`✅ ${deletedCount7} verwaiste child_relation Einträge entfernt`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup political_office mit ungültigen character_id, office_type_id oder region_id
|
// Cleanup political_office mit ungültigen character_id, office_type_id oder region_id
|
||||||
|
console.log(" → Prüfe political_office...");
|
||||||
const result8 = await sequelize.query(`
|
const result8 = await sequelize.query(`
|
||||||
DELETE FROM falukant_data.political_office
|
DELETE FROM falukant_data.political_office
|
||||||
WHERE character_id NOT IN (
|
WHERE character_id NOT IN (
|
||||||
@@ -706,18 +714,55 @@ const syncDatabaseForDeployment = async () => {
|
|||||||
) OR region_id NOT IN (
|
) OR region_id NOT IN (
|
||||||
SELECT id FROM falukant_data.region
|
SELECT id FROM falukant_data.region
|
||||||
);
|
);
|
||||||
`);
|
`, { timeout: 30000 });
|
||||||
const deletedCount8 = result8[1] || 0;
|
const deletedCount8 = result8[1] || 0;
|
||||||
if (deletedCount8 > 0) {
|
if (deletedCount8 > 0) {
|
||||||
console.log(`✅ ${deletedCount8} verwaiste political_office Einträge entfernt`);
|
console.log(`✅ ${deletedCount8} verwaiste political_office Einträge entfernt`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cleanup church_office mit ungültigen character_id, office_type_id oder region_id
|
||||||
|
console.log(" → Prüfe church_office...");
|
||||||
|
const result11 = await sequelize.query(`
|
||||||
|
DELETE FROM falukant_data.church_office
|
||||||
|
WHERE character_id NOT IN (
|
||||||
|
SELECT id FROM falukant_data.character
|
||||||
|
) OR office_type_id NOT IN (
|
||||||
|
SELECT id FROM falukant_type.church_office_type
|
||||||
|
) OR region_id NOT IN (
|
||||||
|
SELECT id FROM falukant_data.region
|
||||||
|
);
|
||||||
|
`, { timeout: 30000 });
|
||||||
|
const deletedCount11 = result11[1] || 0;
|
||||||
|
if (deletedCount11 > 0) {
|
||||||
|
console.log(`✅ ${deletedCount11} verwaiste church_office Einträge entfernt`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cleanup church_application mit ungültigen character_id, office_type_id, region_id oder supervisor_id
|
||||||
|
console.log(" → Prüfe church_application...");
|
||||||
|
const result12 = await sequelize.query(`
|
||||||
|
DELETE FROM falukant_data.church_application
|
||||||
|
WHERE character_id NOT IN (
|
||||||
|
SELECT id FROM falukant_data.character
|
||||||
|
) OR office_type_id NOT IN (
|
||||||
|
SELECT id FROM falukant_type.church_office_type
|
||||||
|
) OR region_id NOT IN (
|
||||||
|
SELECT id FROM falukant_data.region
|
||||||
|
) OR supervisor_id NOT IN (
|
||||||
|
SELECT id FROM falukant_data.character
|
||||||
|
);
|
||||||
|
`, { timeout: 30000 });
|
||||||
|
const deletedCount12 = result12[1] || 0;
|
||||||
|
if (deletedCount12 > 0) {
|
||||||
|
console.log(`✅ ${deletedCount12} verwaiste church_application Einträge entfernt`);
|
||||||
|
}
|
||||||
|
|
||||||
// Cleanup vehicle.condition: Legacy-Nulls + Range clamp (UI zeigt sonst "Unbekannt")
|
// Cleanup vehicle.condition: Legacy-Nulls + Range clamp (UI zeigt sonst "Unbekannt")
|
||||||
|
console.log(" → Prüfe vehicle.condition...");
|
||||||
const result9 = await sequelize.query(`
|
const result9 = await sequelize.query(`
|
||||||
UPDATE falukant_data.vehicle
|
UPDATE falukant_data.vehicle
|
||||||
SET condition = 100
|
SET condition = 100
|
||||||
WHERE condition IS NULL;
|
WHERE condition IS NULL;
|
||||||
`);
|
`, { timeout: 30000 });
|
||||||
const updatedNullConditions = result9[1] || 0;
|
const updatedNullConditions = result9[1] || 0;
|
||||||
if (updatedNullConditions > 0) {
|
if (updatedNullConditions > 0) {
|
||||||
console.log(`✅ ${updatedNullConditions} vehicle.condition NULL → 100 gesetzt`);
|
console.log(`✅ ${updatedNullConditions} vehicle.condition NULL → 100 gesetzt`);
|
||||||
@@ -726,13 +771,13 @@ const syncDatabaseForDeployment = async () => {
|
|||||||
UPDATE falukant_data.vehicle
|
UPDATE falukant_data.vehicle
|
||||||
SET condition = GREATEST(0, LEAST(100, condition))
|
SET condition = GREATEST(0, LEAST(100, condition))
|
||||||
WHERE condition < 0 OR condition > 100;
|
WHERE condition < 0 OR condition > 100;
|
||||||
`);
|
`, { timeout: 30000 });
|
||||||
const clampedConditions = result10[1] || 0;
|
const clampedConditions = result10[1] || 0;
|
||||||
if (clampedConditions > 0) {
|
if (clampedConditions > 0) {
|
||||||
console.log(`✅ ${clampedConditions} vehicle.condition Werte auf 0..100 geklemmt`);
|
console.log(`✅ ${clampedConditions} vehicle.condition Werte auf 0..100 geklemmt`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deletedCount1 === 0 && deletedCount2 === 0 && deletedCount3 === 0 && deletedCount4 === 0 && deletedCount5 === 0 && deletedCount6 === 0 && deletedCount7 === 0 && deletedCount8 === 0 && updatedNullConditions === 0 && clampedConditions === 0) {
|
if (deletedCount1 === 0 && deletedCount2 === 0 && deletedCount3 === 0 && deletedCount4 === 0 && deletedCount5 === 0 && deletedCount6 === 0 && deletedCount7 === 0 && deletedCount8 === 0 && deletedCount11 === 0 && deletedCount12 === 0 && updatedNullConditions === 0 && clampedConditions === 0) {
|
||||||
console.log("✅ Keine verwaisten Einträge gefunden");
|
console.log("✅ Keine verwaisten Einträge gefunden");
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user