Update condition handling in FalukantService and syncDatabase utility for legacy data
- Enhanced condition processing in FalukantService to clamp values between 0 and 100, ensuring UI displays valid data. - Implemented database cleanup in syncDatabase utility to set NULL conditions to 100 and clamp out-of-range values, improving data integrity.
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
/* eslint-disable */
|
||||
module.exports = {
|
||||
async up(queryInterface, Sequelize) {
|
||||
// Ensure column exists
|
||||
await queryInterface.sequelize.query(`
|
||||
ALTER TABLE falukant_data.vehicle
|
||||
ADD COLUMN IF NOT EXISTS condition integer;
|
||||
`);
|
||||
|
||||
// Backfill nulls (legacy data)
|
||||
await queryInterface.sequelize.query(`
|
||||
UPDATE falukant_data.vehicle
|
||||
SET condition = 100
|
||||
WHERE condition IS NULL;
|
||||
`);
|
||||
|
||||
// Clamp out-of-range values defensively
|
||||
await queryInterface.sequelize.query(`
|
||||
UPDATE falukant_data.vehicle
|
||||
SET condition = GREATEST(0, LEAST(100, condition))
|
||||
WHERE condition < 0 OR condition > 100;
|
||||
`);
|
||||
|
||||
// Default + NOT NULL
|
||||
await queryInterface.sequelize.query(`
|
||||
ALTER TABLE falukant_data.vehicle
|
||||
ALTER COLUMN condition SET DEFAULT 100;
|
||||
`);
|
||||
await queryInterface.sequelize.query(`
|
||||
ALTER TABLE falukant_data.vehicle
|
||||
ALTER COLUMN condition SET NOT NULL;
|
||||
`);
|
||||
|
||||
// Check constraint 0..100
|
||||
await queryInterface.sequelize.query(`
|
||||
ALTER TABLE falukant_data.vehicle
|
||||
DROP CONSTRAINT IF EXISTS vehicle_condition_0_100_chk;
|
||||
`);
|
||||
await queryInterface.sequelize.query(`
|
||||
ALTER TABLE falukant_data.vehicle
|
||||
ADD CONSTRAINT vehicle_condition_0_100_chk
|
||||
CHECK (condition >= 0 AND condition <= 100);
|
||||
`);
|
||||
},
|
||||
|
||||
async down(queryInterface, Sequelize) {
|
||||
// Keep the column, but remove constraint/default to be reversible
|
||||
await queryInterface.sequelize.query(`
|
||||
ALTER TABLE falukant_data.vehicle
|
||||
DROP CONSTRAINT IF EXISTS vehicle_condition_0_100_chk;
|
||||
`);
|
||||
await queryInterface.sequelize.query(`
|
||||
ALTER TABLE falukant_data.vehicle
|
||||
ALTER COLUMN condition DROP DEFAULT;
|
||||
`);
|
||||
// NOT NULL not reverted to avoid introducing NULLs on rollback; can be adjusted if needed
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -922,7 +922,8 @@ class FalukantService extends BaseService {
|
||||
|
||||
return {
|
||||
id: plain.id,
|
||||
condition: plain.condition,
|
||||
// Defensive: legacy DB rows can have NULL -> UI would display "Unbekannt"
|
||||
condition: Math.max(0, Math.min(100, Number.isFinite(Number(plain.condition)) ? Number(plain.condition) : 100)),
|
||||
availableFrom: plain.availableFrom,
|
||||
status,
|
||||
type: {
|
||||
|
||||
@@ -395,7 +395,27 @@ const syncDatabaseForDeployment = async () => {
|
||||
console.log(`✅ ${deletedCount8} verwaiste political_office Einträge entfernt`);
|
||||
}
|
||||
|
||||
if (deletedCount1 === 0 && deletedCount2 === 0 && deletedCount3 === 0 && deletedCount4 === 0 && deletedCount5 === 0 && deletedCount6 === 0 && deletedCount7 === 0 && deletedCount8 === 0) {
|
||||
// Cleanup vehicle.condition: Legacy-Nulls + Range clamp (UI zeigt sonst "Unbekannt")
|
||||
const result9 = await sequelize.query(`
|
||||
UPDATE falukant_data.vehicle
|
||||
SET condition = 100
|
||||
WHERE condition IS NULL;
|
||||
`);
|
||||
const updatedNullConditions = result9[1] || 0;
|
||||
if (updatedNullConditions > 0) {
|
||||
console.log(`✅ ${updatedNullConditions} vehicle.condition NULL → 100 gesetzt`);
|
||||
}
|
||||
const result10 = await sequelize.query(`
|
||||
UPDATE falukant_data.vehicle
|
||||
SET condition = GREATEST(0, LEAST(100, condition))
|
||||
WHERE condition < 0 OR condition > 100;
|
||||
`);
|
||||
const clampedConditions = result10[1] || 0;
|
||||
if (clampedConditions > 0) {
|
||||
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) {
|
||||
console.log("✅ Keine verwaisten Einträge gefunden");
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
Reference in New Issue
Block a user