@mee4dy/crud
Version:
Create a backend and frontend in 5 minutes! With our powerful full stack crud system, customize it to suit you.
3 lines (2 loc) • 3.5 kB
JavaScript
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("sequelize"),m=require("../common/enums/filter-type.enum.cjs"),P=require("../common/enums/order-direction.enum.cjs"),F=require("../common/helpers/merge.helper.cjs"),o=require("../common/constatns/constatns.cjs");class k{constructor(e){this.pk="id",this.allowFilters=[{key:o.PK}],this.allowGroups=[],this.allowOrders=[o.PK],this.defaultGroups=[o.PK],this.defaultOrders=[[o.PK,P.OrderDirection.desc]],e&&Object.assign(this,{...e})}getPK(){return this.pk}getRepository(){return this.repository}getFields(e=[]){const t=this.fields||[],s=this.fieldsExclude||[],r=[];for(const[n,l]of t)this.allowGroups.includes(l)?e.length&&e.includes(l)?r.push([n,l]):s.push(l):r.push([n,l]);return{include:r,exclude:s}}getQueryFilters(e){const t=structuredClone(e);return t!=null&&t[o.PK]&&(t[this.pk]=t[o.PK],delete t[o.PK]),t}getAllowFilters(){return structuredClone(this.allowFilters).map(t=>({...t,key:t.key===o.PK?this.pk:t.key}))}getAllowOrders(){return this.allowOrders.map(t=>t===o.PK?this.pk:t)}getFilters(e){const t=[],s=this.getQueryFilters(e.filters),r=this.getAllowFilters();if(s)for(const{key:n,field:l,type:i}of r){const u=n,c=l||u,h=s==null?void 0:s[u],a=s==null?void 0:s[`${c}_from`],d=s==null?void 0:s[`${c}_to`],f=(this.fields||[]).find(([y,w])=>w===c);let O=f?f[0]:this.repository.sequelize.col(`${this.repository.name}.${c}`);const p={};switch(i){case m.FilterType.text:h&&(p[g.Op.like]=`%${h}%`);break;case m.FilterType.period:case m.FilterType.range:a&&(p[g.Op.gte]=a),d&&(p[g.Op.lte]=d);break;case m.FilterType.number:default:h&&(p[g.Op.eq]=h);break}O&&Reflect.ownKeys(p).length&&t.push(this.repository.sequelize.where(O,p))}return t}getGroups(e){const t=[],s=(e.groups||this.defaultGroups).map(r=>r===o.PK?this.pk:r);if(s)for(let r of this.allowGroups){const n=r===o.PK?this.pk:r;s.includes(n)&&t.push(n)}return t}getOrders(e){const t=[],s=this.getAllowOrders(),r=e.orders?Object.entries(e.orders).map(([u,c])=>[u,c]):this.defaultOrders,n=this.getGroups(e),i=this.getFields(n).include.map(u=>u[1]);if(r)for(const u of s){const c=u,h=!i.length||i.includes(c),a=r.map(([d,f])=>(d===o.PK&&(d=this.pk),[d,f])).find(([d,f])=>d===c);a&&h&&t.push(a)}return t}getLimit(e){return e!=null&&e.limit?+e.limit:this.limit}getOffset(e){return+(e==null?void 0:e.offset)||0}getIncludes(e){return e.includes||[]}findAll({scope:e,...t}){return this.repository.scope(e).findAll(t)}findOne({scope:e,...t}){return this.repository.scope(e).findOne(t)}getFindParams({params:e,query:t}){var d,f;const s=this.getFilters(t),r=this.getIncludes(t),n=this.getOrders(t),l=this.getGroups(t),i=this.getFields(l),u=this.getLimit(t),c=this.getOffset(t),h=e||{},a={attributes:{include:(d=i==null?void 0:i.include)!=null&&d.length?i==null?void 0:i.include:[],exclude:(f=i==null?void 0:i.exclude)!=null&&f.length?i==null?void 0:i.exclude:[]},include:r,scope:["defaultScope"],limit:u,offset:c,where:s.length?s:void 0,order:n,group:l};return F.merge(a,h)}getItems({params:e,query:t}){const s=this.getFindParams({params:e,query:t});return this.findAll({...s})}getItem({params:e,query:t}){const s=this.getFindParams({params:e,query:t});return this.findOne({...s})}create(e){return this.repository.create(e)}update(e,t,s=!0){return this.repository.update(t,{where:{[this.pk]:e}}).then(r=>s?this.findOne({where:{[this.pk]:e}}):r)}delete(e){return this.repository.destroy({where:e})}}exports.CrudService=k;
//# sourceMappingURL=crud.service.cjs.map