(job: QueueJob, workerId: number)
| 644 | } |
| 645 | |
| 646 | private async processJob(job: QueueJob, workerId: number): Promise<void> { |
| 647 | try { |
| 648 | let result: any; |
| 649 | |
| 650 | switch (job.type) { |
| 651 | case "wakatime-api": |
| 652 | if (!job.data.apiKey) { |
| 653 | throw new Error("API key is required for WakaTime import"); |
| 654 | } |
| 655 | |
| 656 | let wakatimeJob = this.getOrCreateJob( |
| 657 | job.id, |
| 658 | job.userId, |
| 659 | "wakatime-api", |
| 660 | `WakaTime API Import ${new Date().toISOString()}`, |
| 661 | ); |
| 662 | |
| 663 | result = await handleWakatimeImport( |
| 664 | job.data.apiKey, |
| 665 | job.userId, |
| 666 | wakatimeJob, |
| 667 | ); |
| 668 | break; |
| 669 | |
| 670 | case "wakatime-file": |
| 671 | if (!job.data.exportData || !job.data.jobId) { |
| 672 | throw new Error( |
| 673 | "Export data and job ID are required for WakaTime file import", |
| 674 | ); |
| 675 | } |
| 676 | |
| 677 | const existingJob = activeJobs.get(job.id); |
| 678 | if (existingJob) { |
| 679 | const daysWithData = |
| 680 | job.data.exportData.days?.filter( |
| 681 | (day) => day.heartbeats && day.heartbeats.length > 0, |
| 682 | ) || []; |
| 683 | updateJob(existingJob, { |
| 684 | status: ImportStatus.Processing, |
| 685 | current: 0, |
| 686 | total: daysWithData.length, |
| 687 | }); |
| 688 | result = await handleWakatimeFileImport( |
| 689 | job.data.exportData, |
| 690 | job.userId, |
| 691 | existingJob, |
| 692 | ); |
| 693 | } else { |
| 694 | const daysWithData = |
| 695 | job.data.exportData.days?.filter( |
| 696 | (day) => day.heartbeats && day.heartbeats.length > 0, |
| 697 | ) || []; |
| 698 | const fileJob = this.getOrCreateJob( |
| 699 | job.id, |
| 700 | job.userId, |
| 701 | "wakatime-file", |
| 702 | `WakaTime File Import ${new Date().toISOString()}`, |
| 703 | daysWithData.length, |
no test coverage detected