SlackDtos.java

  1. package no.nav.data.team.integration.slack.dto;

  2. import com.fasterxml.jackson.annotation.JsonInclude;
  3. import com.fasterxml.jackson.annotation.JsonInclude.Include;
  4. import com.fasterxml.jackson.annotation.JsonProperty;
  5. import com.fasterxml.jackson.databind.JsonNode;
  6. import lombok.Data;
  7. import lombok.Value;
  8. import no.nav.data.common.utils.JsonUtils;
  9. import no.nav.data.team.contact.domain.SlackChannel;
  10. import no.nav.data.team.contact.domain.SlackUser;
  11. import org.springframework.util.Assert;

  12. import java.util.List;

  13. public class SlackDtos {

  14.     @Value
  15.     public static class PostMessageRequest {

  16.         String channel;
  17.         List<Block> blocks;

  18.         @Value
  19.         public static class Block {

  20.             public static Block header(String text) {
  21.                 return new Block(BlockType.header, Text.plain(text));
  22.             }

  23.             public static Block text(String text) {
  24.                 return new Block(BlockType.section, Text.markdown(text));
  25.             }

  26.             public static Block divider() {
  27.                 return new Block(BlockType.divider, null);
  28.             }

  29.             /**
  30.              * Create Block with text, keeping other properties
  31.              */
  32.             public Block withText(String newText) {
  33.                 Assert.isTrue(text != null, "this is not a text block");
  34.                 return new Block(type, new Text(text.type, newText));
  35.             }

  36.             public enum BlockType {
  37.                 header, section, divider
  38.             }

  39.             BlockType type;
  40.             @JsonInclude(Include.NON_NULL)
  41.             Text text;

  42.             @Value
  43.             public static class Text {

  44.                 enum TextType {mrkdwn, plain_text}

  45.                 TextType type;
  46.                 String text;

  47.                 public static Text plain(String text) {
  48.                     return new Text(TextType.plain_text, text);
  49.                 }

  50.                 public static Text markdown(String text) {
  51.                     return new Text(TextType.mrkdwn, text);

  52.                 }
  53.             }
  54.         }
  55.     }

  56.     @Data
  57.     public static class PostMessageResponse implements Response {

  58.         private boolean ok;
  59.         private Double ts;
  60.         private String error;
  61.         @JsonProperty("response_metadata")
  62.         private JsonNode responseMetadata;

  63.         @Override
  64.         public String getError() {
  65.             return error + "\n" + JsonUtils.toJson(responseMetadata);
  66.         }

  67.     }

  68.     @Value
  69.     public static class CreateConversationRequest {

  70.         List<String> users;

  71.         public CreateConversationRequest(String userId) {
  72.             this.users = List.of(userId);
  73.         }
  74.     }

  75.     @Data
  76.     public static class CreateConversationResponse implements Response {

  77.         private boolean ok;
  78.         private String error;
  79.         private Channel channel;

  80.     }

  81.     @Data
  82.     public static class Channel {

  83.         private String id;
  84.         private String name;
  85.         @JsonProperty("num_members")
  86.         private Integer numMembers;

  87.         public SlackChannel toDomain() {
  88.             return new SlackChannel(id, name, numMembers);
  89.         }
  90.     }

  91.     @Data
  92.     public static class UserResponse implements Response {

  93.         private boolean ok;
  94.         private String error;
  95.         private User user;

  96.         @Data
  97.         public static class User {

  98.             private String id;
  99.             @JsonProperty("real_name")
  100.             private String name;

  101.             public SlackUser toDomain() {
  102.                 return new SlackUser(id, name);
  103.             }

  104.         }
  105.     }

  106.     @Data
  107.     public static class ResponseMetadata {

  108.         @JsonProperty("next_cursor")
  109.         private String nextCursor;
  110.     }

  111.     @Data
  112.     public static class ListChannelResponse implements Response {

  113.         private boolean ok;
  114.         private String error;
  115.         private List<Channel> channels;
  116.         @JsonProperty("response_metadata")
  117.         private ResponseMetadata responseMetadata;
  118.     }

  119.     public interface Response {

  120.         boolean isOk();

  121.         String getError();

  122.     }

  123. }