UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

2 lines 4.8 kB
import e from"../db/query-builder/index.mjs";import t from"./parents/static-repository.mjs";import n from"zod";var r=class extends t{constructor(e,t){super(e,t,`lucid_queue_jobs`)}tableSchema=n.object({id:n.union([n.string(),n.number()]),job_id:n.string(),event_type:n.string(),event_data:n.record(n.string(),n.unknown()).nullable(),status:n.enum([`pending`,`processing`,`completed`,`failed`,`cancelled`]),queue_adapter_key:n.string(),priority:n.number().nullable(),attempts:n.number(),max_attempts:n.number(),error_message:n.string().nullable(),created_at:n.union([n.string(),n.date()]).nullable(),scheduled_for:n.union([n.string(),n.date()]).nullable(),started_at:n.union([n.string(),n.date()]).nullable(),completed_at:n.union([n.string(),n.date()]).nullable(),failed_at:n.union([n.string(),n.date()]).nullable(),next_retry_at:n.union([n.string(),n.date()]).nullable(),created_by_user_id:n.union([n.string(),n.number()]).nullable(),updated_at:n.union([n.string(),n.date()]).nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),job_id:this.dbAdapter.getDataType(`text`),event_type:this.dbAdapter.getDataType(`text`),event_data:this.dbAdapter.getDataType(`json`),status:this.dbAdapter.getDataType(`text`),queue_adapter_key:this.dbAdapter.getDataType(`text`),priority:this.dbAdapter.getDataType(`integer`),attempts:this.dbAdapter.getDataType(`integer`),max_attempts:this.dbAdapter.getDataType(`integer`),error_message:this.dbAdapter.getDataType(`text`),created_at:this.dbAdapter.getDataType(`timestamp`),scheduled_for:this.dbAdapter.getDataType(`timestamp`),started_at:this.dbAdapter.getDataType(`timestamp`),completed_at:this.dbAdapter.getDataType(`timestamp`),failed_at:this.dbAdapter.getDataType(`timestamp`),next_retry_at:this.dbAdapter.getDataType(`timestamp`),created_by_user_id:this.dbAdapter.getDataType(`integer`),updated_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig={tableKeys:{filters:{jobId:`job_id`,eventType:`event_type`,status:`status`,queueAdapterKey:`queue_adapter_key`,priority:`priority`,attempts:`attempts`,maxAttempts:`max_attempts`,errorMessage:`error_message`,createdByUserId:`created_by_user_id`,createdAt:`created_at`,scheduledFor:`scheduled_for`,startedAt:`started_at`,completedAt:`completed_at`,failedAt:`failed_at`,nextRetryAt:`next_retry_at`},sorts:{jobId:`job_id`,eventType:`event_type`,status:`status`,queueAdapterKey:`queue_adapter_key`,priority:`priority`,attempts:`attempts`,maxAttempts:`max_attempts`,createdAt:`created_at`,scheduledFor:`scheduled_for`,startedAt:`started_at`,completedAt:`completed_at`,failedAt:`failed_at`,nextRetryAt:`next_retry_at`,updatedAt:`updated_at`}},operators:{eventType:`contains`,queueAdapterKey:`contains`,errorMessage:`contains`}};async selectSingleById(e){let t=this.db.selectFrom(`lucid_queue_jobs`).select(e.select).where(`id`,`=`,e.id);t=this.applyTenantScope(t,e.tenantKey);let n=await this.executeQuery(()=>t.executeTakeFirst(),{method:`selectSingleById`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`single`,select:e.select})}async selectMultipleFilteredFixed(t){let n=await this.executeQuery(async()=>{let n=this.db.selectFrom(`lucid_queue_jobs`).select(t.select),r=this.db.selectFrom(`lucid_queue_jobs`).select(e=>e.fn.countAll().as(`count`));n=this.applyTenantScope(n,t.tenantKey),r=this.applyTenantScope(r,t.tenantKey);let{main:i,count:a}=e.main({main:n,count:r},{queryParams:t.queryParams,database:this.dbAdapter.config,meta:this.queryConfig}),[o,s]=await Promise.all([i.execute(),a?.executeTakeFirst()]);return[o,s]},{method:`selectMultipleFilteredFixed`});return n.response.error?n.response:this.validateResponse(n,{...t.validation,mode:`multiple-count`,select:t.select})}async selectJobsForProcessing(e){let t=this.db.selectFrom(`lucid_queue_jobs`).selectAll().where(t=>t.and([t(`status`,`=`,`pending`),t.or([t(`next_retry_at`,`is`,null),t(`next_retry_at`,`<=`,e.data.currentTime.toISOString())]),t.or([t(`scheduled_for`,`is`,null),t(`scheduled_for`,`<=`,e.data.currentTime.toISOString())])])).orderBy(`priority`,`desc`).orderBy(`created_at`,`asc`).limit(e.data.limit),n=await this.executeQuery(()=>t.execute(),{method:`selectJobsForProcessing`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`multiple`,selectAll:!0})}applyTenantScope(e,t){return t==null?e:e.where(e=>e.or([e.exists(e.selectFrom(`lucid_queue_job_tenants`).select(`lucid_queue_job_tenants.id`).whereRef(`lucid_queue_job_tenants.queue_job_id`,`=`,`lucid_queue_jobs.id`).where(`lucid_queue_job_tenants.tenant_key`,`=`,t)),e.not(e.exists(e.selectFrom(`lucid_queue_job_tenants`).select(`lucid_queue_job_tenants.id`).whereRef(`lucid_queue_job_tenants.queue_job_id`,`=`,`lucid_queue_jobs.id`)))]))}};export{r as default}; //# sourceMappingURL=queue-jobs.mjs.map