backend/migrations/passengers.js (view raw)
1/**
2 * Migrate raw passengers to passenger components
3 * for event waiting list & car passengers
4 *
5 * **WARNING**: 'passengers' column in 'cars' table must be cloned to
6 * another column ('old_passengers') to avoid data loss BEFORE
7 * deploying new project version. To do so:
8 * - alter table cars add column old_passengers jsonb;
9 * - update cars set old_passengers = passengers;
10 *
11 * Steps:
12 * 1. Clone 'passengers' column in 'cars' table
13 * 2. Start Strapi to apply new db schema
14 * 3. Launch this script
15 */
16
17const Strapi = require('strapi');
18
19const main = async () => {
20 await Strapi().load();
21
22 /**
23 * Migrate event waiting list
24 */
25 const events = await strapi.services.event.find({_limit: -1});
26
27 for (let i = 0; i < events.length; i++) {
28 const event = events[i];
29 const {waiting_list} = event;
30 if (!waiting_list) continue;
31 const waitingList = waiting_list.map(name => ({name}));
32 strapi.log.debug(`Migrate waiting list for event ${event.id}`);
33 await strapi.services.event.update({id: event.id}, {waitingList});
34 }
35
36 /**
37 * Migrate car passengers
38 */
39 const cars = await strapi.services.car.find({_limit: -1});
40 for (let i = 0; i < cars.length; i++) {
41 const car = cars[i];
42 const {old_passengers} = car;
43 if (!old_passengers) continue;
44 const passengers = old_passengers.map(name => ({name}));
45 strapi.log.debug(`Migrate passengers for car ${car.id}`);
46 await strapi.services.car.update({id: car.id}, {passengers});
47 }
48
49 strapi.log.debug('Done.');
50 process.exit(0);
51};
52
53main();