diff --git a/internal/bossraid/service.go b/internal/bossraid/service.go index 53436f9..03d79f4 100644 --- a/internal/bossraid/service.go +++ b/internal/bossraid/service.go @@ -252,7 +252,10 @@ func (s *Service) CompleteRaid(sessionName string, rewards []PlayerReward) (*Bos } } - // Reset slot to idle so it can accept new raids + // BossRoom 삭제 후 슬롯 리셋 — 다음 파티가 즉시 슬롯 재사용 가능 + if err := s.repo.DeleteRoomBySessionName(sessionName); err != nil { + log.Printf("BossRoom 삭제 실패 (complete): %s: %v", sessionName, err) + } if err := s.repo.ResetRoomSlot(sessionName); err != nil { log.Printf("슬롯 리셋 실패 (complete): %s: %v", sessionName, err) } @@ -276,15 +279,20 @@ func (s *Service) FailRaid(sessionName string) (*BossRoom, error) { return nil, fmt.Errorf("상태 업데이트 실패: %w", err) } - // Reset slot to idle so it can accept new raids - if err := s.repo.ResetRoomSlot(sessionName); err != nil { - log.Printf("슬롯 리셋 실패 (fail): %s: %v", sessionName, err) - } - + // 응답용 room 조회 (삭제 전에 수행) room, err := s.repo.FindBySessionName(sessionName) if err != nil { return nil, fmt.Errorf("방을 찾을 수 없습니다: %w", err) } + + // BossRoom 삭제 후 슬롯 리셋 — 다음 파티가 즉시 슬롯 재사용 가능 + if err := s.repo.DeleteRoomBySessionName(sessionName); err != nil { + log.Printf("BossRoom 삭제 실패 (fail): %s: %v", sessionName, err) + } + if err := s.repo.ResetRoomSlot(sessionName); err != nil { + log.Printf("슬롯 리셋 실패 (fail): %s: %v", sessionName, err) + } + return room, nil }