Skip to content

Commit d7aca04

Browse files
authored
Merge pull request #2902 from objectcomputing/develop
Update Release branch
2 parents 413ea3a + 71fc0be commit d7aca04

File tree

92 files changed

+3789
-602
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+3789
-602
lines changed

.github/workflows/gradle-build-production.yml

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ jobs:
8787
--set-env-vars "^@^MICRONAUT_ENVIRONMENTS=cloud,google,gcp" \
8888
--set-env-vars "SLACK_WEBHOOK_URL=${{ secrets.SLACK_WEBHOOK_URL }}" \
8989
--set-env-vars "SLACK_BOT_TOKEN=${{ secrets.SLACK_BOT_TOKEN }}" \
90+
--set-env-vars "SLACK_KUDOS_CHANNEL_ID=${{ secrets.SLACK_KUDOS_CHANNEL_ID }}" \
9091
--set-env-vars "SLACK_SIGNING_SECRET=${{ secrets.SLACK_PULSE_SIGNING_SECRET }}" \
9192
--platform "managed" \
9293
--max-instances 8 \

.github/workflows/gradle-deploy-develop.yml

+1
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ jobs:
113113
--set-env-vars "SLACK_WEBHOOK_URL=${{ secrets.SLACK_WEBHOOK_URL }}" \
114114
--set-env-vars "SLACK_BOT_TOKEN=${{ secrets.SLACK_BOT_TOKEN }}" \
115115
--set-env-vars "SLACK_SIGNING_SECRET=${{ secrets.SLACK_PULSE_SIGNING_SECRET }}" \
116+
--set-env-vars "SLACK_KUDOS_CHANNEL_ID=${{ secrets.SLACK_KUDOS_CHANNEL_ID }}" \
116117
--platform "managed" \
117118
--max-instances 2 \
118119
--allow-unauthenticated

.github/workflows/gradle-deploy-native-develop.yml

+1
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ jobs:
111111
--set-env-vars "^@^MICRONAUT_ENVIRONMENTS=dev,cloud,google,gcp" \
112112
--set-env-vars "SLACK_WEBHOOK_URL=${{ secrets.SLACK_WEBHOOK_URL }}" \
113113
--set-env-vars "SLACK_BOT_TOKEN=${{ secrets.SLACK_BOT_TOKEN }}" \
114+
--set-env-vars "SLACK_KUDOS_CHANNEL_ID=${{ secrets.SLACK_KUDOS_CHANNEL_ID }}" \
114115
--set-env-vars "SLACK_SIGNING_SECRET=${{ secrets.SLACK_PULSE_SIGNING_SECRET }}" \
115116
--platform "managed" \
116117
--max-instances 2 \

docker-compose.yaml

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
version: '3'
21
services:
32
postgresql:
43
image: postgres:17.2

docs/Gemfile.lock

+10-8
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ GEM
220220
rb-fsevent (~> 0.10, >= 0.10.3)
221221
rb-inotify (~> 0.9, >= 0.9.10)
222222
mercenary (0.3.6)
223+
mini_portile2 (2.8.8)
223224
minima (2.5.1)
224225
jekyll (>= 3.5, < 5.0)
225226
jekyll-feed (~> 0.9)
@@ -228,25 +229,26 @@ GEM
228229
mutex_m (0.2.0)
229230
net-http (0.4.1)
230231
uri
231-
nokogiri (1.16.5-aarch64-linux)
232+
nokogiri (1.18.3)
233+
mini_portile2 (~> 2.8.2)
232234
racc (~> 1.4)
233-
nokogiri (1.16.5-arm-linux)
235+
nokogiri (1.18.3-aarch64-linux-gnu)
234236
racc (~> 1.4)
235-
nokogiri (1.16.5-arm64-darwin)
237+
nokogiri (1.18.3-arm-linux-gnu)
236238
racc (~> 1.4)
237-
nokogiri (1.16.5-x86-linux)
239+
nokogiri (1.18.3-arm64-darwin)
238240
racc (~> 1.4)
239-
nokogiri (1.16.5-x86_64-darwin)
241+
nokogiri (1.18.3-x86_64-darwin)
240242
racc (~> 1.4)
241-
nokogiri (1.16.5-x86_64-linux)
243+
nokogiri (1.18.3-x86_64-linux-gnu)
242244
racc (~> 1.4)
243245
octokit (4.25.1)
244246
faraday (>= 1, < 3)
245247
sawyer (~> 0.9)
246248
pathutil (0.16.2)
247249
forwardable-extended (~> 2.6)
248250
public_suffix (5.0.4)
249-
racc (1.7.3)
251+
racc (1.8.1)
250252
rake (13.1.0)
251253
rb-fsevent (0.11.2)
252254
rb-inotify (0.10.1)
@@ -275,7 +277,7 @@ GEM
275277
unf_ext
276278
unf_ext (0.0.9.1)
277279
unicode-display_width (1.8.0)
278-
uri (0.13.0)
280+
uri (0.13.2)
279281
webrick (1.8.2)
280282

