220916~0918_광고 관리 플랫폼 대행사 센터 제작 21_삭제 기능 수정

창고·2022년 9월 18일
0

해당 게시글은 개인 프로젝트인 "광고 관리 플랫폼 대행사 센터 제작"
#60 "삭제 기능 수정" 이슈를 다루고 있습니다.

1. 진행 사항

(1) 요약

  • 리팩토링
    • 에이전트
    • 에이전트 그룹 - 삭제 조건 변경 ('삭제됨' 상태가 아닌 에이전트가 남아 있으면 안됨)
    • 캠페인
    • 소재
  • Mock Data 수정
  • 페이지 수정
    • 에이전트 미노출 처리
    • 캠페인 미노출 처리 및 '삭제된 캠페인 수' 표시
    • 소재 미노출 처리 및 '삭제된 소재 수' 표시
    • '삭제됨' 상태이므로 삭제된 에이전트, 캠페인, 소재를 URI로 접근 시 표시가 되는지 확인
  • 기능 추가 - 삭제된 에이전트 / 그룹 / 캠페인 / 소재 접근 시 Exception 처리
    • 에이전트
    • 캠페인
    • 소재

(2) 세부

  • '삭제됨' 상태를 각 도메인에 추가하고 해당 상태가 true일 경우 노출하지 않도록 변경
  • 각 Repository의 deleteBy~ 를 사용하지 않고 쿼리 메소드를 작성하여 '삭제됨' 상태로 변경 (UPDATE)
    @Modifying
   	@Transactional
   	@Query("UPDATE Agent a SET a.deleted = true where a.userId = :agentId and a.agency.agencyId = :agencyId")
    void setAgentDeletedTrue(@Param("agentId") String agentId,
   							 @Param("agencyId") String agencyId);
  • 단, 비즈니스 로직 상에서 크게 중요하지 않은 에이전트 그룹의 경우 기존 deleteBy~를 사용, 실제 삭제 처리를 진행하는 것을 유지하였음
  • 에이전트 그룹의 경우 소속된 에이전트가 없어야 (=아예 소속되어 있지 않거나, 전부 삭제된 경우) 삭제가 가능한데 에이전트가 '삭제됨' 처리 된 것을 반영하기 위해 조건 수정하였음
  • 에이전트 관리 페이지의 기능을 담당하는 AgentService에서는 문제가 없었으나, 광고 관리 > 캠페인 페이지와 광고 관리 > 캠페인 > 소재 페이지의 경우, 해당 페이지의 Service가 아닌 상위 Service에서 상위 객체-페이지의 객체 매핑 정보를 DTO 및 Response로 뿌리기 때문에 해당 객체의 서비스에서 삭제를 하더라도 미노출 처리가 되지 않아 DTO에서 '삭제됨' 상태를 필터링 할 수 있도록 수정
    public static CampaignWithCreativesDto from(Campaign entity) {
        return new CampaignWithCreativesDto(
                ClientUserDto.from(entity.getClientUser()),
                entity.getId(),
                entity.getName(),
                entity.getBudget(),
                entity.getCreatedAt(),
                entity.getCreatedBy(),
                entity.getModifiedAt(),
                entity.getModifiedBy(),
                entity.getCreatives().stream()
                        .filter(c -> !c.isDeleted())
                        .map(CreativeDto::from)
                        .collect(Collectors.toCollection(LinkedHashSet::new)),
				entity.getStatus()
        );

2. 개선이 필요한 점

  • 기획 초기에는 해당 이슈에서 '삭제된 캠페인 / 소재 수' 를 페이지에 표시하려고 하였으나 어차피 통계 기능 구현 시 통계 테이블에 '삭제된 캠페인 / 소재 실적' row를 추가해야 하므로 그 때 구현하기로 하였음
profile
공부했던 내용들을 모아둔 창고입니다.

0개의 댓글