(jobId, jobDataOriginal)
| 476 | |
| 477 | // Save a single job and its video data to the database |
| 478 | async saveJobOnly(jobId, jobDataOriginal) { |
| 479 | const jobData = { ...jobDataOriginal }; |
| 480 | |
| 481 | // Extract video data if present (download jobs); non-download jobs may not have data |
| 482 | let videos = []; |
| 483 | if (jobData.data) { |
| 484 | videos = jobData.data.videos ? jobData.data.videos : []; |
| 485 | delete jobData.data; // Remove videos from job data before DB update |
| 486 | } |
| 487 | |
| 488 | try { |
| 489 | // Update the job in the database |
| 490 | let jobInstance = await Job.findOne({ where: { id: jobId } }); |
| 491 | if (jobInstance) { |
| 492 | await jobInstance.update(jobData); |
| 493 | } else { |
| 494 | jobInstance = await Job.create(jobData); |
| 495 | } |
| 496 | |
| 497 | // Process videos for this job only (download jobs) |
| 498 | for (let video of videos) { |
| 499 | await this.upsertVideoForJob(video, jobInstance); |
| 500 | |
| 501 | // Upsert into channelvideos |
| 502 | try { |
| 503 | await this.upsertChannelVideoFromInfo({ |
| 504 | id: video.youtubeId, |
| 505 | title: video.youTubeVideoName, |
| 506 | duration: video.duration, |
| 507 | upload_date: video.originalDate, |
| 508 | channel_id: video.channel_id, |
| 509 | media_type: video.media_type || 'video', |
| 510 | }); |
| 511 | } catch (cvErr) { |
| 512 | logger.error({ err: cvErr }, 'Error upserting channel video'); |
| 513 | } |
| 514 | } |
| 515 | } catch (error) { |
| 516 | logger.error({ err: error }, 'Error saving job'); |
| 517 | } |
| 518 | } |
| 519 | |
| 520 | async saveJobs() { |
| 521 | if (this.isSaving) { |
no test coverage detected