Commit Graph

37 Commits

Author SHA1 Message Date
SEAN
f04eb44fff improvement: 서비스 스코프 정책 고정 (#199)
- ErrorCodes.ServiceScopeRequired("133") 추가
- SpmsException.Forbidden 팩토리 추가
- ServiceCodeMiddleware 3-카테고리 라우팅 (SKIP/REQUIRED/OPTIONAL_FOR_ADMIN)
- Swagger 필터 stats/device-list X-Service-Code optional 표시
- StatsController/DeviceController GetOptionalServiceId() 적용
- IStatsService/IDeviceService/레포지토리 시그니처 long? serviceId 변경
- StatsService/DeviceService null serviceId 전체 서비스 모드 처리

Closes #199
2026-02-24 17:11:30 +09: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
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
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
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
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
e9bcd5358f feat: 디바이스 CRUD + 목록 API 구현 (#94) 2026-02-10 14:44:16 +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
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
1aab5032db feat: Public API Entity 정의 및 DB 스키마 구축 (#76) 2026-02-10 13:21:15 +09:00
SEAN
aea0d358e8 improvement: Message Entity link_type 컬럼 추가 (#74) 2026-02-10 13:11:29 +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
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
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
336dcf8193 feat: 토큰 갱신 및 로그아웃 API 구현 (#38)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-09 23:08:29 +09:00
SEAN
a9f6a436c4 feat: SpmsException 및 글로벌 예외 처리 미들웨어 구현 (#16) 2026-02-09 14:33:37 +09:00
SEAN
4f0a4b9bf9 feat: ApiResponse<T> 공통 응답 포맷 구현 (#14) 2026-02-09 13:57:37 +09:00
SEAN
da2001c79b feat: Domain Interface 정의 — Repository, UnitOfWork (#12)
IRepository<T> Generic CRUD, IUnitOfWork 트랜잭션,
도메인별 특화 Repository 인터페이스 7종 정의
(Service, Admin, Device, Message, PushLog, File, Stat)
2026-02-09 13:46:06 +09:00
SEAN
8b6fd84b98 feat: Domain Enum 및 에러 코드 상수 정의 (#10)
- 12개 Enum 추가 (Platform, ServiceStatus, SubTier, AdminRole, DeviceStatus, MessageStatus, PushResult, PaymentStatus, TargetType, LinkType, WebhookEvent, WebhookStatus)
- ErrorCodes 상수 클래스 추가 (Error_Codes.md 기반 3자리 코드)
- Entity byte 필드를 Enum 타입으로 변경 (Service, Admin, Device, PushSendLog, WebhookLog, Payment)
- WebhookLog.EventType 컬럼 타입 변경 (varchar→tinyint) 마이그레이션 적용
2026-02-09 13:31:50 +09:00
SEAN
cfce5ca8b8 feat: Domain Entity 정의 및 DB 스키마 구축 (#8)
- 12개 Domain Entity 클래스 정의 (DB_Schema.md 기반)
- 12개 EF Core Fluent API Configuration 구현
- AppDbContext에 DbSet 12개 등록 및 Configuration 자동 적용
- Soft Delete 글로벌 쿼리 필터 적용 (Service, Admin, Message)
- DesignTimeDbContextFactory 추가 (EF Core CLI 지원)
- InitialCreate 마이그레이션 생성 및 spms_dev DB 적용 완료
- .gitignore에 Documents/, CLAUDE.md, TASKS.md, .mcp.json 추가

Closes #8
2026-02-09 11:46:33 +09:00
SEAN
f02a3884a2 refactor: 클린 아키텍쳐 적용 및 프로젝트 분리 (Resolves #5)
1. 프로젝트 이름 변경
2. 계층 추가
3. 설정 파일 수정
2026-01-19 16:37:50 +09:00