Fix bugs related to importing history

This commit is contained in:
2026-01-03 19:05:58 +05:00
parent 5a68f652ed
commit 0385c3d3e3
5 changed files with 14 additions and 16 deletions

View File

@ -13,13 +13,13 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.bivashy.backend.composer.auth.CustomUserDetails;
import com.bivashy.backend.composer.dto.importing.TrackProgressDTO; import com.bivashy.backend.composer.dto.importing.TrackProgressDTO;
import com.bivashy.backend.composer.dto.track.AddLocalTrackRequest; import com.bivashy.backend.composer.dto.track.AddLocalTrackRequest;
import com.bivashy.backend.composer.dto.track.PlaylistTrackResponse; import com.bivashy.backend.composer.dto.track.PlaylistTrackResponse;
import com.bivashy.backend.composer.dto.track.TrackBulkReorderRequest; import com.bivashy.backend.composer.dto.track.TrackBulkReorderRequest;
import com.bivashy.backend.composer.dto.track.TrackResponse; import com.bivashy.backend.composer.dto.track.TrackResponse;
import com.bivashy.backend.composer.model.SourceTypes; import com.bivashy.backend.composer.model.SourceTypes;
import com.bivashy.backend.composer.model.User;
import com.bivashy.backend.composer.service.TrackService; import com.bivashy.backend.composer.service.TrackService;
import com.bivashy.backend.composer.service.importing.RedisProgressService; import com.bivashy.backend.composer.service.importing.RedisProgressService;
@ -35,7 +35,7 @@ public class TrackController {
@PostMapping(path = "/playlist/{playlistId}/track/local", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(path = "/playlist/{playlistId}/track/local", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<TrackResponse> addLocalTrack( public ResponseEntity<TrackResponse> addLocalTrack(
@AuthenticationPrincipal User user, @AuthenticationPrincipal CustomUserDetails user,
@PathVariable Long playlistId, @PathVariable Long playlistId,
@ModelAttribute AddLocalTrackRequest request) throws IOException { @ModelAttribute AddLocalTrackRequest request) throws IOException {
TrackResponse response = trackService.addLocalTrack(user, playlistId, request); TrackResponse response = trackService.addLocalTrack(user, playlistId, request);
@ -45,22 +45,22 @@ public class TrackController {
response.fileFormat(), response.fileFormat(),
SourceTypes.FILE, SourceTypes.FILE,
100, 100,
"",
null, null,
System.currentTimeMillis(),
user.getId())); user.getId()));
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }
@GetMapping("/playlist/{playlistId}/tracks") @GetMapping("/playlist/{playlistId}/tracks")
public ResponseEntity<List<PlaylistTrackResponse>> getPlaylistTracks( public ResponseEntity<List<PlaylistTrackResponse>> getPlaylistTracks(
@AuthenticationPrincipal User user, @AuthenticationPrincipal CustomUserDetails user,
@PathVariable Long playlistId) { @PathVariable Long playlistId) {
List<PlaylistTrackResponse> tracks = trackService.getPlaylistTracks(user, playlistId); List<PlaylistTrackResponse> tracks = trackService.getPlaylistTracks(user, playlistId);
return ResponseEntity.ok(tracks); return ResponseEntity.ok(tracks);
} }
@PostMapping("/playlist/{playlistId}/bulk-reorder") @PostMapping("/playlist/{playlistId}/bulk-reorder")
public void bulkReorder(@AuthenticationPrincipal User user, public void bulkReorder(@AuthenticationPrincipal CustomUserDetails user,
@RequestBody TrackBulkReorderRequest request, @RequestBody TrackBulkReorderRequest request,
@PathVariable Long playlistId) { @PathVariable Long playlistId) {
trackService.bulkReorder(user, playlistId, request); trackService.bulkReorder(user, playlistId, request);

View File

@ -67,7 +67,6 @@ public class ProgressSSEController {
try { try {
List<TrackProgressDTO> existingProgresses = redisProgressService.getPlaylistProgress(playlistId, List<TrackProgressDTO> existingProgresses = redisProgressService.getPlaylistProgress(playlistId,
userId); userId);
System.out.println(existingProgresses);
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
for (TrackProgressDTO progress : existingProgresses) { for (TrackProgressDTO progress : existingProgresses) {
@ -83,7 +82,6 @@ public class ProgressSSEController {
.doOnTerminate(() -> { .doOnTerminate(() -> {
cleanupConnection(playlistId, userId, sink, connectionKey); cleanupConnection(playlistId, userId, sink, connectionKey);
}) })
.timeout(Duration.ofHours(2))
.onErrorResume(e -> { .onErrorResume(e -> {
cleanupConnection(playlistId, userId, sink, connectionKey); cleanupConnection(playlistId, userId, sink, connectionKey);
return Flux.empty(); return Flux.empty();

View File

@ -6,7 +6,7 @@ public class ImportTrackKey {
} }
public static String trackKey(long playlistId, long trackId, long userId) { public static String trackKey(long playlistId, long trackId, long userId) {
return String.format("track:%d:%d:%s", userId, playlistId, trackId); return String.format("track:%d:%d:%d", userId, playlistId, trackId);
} }
public static String redisChannelKey(long playlistId, long userId) { public static String redisChannelKey(long playlistId, long userId) {

View File

@ -8,16 +8,15 @@ import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.server.ResponseStatusException; import org.springframework.web.server.ResponseStatusException;
import com.bivashy.backend.composer.auth.CustomUserDetails;
import com.bivashy.backend.composer.dto.track.AddLocalTrackRequest; import com.bivashy.backend.composer.dto.track.AddLocalTrackRequest;
import com.bivashy.backend.composer.dto.track.PlaylistTrackResponse; import com.bivashy.backend.composer.dto.track.PlaylistTrackResponse;
import com.bivashy.backend.composer.dto.track.TrackBulkReorderRequest; import com.bivashy.backend.composer.dto.track.TrackBulkReorderRequest;
import com.bivashy.backend.composer.dto.track.TrackReorderAfterRequest;
import com.bivashy.backend.composer.dto.track.TrackResponse; import com.bivashy.backend.composer.dto.track.TrackResponse;
import com.bivashy.backend.composer.model.SourceTypes; import com.bivashy.backend.composer.model.SourceTypes;
import com.bivashy.backend.composer.model.Track; import com.bivashy.backend.composer.model.Track;
import com.bivashy.backend.composer.model.TrackMetadata; import com.bivashy.backend.composer.model.TrackMetadata;
import com.bivashy.backend.composer.model.TrackSource; import com.bivashy.backend.composer.model.TrackSource;
import com.bivashy.backend.composer.model.User;
import com.bivashy.backend.composer.repository.TrackRepository; import com.bivashy.backend.composer.repository.TrackRepository;
import com.bivashy.backend.composer.service.MetadataParseService.Metadata; import com.bivashy.backend.composer.service.MetadataParseService.Metadata;
@ -41,7 +40,8 @@ public class TrackService {
this.metadataParseService = metadataParseService; this.metadataParseService = metadataParseService;
} }
public TrackResponse addLocalTrack(User user, Long playlistId, AddLocalTrackRequest request) throws IOException { public TrackResponse addLocalTrack(CustomUserDetails user, Long playlistId, AddLocalTrackRequest request)
throws IOException {
Optional<Metadata> metadata = metadataParseService.extractMetadata(request.source().getInputStream()); Optional<Metadata> metadata = metadataParseService.extractMetadata(request.source().getInputStream());
String ffprobeJson = metadata.map(Metadata::rawJson).orElse("{}"); String ffprobeJson = metadata.map(Metadata::rawJson).orElse("{}");
@ -76,7 +76,7 @@ public class TrackService {
fileName); fileName);
} }
public List<PlaylistTrackResponse> getPlaylistTracks(User user, Long playlistId) { public List<PlaylistTrackResponse> getPlaylistTracks(CustomUserDetails user, Long playlistId) {
return trackPlaylistService.getPlaylistTracks(playlistId).stream() return trackPlaylistService.getPlaylistTracks(playlistId).stream()
.map(pt -> { .map(pt -> {
Track track = trackRepository.findById(pt.getTrackId()) Track track = trackRepository.findById(pt.getTrackId())
@ -93,7 +93,7 @@ public class TrackService {
.toList(); .toList();
} }
public void bulkReorder(User user, Long playlistId, TrackBulkReorderRequest request) { public void bulkReorder(CustomUserDetails user, Long playlistId, TrackBulkReorderRequest request) {
trackPlaylistService.bulkReorder(playlistId, request.trackIds()); trackPlaylistService.bulkReorder(playlistId, request.trackIds());
} }

View File

@ -31,7 +31,7 @@ public class RedisProgressService {
progress.getUserId()); progress.getUserId());
String progressJson = objectMapper.writeValueAsString(progress); String progressJson = objectMapper.writeValueAsString(progress);
redisTemplate.opsForHash().put(key, progress.getTrackId(), progressJson); redisTemplate.opsForHash().put(key, Long.toString(progress.getTrackId()), progressJson);
redisTemplate.opsForValue().set(trackKey, progressJson); redisTemplate.opsForValue().set(trackKey, progressJson);
@ -57,7 +57,7 @@ public class RedisProgressService {
progressList.add(progress); progressList.add(progress);
} }
progressList.sort(Comparator.comparingLong(TrackProgressDTO::getTimestamp)); progressList.sort(Comparator.comparingLong(t -> Optional.ofNullable(t.getTimestamp()).orElse(0L)));
return progressList; return progressList;
} catch (Exception e) { } catch (Exception e) {
@ -65,7 +65,7 @@ public class RedisProgressService {
} }
} }
public TrackProgressDTO getTrackProgress(long playlistId, String trackId, long userId) { public TrackProgressDTO getTrackProgress(long playlistId, long trackId, long userId) {
try { try {
String key = ImportTrackKey.trackKey(playlistId, trackId, userId); String key = ImportTrackKey.trackKey(playlistId, trackId, userId);
String progressJson = redisTemplate.opsForValue().get(key); String progressJson = redisTemplate.opsForValue().get(key);