| 1234567891011121314151617 |
- import 'dotenv/config';
- import { loadConfig } from '../src/config/env.js';
- import { createDatabasePool } from '../src/db/pool.js';
- import { ParseRestClient } from '../src/db/parse-rest.client.js';
- import { ensureListingParseSchemas } from '../src/db/parse-rest.schema.js';
- import { ListingAiService } from '../src/modules/listing-ai/listing-ai.service.js';
- import { ParseRestListingAiRepository } from '../src/modules/listing-ai/repositories/parse-rest-listing-ai.repository.js';
- import { PostgresListingAiRepository } from '../src/modules/listing-ai/repositories/postgres-listing-ai.repository.js';
- import { LISTING_RUBRIC_VERSION } from '../src/modules/listing-ai/scoring/rule-engine.js';
- async function main(){
- const config=loadConfig();const workspaceId=process.env.SAAS_DEFAULT_WORKSPACE_ID??'demashi';let close=async()=>{};let repository;
- if(config.storageDriver==='parse_rest'){const client=new ParseRestClient({serverUrl:config.parse.serverUrl,appId:config.parse.appId,masterKey:config.parse.masterKey,timeoutMs:config.parse.timeoutMs});await ensureListingParseSchemas(client);repository=new ParseRestListingAiRepository(client);}else{const pool=createDatabasePool(config);repository=new PostgresListingAiRepository(pool);close=async()=>pool.end();}
- const service=new ListingAiService(repository,undefined,()=>new Date(),5);const key=process.env.LISTING_SCORE_IDEMPOTENCY_KEY??`${LISTING_RUBRIC_VERSION}-${new Date().toISOString().slice(0,10)}`;
- try{const job=await service.enqueueScoreJob({workspaceId,platform:'jd',scope:{mode:'filter',filter:{}},rubricVersion:LISTING_RUBRIC_VERSION,includeAiSuggestions:false,idempotencyKey:key,requestedBy:'listing-score-script'});await service.processJob(workspaceId,job.id);let completed=await repository.getJob(workspaceId,job.id);while(completed&&['queued','running'].includes(completed.status)){await new Promise((resolve)=>setTimeout(resolve,1_000));completed=await repository.getJob(workspaceId,job.id);}console.log(JSON.stringify({mode:'completed',job:completed},null,2));if(!completed||!['completed','partial'].includes(completed.status))process.exitCode=2;}finally{await close();}
- }
- main().catch((error)=>{console.error(`[score-listings] ${error instanceof Error?error.message:error}`);process.exitCode=1;});
|