Skip to main content

Command Palette

Search for a command to run...

[Sproutist 고민의 흔적] 작가 신청 다중 데이터 문제

Published
2 min read
[Sproutist 고민의 흔적] 작가 신청 다중 데이터 문제

🤔상황

회원이 자신의 아이디로 작가 신청 현황 조회를 할 때 STATE 값이 다중으로 넘어오는 문제
  • 작가 신청 현황 조회 기능 정의

    • 회원은 작가 신청을 한 뒤에 회원가입 시 입력했던 아이디와 이름으로 승인 현황을 조회할 수 있다.

    • 아이디를 입력한 후 [조회] 버튼을 클릭한다.

    • 해당 아이디가 신청 목록에 없다면 "해당 아이디는 신청 목록에 존재하지 않습니다. " 알림 창 .

    • 해당 아이디가 신청 목록에 있다면 "해당 아이디는 현재 ( 대기, 승인, 거절 ) 상태입니다." 알림 창.

  • 프로세스

    • 작가 신청 상태를 확인하여 승인인 경우 다시 버튼을 눌러 신청할 수 없다.
     $.ajax({
                    type: 'POST',
                    url: '/user/rqcheck',
                    data: { mid: midval },
                   // contentType : 'application/json',
                    dataType: 'text',
                    success: function(result) {
                        console.log(result);

                        if (result == null || result =='' || result == '거절') {
                            // 신청상태가 아니거나 또는 거절이거나
                            artFrm.attr('action','/user/request');
                            artFrm.submit();


                        }else {
                            Swal.fire(
                                    '이미 신청상태 입니다!',
                                    '',
                                    'info'
                                      )
                           return;
                        }
                    },
                    error: function(xhr, status, er) {
                        // 오류 처리
                        console.error(er);
                    }
                });
  • REQUEST 테이블

작가 신청 상태가 아니거나 또는 거절일 경우 여러 번 신청이 가능하다. → REQUEST 테이블에 하나의 아이디로 다중 레코드가 존재할 수 있다.

🫢원인

  • 기획 당시 작가 신청이 거절된다면 REQUEST 테이블에서 삭제하도록 설정.

    • 하지만 그렇게 되면 관리자가 승인/거절 신청 현황을 관리할 수 없다.
  • 그래서 거절 상태를 추가했더니 거절당한 회원이 여러 번 신청할 경우 아이디로 STATE 값을 가져올 때 여러 개의 STATE 값을 가져온다.

다중 값을 가져오는 것을 생각하지 못하고 정보를 받음.

😊해결

  • UserMapper.xml

    • 아이디(mid) 값으로 조회한 후 가져오는 값들을 신청 날짜를 기준으로 내림차순 정렬(최신순)
    <select id="artSearch" resultMap="requestMap">

             SELECT state 
              FROM REQUEST
           WHERE mid = #{mid}
           ORDER BY request_date DESC

          </select>
    public List<RequestVO> artSearch(String mid); // 작가 신청 정보 조회 select
  • UserController.java

      @PostMapping(value ="rqcheck" , produces = "application/text; charset=utf8") 
           @ResponseBody
           @PreAuthorize("hasAnyRole('ROLE_ARTIST','ROLE_ADMIN','ROLE_USER')")
           public  String rqcheck  (String mid) {
    
                log.info("rqcheck....");
    
               // 신청이 거절일때 또 신청하면 아이디가 겹친다.
               // 그럼 아이디에 대한 상태가 2개이상 넘어올 수 있다.
               // 그래서 신청날짜를 기준으로 최신순 정렬한뒤 첫번째 값만 가져오기
    
               List<RequestVO> results = us.artSearch(mid);
    
               String state = "";
    
               if (results != null && !results.isEmpty()) {
                   RequestVO first = results.get(0);
                    state = first.getState();
    
                    System.out.println(state);
               }
    
               return state;
           }
    

More from this blog

[혼공후기] 재밌으면서도 알찼던 6주! 14기 활동 회고

매번 혼공 학습단을 신청해 봐야겠다고 했지만 기간 놓쳐버리기…또는 너무 바쁜 나머지 완주 못할 것 같아서 포기하다가 때마침 공부가 필요한 시기에 시간이 나서 신청하게 되었다. 공부할 새 책도 배송이 오고 완주할 생각에 기대감 상승. (+중간에 간식 먹을 생각) 참고할 수 있는 강의 영상이 있기 때문에 영상강의 보면서 책 필기 및 정리 이해한 내용을 바탕으로 블로그 정리 이런 방식으로 공부를 했다. 사실 하루에 조금씩 공부했으면 적당한 ...

Aug 23, 20252 min read

[혼공컴운] 6주차_책 한 권을 끝내다니(Ch 14~ 15)

14-1) 연속 메모리 할당 연속 메모리 할당 : 프로세스에 연속적인 메모리 공간을 할당하는 방식 스와핑 : 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식 스왑 영역 : 프로세스들이 쫓겨나는 보조기억장치의 일부 영역 스왑 아웃 : 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것 스왑 인 : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것 → 스와핑을 이용하면 프로세스들이 요구하는 메모...

Aug 16, 20259 min read
[혼공컴운] 6주차_책 한 권을 끝내다니(Ch 14~ 15)

[혼공컴운] 5주차_끝이 보인다(Ch 12 ~ 13)

12-1) 동기화란 동시다발적으로 실행되는 많은 프로세스는 서로 데이터를 주고받으며 협력하며 실행된다. ⇒ 협력하여 실행되는 프로세스들은 실행 순서와 자원의 일관성을 보장해야 하기에 반드시 동기화가 필수 프로세스 동기화 : 프로세스들 사이의 수행 시기를 맞추는 것 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기 공유가 불가능한 자원의 동시 사용을 피하...

Aug 9, 20255 min read
[혼공컴운] 5주차_끝이 보인다(Ch 12 ~ 13)

[혼공컴운] 4주차_운영체제 시작(Ch 09 ~ 11)

09-1) 운영체제를 알아야 하는 이유 운영체제 : 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램 (시스템) 자원 : 프로그램 실행에 마땅히 필요한 요소 컴퓨터가 부팅될 때 메모리 내 커널 영역에 적재 사용자 영역 : 사용자가 이용하는 응용 프로그램이 적재되는 영역 ⇒ 메모리 공간에 주소가 겹치지 않게 프로그램 적재해 준 건? 운영체제 실행할 프로그램 메모리에 적재 실행되지 않...

Jul 26, 20257 min read
[혼공컴운] 4주차_운영체제 시작(Ch 09 ~ 11)

[혼공컴운] 3주차_컴퓨터 구조 끝(Ch 06 ~ 08)

06-1) RAM의 특징과 종류 RAM 휘발성 저장 장치 실행할 대상 저장 보조기억장치 비휘발성 저장 장치 보관할 대상 저장 CPU는 보조기억장치에 직접 접근하지 못하고 RAM으로 복사하여 저장한 뒤 실행. RAM 용량이 적으면 보조기억장치에서 실행할 프로그램을 가져오는 일이 잦아 실행 시간이 길어지기 때문에 RAM용량이 충분히 크면 많은 데이터를 가져와 미리 RAM에 저장하여 프로그램들을 동시에 빠르게 실행하는데 유리하다...

Jul 19, 20258 min read
[혼공컴운] 3주차_컴퓨터 구조 끝(Ch 06 ~ 08)
W

WOW's dev archive

42 posts

언젠가 나에게 힘이 될 차곡차곡 쌓은 기록🥰