@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 6.3 kB
JavaScript
import e from"../../constants/constants.mjs";import t from"../db/query-builder/index.mjs";import n from"./parents/dynamic-repository.mjs";import{versionTypesSchema as r}from"../../schemas/document-versions.mjs";import i from"zod";import{sql as a}from"kysely";var o=class extends n{constructor(e,t){super(e,t,`lucid_document__collection-key__ver`)}documentFieldsUnionAlias=`document_fields`;tableSchema=i.object({id:i.number(),collection_key:i.string(),collection_migration_id:i.number(),document_id:i.number(),type:r,promoted_from:i.number().nullable(),content_id:i.string(),created_by:i.number(),updated_by:i.number(),updated_at:i.union([i.string(),i.date()]).nullable(),created_at:i.union([i.string(),i.date()]).nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),collection_key:this.dbAdapter.getDataType(`text`),collection_migration_id:this.dbAdapter.getDataType(`integer`),document_id:this.dbAdapter.getDataType(`integer`),type:this.dbAdapter.getDataType(`text`),promoted_from:this.dbAdapter.getDataType(`integer`),content_id:this.dbAdapter.getDataType(`text`),created_by:this.dbAdapter.getDataType(`integer`),updated_by:this.dbAdapter.getDataType(`integer`),updated_at:this.dbAdapter.getDataType(`timestamp`),created_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig=void 0;async selectMultipleUnion(e){if(e.unions.length===0)return{error:void 0,data:[]};let n=e.unions.map(({tables:n,ids:r,documentFieldSchema:i,versionType:a})=>{let{table:o,ref:s}=this.db.dynamic,c=a??e.versionType,l=this.db.selectFrom(n.version).innerJoin(n.document,e=>e.onRef(`${n.document}.id`,`=`,`${n.version}.document_id`)).select([`${n.version}.id`,`${n.version}.collection_key`,`${n.version}.document_id`,`${n.version}.type`,`${n.version}.created_by`,`${n.version}.updated_by`,`${n.version}.created_at`,`${n.version}.updated_at`]).select(()=>[this.dbAdapter.jsonArrayFrom(this.db.selectFrom(o(n.documentFields).as(`df`)).whereRef(s(`df.document_id`),`=`,`${n.version}.document_id`).whereRef(s(`df.document_version_id`),`=`,`${n.version}.id`).select(i.columns.map(e=>s(`df.${e.name}`)))).as(this.documentFieldsUnionAlias)]).where(`${n.version}.type`,`=`,c).where(`${n.version}.document_id`,`in`,r).where(`${n.document}.is_deleted`,`=`,this.dbAdapter.getDefault(`boolean`,`false`));return l=t.tenantScope(l,{tenantKey:e.tenantKey,column:`${n.document}.tenant_key`}),l}),r=n[0];if(r===void 0)return{error:void 0,data:[]};for(let e=1;e<n.length;e++){let t=n[e];t!==void 0&&(r=r.unionAll(t))}let i=await this.executeQuery(()=>r.execute(),{method:`selectMultipleByIdsUnion`});if(i.response.error)return i.response;if(i.response.data){let t=new Map(e.unions.map(e=>[e.collectionKey,e]));i.response.data=i.response.data.map(e=>{let n=t.get(e.collection_key)?.tables.documentFields;if(!n||e[n]!==void 0)return e;let{[this.documentFieldsUnionAlias]:r,...i}=e;return{...i,[n]:r}})}return this.validateResponse(i,{...e.validation,mode:`multiple`})}async selectMultipleRevisions(n,r){let i=await this.executeQuery(async()=>{let{table:i,ref:o}=this.db.dynamic,s=this.db.selectFrom(r.tableName).innerJoin(n.tables.document,e=>e.onRef(`${n.tables.document}.id`,`=`,`${r.tableName}.document_id`)).select([`${r.tableName}.id`,`${r.tableName}.type`,`${r.tableName}.promoted_from`,`${r.tableName}.created_at`,`${r.tableName}.created_by`,`${r.tableName}.document_id`,`${r.tableName}.collection_key`,`${r.tableName}.content_id`,`${n.tables.document}.created_by as document_created_by`,`${n.tables.document}.created_at as document_created_at`,`${n.tables.document}.updated_by as document_updated_by`,`${n.tables.document}.updated_at as document_updated_at`]).where(`${r.tableName}.document_id`,`=`,n.documentId).where(({and:t,eb:n,exists:o,or:s})=>s([n(`${r.tableName}.type`,`=`,`revision`),t([n(`${r.tableName}.type`,`=`,e.collectionBuilder.publishing.snapshotVersionType),o(this.db.selectFrom(i(r.tableName).as(`environment_version`)).select(a.lit(1).as(`one`)).whereRef(`environment_version.promoted_from`,`=`,`${r.tableName}.id`).whereRef(`environment_version.document_id`,`=`,`${r.tableName}.document_id`).where(`environment_version.type`,`not in`,[`latest`,`revision`,e.collectionBuilder.publishing.snapshotVersionType]))])]));for(let e of n.bricksSchema)s=s.select(()=>this.dbAdapter.jsonArrayFrom(this.db.selectFrom(i(e.name).as(`b`)).whereRef(o(`b.document_version_id`),`=`,`${r.tableName}.id`).select([o(`b.id`),o(`b.locale`),o(`b.brick_instance_id`),o(`b.brick_type`)])).as(e.name));let c=this.db.selectFrom(r.tableName).innerJoin(n.tables.document,e=>e.onRef(`${n.tables.document}.id`,`=`,`${r.tableName}.document_id`)).select(a`count(distinct ${a.ref(`${r.tableName}.id`)})`.as(`count`)).where(`${r.tableName}.document_id`,`=`,n.documentId).where(({and:t,eb:n,exists:o,or:s})=>s([n(`${r.tableName}.type`,`=`,`revision`),t([n(`${r.tableName}.type`,`=`,e.collectionBuilder.publishing.snapshotVersionType),o(this.db.selectFrom(i(r.tableName).as(`environment_version`)).select(a.lit(1).as(`one`)).whereRef(`environment_version.promoted_from`,`=`,`${r.tableName}.id`).whereRef(`environment_version.document_id`,`=`,`${r.tableName}.document_id`).where(`environment_version.type`,`not in`,[`latest`,`revision`,e.collectionBuilder.publishing.snapshotVersionType]))])])),{main:l,count:u}=t.main({main:s,count:c},{queryParams:{filter:n.query.filter,sort:n.query.sort,page:n.query.page,perPage:n.query.perPage},database:this.dbAdapter.config,meta:{tableKeys:{filters:{createdBy:`${r.tableName}.created_by`},sorts:{createdAt:`${r.tableName}.created_at`}}}}),[d,f]=await Promise.all([l.execute(),u?.executeTakeFirst()]);return[d,f]},{method:`selectMultipleRevisions`,tableName:r.tableName});return i.response.error?i.response:this.validateResponse(i,{mode:`multiple-count`})}async deleteExpiredRevisions(e,t){let{table:n}=this.db.dynamic,r=t.tableName;return(await this.executeQuery(async()=>{await this.db.deleteFrom(r).where(`${r}.type`,`=`,`revision`).where(`${r}.created_at`,`<`,e.cutoffDate).where(({not:e,exists:t,selectFrom:i})=>e(t(i(n(r).as(`promoted`)).select(a.lit(1).as(`one`)).whereRef(`promoted.promoted_from`,`=`,`${r}.id`).where(`promoted.type`,`!=`,`revision`)))).execute()},{method:`deleteExpiredRevisions`,tableName:r})).response}};export{o as default};
//# sourceMappingURL=document-versions.mjs.map