iceshrimp-legacy/packages/backend/migration/1652859567549-uniform-themecolor.js
Kainoa Kanter 7fb130b06e formatting
2023-04-06 18:56:46 -07:00

52 lines
1.3 KiB
JavaScript

import tinycolor from "tinycolor2";
export class uniformThemecolor1652859567549 {
name = "uniformThemecolor1652859567549";
async up(queryRunner) {
const formatColor = (color) => {
let tc = new tinycolor(color);
if (tc.isValid()) {
return tc.toHexString();
} else {
return null;
}
};
await queryRunner
.query(
'SELECT "id", "themeColor" FROM "instance" WHERE "themeColor" IS NOT NULL',
)
.then((instances) =>
Promise.all(
instances.map((instance) => {
// update theme color to uniform format, e.g. #00ff00
// invalid theme colors get set to null
return queryRunner.query(
'UPDATE "instance" SET "themeColor" = $1 WHERE "id" = $2',
[formatColor(instance.themeColor), instance.id],
);
}),
),
);
// also fix own theme color
await queryRunner
.query(
'SELECT "themeColor" FROM "meta" WHERE "themeColor" IS NOT NULL LIMIT 1',
)
.then((metas) => {
if (metas.length > 0) {
return queryRunner.query('UPDATE "meta" SET "themeColor" = $1', [
formatColor(metas[0].themeColor),
]);
}
});
}
async down(queryRunner) {
// The original representation is not stored, so migrating back is not possible.
// The new format also works in older versions so this is not a problem.
}
}