Skip to content

Commit

Permalink
feat: 패널 삭제 (#31)
Browse files Browse the repository at this point in the history
  • Loading branch information
soomanbaek committed Aug 13, 2023
1 parent a192560 commit bf9c6ff
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 6 deletions.
13 changes: 9 additions & 4 deletions src/main/java/blacktokkies/toquiz/domain/panel/api/PanelApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,14 @@
import blacktokkies.toquiz.domain.panel.dto.request.CreatePanelRequest;
import blacktokkies.toquiz.domain.panel.dto.response.GetMyPanelsResponse;
import blacktokkies.toquiz.domain.panel.dto.response.PanelResponse;
import blacktokkies.toquiz.global.common.response.SuccessMessage;
import blacktokkies.toquiz.global.common.response.SuccessResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import java.util.List;

Expand All @@ -39,4 +37,11 @@ public ResponseEntity<SuccessResponse<GetMyPanelsResponse>> getMyPanels(

return ResponseEntity.ok(new SuccessResponse<>(response));
}

@DeleteMapping("api/panels/{panelId}")
public ResponseEntity<SuccessMessage> deletePanel(@PathVariable("panelId") Long panelId){
panelService.deletePanel(panelId);

return ResponseEntity.ok(SuccessMessage.PANEL_DELETE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,18 @@
import blacktokkies.toquiz.domain.panel.domain.Panel;
import blacktokkies.toquiz.domain.panel.dto.request.CreatePanelRequest;
import blacktokkies.toquiz.domain.panel.dto.response.PanelResponse;
import blacktokkies.toquiz.global.common.error.RestApiException;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Objects;

import static blacktokkies.toquiz.domain.panel.exception.PanelErrorCode.NOT_AUTHORIZED_DELETE;
import static blacktokkies.toquiz.domain.panel.exception.PanelErrorCode.NOT_EXIST_PANEL;

@Service
@RequiredArgsConstructor
Expand All @@ -21,16 +26,41 @@ public class PanelService {

@Transactional
public PanelResponse create(CreatePanelRequest createPanelRequest) {
Member member = (Member) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Member member = getMember();
Panel panel = panelRepository.save(createPanelRequest.toPanelWith(member));

return PanelResponse.toDto(panel);
}

public List<PanelResponse> getMyPanels(Pageable pageable){
Member member = (Member) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Member member = getMember();
List<Panel> panels = panelRepository.findAllByMember(member, pageable);

return panels.stream().map(PanelResponse::toDto).toList();
}

@Transactional
public void deletePanel(Long panelId) {
checkIsAuthorizedToDelete(panelId);

panelRepository.deleteById(panelId);
}

private void checkIsAuthorizedToDelete(Long panelId) {
Panel panel = getPanel(panelId);
Member member = getMember();

if(!Objects.equals(member.getId(), panel.getMember().getId())){
throw new RestApiException(NOT_AUTHORIZED_DELETE);
}
}

private Panel getPanel(Long panelId){
return panelRepository.findById(panelId)
.orElseThrow(() -> new RestApiException(NOT_EXIST_PANEL));
}

private Member getMember() {
return (Member) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
}
}

0 comments on commit bf9c6ff

Please sign in to comment.