281283
PLATFORMS

server/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77
id "jacoco"
88
}
99

10-
version "0.8.14"
10+
version "0.8.15"
1111
group "com.objectcomputing.checkins"
1212

1313
repositories {

server/src/main/java/com/objectcomputing/checkins/configuration/CheckInsConfiguration.java

+3
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ public static class SlackConfig {
8282

8383
@NotBlank
8484
private String signingSecret;
85+
86+
@NotBlank
87+
private String kudosChannel;
8588
}
8689
}
8790
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package com.objectcomputing.checkins.notifications.social_media;
2+
3+
import com.objectcomputing.checkins.configuration.CheckInsConfiguration;
4+
5+
import com.slack.api.Slack;
6+
import com.slack.api.methods.MethodsClient;
7+
import com.slack.api.methods.request.chat.ChatPostMessageRequest;
8+
import com.slack.api.methods.response.chat.ChatPostMessageResponse;
9+
import com.slack.api.methods.request.chat.ChatDeleteRequest;
10+
import com.slack.api.methods.response.chat.ChatDeleteResponse;
11+
import com.slack.api.methods.request.conversations.ConversationsOpenRequest;
12+
import com.slack.api.methods.response.conversations.ConversationsOpenResponse;
13+
14+
import jakarta.inject.Singleton;
15+
import jakarta.inject.Inject;
16+
17+
import org.slf4j.Logger;
18+
import org.slf4j.LoggerFactory;
19+
20+
import java.util.List;
21+
22+
@Singleton
23+
public class SlackSender {
24+
private static final Logger LOG = LoggerFactory.getLogger(SlackSender.class);
25+
26+
@Inject
27+
private CheckInsConfiguration configuration;
28+
29+
public boolean send(List<String> userIds, String slackBlocks) {
30+
// See if we have a token.
31+
String token = configuration.getApplication()
32+
.getSlack().getBotToken();
33+
if (token != null && !slackBlocks.isEmpty()) {
34+
MethodsClient client = Slack.getInstance().methods(token);
35+
36+
try {
37+
ConversationsOpenResponse openResponse =
38+
client.conversationsOpen(ConversationsOpenRequest.builder()
39+
.users(userIds)
40+
.returnIm(true)
41+
.build());
42+
if (!openResponse.isOk()) {
43+
LOG.error("Unable to open the conversation");
44+
return false;
45+
}
46+
47+
return send(openResponse.getChannel().getId(), slackBlocks);
48+
} catch(Exception ex) {
49+
LOG.error("SlackSender.send: " + ex.toString());
50+
return false;
51+
}
52+
} else {
53+
LOG.error("Missing token or missing slack blocks");
54+
return false;
55+
}
56+
}
57+
58+
public boolean send(String channelId, String slackBlocks) {
59+
// See if we have a token.
60+
String token = configuration.getApplication()
61+
.getSlack().getBotToken();
62+
if (token != null && !slackBlocks.isEmpty()) {
63+
MethodsClient client = Slack.getInstance().methods(token);
64+
65+
try {
66+
ChatPostMessageRequest request = ChatPostMessageRequest
67+
.builder()
68+
.channel(channelId)
69+
.blocksAsString(slackBlocks)
70+
.build();
71+
72+
// Send it to Slack
73+
ChatPostMessageResponse response = client.chatPostMessage(request);
74+
75+
if (!response.isOk()) {
76+
LOG.error("Unable to send the chat message: " +
77+
response.getError());
78+
}
79+
80+
return response.isOk();
81+
} catch(Exception ex) {
82+
LOG.error("SlackSender.send: " + ex.toString());
83+
return false;
84+
}
85+
} else {
86+
LOG.error("Missing token or missing slack blocks");
87+
return false;
88+
}
89+
}
90+
91+
public boolean delete(String channel, String ts) {
92+
// See if we have a token.
93+
String token = configuration.getApplication()
94+
.getSlack().getBotToken();
95+
if (token != null) {
96+
MethodsClient client = Slack.getInstance().methods(token);
97+
98+
try {
99+
ChatDeleteRequest request = ChatDeleteRequest
100+
.builder()
101+
.channel(channel)
102+
.ts(ts)
103+
.build();
104+
105+
// Send it to Slack
106+
ChatDeleteResponse response = client.chatDelete(request);
107+
108+
if (!response.isOk()) {
109+
LOG.error("Unable to delete the chat message: " +
110+
response.getError());
111+
}
112+
113+
return response.isOk();
114+
} catch(Exception ex) {
115+
LOG.error("SlackSender.delete: " + ex.toString());
116+
return false;
117+
}
118+
} else {
119+
LOG.error("Missing token or missing slack blocks");
120+
return false;
121+
}
122+
}
123+
}
124+

