refactor(media): consolidate upload/edit/download into MediaService

Merge UploadService, EditService, JobOrchestrationService, and
DownloadService into a single MediaService with a unified Job lifecycle
(READY → PROCESSING → SUCCEEDED/FAILED via JobState enum).

- Add MediaController (/api/v1/media) exposing compress, save, and clip
- Add JobController (/api/v1/job) for status polling and file download
- Move clip/thumbnail download into ClipController (/{id}/media, /{id}/thumbnail)
- Move stream saveSection/clip from StreamService into MediaService
- Simplify Job DTO: remove dual ClipOptions/files, add ProgressTracker and download file
- Refactor JobRegistryService.add() → generateJob() to co-locate creation and registration
- Wire FFmpeg out_time_ms progress parsing into StreamActionsService via CommandRunner
- Rename GET /api/v1/auth/user → GET /api/v1/user/me
- Delete DownloadController, MetadataController, UploadController
This commit is contained in:
2026-06-22 20:54:16 +01:00
parent b732c76aef
commit da6bf16d07
25 changed files with 511 additions and 765 deletions

View File

@@ -1,28 +1,21 @@
package com.ddf.vodsystem.dto;
import java.io.File;
import lombok.Data;
import java.io.File;
import java.time.Instant;
@Data
public class Job {
private String uuid;
private File inputFile;
private File outputFile;
private ProgressTracker progressTracker = new ProgressTracker();
private JobState state = JobState.READY;
private String errorOutput;
// configs
private ClipOptions inputClipOptions;
private ClipOptions outputClipOptions = new ClipOptions();
private File download;
private Instant createdAt = Instant.now();
// job status
private JobStatus status = new JobStatus();
public Job(String uuid,
File inputFile,
File outputFile,
ClipOptions inputClipOptions) {
public Job(String uuid) {
this.uuid = uuid;
this.inputFile = inputFile;
this.outputFile = outputFile;
this.inputClipOptions = inputClipOptions;
}
}

View File

@@ -0,0 +1,8 @@
package com.ddf.vodsystem.dto;
public enum JobState {
READY,
PROCESSING,
SUCCEEDED,
FAILED
}