TIL

# 211122 TIL ([Ruby, slim] DB에서 특정 데이터 받아와 화면에 보여주기)

장기현장실습

PLSnote 이슈

#2644 그룹에 탈퇴신청을 하고 일정기간이 지나면 탈퇴가 되는 기능 이슈 진행중 

  • 탈퇴신청일을 실제 데이터를 받아와서 보여주기 
    • Group_user의 job_id  생성된 날짜를 받아오려 했으니까 접근할  없다는 오류가 생겨 group_user의 updated_at을 가져와 나타냈다. Format: :short로 설정하면 날짜만 가져올  있다. 그리고 탈퇴신청일은 job이 있을때만 나타내야하기 때문에 조건을 주었다.
      - if group.group_users.find_by(user_id: user.id).job_id.present? 
        .col-auto 
          .badge.badge-light.mt-3 
            = "#{t('group_manager.users.index.application_date_for_withdrawal')} #{l group.group_users.find_by(user_id: user.id).updated_at, format: :short}"
      • 사용자가 탈퇴신청을 해서 제거 대기중인 것과 그룹 관리자가 그룹에서 제거를 눌러 제거 대기중인 것 2가지 경우가 있다. 사용자가 탈퇴신청을 해서 대기중인 것은 job이 60일 뒤에 실행되는 부분이 대기중이기 때문에 '즉시제거' 같은 버튼을 추가해주어야한다. 반면 그룹관리자에 의해 대기중인 상태는 job이 실행중이며 처리 시간이 걸리기 때문에 잠시 대기중이라는 의미다. 따라서  부분을 어떻게 구현할지 논의가 필요하다. 
      • 탈퇴 신청일과 즉시제거 버튼은 사용자가 탈퇴 신청한 경우에만 보여주기로 결정했다. 
  • 기존에 새로 만든 job은 그룹에서 제거시 생성되는 job과 같은 역할을 하고 실행되는 시기?만 다르기 때문에 코드를 수정해주었다.
    • 그룹에서 제거  생성되는 job인 DestroyGroupUserJob을 넣어 60일 뒤에 실행되도록 하는 job이다. 이는 사용자가 탈퇴신청을 하면 생성된다.
      class ApplicationWithdrawalJob < ApplicationJob 
      	queue_as :default
      
        def perform(user, group) 
        	DestroyGroupUserJob.set(wait: 60.day).perform_later(user, group) 
        end 
      end
    • 사용자가 탈퇴신청을 할 때 실행되는 컨트롤러도 수정했다.
      def withdraw 
        @group = Group.find_by(id: params[:group_id]) 
        job = ApplicationWithdrawalJob.perform_later(current_user, @group) 
        if job 
          @group_user = current_user.group_users.find_by(group_id: params[:group_id]) 
          @group_user.update job_id: job.provider_job_id 
          redirect_to group_apply_user_path 
        end  
      end