directus

Форк
0
/
20231009A-update-csv-fields-to-text.ts 
61 строка · 1.7 Кб
1
import type { Knex } from 'knex';
2
import { getHelpers } from '../helpers/index.js';
3
import { createInspector } from '@directus/schema';
4

5
export async function up(knex: Knex) {
6
	const inspector = createInspector(knex);
7
	const helper = getHelpers(knex).schema;
8
	const csvFields = await knex.select('collection', 'field').from('directus_fields').where('special', '=', 'cast-csv');
9

10
	const updates: Promise<void>[] = [];
11

12
	for (const { collection, field } of csvFields) {
13
		updates.push(
14
			inspector.columnInfo(collection, field).then((column) => {
15
				if (column.data_type === 'text') return;
16

17
				return helper.changeToType(collection, field, 'text', {
18
					default: column.default_value,
19
					nullable: column.is_nullable,
20
				});
21
			}),
22
		);
23
	}
24

25
	return checkPromises(updates);
26
}
27

28
export async function down(knex: Knex) {
29
	const inspector = createInspector(knex);
30
	const helper = getHelpers(knex).schema;
31
	const csvFields = await knex.select('collection', 'field').from('directus_fields').where('special', '=', 'cast-csv');
32

33
	const updates: Promise<void>[] = [];
34

35
	for (const { collection, field } of csvFields) {
36
		updates.push(
37
			inspector.columnInfo(collection, field).then((column) => {
38
				return helper.changeToType(collection, field, 'string', {
39
					default: column.default_value,
40
					nullable: column.is_nullable,
41
				});
42
			}),
43
		);
44
	}
45

46
	return checkPromises(updates);
47
}
48

49
async function checkPromises<T>(promises: Promise<T>[]) {
50
	const result = await Promise.allSettled(promises);
51

52
	const errors = result.filter(isRejectedPromise).map((promise) => promise.reason);
53

54
	if (errors.length > 0) {
55
		throw new Error(errors.toString());
56
	}
57
}
58

59
function isRejectedPromise<T>(promise: PromiseSettledResult<T>): promise is PromiseRejectedResult {
60
	return promise.status === 'rejected';
61
}
62

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.