220920~0921_광고 관리 플랫폼 대행사 센터 제작 24_캠페인, 소재 활성화 상태 수정 기능 추가

창고·2022년 9월 21일
0

해당 게시글은 개인 프로젝트인 "광고 관리 플랫폼 대행사 센터 제작"
#69 "캠페인, 소재 활성화 상태 수정 기능 추가" 이슈를 다루고 있습니다.

1. 진행 사항

(1) 요약

  • 캠페인, 소재 활성화 상태 수정 기능 구현
    • 캠페인
    • 소재
  • 리팩토링
    • 캠페인, 소재 도메인
    • 캠페인, 소재 Dto, Response
  • 페이지 기능 추가
    • 버튼 형식

(2) 세부

  • 기존의 캠페인 / 소재의 활성화 상태는 'Status' 타입으로 관리하고 있었으나 다음과 같은 이유로 boolean 타입으로 변경하였음
    • 기능 구현 단계에서 오류가 발생하였음. 설계 미스로 statusDescription이 변경/호출되지 않았음
    • ON, OFF 2가지 상태값만 존재하기 때문에 상태 코드를 변경해가면서 관리하는 것보다는 boolean true, false로 구분하는 것이 좋다고 판단되었음
  • ON, OFF 상태에 맞게 UPDATE Query를 다르게 적용하도록 구현하였음
    • 초기 구현 시 if문을 잘못 작성하였는지 exception 처리 때문에 ON -> OFF가 200 호출이 됨에도 DB 반영이 되지 않았었음.
    public void toggleCampaignActivate(Long campaignId, String clientId) {

        Campaign campaign = campaignRepository.getReferenceById(campaignId);

        if (campaign.isActivated()) {
            campaignRepository.setCampaignDisabled(campaignId);
        }
        if (!campaign.isActivated()) {
            campaignRepository.setCampaignActivated(campaignId);
        }
    }
    @Modifying(clearAutomatically = true)
    @Query("UPDATE Campaign c SET c.activated = false where c.id = :id")
    void setCampaignDisabled(@Param("id") Long id);

    @Modifying(clearAutomatically = true)
    @Query("UPDATE Campaign c SET c.activated = true where c.id = :id")
    void setCampaignActivated(@Param("id") Long id);
  • ON / OFF 버튼 부분을 form으로 변경하여 클릭 시 POST 요청을 할 수 있도록 변경
  • Thymeleaf 로직 변경
    • 기존 : Status의 statusDescription을 호출하여 버튼 텍스트를 바꾸고 있었음
    • 변경 : boolean activated true / false 값에 따라 버튼 텍스트를 변경

2. 결과

  • 캠페인 새로 생성하였음. 이 때 캠페인은 초기 생성 시 OFF 상태로 생성됨
  • 새로 생성한 캠페인을 ON으로 변경
  • ON -> OFF 기능도 정상 작동

3. 개선이 필요한 점

  • 3가지 이상의 상태를 가진 객체에 대해 수정을 진행해야 할 경우엔 Status 타입으로 관리를 해야할 텐데 똑같은 이슈가 발생할지 확인이 필요
profile
공부했던 내용들을 모아둔 창고입니다.

0개의 댓글