TIL
# 211123 TIL ([Ruby, slim] DB migration, 탈퇴 신청/취소 기능)
inthess
2021. 11. 24. 11:06
장기현장실습
PLSnote 이슈
- DO에서 이슈(개선) 확인 후, 깃랩 이슈 등록 + 엑셀 파일에 정리
- #2886 대화방 참여자가 퇴사 등의 이유로 대화방을 나가는 경우, 결재에 어떤 영향이 있나요?
- #2644 그룹에 탈퇴신청을 하고 일정기간이 지나면 탈퇴가 되는 기능 이슈 진행중
- 사용자가 탈퇴신청을 했을 때와 그룹 관리자가 탈퇴 신청을 했을 때 다른 UI(탈퇴 신청일+즉시 제거 버튼의 유무)가 나와야 하는데 이를 구분할 기준?이 없었다. 같은 job을 사용하고 같은 테이블인 group_user를 사용하고 있기 때문이다. 따라서 group_user 테이블에 새로운 컬럼을 추가하여 구분할 수 있도록 했다. 이 컬럼은 사용자가 탈퇴 신청을 했냐 하지 않았냐를 t/f 값으로 주며 기본 값은 f이다. 새로운 컬럼을 추가하는 것이기 때문에 migrate 파일을 작성하고 migration을 진행했다.
- migrate 파일에 컬럼을 추가하는 코드를 작성했다.
class AddNotUsedDayToGroupUser < ActiveRecord::Migration[6.0] def change add_column :group_users, :withdraw_from_user, :boolean, default: false end end
- docker-compose exec web bin/rails db:migrate 명령어로 migration 해주었다.
- Sequel pro 프로그램을 통해 group_user 테이블에 withdraw_from_user 컬럼과 기본 값들이 잘 들어갔는지 확인했다. false는 값으로 0이기 때문에 0값이 들어가 있고, true일 경우에는 1값이 들어가 있을 것이다.
- migrate 파일에 컬럼을 추가하는 코드를 작성했다.
- 사용자가 탈퇴 신청을 한 경우 withdraw_from_user 값을 true로 바꿔주는 코드를 추가했다. 그리고 탈퇴를 취소한 경우에는 다시 false로 바꿔서 기본 값을 유지하도록 했다. 그리고 true이면 그룹 관리자 페이지에서 해당 유저가 탈퇴 신청한 날짜와 60일 안에 즉시 제거를 할 수 있는 버튼이 보이도록 했다.
# group_controller.rb (job을 두개 만들었을 때 결국 대기하는 날짜 차이여서 하나만 사용하기로 함) def withdraw @group = Group.find_by(id: params[:group_id]) job = DestroyGroupUserJob.set(wait: 60.day).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, withdraw_from_user: true redirect_to group_apply_user_path end end def cancel_withdraw @group_user = current_user.group_users.find_by(group_id: params[:group_id]) Sidekiq::ScheduledSet.new.find_job(@group_user.job_id)&.delete @group_user.update job_id: nil, withdraw_from_user: false redirect_to group_apply_user_path end
// _user.html.slim .col-auto - if group.users.where(id: user.id).ready_to_delete.present? i.fa.fa-spinner.fa-spin.mr-1 ' #{t('group_manager.users.index.ready_to_destroy_from_group')} - if group.group_users.find_by(user_id: user.id).withdraw_from_user = link_to group_manager_group_user_path(group,user), method: :delete, data: {confirm: destroy_group_manager_message(user)}, class:"btn btn-danger" i.fa.fa-trash-alt.mr-1 ' #{t('group_manager.users.index.destroy_from_group_right_away')} - else = link_to group_manager_group_user_path(group,user), method: :delete, data: {confirm: destroy_group_manager_message(user)}, class:"btn btn-danger" i.fa.fa-trash-alt.mr-1 ' #{t('group_manager.users.index.destroy_from_group')} .row .col .badge.badge-warning.mt-1 = t('group_manager.users.index.long_term_unused') - if group.group_users.find_by(user_id: user.id).withdraw_from_user .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}"
- 그리고 즉시 제거 버튼을 클릭하면 곧 제거되는 유저이기 때문에 탈퇴 신청일과 즉시 제거 버튼이 보이지 않아도 되어 withdraw_from_user값을 false로 바꿔주었다.
# users_controllers.rb def destroy group = current_user.managed_groups.find params[:group_id] user = group.users.find params[:id] group_user = group.group_users.where(user: user) job = DestroyGroupUserJob.perform_later(user, group) if job group_user.update(job_id: job.provider_job_id, withdraw_from_user: false) redirect_to group_manager_group_users_path(group), notice: t('.destroyed_from_group_user') end end
- 사용자가 탈퇴신청을 했을 때와 그룹 관리자가 탈퇴 신청을 했을 때 다른 UI(탈퇴 신청일+즉시 제거 버튼의 유무)가 나와야 하는데 이를 구분할 기준?이 없었다. 같은 job을 사용하고 같은 테이블인 group_user를 사용하고 있기 때문이다. 따라서 group_user 테이블에 새로운 컬럼을 추가하여 구분할 수 있도록 했다. 이 컬럼은 사용자가 탈퇴 신청을 했냐 하지 않았냐를 t/f 값으로 주며 기본 값은 f이다. 새로운 컬럼을 추가하는 것이기 때문에 migrate 파일을 작성하고 migration을 진행했다.
웹 성능 최적화 학습
프론트엔드 개발자를 위한, 실전 웹 성능 최적화 part.1 (9/24)
[인프런] 실전 웹 성능 최적화 (Lighthouse, 이미지 사이즈 최적화)
구글 크롬 개발자도구에 있는 Lighthouse 패널에서 성능 분석을 해보고, 이미지 사이즈를 최적화 해보자. Lighthouse 패널을 이용해 사이트를 분석해보자. 강의에서는 Audits 툴이라고 나오는데 Lighthouse
dass-develop.tistory.com