Commit Graph

46 Commits

Author SHA1 Message Date
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
SEAN
2aa676d60f feat: 웹훅 설정 API 구현 (#144)
Closes #144
2026-02-11 10:03:03 +09:00
SEAN
a5b8bda162 feat: 실패원인 순위 API 구현 (#142)
Closes #142
2026-02-11 09:51:44 +09: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
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
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
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
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
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
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
ef6d71a921 feat: 메시지 미리보기 API 구현 (#120)
- POST /v1/in/message/preview 엔드포인트 추가
- MessageService: 메시지 조회 → 변수 치환 → 미리보기 데이터 반환
- IMessageService 인터페이스 정의 (향후 CRUD 확장용)

Closes #120
2026-02-10 17:27:56 +09:00
SEAN
ce7b8b3d35 feat: 메시지 유효성 검사 서비스 구현 (#118)
- MessageValidationService: title/body/image_url/link_url/link_type/data 검증
- POST /v1/in/message/validate 엔드포인트 추가
- MessageController 기반 구성

Closes #118
2026-02-10 17:15:57 +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
73de5efd84 feat: 즉시 발송 요청 API 구현 (#114)
- POST /v1/in/push/send (단건 발송)
- POST /v1/in/push/send/tag (태그 발송)
- PushService: 메시지 조회 → 변수 치환 → RabbitMQ 큐 발행
- MessageNotFound(151) 에러 코드 추가

Closes #114
2026-02-10 16:38:51 +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
e355c8be62 feat: 디바이스 태그/동의 설정 API 구현 (#96) 2026-02-10 14:49:07 +09:00
SEAN
e9bcd5358f feat: 디바이스 CRUD + 목록 API 구현 (#94) 2026-02-10 14:44:16 +09:00
SEAN
2037a409ef feat: 점검 안내 API 구현 (#92) 2026-02-10 14:33:32 +09:00
SEAN
57fdfdea0e fix: Public API에서 X-Service-Code 의존성 제거 (#90) 2026-02-10 14:26:41 +09:00
SEAN
7485e139cd feat: 앱 기본 설정 API 구현 (#88) 2026-02-10 14:17:22 +09:00
SEAN
0d80b8c25f feat: 앱 버전 체크 API 구현 (#86) 2026-02-10 14:11:28 +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
6879d5e1fd feat: 서비스 태그 목록/수정 API 구현 (#70)
- ServiceTagsRequestDto, UpdateServiceTagsRequestDto, ServiceTagsResponseDto 생성
- IServiceManagementService에 GetTagsAsync, UpdateTagsAsync 추가
- ServiceManagementService에 태그 JSON 파싱/직렬화 로직 구현
- ServiceController에 POST tags/list, tags/update 엔드포인트 추가
- 태그 최대 10개 제한, 변경 없음 감지

Closes #70
2026-02-10 11:27:37 +09:00
SEAN
65f2f914e7 feat: 서비스 삭제 API 구현 (#68)
- DeleteServiceRequestDto 생성 (service_code 필수)
- IServiceManagementService에 DeleteAsync 메서드 추가
- ServiceManagementService에 Soft Delete 로직 구현
  (IsDeleted=true, DeletedAt=UtcNow, Status=Suspended)
- ServiceController에 POST /v1/in/service/delete 엔드포인트 추가

Closes #68
2026-02-10 11:18:07 +09:00
SEAN
e78f8e7c85 merge: develop 머지 충돌 해결 (Profile + EmailVerify + PasswordReset 통합) 2026-02-10 11:07:08 +09:00
SEAN
59f5dbf839 merge: develop 머지 충돌 해결 (Profile + EmailVerify 통합) 2026-02-10 11:02:47 +09:00
SEAN
5f25614e53 feat: 비밀번호 찾기/재설정 API 구현 (#66)
- PasswordForgotRequestDto, PasswordResetRequestDto 생성
- IAuthService에 ForgotPasswordAsync, ResetPasswordAsync 추가
- ForgotPasswordAsync: UUID 토큰 생성 → ITokenStore 저장(30분) → 이메일 발송
- ResetPasswordAsync: 토큰 검증 → BCrypt 해싱 → 비밀번호 저장
- PasswordController 생성 (v1/in/account/password)
- 보안: forgot에서 이메일 미존재 시에도 동일한 성공 응답
2026-02-10 10:56:35 +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
SEAN
e81b12fbea feat: 내 정보 조회/수정 API 구현 (#62)
- ProfileResponseDto, UpdateProfileRequestDto 생성
- IAuthService에 GetProfileAsync, UpdateProfileAsync 추가
- AuthService에 프로필 조회/수정 로직 구현
- ProfileController 생성 (v1/in/account/profile)
2026-02-10 10:48:57 +09:00
SEAN
5d49a2ce49 feat: 이메일 중복 체크 API 구현 (#58)
POST /v1/in/auth/email/check 엔드포인트 추가.
기존 EmailExistsAsync 활용하여 이메일 사용 가능 여부 반환.
2026-02-10 10:23:25 +09:00
SEAN
16550dbff3 feat: 회원가입 API 구현 (#56)
- POST /v1/in/auth/signup 엔드포인트 추가 (AllowAnonymous)
- SignupRequestDto/SignupResponseDto 생성
- AuthService.SignupAsync 구현 (이메일 중복검사, AdminCode 생성, BCrypt 해싱)
- ApiResponse<T>.Success(data, msg) 오버로드 추가
2026-02-10 10:04:58 +09:00
SEAN
e1bab0cce6 feat: 서비스 수정 API 구현 (#54) 2026-02-10 09:44:36 +09:00
SEAN
21dc6e608c feat: 서비스 등록 API 구현 (#52) 2026-02-10 09:38:56 +09:00
c8a3d616c3 feat: IP 화이트리스트 관리 API 구현 (#50)
- IP 목록 조회, 추가, 삭제 API 구현
- IPv4 형식 검증 추가
- 중복 IP 체크 로직 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-10 00:52:41 +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
4cb54e4c41 feat: API Key 재발급 API 구현 (#46)
- ApiKeyRefreshResponseDto 추가
- IServiceManagementService.RefreshApiKeyAsync 인터페이스 추가
- ServiceManagementService.RefreshApiKeyAsync 구현 (32~64자 랜덤 키 생성)
- ServiceController.RefreshApiKeyAsync 엔드포인트 추가
2026-02-10 00:13:16 +09:00
cac56761f4 feat: 서비스 관리 API 구현 (#44)
- ServiceController: 서비스 목록/상세/상태변경 엔드포인트
- ServiceManagementService: 비즈니스 로직 구현
- Service DTOs: 요청/응답 DTO 4종
- DI 등록

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-10 00:01:33 +09:00
b6939c0fa9 feat: 운영자 계정 CRUD API 구현 (#42)
- AccountController: 운영자 CRUD 엔드포인트 (create, list, detail, update, delete)
- AccountService: 비즈니스 로직 구현
- Account DTOs: 요청/응답 DTO 5종
- ErrorCodes: Forbidden 코드 추가
- DI 등록

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-09 23:51:04 +09:00
9b9ca64b10 feat: 관리자 비밀번호 변경 API 구현 (#40)
- ChangePasswordRequestDto 추가
- IAuthService/AuthService에 ChangePasswordAsync 구현
- AuthController에 POST /v1/in/auth/password/change 엔드포인트 추가
- 현재 비밀번호 검증 및 BCrypt 해싱 적용

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-09 23:22:28 +09:00
336dcf8193 feat: 토큰 갱신 및 로그아웃 API 구현 (#38)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-09 23:08:29 +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