{"version":3,"file":"ai-localization-jobs.mjs","sources":["../../../server/src/services/ai-localization-jobs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { AI_LOCALIZATION_JOB_UID } from '../models/ai-localization-job';\nimport type { AILocalizationJobs } from '../../../shared/contracts/ai-localization-jobs';\n\nexport const createAILocalizationJobsService = ({ strapi }: { strapi: Core.Strapi }) => ({\n  /**\n   * Create a new AI localizations job or update an existing one for a document\n   * Ensures only one job exists per document\n   */\n  async upsertJobForDocument({\n    documentId,\n    contentType,\n    sourceLocale,\n    targetLocales,\n    status = 'processing',\n  }: {\n    documentId: string;\n    contentType: string;\n    sourceLocale: string;\n    targetLocales: string[];\n    status?: AILocalizationJobs['status'];\n  }) {\n    // Check if job already exists for this document\n    const existingJob = await this.getJobByDocument(contentType, documentId);\n\n    if (existingJob) {\n      strapi.log.info(\n        `[AI Localizations Job] Updated existing job for document ${documentId} with status: ${status}`\n      );\n      // Update existing job with new data and status\n      return strapi.db.query(AI_LOCALIZATION_JOB_UID).update({\n        where: { id: existingJob.id },\n        data: {\n          contentType,\n          sourceLocale,\n          targetLocales,\n          status,\n          updatedAt: new Date(),\n        },\n      });\n    }\n\n    strapi.log.info(\n      `[AI Localizations Job] Created new job for document ${documentId} with status: ${status}`\n    );\n    // Create new AI localizations job\n    return strapi.db.query(AI_LOCALIZATION_JOB_UID).create({\n      data: {\n        contentType,\n        relatedDocumentId: documentId,\n        sourceLocale,\n        targetLocales,\n        status,\n        createdAt: new Date(),\n        updatedAt: new Date(),\n      },\n    });\n  },\n\n  /**\n   * Get job by document ID\n   */\n  async getJobByDocument(contentType: string, documentId: string) {\n    return strapi.db.query(AI_LOCALIZATION_JOB_UID).findOne({\n      where: {\n        relatedDocumentId: documentId,\n        contentType,\n      },\n    });\n  },\n\n  /**\n   * Get job by content type\n   */\n  async getJobByContentType(contentType: string) {\n    return strapi.db.query(AI_LOCALIZATION_JOB_UID).findOne({\n      where: {\n        contentType,\n      },\n    });\n  },\n});\n"],"names":["createAILocalizationJobsService","strapi","upsertJobForDocument","documentId","contentType","sourceLocale","targetLocales","status","existingJob","getJobByDocument","log","info","db","query","AI_LOCALIZATION_JOB_UID","update","where","id","data","updatedAt","Date","create","relatedDocumentId","createdAt","findOne","getJobByContentType"],"mappings":";;MAIaA,+BAAAA,GAAkC,CAAC,EAAEC,MAAM,EAA2B,IAAM;AACvF;;;AAGC,MACD,MAAMC,oBAAAA,CAAAA,CAAqB,EACzBC,UAAU,EACVC,WAAW,EACXC,YAAY,EACZC,aAAa,EACbC,MAAAA,GAAS,YAAY,EAOtB,EAAA;;AAEC,YAAA,MAAMC,cAAc,MAAM,IAAI,CAACC,gBAAgB,CAACL,WAAAA,EAAaD,UAAAA,CAAAA;AAE7D,YAAA,IAAIK,WAAAA,EAAa;gBACfP,MAAAA,CAAOS,GAAG,CAACC,IAAI,CACb,CAAC,yDAAyD,EAAER,UAAAA,CAAW,cAAc,EAAEI,MAAAA,CAAAA,CAAQ,CAAA;;AAGjG,gBAAA,OAAON,OAAOW,EAAE,CAACC,KAAK,CAACC,uBAAAA,CAAAA,CAAyBC,MAAM,CAAC;oBACrDC,KAAAA,EAAO;AAAEC,wBAAAA,EAAAA,EAAIT,YAAYS;AAAG,qBAAA;oBAC5BC,IAAAA,EAAM;AACJd,wBAAAA,WAAAA;AACAC,wBAAAA,YAAAA;AACAC,wBAAAA,aAAAA;AACAC,wBAAAA,MAAAA;AACAY,wBAAAA,SAAAA,EAAW,IAAIC,IAAAA;AACjB;AACF,iBAAA,CAAA;AACF,YAAA;YAEAnB,MAAAA,CAAOS,GAAG,CAACC,IAAI,CACb,CAAC,oDAAoD,EAAER,UAAAA,CAAW,cAAc,EAAEI,MAAAA,CAAAA,CAAQ,CAAA;;AAG5F,YAAA,OAAON,OAAOW,EAAE,CAACC,KAAK,CAACC,uBAAAA,CAAAA,CAAyBO,MAAM,CAAC;gBACrDH,IAAAA,EAAM;AACJd,oBAAAA,WAAAA;oBACAkB,iBAAAA,EAAmBnB,UAAAA;AACnBE,oBAAAA,YAAAA;AACAC,oBAAAA,aAAAA;AACAC,oBAAAA,MAAAA;AACAgB,oBAAAA,SAAAA,EAAW,IAAIH,IAAAA,EAAAA;AACfD,oBAAAA,SAAAA,EAAW,IAAIC,IAAAA;AACjB;AACF,aAAA,CAAA;AACF,QAAA,CAAA;AAEA;;AAEC,MACD,MAAMX,gBAAAA,CAAAA,CAAiBL,WAAmB,EAAED,UAAkB,EAAA;AAC5D,YAAA,OAAOF,OAAOW,EAAE,CAACC,KAAK,CAACC,uBAAAA,CAAAA,CAAyBU,OAAO,CAAC;gBACtDR,KAAAA,EAAO;oBACLM,iBAAAA,EAAmBnB,UAAAA;AACnBC,oBAAAA;AACF;AACF,aAAA,CAAA;AACF,QAAA,CAAA;AAEA;;MAGA,MAAMqB,qBAAoBrB,WAAmB,EAAA;AAC3C,YAAA,OAAOH,OAAOW,EAAE,CAACC,KAAK,CAACC,uBAAAA,CAAAA,CAAyBU,OAAO,CAAC;gBACtDR,KAAAA,EAAO;AACLZ,oBAAAA;AACF;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;;;;"}