diff --git a/.gradle/8.10/executionHistory/executionHistory.bin b/.gradle/8.10/executionHistory/executionHistory.bin index e2f2a1a..472f852 100644 Binary files a/.gradle/8.10/executionHistory/executionHistory.bin and b/.gradle/8.10/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.10/executionHistory/executionHistory.lock b/.gradle/8.10/executionHistory/executionHistory.lock index 5d5f0de..a97ecba 100644 Binary files a/.gradle/8.10/executionHistory/executionHistory.lock and b/.gradle/8.10/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.10/fileHashes/fileHashes.bin b/.gradle/8.10/fileHashes/fileHashes.bin index 6103adf..fc087d0 100644 Binary files a/.gradle/8.10/fileHashes/fileHashes.bin and b/.gradle/8.10/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.10/fileHashes/fileHashes.lock b/.gradle/8.10/fileHashes/fileHashes.lock index 58f7b76..e6a5ac0 100644 Binary files a/.gradle/8.10/fileHashes/fileHashes.lock and b/.gradle/8.10/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.10/fileHashes/resourceHashesCache.bin b/.gradle/8.10/fileHashes/resourceHashesCache.bin index 639a07b..4fd9dd7 100644 Binary files a/.gradle/8.10/fileHashes/resourceHashesCache.bin and b/.gradle/8.10/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index cf9282e..5885331 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index 7e81e5a..372a73a 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/distribution-service/src/main/java/com/kt/distribution/dto/ChannelStatus.java b/distribution-service/src/main/java/com/kt/distribution/dto/ChannelStatus.java index a65567d..d481e40 100644 --- a/distribution-service/src/main/java/com/kt/distribution/dto/ChannelStatus.java +++ b/distribution-service/src/main/java/com/kt/distribution/dto/ChannelStatus.java @@ -54,9 +54,9 @@ public class ChannelStatus { private LocalDateTime updateTimestamp; /** - * 광고 ID (지니TV) + * 이벤트 ID */ - private String adId; + private String eventId; /** * 노출 스케줄 (지니TV) diff --git a/distribution-service/src/main/java/com/kt/distribution/entity/ChannelStatusEntity.java b/distribution-service/src/main/java/com/kt/distribution/entity/ChannelStatusEntity.java index 05c40d8..325c6c9 100644 --- a/distribution-service/src/main/java/com/kt/distribution/entity/ChannelStatusEntity.java +++ b/distribution-service/src/main/java/com/kt/distribution/entity/ChannelStatusEntity.java @@ -83,10 +83,10 @@ public class ChannelStatusEntity { private LocalDateTime updateTimestamp; /** - * 광고 ID (지니TV) + * 이벤트 ID */ - @Column(name = "ad_id", length = 100) - private String adId; + @Column(name = "event_id", length = 100) + private String eventId; /** * 노출 스케줄 (지니TV) - JSON 형태로 저장 diff --git a/distribution-service/src/main/java/com/kt/distribution/mapper/DistributionStatusMapper.java b/distribution-service/src/main/java/com/kt/distribution/mapper/DistributionStatusMapper.java index 2bd1eff..12a6e7f 100644 --- a/distribution-service/src/main/java/com/kt/distribution/mapper/DistributionStatusMapper.java +++ b/distribution-service/src/main/java/com/kt/distribution/mapper/DistributionStatusMapper.java @@ -116,7 +116,7 @@ public class DistributionStatusMapper { .distributionId(dto.getDistributionId()) .estimatedViews(dto.getEstimatedViews()) .updateTimestamp(dto.getUpdateTimestamp()) - .adId(dto.getAdId()) + .eventId(dto.getEventId()) .impressionSchedule(impressionScheduleJson) .postUrl(dto.getPostUrl()) .postId(dto.getPostId()) @@ -159,7 +159,7 @@ public class DistributionStatusMapper { .distributionId(entity.getDistributionId()) .estimatedViews(entity.getEstimatedViews()) .updateTimestamp(entity.getUpdateTimestamp()) - .adId(entity.getAdId()) + .eventId(entity.getEventId()) .impressionSchedule(impressionScheduleList) .postUrl(entity.getPostUrl()) .postId(entity.getPostId()) diff --git a/distribution-service/src/main/java/com/kt/distribution/service/DistributionService.java b/distribution-service/src/main/java/com/kt/distribution/service/DistributionService.java index dac436f..3b314f8 100644 --- a/distribution-service/src/main/java/com/kt/distribution/service/DistributionService.java +++ b/distribution-service/src/main/java/com/kt/distribution/service/DistributionService.java @@ -116,7 +116,7 @@ public class DistributionService { saveCompletedStatus(request.getEventId(), results, startedAt, completedAt, successCount, failureCount); // Kafka Event 발행 - publishDistributionCompletedEvent(request.getEventId(), results); +// publishDistributionCompletedEvent(request.getEventId(), results); // 응답 생성 return DistributionResponse.builder() @@ -159,6 +159,7 @@ public class DistributionService { .map(channelType -> ChannelStatus.builder() .channel(channelType) .status("PENDING") + .eventId(eventId) .build()) .collect(Collectors.toList()); @@ -197,7 +198,7 @@ public class DistributionService { // ChannelDistributionResult → ChannelStatus 변환 List channelStatuses = results.stream() - .map(this::convertToChannelStatus) + .map(result -> convertToChannelStatus(result, eventId, completedAt)) .collect(Collectors.toList()); DistributionStatusResponse status = DistributionStatusResponse.builder() @@ -215,15 +216,18 @@ public class DistributionService { * ChannelDistributionResult를 ChannelStatus로 변환 * * @param result 배포 결과 + * @param eventId 이벤트 ID + * @param completedAt 완료 시각 * @return 채널 상태 */ - private ChannelStatus convertToChannelStatus(ChannelDistributionResult result) { + private ChannelStatus convertToChannelStatus(ChannelDistributionResult result, String eventId, LocalDateTime completedAt) { return ChannelStatus.builder() .channel(result.getChannel()) .status(result.isSuccess() ? "COMPLETED" : "FAILED") .distributionId(result.getDistributionId()) .estimatedViews(result.getEstimatedReach()) - .completedAt(LocalDateTime.now()) + .eventId(eventId) + .completedAt(completedAt) .errorMessage(result.getErrorMessage()) .build(); } diff --git a/distribution-service/src/main/java/com/kt/distribution/service/KafkaEventPublisher.java b/distribution-service/src/main/java/com/kt/distribution/service/KafkaEventPublisher.java index 5e90b3c..65ac7cb 100644 --- a/distribution-service/src/main/java/com/kt/distribution/service/KafkaEventPublisher.java +++ b/distribution-service/src/main/java/com/kt/distribution/service/KafkaEventPublisher.java @@ -27,7 +27,7 @@ public class KafkaEventPublisher { private final KafkaTemplate kafkaTemplate; @Value("${kafka.topics.distribution-completed}") - private String distributionCompletedTopic; + private static String distributionCompletedTopic = "distribution-completed"; /** * 배포 완료 이벤트 발행 diff --git a/distribution-service/src/main/resources/mock-events.json b/distribution-service/src/main/resources/mock-events.json index 8e086a8..07a1b94 100644 --- a/distribution-service/src/main/resources/mock-events.json +++ b/distribution-service/src/main/resources/mock-events.json @@ -130,5 +130,43 @@ "hashtags": ["팔로우이벤트", "디저트무료", "맛집"] } } + }, + { + "eventId": "evt-test-011", + "title": "지니TV 특별 프로모션! 한우 세트 40% 할인", + "description": "지니TV 시청자 한정! 최상급 한우 세트 메뉴 40% 할인. 예약 시 와인 1병 무료 제공", + "imageUrl": "https://cdn.example.com/event-image-011.jpg", + "channels": ["GINITV", "KAKAO", "NAVER"], + "channelSettings": { + "GINITV": { + "targetRegion": "서울/경기", + "timeSlot": "primetime", + "duration": "15s", + "targetAge": "30-60" + }, + "KAKAO": { + "targetAge": "30-60", + "sendTime": "18:00" + } + } + }, + { + "eventId": "evt-test-012", + "title": "저녁 시간대 지니TV 광고! 족발·보쌈 특가", + "description": "TV 광고 보고 주문하신 분께 사이드 메뉴 무료 증정", + "imageUrl": "https://cdn.example.com/event-image-012.jpg", + "channels": ["GINITV", "URIDONGNETV"], + "channelSettings": { + "GINITV": { + "targetRegion": "전국", + "timeSlot": "evening", + "duration": "10s", + "targetAge": "20-50" + }, + "URIDONGNETV": { + "radius": "3km", + "timeSlot": "evening" + } + } } ]