diff --git a/src/mooc/main/tv/codely/mooc/twitter/application/SendNotificationTwitter.java b/src/mooc/main/tv/codely/mooc/twitter/application/SendNotificationTwitter.java new file mode 100644 index 0000000..5cf715c --- /dev/null +++ b/src/mooc/main/tv/codely/mooc/twitter/application/SendNotificationTwitter.java @@ -0,0 +1,27 @@ +package tv.codely.mooc.twitter.application; + +import tv.codely.mooc.twitter.domain.TwitterRepository; +import tv.codely.mooc.video.domain.VideoPublished; +import tv.codely.shared.application.DomainEventSubscriber; + +public final class SendNotificationTwitter implements DomainEventSubscriber { + + private TwitterRepository twitterAPI; + + public SendNotificationTwitter(TwitterRepository twitterAPI) { + this.twitterAPI = twitterAPI; + } + + @Override + public Class subscribedTo() { + return VideoPublished.class; + } + + @Override + public void consume(VideoPublished event) { + TwitterRequest twit = new TwitterRequest( + String.format("Hey! A new video is published: <%s>", event.title()) + ); + twitterAPI.create(twit); + } +} diff --git a/src/mooc/main/tv/codely/mooc/twitter/application/TwitterRequest.java b/src/mooc/main/tv/codely/mooc/twitter/application/TwitterRequest.java new file mode 100644 index 0000000..a9b3536 --- /dev/null +++ b/src/mooc/main/tv/codely/mooc/twitter/application/TwitterRequest.java @@ -0,0 +1,24 @@ +package tv.codely.mooc.twitter.application; + +public final class TwitterRequest { + private String id; + private String text; + + public TwitterRequest(String id, String text) { + this.id = id; + this.text = text; + } + + public TwitterRequest(String text) { + this.text = text; + } + + public String getId() { + return id; + } + + public String getText() { + return text; + } + +} diff --git a/src/mooc/main/tv/codely/mooc/twitter/domain/TwitterRepository.java b/src/mooc/main/tv/codely/mooc/twitter/domain/TwitterRepository.java new file mode 100644 index 0000000..a72369d --- /dev/null +++ b/src/mooc/main/tv/codely/mooc/twitter/domain/TwitterRepository.java @@ -0,0 +1,7 @@ +package tv.codely.mooc.twitter.domain; + +import tv.codely.mooc.twitter.application.TwitterRequest; + +public interface TwitterRepository { + void create(TwitterRequest twit); +} diff --git a/src/mooc/main/tv/codely/mooc/twitter/infrastructure/Twitter.java b/src/mooc/main/tv/codely/mooc/twitter/infrastructure/Twitter.java new file mode 100644 index 0000000..2fa2a50 --- /dev/null +++ b/src/mooc/main/tv/codely/mooc/twitter/infrastructure/Twitter.java @@ -0,0 +1,15 @@ +package tv.codely.mooc.twitter.infrastructure; + +import tv.codely.mooc.twitter.application.TwitterRequest; +import tv.codely.mooc.twitter.domain.TwitterRepository; + +/** + * TODO: Implement a HTTPClient for the consume of the twitter API. + */ +public final class Twitter implements TwitterRepository { + + @Override + public void create(TwitterRequest twit) { + System.out.println(twit.getText()); + } +} diff --git a/src/mooc/main/tv/codely/mooc/video/infrastructure/VideoPublisherCliController.java b/src/mooc/main/tv/codely/mooc/video/infrastructure/VideoPublisherCliController.java index 864eb8e..c60935c 100644 --- a/src/mooc/main/tv/codely/mooc/video/infrastructure/VideoPublisherCliController.java +++ b/src/mooc/main/tv/codely/mooc/video/infrastructure/VideoPublisherCliController.java @@ -1,6 +1,9 @@ package tv.codely.mooc.video.infrastructure; import tv.codely.mooc.notification.application.create.SendPushToSubscribersOnVideoPublished; +import tv.codely.mooc.twitter.application.SendNotificationTwitter; +import tv.codely.mooc.twitter.domain.TwitterRepository; +import tv.codely.mooc.twitter.infrastructure.Twitter; import tv.codely.mooc.video.application.publish.VideoPublisher; import tv.codely.shared.application.DomainEventSubscriber; import tv.codely.shared.domain.EventBus; @@ -10,8 +13,11 @@ public class VideoPublisherCliController { public static void main(String[] args) { + final TwitterRepository twitter = new Twitter(); + final Set subscribers = Set.of( - new SendPushToSubscribersOnVideoPublished() + new SendPushToSubscribersOnVideoPublished(), + new SendNotificationTwitter(twitter) ); final EventBus eventBus = new ReactorEventBus(subscribers); final var videoPublisher = new VideoPublisher(eventBus);