Commit Graph

27 Commits

Author SHA1 Message Date
SEAN
ca4f278b14 feat: DeadTokenCleanupWorker 구현 (#150)
- 매주 일요일 03:00 KST 스케줄 실행
- is_active=false, updated_at 7일 이전 Device 물리 삭제
- 배치 단위 1000건씩 삭제 (트랜잭션 없음)
- 안전장치: 전체의 50% 초과 시 삭제 중단 + 경고 로그
- SystemLog에 정리 완료/안전장치 발동 로그 기록
- DI에 AddHostedService 등록

Closes #150
2026-02-11 10:26:00 +09:00
SEAN
87b48441cb feat: DailyStatWorker 구현 (#148)
Closes #148
2026-02-11 10:17:06 +09:00
SEAN
d717603365 feat: 웹훅 발송 서비스 구현 (#146)
Closes #146
2026-02-11 10:10:11 +09:00
0911fc763a feat: 통계 API 구현 (8.1~8.5) (#132)
- POST /v1/in/stats/daily: 기간별 일별 통계
- POST /v1/in/stats/summary: 대시보드 요약 통계
- POST /v1/in/stats/message: 메시지별 발송 통계
- POST /v1/in/stats/hourly: 시간대별 발송 추이
- POST /v1/in/stats/device: 디바이스 분포 통계
- IDailyStatRepository, DailyStatRepository 신규
- IPushSendLogRepository 통계 메서드 확장

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 23:08:04 +09:00
830cbf2edc feat: 대용량 발송/상태조회/취소 API 구현 (#130)
- POST /v1/in/push/send/bulk: CSV 대량 발송 (비동기)
- POST /v1/in/push/job/status: Job 상태 조회
- POST /v1/in/push/job/cancel: Job 취소
- BulkJobStore: Redis Hash 기반 Job 상태 관리
- PushWorker: Job 진행률 추적 및 취소 체크

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 22:55:39 +09:00
3fc3bb8144 fix: RabbitMQ 상태 모니터링 및 백그라운드 재시도 추가 (#124)
- RabbitMQInitializer를 BackgroundService로 변경 (30초 간격 재시도)
- RabbitMQConnection에 IsConnected 속성 추가
- Health check에 RabbitMQ 연결/초기화 상태 반영
- DI 등록 변경 (Singleton + HostedService 패턴)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 19:15:42 +09:00
SEAN
b56170f10c feat: 발송 로그 조회 API 구현 (#122)
- POST /v1/in/push/log 엔드포인트 추가
- PushSendLogRepository (페이징, 필터링: message_code, device_id, status, 날짜범위)
- PushService.GetLogAsync 구현
- 누락된 Push DTO 파일 포함 (PushSendRequestDto, PushSendResponseDto, PushSendTagRequestDto)
2026-02-10 17:41:38 +09:00
SEAN
fe1dcd0176 feat: 예약 발송 등록/취소 API 구현 (#116)
- POST /v1/in/push/schedule (예약 발송 등록)
- POST /v1/in/push/schedule/cancel (예약 취소)
- ScheduleCancelStore: Redis 기반 예약 취소 추적
- ScheduleWorker: 취소된 예약 메시지 ACK 후 스킵 로직 추가

Closes #116
2026-02-10 17:06:04 +09:00
SEAN
814d2082cb feat: ScheduleWorker 구현 (#112) 2026-02-10 16:25:25 +09:00
SEAN
f36f8f47a9 feat: PushWorker 구현 (#110) 2026-02-10 16:14:47 +09:00
SEAN
4292f57ad1 feat: Redis 중복 발송 방지 구현 (#108) 2026-02-10 16:04:51 +09:00
SEAN
3a5c2a5b5b feat: APNs 발송 모듈 구현 (#106) 2026-02-10 15:52:26 +09:00
SEAN
7a250847f4 feat: FCM 발송 모듈 구현 (#104) 2026-02-10 15:44:32 +09:00
SEAN
4f38e31710 feat: RabbitMQ 인프라 설정 (Exchange/Queue) (#102) 2026-02-10 15:34:15 +09:00
SEAN
0db4a8824d feat: CSV 검증/템플릿 다운로드 API 구현 (#100) 2026-02-10 15:22:12 +09:00
SEAN
658fa1d63d feat: 파일 업로드/조회/삭제 API 구현 (#98) 2026-02-10 15:03:24 +09:00
SEAN
e9bcd5358f feat: 디바이스 CRUD + 목록 API 구현 (#94) 2026-02-10 14:44:16 +09:00
SEAN
6475c0c753 feat: 이용약관/개인정보처리방침 API 구현 (#84) 2026-02-10 14:07:13 +09:00
SEAN
e24e0c2398 feat: FAQ 목록 API 구현 (#82) 2026-02-10 13:57:17 +09:00
SEAN
ad1bf2e4e6 feat: 배너 목록 API 구현 (#80) 2026-02-10 13:41:19 +09:00
SEAN
f0d325fda9 feat: 공지사항 목록/상세 API 구현 (#78) 2026-02-10 13:34:36 +09:00
SEAN
ccdfcbd62e feat: 이메일 인증 인프라 및 API 구현 (#64)
- ITokenStore, IEmailService 인터페이스 정의
- InMemoryTokenStore (IMemoryCache 기반), ConsoleEmailService (로그 출력) 구현
- SignupAsync에 6자리 인증 코드 생성/저장/발송 로직 추가
- VerifyEmailAsync 구현 (코드 검증 → EmailVerified 업데이트)
- POST /v1/in/auth/email/verify 엔드포인트 추가
- DI 등록 (ITokenStore, IEmailService, MemoryCache)
2026-02-10 10:52:47 +09:00
94e0b92780 feat: APNs/FCM 키 등록 및 조회 API 구현 (#48)
- APNs 키 등록 API (POST /v1/in/service/{serviceCode}/apns)
- FCM 키 등록 API (POST /v1/in/service/{serviceCode}/fcm)
- 키 정보 조회 API (POST /v1/in/service/{serviceCode}/credentials)
- AES-256 암호화로 민감 정보 저장
- 조회 시 메타 정보만 반환 (Private Key 미노출)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-10 00:28:47 +09:00
b11c8dc918 feat: 관리자 로그인 API 구현 (#36)
- LoginRequestDto, LoginResponseDto 추가
- IAuthService, AuthService 구현 (BCrypt 비밀번호 검증)
- AdminRepository 구현 (GetByEmailAsync)
- AuthController 추가 (POST /v1/in/auth/login)
- DI 등록 (IAuthService, IAdminRepository)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-09 22:16:25 +09:00
SEAN
df8a8e2e5b feat: X-Service-Code / X-API-KEY 서비스 식별 미들웨어 구현 (#32)
- ServiceRepository: IServiceRepository 구현 (GetByServiceCode, GetByApiKey)
- ServiceCodeMiddleware: X-Service-Code 헤더 검증, DB 조회, 서비스 상태 확인
- ApiKeyMiddleware: /v1/in/device/* 경로 X-API-KEY 검증
- ApplicationBuilderExtensions: 미들웨어 파이프라인 12~13번 등록
- DependencyInjection: IServiceRepository DI 등록

Closes #32
2026-02-09 17:25:19 +09:00
SEAN
27f33f809b feat: E2EE 암호화 유틸리티 구현 (#28)
- AesEncryption: AES-256-CBC 암호화/복호화
- RsaEncryption: RSA-2048 키 쌍 생성/암복호화
- E2EEService: 하이브리드 암복호화 (요청 복호화, 응답 암호화)
- TimestampValidator: 타임스탬프 검증 (±30초)
- SecureTransportAttribute: Action Filter (보안등급 3 엔드포인트용)
- DI 등록: IE2EEService → E2EEService (Singleton)

Closes #28
2026-02-09 16:33:38 +09:00
SEAN
cd8270c5c0 feat: DI 컨테이너 및 서비스 등록 구조화 (#26)
- Infrastructure/DependencyInjection.cs: AddInfrastructure() 확장 메서드
- Application/DependencyInjection.cs: AddApplication() 확장 메서드
- API/Extensions/ApplicationBuilderExtensions.cs: UseMiddlewarePipeline() 확장 메서드
- Program.cs 정리 (DI/파이프라인 분리)

Closes #26
2026-02-09 16:25:44 +09:00