Files
backend/src/main/java/com/bivashy/backend/composer/service/TrackSourceService.java
2026-01-05 00:40:35 +05:00

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);
}
}