From 5b099cc7a88279ff50576b56490bb594f78ed868 Mon Sep 17 00:00:00 2001 From: LivingLikeKrillin <143606756+LivingLikeKrillin@users.noreply.github.com> Date: Mon, 30 Mar 2026 00:24:07 +0900 Subject: [PATCH] fix: prevent DJ enqueue from resetting active playback state enqueueDj() unconditionally called activate(null, null), overwriting currentPlaybackId when a second DJ registered during active playback. This caused NPE (500) on GET /dj-queue and any playbackId-dependent query. - Move activate(null, null) inside isPostActivationProcessingRequired guard - Add null check on currentPlaybackId in getDjQueueInfo for transient state Co-Authored-By: Claude Opus 4.6 (1M context) --- .../api/party/application/service/DjCommandService.java | 8 +++++--- .../party/application/service/PartyroomQueryService.java | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/pfplaybackend/api/party/application/service/DjCommandService.java b/app/src/main/java/com/pfplaybackend/api/party/application/service/DjCommandService.java index 7f585c1c..fa2aa39a 100644 --- a/app/src/main/java/com/pfplaybackend/api/party/application/service/DjCommandService.java +++ b/app/src/main/java/com/pfplaybackend/api/party/application/service/DjCommandService.java @@ -61,12 +61,14 @@ public Long enqueueDj(PartyroomId partyroomId, PlaylistId playlistId) { DjData dj = DjData.create(partyroom.getPartyroomId(), playlistId, crewId, nextOrder); DjData saved = aggregatePort.saveDj(dj); - playbackState.activate(null, null); - aggregatePort.savePlaybackState(playbackState); + if (isPostActivationProcessingRequired) { + playbackState.activate(null, null); + aggregatePort.savePlaybackState(playbackState); + } eventPublisher.publishEvent(new DjQueueChangedEvent(partyroom.getPartyroomId(), DjChangeType.ENQUEUE, crewId)); - if(isPostActivationProcessingRequired) { + if (isPostActivationProcessingRequired) { playbackControlPort.startPlayback(partyroom); } return saved.getId(); diff --git a/app/src/main/java/com/pfplaybackend/api/party/application/service/PartyroomQueryService.java b/app/src/main/java/com/pfplaybackend/api/party/application/service/PartyroomQueryService.java index d5248eb0..e0475d16 100644 --- a/app/src/main/java/com/pfplaybackend/api/party/application/service/PartyroomQueryService.java +++ b/app/src/main/java/com/pfplaybackend/api/party/application/service/PartyroomQueryService.java @@ -166,7 +166,7 @@ public DjQueueInfoResult getDjQueueInfo(PartyroomId partyroomId) { QueueStatus queueStatus = djQueue.isClosed() ? QueueStatus.CLOSE : QueueStatus.OPEN; boolean isRegistered = isAlreadyRegistered(partyroom.getPartyroomId()); PlaybackData playback = null; - if (isPlaybackActivated) { + if (isPlaybackActivated && playbackState.getCurrentPlaybackId() != null) { playback = playbackQueryService.getPlaybackById(playbackState.getCurrentPlaybackId()); } List djWithProfiles = getDjs(partyroom.getPartyroomId());