장단콩 보드게임 & 미니어처 게임 클럽

일정 등록 통계 삭제 보정 설계

목적

게임 일정(posts 컬렉션의 type: "event")을 등록한 뒤 삭제하면, 등록 횟수 통계(stats/global.members.<uid>.postCount)도 함께 되돌린다. 삭제된 일정이 일정 메이커 랭킹과 트로피 조건에 남지 않게 한다.

기존 “다소” 사용자의 잘못 누적된 일정 등록 횟수는 postCount만 0으로 초기화한다. 참석, 평가 및 그 밖의 통계 필드는 변경하지 않는다.

현재 구조

신규 게임 일정 등록은 assets/js/write.js에서 게시글을 생성한 다음, 작성자 통계의 postCountincrement(1)로 증가시킨다. 삭제는 assets/js/post.js에서 게시글 문서만 삭제하므로 등록 통계가 남는다.

설계

삭제 처리

  1. 삭제 대상 게시글이 게임 일정인지 확인한다.
  2. 게임 일정이면 해당 게시글의 authorUid에 있는 postCount를 1 감소시킨다.
  3. 카운트 감소와 게시글 삭제는 하나의 Firestore 트랜잭션에서 수행한다.
  4. 현재 값이 0 이하이거나 통계 멤버 데이터가 없으면 postCount는 0으로 유지한다. 음수는 저장하지 않는다.
  5. 공지 삭제는 통계를 변경하지 않는다.

트랜잭션 안에서 게시글을 다시 읽고 작성자와 타입을 판정한다. 이로써 화면에 로드된 데이터가 오래되었어도 정확한 대상을 기준으로 처리한다. 통계 또는 삭제 단계가 실패하면 트랜잭션 전체가 반영되지 않고, 기존 오류 처리로 사용자에게 실패를 알린다.

기존 데이터 보정

관리 권한으로 Firestore의 stats/global 문서에서 “다소” 사용자의 UID를 확인한 뒤 다음 필드만 0으로 업데이트한다.

members.<dasoUid>.postCount = 0

이 보정은 일회성 데이터 작업이며, 다른 members.<dasoUid> 필드 및 다른 사용자의 데이터는 유지한다.

영향 범위

검증