server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosController.java

+5
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ public Kudos create(@Body @Valid KudosCreateDTO kudos) {
3939
}
4040

4141
@Put
42+
public Kudos update(@Body @Valid KudosUpdateDTO kudos) {
43+
return kudosServices.update(kudos);
44+
}
45+
46+
@Put("/approve")
4247
public Kudos approve(@Body @Valid Kudos kudos) {
4348
return kudosServices.approve(kudos);
4449
}

server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosConverter.java

+2-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.objectcomputing.checkins.services.kudos;
22

3-
import com.objectcomputing.checkins.notifications.social_media.SlackSearch;
3+
import com.objectcomputing.checkins.services.slack.SlackSearch;
44
import com.objectcomputing.checkins.services.kudos.kudos_recipient.KudosRecipientServices;
55
import com.objectcomputing.checkins.services.kudos.kudos_recipient.KudosRecipient;
66
import com.objectcomputing.checkins.services.memberprofile.MemberProfileServices;
@@ -22,10 +22,6 @@
2222

2323
@Singleton
2424
public class KudosConverter {
25-
private record InternalBlock(
26-
List<LayoutBlock> blocks
27-
) {}
28-
2925
private final MemberProfileServices memberProfileServices;
3026
private final KudosRecipientServices kudosRecipientServices;
3127
private final SlackSearch slackSearch;
@@ -61,9 +57,8 @@ public String toSlackBlock(Kudos kudos) {
6157
.elements(content).build();
6258
RichTextBlock richTextBlock = RichTextBlock.builder()
6359
.elements(List.of(element)).build();
64-
InternalBlock block = new InternalBlock(List.of(richTextBlock));
6560
Gson mapper = GsonFactory.createSnakeCase();
66-
return mapper.toJson(block);
61+
return mapper.toJson(List.of(richTextBlock));
6762
}
6863

6964
private RichTextSectionElement.TextStyle boldItalic() {

server/src/main/java/com/objectcomputing/checkins/services/kudos/KudosServices.java

+4
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@ public interface KudosServices {
99

1010
Kudos save(KudosCreateDTO kudos);
1111

12+
Kudos update(KudosUpdateDTO kudos);
13+
1214
Kudos approve(Kudos kudos);
1315

16+
Kudos savePreapproved(KudosCreateDTO kudos);
17+
1418
List<KudosResponseDTO> getRecent();
1519

1620
KudosResponseDTO getById(UUID id);

0 commit comments

Comments
 (0)