From ffb96931843b141811cfabf65203537d18500de8 Mon Sep 17 00:00:00 2001 From: symonbaikov Date: Fri, 4 Jul 2025 21:37:11 +0300 Subject: [PATCH] feat(api): allow setting custom fields when creating a card via API (closes #1155) --- server/api/controllers/cards/create.js | 7 +++++++ server/api/helpers/cards/create-one.js | 27 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/server/api/controllers/cards/create.js b/server/api/controllers/cards/create.js index 7ff91013..9c542c6d 100755 --- a/server/api/controllers/cards/create.js +++ b/server/api/controllers/cards/create.js @@ -53,6 +53,9 @@ module.exports = { type: 'json', custom: isStopwatch, }, + customFields: { + type: 'ref', + }, }, exits: { @@ -96,6 +99,10 @@ module.exports = { 'stopwatch', ]); + if (inputs.customFields) { + values.customFields = inputs.customFields; + } + const card = await sails.helpers.cards.createOne .with({ project, diff --git a/server/api/helpers/cards/create-one.js b/server/api/helpers/cards/create-one.js index ae05a43e..602ce4db 100644 --- a/server/api/helpers/cards/create-one.js +++ b/server/api/helpers/cards/create-one.js @@ -75,6 +75,33 @@ module.exports = { listChangedAt: new Date().toISOString(), }); + if (values.customFields) { + const customFieldGroups = await CustomFieldGroup.qm.getByBoardId(values.board.id); + const customFieldGroupMap = _.keyBy(customFieldGroups, 'name'); + const customFieldGroupIds = customFieldGroups.map((g) => g.id); + const customFields = await CustomField.qm.getByCustomFieldGroupIds(customFieldGroupIds); + const customFieldMap = _.keyBy(customFields, (f) => `${f.customFieldGroupId}:${f.name}`); + + const createValuePromises = []; + Object.entries(values.customFields).forEach(([groupName, fields]) => { + const group = customFieldGroupMap[groupName]; + if (!group) return; + Object.entries(fields).forEach(([fieldName, content]) => { + const field = customFieldMap[`${group.id}:${fieldName}`]; + if (!field) return; + createValuePromises.push( + CustomFieldValue.create({ + cardId: card.id, + customFieldGroupId: group.id, + customFieldId: field.id, + content: String(content), + }), + ); + }); + }); + await Promise.all(createValuePromises); + } + sails.sockets.broadcast( `board:${card.boardId}`, 'cardCreate',