# 수정 내역이 user\_actions 테이블에 저장되지 않음

**URL:** <https://meta.discourse.org/t/edits-not-being-stored-in-user-actions-table/145025>\
**Category:** Development\
**Created:** [3월 21, 2020, 8:34오전 UTC](https://meta.discourse.org/t/edits-not-being-stored-in-user-actions-table/145025 "2020-03-21T08:34:20Z")\
**Posts on this page:** 1\
**Showing post:** 6

<div class="post-metadata">

**Author:** ![Nacho\_Caballero](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nacho_caballero/32/130189_2.png) [@Nacho\_Caballero](https://meta.discourse.org/u/Nacho_Caballero)\
**Post date:** [4월 11, 2020, 10:15오전 UTC](https://meta.discourse.org/t/edits-not-being-stored-in-user-actions-table/145025/6 "2020-04-11T10:15:24Z")

</div>

수정 알림이 생성되는 경우를 내가 완전히 이해하지 못했거나, 이 문제가 내가 생각했던 것보다 훨씬 광범위한 문제일 수 있다는 것을 방금 깨달았습니다.

## 주요 가정

사용자 A가 사용자 B가 작성한 내용을 수정하면 다음과 같은 일들이 발생합니다:

- `post_revisions` 테이블에 새로운 행이 추가됩니다.
- `action_type = 11`인 새로운 행이 `user_actions` 테이블에 추가됩니다.
- `/u/userB/notifications/edits` 경로로 이동하면 사용자 B는 사용자 A가 새로운 수정을 했다는 것을 볼 수 있습니다(이것은 `user_actions`에 의존합니다).
- 자신의 게시글의 연필 아이콘을 클릭하면 사용자 B는 사용자 A가 수행한 실제 수정 내용을 볼 수 있습니다(이것은 `post_revisions`에 의존합니다).

## 테스트

위 가정들이 정확하다면, 아래 쿼리는 사용자 B(이 경우 id 259)가 생성한 게시글 중 다른 사용자(자기 자신이나 시스템 사용자가 아닌)에 의해 수정된 게시글에 대한 `post_revisions` 테이블의 모든 행을 **`action_type = 11`인 `user_actions`의 해당 행과 함께** 보여줘야 합니다.

```sql
with my_user_posts as (
  select
    p.id,
    p.user_id
  from
    posts p
  where
    p.user_id = 259 -- 사용자 id 선택
)
select
  up.user_id as my_user_id,
  ua.user_id as target_user_id,
  pr.post_id,
  ua.target_post_id,
  pr.user_id as editor_user_id,
  ua.acting_user_id,
  ua.action_type,
  pr.created_at as edit_created_at,
  ua.created_at as action_created_at
from
  post_revisions pr
  inner join my_user_posts up on up.id = pr.post_id
  and up.user_id != pr.user_id -- 자기 자신의 수정 제외
  and pr.user_id != -1 -- 시스템 수정 제외
  left join user_actions ua on ua.target_post_id = pr.post_id
  and ua.action_type = 11 -- EDIT 작업만
order by
  pr.post_id,
  pr.created_at;

```

### 예상 출력

모든 행에는 `post_revisions` 데이터와 `user_actions` 데이터가 모두 포함되어야 합니다.

### 실제 출력

일부 `post_revisions` 행에는 일치하는 `user_actions` 데이터가 없습니다. 따라서 사용자는 각 게시글의 연필 아이콘을 클릭하여 수정 이력을 볼 수 있지만, **여러 건의 수정을 받았다는 알림을 받지 못했습니다**.

 ![image](https://global.discourse-cdn.com/meta/original/3X/4/5/4538be4d461c0d93515bd2f9e340dfcc9b98cd96.png)

## 시도해 본 것들

- `user_action` 데이터가 없는 오래된 게시글에 추가 수정을 수행했습니다. **결과** : `user_action` 데이터도 나타나지 않았습니다.
- 가짜 사용자를 생성하고, `user_action` 데이터가 없는 게시글의 수정 전 내용을 복사하여 해당 내용으로 게시글을 생성한 후, 다른 사용자가 수행했던 것과 동일한 수정을 적용했습니다. **결과** : `user_action` 데이터가 올바르게 나타났습니다.
- 사용자가 활성 상태이거나 오프라인일 때 위의 절차를 반복했습니다. 결과: 변화 없음.
- 수정 허용 기간(editing grace period)을 변경하면서 위의 절차를 반복했습니다. 결과: 변화 없음.

## 결론

- 이 문제는 다음과 같은 원인이 아닌 것 같습니다:

- 이 문제는 다음과 같은 원인으로 보입니다:

- 특정 게시글 생성 과정에서 EDIT `user_actions`가 저장되는 것을 방지하는 어떤 일이 일어나고 있을 가능성은 있지만, 그것이 무엇일지는 전혀 알 수 없습니다.

- 또한 이것이 의도된 동작일 수도 있으며, 사용자가 수정에 대해 알림을 받지 않는 특정 조건이 있을 수 있지만, 어디에도 이에 대한 문서화를 찾지 못했습니다.

## 다음 단계

- 수정이 발생할 때마다 수정 알림이 트리거되지 않을 수 있는 이유가 있다면 알려주세요.
- 독자적인 Discourse 인스턴스가 있다면, 위의 SQL 쿼리를 사용자 id 중 일부에 대해 실행하여 `user_actions` 데이터 누락이 보이는지 확인하고 보고해 주시겠습니까?

---

_[View the full topic](https://meta.discourse.org/t/edits-not-being-stored-in-user-actions-table/145025)._
