최종 갱신 (KST)

← 일감 목록
T-081

서버 — 우편 (운영 우편 · 개인/전체 · 수령 · 모두 받기 · 삭제 · 치트 발송)

진우 Closed 우선순위 보통 목표 미정 · 보관됨

배경

운영자가 점검·사과·이벤트 보상을 보낼 통로가 없다. 기획은 확정됐다 → 우편. 수령할 때 "창고에 들어가는가"를 판정해야 해서 창고 칸 계산(T-063)이 먼저다 (2026-09-22 결정).

할 일

  • [x] 엑셀 우편 템플릿 — Mail.xlsx / MailTemplateTable 한 시트(우편 한 통 = 한 줄 · 첨부도 같은 줄). 이름 확인받음(2026-09-22)

  • [x] 상수 — 받은 우편 보관 7일 = 서버 Mail.ClaimedRetention (T-077이 서면 옮긴다)

  • [x] DB — t_user_mail · t_global_mail · t_user_global_mail (우편 3.3)

  • [x] 패킷 — S_MailListResponse·S_MailArrivedResponse·C/S_MailClaim(MailId 0 = 모두 받기)·C/S_MailDelete (39~44) · 결과 코드 900~(MailNotFound·MailAlreadyClaimed·MailNotClaimed) · 인벤토리 부족 = StorageFull(103)

  • [x] 수령 — 원자적: 첨부가 전부 들어가야 지급, 아니면 아무것도 안 준다. 첨부 종류 = 아이템·장비·캐릭터·골드·다이아

  • [x] 모두 받기 — 오래된 순, 처음 막힌 우편에서 멈춤, 받은 수·남은 수

  • [x] 삭제 — 받은 우편만. 받은 지 7일 지난 우편은 로그인 때 정리

  • [x] 전체 우편 — 로그인 때 기간 안의 미복사분 복사 + 발송 순간 접속자에게 즉시. 같은 우편을 두 번 받지 않는다

  • [x] 치트 SendMail = 10 — Arg1 = 템플릿 TID · Arg2 = UID(0이면 전체) · Server/docs/치트.md 2장 갱신

  • [x] 테스트 — UserMailTest 15건 · MailRepositoryTest 5건(실제 SQLite) — 원자적 수령(부족 시 아무것도 안 변함) · 모두 받기 멈춤 · 전체 우편 중복 방지 · 안 받은 우편 삭제 거절

  • [x] 실측 (2026-09-22 · 더미 클라 + 실서버) — 전체 우편 로그인 복사 · 접속 중 개인 우편 도착 · 1통 수령 · 중복 수령 거절 · 안 받은 우편 삭제 거절 · 모두 받기 · 받은 우편 삭제 · 재로그인 목록 일치(전체 우편 재복사 없음). 실측 중 버그 1건 발견·수정 — 접속 중 수신자를 못 찾음(42923e3). 클라 화면은 T-083

완료 조건

치트로 개인·전체 우편을 보내고, 클라(또는 더미 클라)에서 목록·수령·모두 받기·삭제가 돈다. 창고가 모자라면 인벤토리 부족으로 거절되고 재화·보유가 그대로다.

막고 있는 것 / 선행 일감

  • T-063 — 창고 칸 계산

관련 커밋

  • a0579ce — 엑셀·DB·패킷·수령/모두 받기/삭제·전체 우편·치트·테스트 20건
  • 42923e3 — 접속 중 수신자 조회 수정(UserManager.TryGetUserByUid) · 더미 클라 우편 메뉴