@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 3.56 kB
JavaScript
import{copy as e}from"../../libs/i18n/copy.mjs";import t from"../../libs/repositories/document-workflow-assignees.mjs";import n from"../../libs/repositories/document-workflows.mjs";import r from"../../libs/repositories/users.mjs";import{getTableNames as i}from"../../libs/collection/schema/runtime/runtime-schema-selectors.mjs";import a from"../collections/get-single-instance.mjs";import{resolveCollectionPermission as o}from"../../libs/permission/collection-permissions.mjs";import s from"../../libs/hooks/execute-hooks.mjs";import{getWorkflowConfig as c,resolveEffectiveWorkflowStage as l}from"./helpers/index.mjs";import u from"../documents/checks/check-document-access.mjs";import d from"../../utils/helpers/same-numeric-set.mjs";const f=async(f,p)=>{let m=a(f,{key:p.collectionKey});if(m.error)return m;let h=c(m.data);if(!h)return{error:{type:`basic`,message:e(`server:core.documents.workflows.not.enabled`),status:400},data:void 0};let g=p.stage?h.stages.find(e=>e.key===p.stage):void 0;if(p.stage!==void 0&&!g)return{error:{type:`basic`,message:e(`server:core.documents.workflows.stage.not.found`),status:400},data:void 0};let _=await i(f,p.collectionKey);if(_.error)return _;let v=await u(f,{collectionKey:p.collectionKey,id:p.documentId});if(v.error)return v;let y=new n(f.db.client,f.config.db),b=new t(f.db.client,f.config.db),x=await y.selectSingleDetailed({collectionKey:p.collectionKey,documentId:p.documentId});if(x.error)return x;let S=l({collection:m.data,stageKey:x.data?.stage_key});if(!S)return{error:{type:`basic`,message:e(`server:core.documents.workflows.stage.not.found`),status:400},data:void 0};let C=g??S,w=p.stage!==void 0&&C.key!==S.key,T=x.data?.assignees.map(e=>e.user_id)??[],E=p.assigneeIds===void 0?T:Array.from(new Set(p.assigneeIds)),D=p.assigneeIds!==void 0&&!d(T,E);if(!w&&!D)return{error:{type:`basic`,message:e(`server:core.documents.workflows.no.changes`),status:400},data:void 0};if(p.assigneeIds!==void 0&&E.length>0){let t=o({collection:m.data,action:`update`}),n=await new r(f.db.client,f.config.db).selectMultipleWithPermission({permission:t,tenantKey:f.request.tenantKey});if(n.error)return n;let i=new Set((n.data??[]).map(e=>e.id));if(E.find(e=>!i.has(e))!==void 0)return{error:{type:`basic`,message:e(`server:core.documents.workflows.assignee.invalid`),status:400},data:void 0}}let O=new Date().toISOString(),k=x.data?.id;if(k){let e=await y.updateSingle({where:[{key:`id`,operator:`=`,value:k}],data:{stage_key:C.key,updated_by:p.user.id,updated_at:O}});if(e.error)return e}else{let e=await y.createSingle({data:{collection_key:p.collectionKey,document_id:p.documentId,stage_key:C.key,created_by:p.user.id,updated_by:p.user.id},returning:[`id`],validation:{enabled:!0}});if(e.error)return e;k=e.data.id}if(p.assigneeIds!==void 0){let e=await b.deleteMultiple({where:[{key:`workflow_id`,operator:`=`,value:k}]});if(e.error)return e;if(E.length>0){let e=await b.createMultiple({data:E.map(e=>({workflow_id:k,user_id:e,assigned_by:p.user.id}))});if(e.error)return e}}let A=await s(f,{service:`documentWorkflows`,event:`afterUpdate`,config:f.config,collectionInstance:m.data},{meta:{collection:m.data,collectionKey:p.collectionKey,userId:p.user.id,collectionTableNames:_.data,tenantKey:f.request.tenantKey??null},data:{collectionKey:p.collectionKey,documentId:p.documentId,userId:p.user.id,previousStage:S.key,nextStage:C.key,previousAssigneeIds:T,nextAssigneeIds:E,stageChanged:w,assigneesChanged:D}});return A.error?A:{error:void 0,data:void 0}};export{f as default};
//# sourceMappingURL=update-single.mjs.map