@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 2.25 kB
JavaScript
import{copy as e}from"../../libs/i18n/copy.mjs";import t from"../../libs/repositories/role-permissions.mjs";import n from"../../libs/repositories/role-translations.mjs";import r from"../../libs/repositories/roles.mjs";import{getTenantConfig as i}from"../../utils/helpers/tenants.mjs";import{isCorePermission as a}from"../../libs/permission/registry.mjs";import{getTranslationValue as o,prepareRoleTranslations as s}from"./helpers/role-translations.mjs";import c from"./validate-permissions.mjs";const l=async(l,u)=>{let d=new r(l.db.client,l.config.db),f=new n(l.db.client,l.config.db),p=l.config.i18n.defaultLocale,m=o(u.name,p),h=o(u.description,p),g=u.tenantKey===void 0?l.request.tenantKey??null:u.tenantKey;if(u.tenantKey!==void 0&&!u.authSuperAdmin)return{error:{type:`basic`,message:e(`server:core.permissions.denied`),status:403},data:void 0};if(!m||m.length<2)return{error:{type:`basic`,message:e(`server:core.errors.validation.message`),status:400,errors:{name:{code:`invalid`,message:e(`server:core.fields.validation.required`)}}},data:void 0};if(g!==null&&i(l.config,g)===void 0)return{error:{type:`basic`,message:e(`server:core.tenants.unknown`,{data:{key:g}}),status:400},data:void 0};let[_,v]=await Promise.all([c(l,{permissions:u.permissions}),d.selectRoleIdByTranslationName({name:m,localeCode:p,tenantKey:g})]);if(_.error)return _;if(v.error)return v;if(v.data!==void 0)return{error:{type:`basic`,message:e(`server:core.validation.unique.message`),status:400,errors:{name:{code:`invalid`,message:e(`server:core.validation.unique.message`)}}},data:void 0};let y=await d.createSingle({data:{tenant_key:g},returning:[`id`],validation:{enabled:!0}});if(y.error)return y;let b=s({name:u.name,description:u.description,roleId:y.data.id});if(b.every(e=>e.locale_code!==p)&&b.push({role_id:y.data.id,locale_code:p,name:m,description:h??null}),b.length>0){let e=await f.upsertMultiple({data:b,returning:[`id`],validation:{enabled:!0}});if(e.error)return e}if(_.data.length>0){let e=await new t(l.db.client,l.config.db).createMultiple({data:_.data.map(e=>({role_id:y.data.id,permission:e.permission,core:a(e.permission)}))});if(e.error)return e}return{error:void 0,data:y.data.id}};export{l as default};
//# sourceMappingURL=create-single.mjs.map