Skip to content

feat: RSS 수집 시 출석 상태 업데이트 및 결석/지각 벌금 자동 부과#25

Merged
choihooo merged 2 commits intodevfrom
feat/attendance-update-fines
Mar 10, 2026
Merged

feat: RSS 수집 시 출석 상태 업데이트 및 결석/지각 벌금 자동 부과#25
choihooo merged 2 commits intodevfrom
feat/attendance-update-fines

Conversation

@choihooo
Copy link
Copy Markdown
Collaborator

🎯 Summary

이 PR의 목적을 한 줄로 요약해주세요

  • RSS에서 새 글 수집 시 자동으로 출석 상태 업데이트하고, 지각/결석 시 벌금 자동 부과 기능 추가

🔴 AS-IS

기존 상태 또는 문제점

  • RSS 폴러가 새 글을 DB에 저장하지만 출석 상태 업데이트는 별도로 수동 처리해야 했음
  • 지각/결석 시 벌금 부과가 자동화되지 않아 관리자가 수동으로 처리해야 했음
  • 화요일 00:00 출석 체크 시 결석자 판정은 되지만 벌금 부과 로직이 없었음

🟢 TO-BE

변경 후 상태 또는 개선점

  • RSS 콜백에서 새 글 생성 시 자동으로 출석 상태 업데이트 (SUBMITTED/LATE 판단)
  • 마감일(23:59:59.999) 이후 제출 시 자동으로 LATE 처리 + 벌금 3,000원 부과
  • 화요일 00:00 출석 체크 시 결석자 자동으로 벌금 5,000원 부과 + DM 발송
  • 관리자 개입 없이 전체 자동화

💬 참고사항

리뷰어가 알아야 할 내용, 논의 포인트, 주의사항 등

  • P0 feat: 프로필 이미지 업로드 및 UI 개선 #3, feat: 스터디원 목록, 프로필 개선 및 실명/닉네임 분리 #4 해결: (docs/plans/26-03-10-bot-review-findings.md 참조)

  • 테스트 완료: 최호 계정으로 실제 "테스트 글" 발행 → 자동으로 출석 상태 SUBMITTED로 업데이트 확인

  • 동작 흐름:

    1. RSS 폴러가 5분마다 자동 실행
    2. 최호가 블로그에 글 발행
    3. RSS 수집 → 포스트 저장 → 출석 상태 SUBMITTED 자동 업데이트
    4. 지각 시: LATE + 벌금 3,000원 + DM
    5. 결석 시: 화요일 00:00 체크 → 벌금 5,000원 + DM
  • 지각 판단 로직:

    const roundEndDate = new Date(currentRound.endDate);
    roundEndDate.setHours(23, 59, 59, 999); // 마감일 23:59:59.999까지
    const isLate = item.pubDate > roundEndDate;
  • 결석 콜백: attendanceChecker.setOnAbsentCallback() 설정

  • 테스트 회차: 1000회차 (2026-03-10 ~ 2026-03-16, 지각 마감 2026-03-20)


기술 변경 사항

scheduler-registry.ts

  • RSS 콜백에 출석 상태 업데이트 로직 추가 (lines 84-113)
  • 지각 시 attendanceService.markLate() + 벌금 생성 + DM 발송
  • 정상 제출 시 attendanceService.markSubmitted()
  • 결석 콜백 설정 (attendanceChecker.setOnAbsentCallback())

import 추가

  • getAttendanceService, getFineService, sendFineNotification
  • getDb, members (결석 콜백에서 멤버 조회)

Co-Authored-By

Claude Sonnet 4.6 noreply@anthropic.com

P0 #3 문제 해결 - 출석 상태 업데이트 누락:
- RSS 콜백에서 새 글 생성 후 출석 상태 업데이트
- 회차 마감일 이후 제출 시 지각(LATE) 처리
- 지각 시 벌금 3,000원 자동 부과 및 DM 발송
- 정상 제출 시 SUBMITTED 상태로 변경

P0 #4 문제 해결 - 결석/지각 벌금 콜백 미설정:
- attendanceChecker에 결석 콜백 설정
- 화요일 00:00 결석 판정 시 자동으로 벌금 5,000원 부과
- 결석 벌금 DM 알림 자동 발송

변경 사항:
- scheduler-registry.ts: RSS 콜백에 출석 상태 업데이트 로직 추가
- 지각 판단: item.pubDate > round.endDate (23:59:59.999)
- 결석 콜백: setOnAbsentCallback()으로 벌금 생성 및 알림 발송

동작 흐름:
1. RSS 폴러가 새 글 발견
2. 글 저장 + 출석 상태 업데이트 (SUBMITTED 또는 LATE)
3. 지각인 경우 벌금 생성 + DM 발송
4. 화요일 00:00 출석 체크
5. 결석자 벌금 생성 + DM 발송

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@choihooo choihooo requested a review from bbbang105 as a code owner March 10, 2026 07:30
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 10, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
study-admin-web Ready Ready Preview, Comment Mar 10, 2026 7:48am

@bbbang105 bbbang105 added the 🚀 feat 새로운 기능 추가 / 일부 코드 추가 / 일부 코드 수정 (리팩토링과 구분) / 디자인 요소 수정 label Mar 10, 2026
Priority 1 & 2 수정 사항:
1. 타임존 명시: roundEndDate 생성 시 KST (+09:00) 명시
2. 중복 방지 로직 주석 추가: markLate/markSubmitted/fineService.create 내부 로직 설명
3. Import 순서 정리: @blog-study/shared/db를 상단으로 이동

기존 로직 확인:
- FineService.create(): 이미 내부에서 getByMemberAndRound() 체크 후 중복 시 기존 벌금 반환
- AttendanceService.markLate/markSubmitted(): 이미 PENDING 상태일 때만 업데이트

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@bbbang105 bbbang105 added the 🚨 fix 버그 수정 / 에러 해결 label Mar 10, 2026
@choihooo choihooo merged commit a110ffc into dev Mar 10, 2026
7 checks passed
@choihooo choihooo deleted the feat/attendance-update-fines branch March 10, 2026 07:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🚀 feat 새로운 기능 추가 / 일부 코드 추가 / 일부 코드 수정 (리팩토링과 구분) / 디자인 요소 수정 🚨 fix 버그 수정 / 에러 해결

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants