Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1) - OpenOCPP extracted (firmware OCPP 1.6J/2.0.1) - ShapeShifter library installed (pip install -e) - ShapeShifter specification extracted - EVerest extracted TODO updated with progress
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
// SPDX-FileCopyrightText: 2025 Contributors to the CitrineOS Project
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
'use strict';
|
||||
|
||||
/** @type {import('sequelize-cli').Migration} */
|
||||
import { QueryInterface } from 'sequelize';
|
||||
|
||||
export default {
|
||||
up: async (queryInterface: QueryInterface) => {
|
||||
// First, let's get all the stations that have EvseTypes associated with them
|
||||
// through VariableAttributes
|
||||
const [stationEvseTypes] = await queryInterface.sequelize.query(`
|
||||
SELECT DISTINCT
|
||||
cs.id as "stationId",
|
||||
cs."tenantId" as "tenantId",
|
||||
et.id as "evseTypeId",
|
||||
ROW_NUMBER() OVER (PARTITION BY cs.id, et.id ORDER BY va.id) as "evseSequence"
|
||||
FROM "ChargingStations" cs
|
||||
INNER JOIN "VariableAttributes" va ON va."stationId" = cs.id
|
||||
INNER JOIN "EvseTypes" et ON va."evseDatabaseId" = et."databaseId"
|
||||
WHERE cs.id IS NOT NULL
|
||||
AND et.id IS NOT NULL
|
||||
ORDER BY cs.id, et.id
|
||||
`);
|
||||
|
||||
// Now create Evse records for each station-evseType combination
|
||||
let id = 1;
|
||||
const evseInserts = stationEvseTypes.map((row: any, index: number) => {
|
||||
// Generate evseId in the format US*TST*C*01234567*8
|
||||
// Using the station's stationId and a sequence number
|
||||
const paddedSequence = row.evseSequence.toString().padStart(8, '0');
|
||||
const evseId = `US*TST*C*${paddedSequence}*${index % 10}`;
|
||||
|
||||
const evse = {
|
||||
id,
|
||||
stationId: row.stationId,
|
||||
evseTypeId: row.evseTypeId,
|
||||
evseId: evseId,
|
||||
tenantId: row.tenantId,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
};
|
||||
id++;
|
||||
return evse;
|
||||
});
|
||||
|
||||
// Bulk insert the new Evse records
|
||||
if (evseInserts.length > 0) {
|
||||
await queryInterface.bulkInsert('Evses', evseInserts);
|
||||
|
||||
console.log(`Created ${evseInserts.length} Evse records from EvseType associations`);
|
||||
} else {
|
||||
console.log('No EvseType associations found to migrate');
|
||||
}
|
||||
},
|
||||
|
||||
down: async (queryInterface: QueryInterface) => {
|
||||
// Remove all Evse records that were created by this migration
|
||||
// We'll identify them by the fact that they have evseIds matching our pattern
|
||||
await queryInterface.sequelize.query(`
|
||||
DELETE FROM "Evses"
|
||||
WHERE "evseId" LIKE 'US*TST*C*%'
|
||||
`);
|
||||
|
||||
console.log('Rolled back Evse creation migration');
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user