a37e57f789
improvement: 공통 응답/에러 포맷 고정 ( #164 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/198
2026-02-24 07:50:14 +00:00
SEAN
4bc08715fa
improvement: 공통 응답/에러 포맷 고정 ( #164 )
...
- FieldError DTO 공통화 (SPMS.Domain/Common)
- ValidationErrorData + ApiResponse.ValidationFail() 추가
- InvalidModelStateResponseFactory로 ModelState 에러 ApiResponse 변환
- Controller Unauthorized 응답 throw SpmsException으로 통일 (에러코드 102)
- MessageValidationService ValidationErrorDto → FieldError 교체
Closes #164
2026-02-24 16:24:56 +09:00
febd6f6da0
improvement: InMemoryTokenStore를 Redis 기반으로 교체 ( #162 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/163
2026-02-11 02:23:06 +00:00
SEAN
74e6bd83dc
improvement: InMemoryTokenStore를 Redis 기반으로 교체 ( #162 )
...
- RedisTokenStore 구현 (ITokenStore, Redis StringSet/Get/KeyDelete)
- DI 등록 변경 (InMemoryTokenStore → RedisTokenStore)
- AddMemoryCache() 제거 (더 이상 사용처 없음)
Closes #162
2026-02-11 11:20:16 +09:00
890feb9b4c
improvement: DeadTokenCleanupWorker Redis 캐시 무효화 연동 ( #160 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/161
2026-02-11 02:16:04 +00:00
SEAN
a6d9f2a46f
improvement: DeadTokenCleanupWorker Redis 캐시 무효화 연동 ( #160 )
...
- ITokenCacheService 주입, 배치 삭제 시 Redis 캐시 무효화
- SELECT → DELETE → 캐시 무효화 순서로 변경
- TASKS.md git 트래킹 해제 (.gitignore에 이미 등록됨)
Closes #160
2026-02-11 11:13:26 +09:00
b1cac9d08a
improvement: PushWorker 웹훅 발송 연동 ( #158 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/159
2026-02-11 02:08:41 +00:00
SEAN
8b1ae4dc02
improvement: PushWorker 웹훅 발송 연동 ( #158 )
...
- PushWorker에 IWebhookService 의존성 주입
- 발송 완료 후 push_sent/push_failed 이벤트 웹훅 호출
- TASKS.md API 커버리지 테이블 업데이트 (65/65 완료)
Closes #158
2026-02-11 11:07:04 +09:00
f972982b85
fix: Health check Redis 상태 실제 PING 체크로 변경 ( #156 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/157
2026-02-11 01:51:56 +00:00
SEAN
c63a61bf6a
fix: Health check Redis 상태를 실제 PING 체크로 변경 ( #156 )
...
- not_configured 하드코딩 제거
- RedisConnection 주입 후 PingAsync()로 실제 연결 상태 확인
- 응답에 latency 포함
Closes #156
2026-02-11 10:49:47 +09:00
bbcb770b2d
feat: Redis 토큰 캐시 관리 구현 ( #154 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/155
2026-02-11 01:45:16 +00:00
SEAN
1b6a87588c
feat: Redis 토큰 캐시 관리 구현 ( #154 )
...
- ITokenCacheService 인터페이스 및 Redis 기반 TokenCacheService 구현
- Key: device:token:{serviceId}:{deviceId}, TTL: 1시간
- PushWorker single 발송 시 캐시 우선 조회, 미스 시 DB 조회 후 캐시 저장
- DeviceService 등록/수정/삭제/수신동의 변경 시 캐시 무효화
- RedisConnection에 GetServer() 메서드 추가 (서비스별 전체 무효화용)
Closes #154
2026-02-11 10:40:32 +09:00
fec1bf289f
feat: DataRetentionWorker 구현 ( #152 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/153
2026-02-11 01:34:30 +00:00
SEAN
feca00e329
feat: DataRetentionWorker 구현 ( #152 )
...
- 매일 04:00 KST 스케줄 실행
- PushSendLog/PushOpenLog: 90일 보관, WebhookLog: 30일, SystemLog: 180일
- 배치 단위 10000건씩 삭제 (트랜잭션 없음)
- SystemLog에 정리 완료 로그 기록
- DI에 AddHostedService 등록
Closes #152
2026-02-11 10:31:50 +09:00
ffdc343563
feat: DeadTokenCleanupWorker 구현 ( #150 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/151
2026-02-11 01:27:46 +00:00
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
17b9f14372
feat: DailyStatWorker 구현 ( #148 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/149
2026-02-11 01:19:22 +00:00
SEAN
87b48441cb
feat: DailyStatWorker 구현 ( #148 )
...
Closes #148
2026-02-11 10:17:06 +09:00
9ab7d4786d
feat: 웹훅 발송 서비스 구현 ( #146 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/147
2026-02-11 01:13:04 +00:00
SEAN
d717603365
feat: 웹훅 발송 서비스 구현 ( #146 )
...
Closes #146
2026-02-11 10:10:11 +09:00
b5de3ca2d1
feat: 웹훅 설정 API 구현 ( #144 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/145
2026-02-11 01:06:25 +00:00
SEAN
2aa676d60f
feat: 웹훅 설정 API 구현 ( #144 )
...
Closes #144
2026-02-11 10:03:03 +09:00
5890392121
feat: 실패원인 순위 API 구현 ( #142 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/143
2026-02-11 00:54:16 +00:00
SEAN
a5b8bda162
feat: 실패원인 순위 API 구현 ( #142 )
...
Closes #142
2026-02-11 09:51:44 +09:00
519569ab72
feat: 상세 로그 다운로드 API 구현 ( #140 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/141
2026-02-11 00:47:04 +00:00
SEAN
3a973f56ce
feat: 상세 로그 다운로드 API 구현 ( #140 )
...
- POST /v1/in/push/log/export (EXP-02, API_SPMS_07_PUSH_09)
- 발송 로그 CSV 파일 다운로드 (페이징 없이 전체 반환)
- 최대 조회 기간 30일, 최대 100,000건 제한
- message_code, device_id, status 필터 지원
Closes #140
2026-02-11 09:43:47 +09:00
042e6e1dd6
feat: 통계 리포트 다운로드 API 구현 ( #138 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/139
2026-02-11 00:41:02 +00:00
SEAN
d3bd4356a8
feat: 통계 리포트 다운로드 API 구현 ( #138 )
...
- POST /v1/in/stats/export (EXP-01)
- 일별/시간대별/플랫폼별 통계를 엑셀(.xlsx) 3시트로 생성
- ClosedXML 패키지 추가
Closes #138
2026-02-11 09:38:46 +09:00
ce266956c7
feat: 발송 상세 로그 조회 API 구현 ( #136 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/137
2026-02-11 00:33:00 +00:00
SEAN
bcc40b4c01
feat: 발송 상세 로그 조회 API 구현 ( #136 )
...
- POST /v1/in/stats/send-log (DDL-02)
- 특정 메시지의 개별 디바이스별 발송 로그 조회
- 플랫폼(iOS/Android/Web), 성공/실패 필터 지원
- Device Include로 디바이스 토큰, 플랫폼 정보 포함
Closes #136
2026-02-11 09:29:03 +09:00
86f978633e
feat: 운영자 관리 API 구현 ( #134 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/135
2026-02-11 00:20:11 +00:00
SEAN
3e5aeacd5e
feat: 운영자 관리 API 구현 ( #134 )
...
- POST /v1/in/account/operator/create (계정 생성 + 비밀번호 설정 이메일)
- POST /v1/in/account/operator/delete (Soft Delete, 자기 자신 삭제 방지)
- POST /v1/in/account/operator/list (페이징 + role/is_active 필터)
- POST /v1/in/account/operator/password/reset (비밀번호 초기화 + 세션 무효화)
Closes #134
2026-02-11 09:16:04 +09:00
e0f7d422c3
feat: 통계 API 구현 (8.1~8.5) ( #132 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/133
2026-02-10 14:11:26 +00:00
caa2148654
chore: TASKS.md 통계 API 완료 표시 ( #132 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 23:09:41 +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
d940948df0
feat: 대용량 발송/상태조회/취소 API 구현 ( #130 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/131
2026-02-10 14:00:25 +00:00
4298171d61
chore: TASKS.md 대용량 발송 API 완료 표시 ( #130 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 22:56:01 +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
dc487609b3
feat: 메시지 CRUD API 구현 ( #128 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/129
2026-02-10 13:43:28 +00:00
01c8f7602f
chore: TASKS.md Phase 3 재정비 - API Spec 기준 ( #128 )
...
- API_Specification.md 기준으로 Phase 3 테이블 재구성
- 미구현 API 7개 추가 (Message 6.1~6.4, Push 7.3~7.5)
- Feature_Spec 전용 항목(딥링크/재발송) 보류 처리
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 22:38:50 +09:00
fc7ab51fa3
feat: 메시지 CRUD API 구현 ( #128 )
...
- 메시지 저장 API (POST /v1/in/message/save)
- 메시지 목록 조회 API (POST /v1/in/message/list)
- 메시지 상세 조회 API (POST /v1/in/message/info)
- 메시지 삭제 API (POST /v1/in/message/delete)
- message_code 자동 생성 (접두3+순번4+접미3)
- 변수 추출 ({{변수명}} 패턴)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 22:38:24 +09:00
f8eb938a9d
fix: Health check 503 응답에 상세 데이터 포함 ( #126 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/127
2026-02-10 10:35:01 +00:00
f70d8a8558
fix: Health check 503 응답에 상세 데이터 포함 ( #126 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 19:27:44 +09:00
01cc3adea4
fix: RabbitMQ 연결 실패 시 앱 크래시 방지 ( #124 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/125
2026-02-10 10:16:30 +00: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
efd6615809
fix: RabbitMQ 연결 실패 시 앱 크래시 방지 ( #124 )
...
- StartAsync에서 throw 제거, LogWarning으로 변경
- InitializeAsync 메서드 분리 (재시도 가능)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 19:06:58 +09:00
355d3269c0
feat: 발송 로그 조회 API 구현 ( #122 )
...
SPMS_API/pipeline/head This commit looks good
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/123
2026-02-10 10:05:50 +00: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
975ed77d18
feat: 메시지 미리보기 API 구현 ( #120 )
...
SPMS_API/pipeline/head There was a failure building this commit
Reviewed-on: https://git.ipstein.myds.me/SPMS/SPMS_API/pulls/121
2026-02-10 08:31:19 +00:00
SEAN
ef6d71a921
feat: 메시지 미리보기 API 구현 ( #120 )
...
- POST /v1/in/message/preview 엔드포인트 추가
- MessageService: 메시지 조회 → 변수 치환 → 미리보기 데이터 반환
- IMessageService 인터페이스 정의 (향후 CRUD 확장용)
Closes #120
2026-02-10 17:27:56 +09:00