directus

Форк
0
/
20210927A-replace-fields-group.ts 
65 строк · 1.8 Кб
1
import type { Knex } from 'knex';
2
import { uniq } from 'lodash-es';
3

4
export async function up(knex: Knex): Promise<void> {
5
	const groupsInUse = await knex.select('id', 'group').from('directus_fields').whereNotNull('group');
6

7
	const groupIDs: number[] = uniq(groupsInUse.map(({ group }) => group));
8

9
	const groupFields = await knex.select('id', 'field').from('directus_fields').whereIn('id', groupIDs);
10

11
	const groupMap = new Map();
12

13
	for (const { id, field } of groupFields) {
14
		groupMap.set(id, field);
15
	}
16

17
	await knex.schema.alterTable('directus_fields', (table) => {
18
		table.dropForeign('group');
19
	});
20

21
	await knex.schema.alterTable('directus_fields', (table) => {
22
		table.dropColumn('group');
23
	});
24

25
	await knex.schema.alterTable('directus_fields', (table) => {
26
		table.string('group', 64);
27
	});
28

29
	for (const { id, group } of groupsInUse) {
30
		await knex('directus_fields')
31
			.update({ group: groupMap.get(group) })
32
			.where({ id });
33
	}
34
}
35

36
export async function down(knex: Knex): Promise<void> {
37
	const fieldsThatUseAGroup = await knex
38
		.select('id', 'collection', 'group')
39
		.from('directus_fields')
40
		.whereNotNull('group');
41

42
	if (fieldsThatUseAGroup.length === 0) return;
43

44
	const groupMap = new Map();
45

46
	for (const { collection, group } of fieldsThatUseAGroup) {
47
		const { id } = await knex.select('id').from('directus_fields').where({ collection, field: group }).first();
48

49
		groupMap.set(group, id);
50
	}
51

52
	await knex.schema.alterTable('directus_fields', (table) => {
53
		table.dropColumn('group');
54
	});
55

56
	await knex.schema.alterTable('directus_fields', (table) => {
57
		table.integer('group').references('id').inTable('directus_fields');
58
	});
59

60
	for (const { id, group } of fieldsThatUseAGroup) {
61
		await knex('directus_fields')
62
			.update({ group: groupMap.get(group) })
63
			.where({ id });
64
	}
65
}
66

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

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

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

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