[NO-ISSUE] Add slack sdk
This commit is contained in:
parent
4d7bf4fb3c
commit
e8ec96ed27
|
@ -22,6 +22,7 @@ dependencies {
|
|||
implementation "org.springframework.cloud:spring-cloud-starter-openfeign"
|
||||
implementation "io.github.openfeign:feign-hc5"
|
||||
implementation 'org.ahocorasick:ahocorasick:0.6.3'
|
||||
implementation "com.slack.api:slack-api-client:1.39.1"
|
||||
|
||||
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
|
||||
annotationProcessor 'org.projectlombok:lombok'
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
package com.myoa.engineering.crawl.shopping.configuration.slack;
|
||||
|
||||
import com.myoa.engineering.crawl.shopping.configuration.slack.properties.SlackSecretProperties;
|
||||
import com.slack.api.Slack;
|
||||
import com.slack.api.methods.MethodsClient;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class SlackConfiguration {
|
||||
|
||||
private static final String DEFAULT_BOT_UNIT_NAME = "shopping-crawler";
|
||||
|
||||
@Bean
|
||||
public MethodsClient slackMethodsClient(SlackSecretProperties slackSecretProperties) {
|
||||
String token = slackSecretProperties.find(DEFAULT_BOT_UNIT_NAME).getToken();
|
||||
return Slack.getInstance().methods(token);
|
||||
}
|
||||
|
||||
}
|
|
@ -12,7 +12,7 @@ import lombok.NoArgsConstructor;
|
|||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Entity
|
||||
@Table
|
||||
@Table(name = "app_user")
|
||||
public class AppUser extends Auditable {
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
|
|
|
@ -15,7 +15,7 @@ import java.time.ZonedDateTime;
|
|||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Entity
|
||||
@Table
|
||||
@Table(name = "article")
|
||||
public class Article extends Auditable {
|
||||
|
||||
@Id
|
||||
|
|
|
@ -13,7 +13,7 @@ import lombok.NoArgsConstructor;
|
|||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Entity
|
||||
@Table
|
||||
@Table(name = "subscribed_keyword")
|
||||
public class SubscribedKeyword extends Auditable {
|
||||
|
||||
@Id
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.myoa.engineering.crawl.shopping.domain.model.v2.ArticleModel;
|
|||
import lombok.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@ToString
|
||||
|
@ -12,13 +13,30 @@ import java.util.List;
|
|||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class UserNotifyModel {
|
||||
private String userId;
|
||||
private String slackId;
|
||||
private List<ArticleModel> articles;
|
||||
|
||||
public static UserNotifyModel of(String userId, List<ArticleModel> articles) {
|
||||
public static UserNotifyModel of(String slackId, List<ArticleModel> articles) {
|
||||
return UserNotifyModel.builder()
|
||||
.userId(userId)
|
||||
.slackId(slackId)
|
||||
.articles(articles)
|
||||
.build();
|
||||
}
|
||||
|
||||
public String toCompositedMessage() {
|
||||
String compositedMessage = wrapUserId() + "\n" +
|
||||
articles.stream()
|
||||
.map(this::convertArticletoMessage)
|
||||
.collect(Collectors.joining("\n"));
|
||||
// article -> builder.append(convertArticletoMessage.toMessage()).append("\n");i
|
||||
return compositedMessage;
|
||||
}
|
||||
|
||||
private String wrapUserId() {
|
||||
return "<@" + slackId + ">";
|
||||
}
|
||||
|
||||
private String convertArticletoMessage(ArticleModel article) {
|
||||
return "<" + article.getArticleUrl() + "|" + article.getTitle() + ">";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package com.myoa.engineering.crawl.shopping.dto;
|
||||
package com.myoa.engineering.crawl.shopping.dto.feed.v1;
|
||||
|
||||
import com.myoa.engineering.crawl.shopping.support.dto.constant.PpomppuBoardName;
|
||||
import lombok.Builder;
|
|
@ -1,4 +1,4 @@
|
|||
package com.myoa.engineering.crawl.shopping.dto;
|
||||
package com.myoa.engineering.crawl.shopping.dto.feed.v1;
|
||||
|
||||
import com.myoa.engineering.crawl.shopping.domain.entity.v1.PpomppuArticle;
|
||||
import com.myoa.engineering.crawl.shopping.support.util.DateUtil;
|
|
@ -1,4 +1,4 @@
|
|||
package com.myoa.engineering.crawl.shopping.dto;
|
||||
package com.myoa.engineering.crawl.shopping.dto.feed.v1;
|
||||
|
||||
import com.myoa.engineering.crawl.shopping.domain.entity.v1.PpomppuArticle;
|
||||
import com.myoa.engineering.crawl.shopping.support.dto.BlockMessageDTO;
|
|
@ -1,4 +1,4 @@
|
|||
package com.myoa.engineering.crawl.shopping.dto.slack;
|
||||
package com.myoa.engineering.crawl.shopping.dto.slack.v1;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.myoa.engineering.crawl.shopping.dto.slack;
|
||||
package com.myoa.engineering.crawl.shopping.dto.slack.v1;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.myoa.engineering.crawl.shopping.dto.slack;
|
||||
package com.myoa.engineering.crawl.shopping.dto.slack.v1;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
@ -1,4 +1,4 @@
|
|||
package com.myoa.engineering.crawl.shopping.dto.slack;
|
||||
package com.myoa.engineering.crawl.shopping.dto.slack.v1;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.myoa.engineering.crawl.shopping.dto.slack;
|
||||
package com.myoa.engineering.crawl.shopping.dto.slack.v1;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
|
@ -1,4 +1,4 @@
|
|||
package com.myoa.engineering.crawl.shopping.dto.slack;
|
||||
package com.myoa.engineering.crawl.shopping.dto.slack.v1;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
@ -1,4 +1,4 @@
|
|||
package com.myoa.engineering.crawl.shopping.dto.slack;
|
||||
package com.myoa.engineering.crawl.shopping.dto.slack.v1;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Builder;
|
|
@ -45,7 +45,7 @@ public class ArticleUpsertEventListener {
|
|||
.map(user -> {
|
||||
List<ArticleModel> filteredArticles = handleAhoCorasick(articleMap)
|
||||
.apply(subscribedKeywordCacheService.getSubscribedKeywordsCached(user.getName()));
|
||||
return UserNotifyModel.of(user.getName(), filteredArticles);
|
||||
return UserNotifyModel.of(user.getSlackId(), filteredArticles);
|
||||
})
|
||||
.forEach(this::notifyMessage);
|
||||
|
||||
|
@ -53,16 +53,12 @@ public class ArticleUpsertEventListener {
|
|||
|
||||
private Function<Map<CrawlTarget, SubscribedKeywordAggregatedModel>, List<ArticleModel>> handleAhoCorasick(
|
||||
Map<CrawlTarget, List<ArticleModel>> articleMap) {
|
||||
return userTrieModel -> {
|
||||
return userTrieModel
|
||||
.entrySet()
|
||||
.stream().filter(e -> articleMap.containsKey(e.getKey()))
|
||||
.map((entry) -> filterAhocorasick(articleMap.get(entry.getKey()), entry.getValue()))
|
||||
.flatMap(List::stream)
|
||||
.toList();
|
||||
// return UserNotifyModel.of(userTrieModel.values().stream().findFirst().get().getUserId(),
|
||||
// filteredArticle);
|
||||
};
|
||||
return userTrieModel -> userTrieModel
|
||||
.entrySet()
|
||||
.stream().filter(e -> articleMap.containsKey(e.getKey()))
|
||||
.map((entry) -> filterAhocorasick(articleMap.get(entry.getKey()), entry.getValue()))
|
||||
.flatMap(List::stream)
|
||||
.toList();
|
||||
}
|
||||
|
||||
private List<ArticleModel> filterAhocorasick(List<ArticleModel> articles,
|
||||
|
@ -75,12 +71,12 @@ public class ArticleUpsertEventListener {
|
|||
//ArticleUpsertEventListener::printArticle
|
||||
}
|
||||
|
||||
private void notifyMessage(UserNotifyModel article) {
|
||||
System.out.println("article = " + article);
|
||||
if (article.getArticles().isEmpty()){
|
||||
private void notifyMessage(UserNotifyModel userNotifyModel) {
|
||||
System.out.println("article = " + userNotifyModel);
|
||||
if (userNotifyModel.getArticles().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
userNotifyService.notify("안녕 " + article.getUserId() + "\n" + article.getArticles());
|
||||
userNotifyService.notify(userNotifyModel.toCompositedMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.myoa.engineering.crawl.shopping.infra.client.slack;
|
||||
|
||||
import com.myoa.engineering.crawl.shopping.configuration.FeignDefaultConfig;
|
||||
import com.myoa.engineering.crawl.shopping.dto.slack.SlackMessageDTO;
|
||||
import com.myoa.engineering.crawl.shopping.dto.slack.v1.SlackMessageDTO;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.myoa.engineering.crawl.shopping.service;
|
||||
|
||||
import com.myoa.engineering.crawl.shopping.configuration.slack.properties.SlackSecretProperties;
|
||||
import com.myoa.engineering.crawl.shopping.dto.slack.SlackMessageDTO;
|
||||
import com.myoa.engineering.crawl.shopping.dto.slack.v1.SlackMessageDTO;
|
||||
import com.myoa.engineering.crawl.shopping.infra.client.slack.SlackAPIClient;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
|
Loading…
Reference in New Issue