커미션 신청 - (3) 신청 상태 변경 및 타임라인 쌓기

jinvicky·2023년 12월 21일
0
post-thumbnail

내가 신청을 받아서 작업을 끝냈다면 상태를 변경해야 한다.
원래는 url에 insert, update 등의 키워드 일일이 붙이고 그랬는데 요즘은 그냥 HTTP Method로 분기처리하고 있다.

수정이니까 PUT으로 간다.

1. 상태 변경하기

개발

CmsApplyController.java

  @PutMapping("/{id}")
    public Map<Integer, String> updateStatus (@PathVariable String id, String status) {
        Map<Integer, String> map = new HashMap<>();
        if (service.updateStatus(id, status) == GlobalStatus.EXECUTE_SUCCESS.getStatus()) {
            map.put(GlobalStatus.SUCCESS.getStatus(), GlobalStatus.SUCCESS.getMsg());
        } else {
            map.put(GlobalStatus.INTERNAL_SERVER_ERR.getStatus(), GlobalStatus.INTERNAL_SERVER_ERR.getMsg());
        }
        return map;
    }

내가 @Transactional을 잘 모르는데, @Test 때랑 app 실행이랑 달라서 황당함.
아래는 test 폴더의 테스트 파일임.
Test.java

@Test
    public void updateStatus () { //커미션 신청 상태 변경
        String cms_uuid = "f0a532ba-81ae-4cc5-add7-531708a4e470";
        CmsApplyDto dto2 = repository.findById(cms_uuid).get();

        dto2.setCmsType(GlobalCode.TYPE_SINGLE.getCode());
        dto2.setContent("수정 요청 드립니다.");
        dto2.setStatus(GlobalCode.CMS_REQ_EDITING.getCode());
        repository.save(dto2);

        System.out.println("dto2 = " + dto2);

    }

여기서는 @Transactional 어노테이션 추가하면 수정 안되고, repository.save(dto2) 안 하면 수정 안된다.

근데? 실제 service 단 코드는 이렇게 해도 돌아간다.
CmsApplyService.java

 @Transactional
    public int updateStatus (String id, String status) {
        try {
            CmsApplyDto dto = repository.findById(id).get();
            dto.setStatus(status);
            return GlobalStatus.EXECUTE_SUCCESS.getStatus();
        } catch (Exception e) {
            return GlobalStatus.EXECUTE_FAILED.getStatus();
        }
    }

jpa는 update 메서드가 따로 없고 save()가 그 역할을 한다.
그래서 객체의 변경이 감지되면 알아서 객체를 업데이트 치기에 가능한 것이다. (인터넷에서 더티 체크라고 하더라.)

테스트

성공~

2. 타임라인 쌓기

개발

그냥 똑같은 crud인데 커미션 신청/상태 변경시 로그 추가 메서드를 넣었다;; 너무 crud라서 테스트샷만 남기겠다.

테스트

성공~

보니까 @ManyToOne을 썼더니 로그마다 커미션 신청 정보를 객체로 들고 오네..

profile
Front-End와 Back-End 경험, 지식을 공유합니다.

0개의 댓글