✅ 스터디 설정 - 상태 변경

Yuri Lee·2020년 11월 20일
0

스터디가 처음 만들어지면 드래프트 상태이다. 이것을 변경할 수 있는기능을 해보자!

StudyService.java

    public void close(Study study) {
        study.close();
    }

클래스를 컨트롤러에서 바로 호출 안하고 왜 서비스 계층에서 감싸서 호출할까? -> 꼭 알아야 함! 😎😎 도메인만 컨트롤러에서 호출해서는 안된다. 객체 상태를 변경하는 것이기 때문에 트랜잭션 안에서 하고, 트랜잭션이 끝날 때 커밋되도록 해서 DB에 반영시켜야 한다.

Study.java

    public void publish() {
        if (!this.closed && !this.published) {
            this.published = true;
            this.publishedDateTime = LocalDateTime.now();
        } else {
            throw new RuntimeException("스터디를 공개할 수 없는 상태입니다. 스터디를 이미 공개했거나 종료했습니다.");
        }
    }

published 를 할 수 있는 상황이 아닌데 publish 를 하라고 하면 예외를 던진다.
-> 왜?! 우리는 스터디 상태에 맞춰서 적절하게 뷰를 변경했다. 하지만 악의적인 사용자가 post 요청을 보낼 수도 있다. 이건 요청이 잘못한 것!

⭐getStudyToUpdateStatus⭐
스터디의 상태를 변경할 때 가져와야 할 데이터가 정말 여러분이 필요한 만큼 기져온 것인가.. 고민해봐야 한다. 매니저만 가져오면 잘한 것~

StudyRepository.java

    @EntityGraph(value = "Study.withManagers", type = EntityGraph.EntityGraphType.FETCH)
    Study findStudyWithManagersByPath(String path);

필요한 데이터인 매니저만 가져오도록 엔티티 그래프를 설정했다.

Study.java

@NamedEntityGraph(name = "Study.withZonesAndManagers", attributeNodes = {
        @NamedAttributeNode("zones"),
        @NamedAttributeNode("managers")})

그리고 Study.java에다가 @NamedEntityGraph 그래프를 설정했다. (managers만 가져오도록)

스터디 공개 및 종료

  • 드래프트 상태에서 공개 상태로 전환 가능.
  • 공개 상태에서 종료 상태로 전환 가능.
  • 종료 상태에서는 상태 변경 불가.

스터디 공개 상태

  • 팀원 모집 시작 및 중단 가능
  • 다른 사용자에게 스터디 정보가 공개 됩니다. (조회 가능, ‘첫페이지’ 및 ‘검색’에서 다룰
    예정)
  • 해당 스터디의 주제와 지역에 대응하는 사용자에게 알림을 전달 한다. (나중에 ‘알림’
    파트에서 다룰 예정)
  • 모임을 만들 수 있다. (나중에 ‘모임 관리’에서 다룰 예정)

스터디 종료 상태

  • 조회만 가능.
  • 모임을 만들거나, 팀원을 모집할 수 없다.

화면


출처 : 인프런 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발

profile
Step by step goes a long way ✨

0개의 댓글