본문 바로가기
스프링과 JPA 기반 웹 어플리케이션 개발/4부 스터디

57. 스터디 설정 - 삭제

by Backchus 2020. 4. 28.

 

데이터를 삭제하기 전엔 고민할 것

  • 정말로 삭제할 것인가
  • 아니면 삭제 했다고 마킹을 해둘 것인가 (Soft Delete)

이 서비스에서는 스터디(+연관) 데이터를 실제로 삭제 합니다.

  • Soft Delete와 비슷한 역할을 할 수있는 스터디 종료(closed) 개념이 있기 때문에 서비스에서의 "삭제"는 정말로 데이터를 삭제 한다.

 

스터디 삭제요청을 처리할 핸들러 작성

package me.weekbelt.studyolle.study;

@RequiredArgsConstructor
@RequestMapping("/study/{path}/settings")
@Controller
public class StudySettingsController {

    // ....
    
    @PostMapping("/study/remove")
    public String removeStudy(@CurrentAccount Account account, @PathVariable String path,
                              Model model) {
        Study study = studyService.getStudyToUpdateStatus(account, path);
        studyService.remove(study);
        return "redirect:/";
    }
}

 

스터디 삭제 처리를 위한 remove 메소드 작성

package me.weekbelt.studyolle.study;

@RequiredArgsConstructor
@Transactional
@Service
public class StudyService {

    // .......

    public void remove(Study study) {
        if (study.isRemovable()){
            studyRepository.delete(study);
        } else {
            throw new IllegalArgumentException("스터디를 삭제할 수 없습니다.");
        }
    }
}

 

Study 엔티티에 스터디를 삭제할수 있는지 여부를 묻는 isRemovable메소드 작성

package me.weekbelt.studyolle.domain;

// ......

public class Study {

    // ..........

    public boolean isRemovable() {
        return !this.published; // TODO: 모임을 했던 스터디는 삭제할 수 없다.
    }
}

 

참고: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-JPA-%EC%9B%B9%EC%95%B1#

 

스프링과 JPA 기반 웹 애플리케이션 개발 - 인프런

이 강좌에서 여러분은 실제로 운영 중인 서비스를 스프링, JPA 그리고 타임리프를 비롯한 여러 자바 기반의 여러 오픈 소스 기술을 사용하여 웹 애플리케이션을 개발하는 과정을 학습할 수 있습니다. 이 강좌를 충분히 학습한다면 여러분 만의 웹 서비스를 만들거나 취직에 도움이 될만한 포트폴리오를 만들 수 있을 겁니다. 중급이상 웹 개발 프레임워크 및 라이브러리 Java Spring Spring Boot Spring Data JPA Thymeleaf 온라인 강의

www.inflearn.com