69 lines
2.8 KiB
Java
69 lines
2.8 KiB
Java
package com.bivashy.backend.composer.service;
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Optional;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import com.bivashy.backend.composer.model.SourceType;
|
|
import com.bivashy.backend.composer.model.TrackSource;
|
|
import com.bivashy.backend.composer.model.TrackSourceMetadata;
|
|
import com.bivashy.backend.composer.repository.TrackSourceMetadataRepository;
|
|
import com.bivashy.backend.composer.repository.TrackSourceRepository;
|
|
|
|
@Service
|
|
public class TrackSourceService {
|
|
public static final String FFPROBE_METADATA_KEY = "ffprobe";
|
|
public static final String YTDLP_METADATA_KEY = "ytdlp";
|
|
|
|
private final TrackSourceRepository trackSourceRepository;
|
|
private final TrackSourceMetadataRepository trackSourceMetadataRepository;
|
|
private final AudioBlobStorageService s3Service;
|
|
|
|
public TrackSourceService(TrackSourceRepository trackSourceRepository,
|
|
TrackSourceMetadataRepository trackSourceMetadataRepository, AudioBlobStorageService s3Service) {
|
|
this.trackSourceRepository = trackSourceRepository;
|
|
this.trackSourceMetadataRepository = trackSourceMetadataRepository;
|
|
this.s3Service = s3Service;
|
|
}
|
|
|
|
public TrackSource createLocalTrackSource(byte[] audioBytes,
|
|
String ffprobeJson,
|
|
String ytdlpMetadata,
|
|
SourceType sourceType) {
|
|
Map<String, String> metadata = new HashMap<>(Map.of(YTDLP_METADATA_KEY, ffprobeJson));
|
|
if (ytdlpMetadata != null) {
|
|
// TODO: Add tag or smth?
|
|
}
|
|
String audioPath = s3Service.store(audioBytes, metadata);
|
|
|
|
return trackSourceRepository.save(new TrackSource(audioPath, sourceType, LocalDateTime.now()));
|
|
}
|
|
|
|
public TrackSource createTrackSourceWithKey(String key, byte[] audioBytes, String ffprobeJson,
|
|
String ytdlpMetadata, SourceType sourceType) {
|
|
Map<String, String> metadata = new HashMap<>(Map.of(YTDLP_METADATA_KEY, ffprobeJson));
|
|
if (ytdlpMetadata != null) {
|
|
// TODO: Add tag or smth?
|
|
}
|
|
String audioPath = s3Service.store(key, audioBytes, metadata);
|
|
|
|
return trackSourceRepository.save(new TrackSource(audioPath, sourceType, LocalDateTime.now()));
|
|
}
|
|
|
|
public TrackSource createYoutubeTrackSource(SourceType sourceType, String youtubeUrl) {
|
|
String folderPath = s3Service.storeFolder();
|
|
TrackSource trackSource = trackSourceRepository
|
|
.save(new TrackSource(folderPath, sourceType, LocalDateTime.now()));
|
|
trackSourceMetadataRepository.save(new TrackSourceMetadata(trackSource, youtubeUrl));
|
|
return trackSource;
|
|
}
|
|
|
|
public Optional<TrackSourceMetadata> findWithMetadata(long sourceId) {
|
|
return trackSourceMetadataRepository.findBySourceIdWithSource(sourceId);
|
|
}
|
|
|
|
}
|