n8n
Version:
n8n Workflow Automation Tool
132 lines • 7.15 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DataTableColumnRepository = void 0;
const db_1 = require("@n8n/db");
const di_1 = require("@n8n/di");
const typeorm_1 = require("@n8n/typeorm");
const n8n_workflow_1 = require("n8n-workflow");
const data_table_column_entity_1 = require("./data-table-column.entity");
const data_table_ddl_service_1 = require("./data-table-ddl.service");
const data_table_entity_1 = require("./data-table.entity");
const data_table_column_name_conflict_error_1 = require("./errors/data-table-column-name-conflict.error");
const data_table_system_column_name_conflict_error_1 = require("./errors/data-table-system-column-name-conflict.error");
const data_table_validation_error_1 = require("./errors/data-table-validation.error");
let DataTableColumnRepository = class DataTableColumnRepository extends typeorm_1.Repository {
constructor(dataSource, ddlService) {
super(data_table_column_entity_1.DataTableColumn, dataSource.manager);
this.ddlService = ddlService;
}
validateNotSystemColumn(columnName) {
if (n8n_workflow_1.DATA_TABLE_SYSTEM_COLUMNS.includes(columnName)) {
throw new data_table_system_column_name_conflict_error_1.DataTableSystemColumnNameConflictError(columnName);
}
if (columnName === n8n_workflow_1.DATA_TABLE_SYSTEM_TESTING_COLUMN) {
throw new data_table_system_column_name_conflict_error_1.DataTableSystemColumnNameConflictError(columnName, 'testing');
}
}
async validateUniqueColumnName(columnName, dataTableId, em) {
const existingColumnMatch = await em.existsBy(data_table_column_entity_1.DataTableColumn, {
name: columnName,
dataTableId,
});
if (existingColumnMatch) {
const dataTable = await em.findOneBy(data_table_entity_1.DataTable, { id: dataTableId });
if (!dataTable) {
throw new n8n_workflow_1.UnexpectedError('Data table not found');
}
throw new data_table_column_name_conflict_error_1.DataTableColumnNameConflictError(columnName, dataTable.name);
}
}
async getColumns(dataTableId, trx) {
return await (0, db_1.withTransaction)(this.manager, trx, async (em) => {
const columns = await em
.createQueryBuilder(data_table_column_entity_1.DataTableColumn, 'dsc')
.where('dsc.dataTableId = :dataTableId', { dataTableId })
.getMany();
columns.sort((a, b) => a.index - b.index);
return columns;
}, false);
}
async addColumn(dataTableId, schema, trx) {
return await (0, db_1.withTransaction)(this.manager, trx, async (em) => {
this.validateNotSystemColumn(schema.name);
await this.validateUniqueColumnName(schema.name, dataTableId, em);
if (schema.index === undefined) {
const columns = await this.getColumns(dataTableId, em);
schema.index = columns.length;
}
else {
await this.shiftColumns(dataTableId, schema.index, 1, em);
}
const column = em.create(data_table_column_entity_1.DataTableColumn, {
...schema,
dataTableId,
});
await em.insert(data_table_column_entity_1.DataTableColumn, column);
await this.ddlService.addColumn(dataTableId, column, em.connection.options.type, em);
return column;
});
}
async deleteColumn(dataTableId, column, trx) {
await (0, db_1.withTransaction)(this.manager, trx, async (em) => {
await em.remove(data_table_column_entity_1.DataTableColumn, column);
await this.ddlService.dropColumnFromTable(dataTableId, column.name, em.connection.options.type, em);
await this.shiftColumns(dataTableId, column.index, -1, em);
});
}
async moveColumn(dataTableId, column, targetIndex, trx) {
await (0, db_1.withTransaction)(this.manager, trx, async (em) => {
const columnCount = await em.countBy(data_table_column_entity_1.DataTableColumn, { dataTableId });
if (targetIndex < 0) {
throw new data_table_validation_error_1.DataTableValidationError('tried to move column to negative index');
}
if (targetIndex >= columnCount) {
throw new data_table_validation_error_1.DataTableValidationError('tried to move column to an index larger than column count');
}
await this.shiftColumns(dataTableId, column.index, -1, em);
await this.shiftColumns(dataTableId, targetIndex, 1, em);
await em.update(data_table_column_entity_1.DataTableColumn, { id: column.id }, { index: targetIndex });
});
}
async renameColumn(dataTableId, column, newName, trx) {
return await (0, db_1.withTransaction)(this.manager, trx, async (em) => {
this.validateNotSystemColumn(newName);
await this.validateUniqueColumnName(newName, dataTableId, em);
const oldName = column.name;
await em.update(data_table_column_entity_1.DataTableColumn, { id: column.id }, { name: newName });
await this.ddlService.renameColumn(dataTableId, oldName, newName, em.connection.options.type, em);
return { ...column, name: newName };
});
}
async shiftColumns(dataTableId, lowestIndex, delta, trx) {
await (0, db_1.withTransaction)(this.manager, trx, async (em) => {
await em
.createQueryBuilder()
.update(data_table_column_entity_1.DataTableColumn)
.set({
index: () => `index + ${delta}`,
})
.where('dataTableId = :dataTableId AND index >= :thresholdValue', {
dataTableId,
thresholdValue: lowestIndex,
})
.execute();
});
}
};
exports.DataTableColumnRepository = DataTableColumnRepository;
exports.DataTableColumnRepository = DataTableColumnRepository = __decorate([
(0, di_1.Service)(),
__metadata("design:paramtypes", [typeorm_1.DataSource,
data_table_ddl_service_1.DataTableDDLService])
], DataTableColumnRepository);
//# sourceMappingURL=data-table-column.repository.js.map