Skip to content

Commit 6ada313

Browse files
committed
Process the response from users prompt asking to post kudos in Check-Ins.
1 parent 4ede442 commit 6ada313

File tree

4 files changed

+73
-11
lines changed

4 files changed

+73
-11
lines changed

server/src/main/java/com/objectcomputing/checkins/services/memberprofile/currentuser/CurrentUserServicesImpl.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public boolean hasRole(RoleType role) {
5757

5858
@Override
5959
public boolean hasPermission(Permission permission) {
60-
MemberProfile currentUser = getCurrentUser();
60+
MemberProfile currentUser = getCurrentUserImpl();
6161
if (currentUser == null) {
6262
return false;
6363
}
@@ -72,16 +72,23 @@ public boolean isAdmin() {
7272
return hasRole(RoleType.ADMIN);
7373
}
7474

75-
public MemberProfile getCurrentUser() {
75+
private MemberProfile getCurrentUserImpl() {
7676
if (securityService != null) {
7777
Optional<Authentication> auth = securityService.getAuthentication();
7878
if (auth.isPresent() && auth.get().getAttributes().get("email") != null) {
7979
String workEmail = auth.get().getAttributes().get("email").toString();
8080
return memberProfileRepo.findByWorkEmail(workEmail).orElse(null);
8181
}
8282
}
83+
return null;
84+
}
8385

84-
throw new NotFoundException("No active members in the system");
86+
public MemberProfile getCurrentUser() {
87+
MemberProfile profile = getCurrentUserImpl();
88+
if (profile == null) {
89+
throw new NotFoundException("No active members in the system");
90+
}
91+
return profile;
8592
}
8693

8794
private MemberProfile saveNewUser(String firstName, String lastName, String workEmail) {

server/src/main/java/com/objectcomputing/checkins/services/slack/SlackSubmissionHandler.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.objectcomputing.checkins.services.slack.pulseresponse.PulseSlackCommand;
44
import com.objectcomputing.checkins.services.slack.pulseresponse.SlackPulseResponseConverter;
5+
import com.objectcomputing.checkins.services.slack.kudos.SlackKudosResponseHandler;
56

67
import com.objectcomputing.checkins.util.form.FormUrlEncodedDecoder;
78
import com.objectcomputing.checkins.services.pulseresponse.PulseResponse;
@@ -23,19 +24,24 @@
2324

2425
@Singleton
2526
public class SlackSubmissionHandler {
27+
private final String typeKey = "type";
28+
2629
private final PulseResponseService pulseResponseServices;
2730
private final SlackSignatureVerifier slackSignatureVerifier;
2831
private final PulseSlackCommand pulseSlackCommand;
2932
private final SlackPulseResponseConverter slackPulseResponseConverter;
33+
private final SlackKudosResponseHandler slackKudosResponseHandler;
3034

3135
public SlackSubmissionHandler(PulseResponseService pulseResponseServices,
3236
SlackSignatureVerifier slackSignatureVerifier,
3337
PulseSlackCommand pulseSlackCommand,
34-
SlackPulseResponseConverter slackPulseResponseConverter) {
38+
SlackPulseResponseConverter slackPulseResponseConverter,
39+
SlackKudosResponseHandler slackKudosResponseHandler) {
3540
this.pulseResponseServices = pulseResponseServices;
3641
this.slackSignatureVerifier = slackSignatureVerifier;
3742
this.pulseSlackCommand = pulseSlackCommand;
3843
this.slackPulseResponseConverter = slackPulseResponseConverter;
44+
this.slackKudosResponseHandler = slackKudosResponseHandler;
3945
}
4046

4147
public HttpResponse commandResponse(String signature,
@@ -85,6 +91,8 @@ public HttpResponse externalResponse(String signature,
8591
new TypeReference<>() {});
8692
if (isPulseSubmission(map)) {
8793
return completePulse(map);
94+
} else if (isKudosSubmission(map)) {
95+
return completeKudos(map);
8896
}
8997
} catch(JsonProcessingException ex) {
9098
// Fall through to the bottom...
@@ -98,7 +106,6 @@ public HttpResponse externalResponse(String signature,
98106
}
99107

100108
private boolean isPulseSubmission(Map<String, Object> map) {
101-
final String typeKey = "type";
102109
if (map.containsKey(typeKey)) {
103110
final String type = (String)map.get(typeKey);
104111
if (type.equals("view_submission")) {
@@ -147,4 +154,24 @@ private HttpResponse completePulse(Map<String, Object> map) {
147154
}
148155
return HttpResponse.ok();
149156
}
157+
158+
private boolean isKudosSubmission(Map<String, Object> map) {
159+
if (map.containsKey(typeKey)) {
160+
final String type = (String)map.get(typeKey);
161+
if (type.equals("block_actions")) {
162+
final String actionKey = "actions";
163+
return map.containsKey(actionKey);
164+
}
165+
}
166+
return false;
167+
}
168+
169+
private HttpResponse completeKudos(Map<String, Object> map) {
170+
if (slackKudosResponseHandler.handle(map)) {
171+
return HttpResponse.ok();
172+
} else {
173+
// Something was wrong and we were not able to handle this.
174+
return HttpResponse.unprocessableEntity();
175+
}
176+
}
150177
}

server/src/main/java/com/objectcomputing/checkins/services/slack/kudos/KudosChannelReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class KudosChannelReader {
3131
@Inject
3232
private SlackKudosCreator slackKudosCreator;
3333

34-
@Scheduled(fixedDelay = "1m")
34+
@Scheduled(fixedDelay = "10m")
3535
public void readChannel() {
3636
if (lastImport == null) {
3737
lastImport = LocalDateTime.now();

server/src/main/java/com/objectcomputing/checkins/services/slack/kudos/SlackKudosResponseHandler.java

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.slf4j.Logger;
1212
import org.slf4j.LoggerFactory;
1313

14+
import java.util.Map;
1415
import java.util.UUID;
1516
import java.util.List;
1617
import java.util.ArrayList;
@@ -29,7 +30,38 @@ public class SlackKudosResponseHandler {
2930
@Inject
3031
private MemberProfileServices memberProfileServices;
3132

32-
public void store(UUID automatedKudosId) {
33+
public boolean handle(Map<String, Object> map) {
34+
try {
35+
// Get the blocks out of the message so that we can grab the
36+
// automated kudos id.
37+
Map<String, Object> message =
38+
(Map<String, Object>)map.get("message");
39+
List<Object> blocks = (List<Object>)message.get("blocks");
40+
if (blocks.size() > 0) {
41+
Map<String, Object> first = (Map<String, Object>)blocks.get(0);
42+
String id = (String)first.get("block_id");
43+
UUID uuid = UUID.fromString(id);
44+
45+
List<Object> actions = (List<Object>)map.get("actions");
46+
if (actions.size() > 0) {
47+
Map<String, Object> entry =
48+
(Map<String, Object>)actions.get(0);
49+
String actionId = (String)entry.get("action_id");
50+
if (actionId.equals("yes_button")) {
51+
store(uuid);
52+
} else {
53+
automatedKudosRepository.deleteById(uuid);
54+
}
55+
return true;
56+
}
57+
}
58+
} catch (Exception ex) {
59+
LOG.error("SlackKudosResponseHandler.handle: " + ex.toString());
60+
}
61+
return false;
62+
}
63+
64+
private void store(UUID automatedKudosId) {
3365
Optional<AutomatedKudos> found =
3466
automatedKudosRepository.findById(automatedKudosId);
3567
if (found.isPresent()) {
@@ -49,8 +81,4 @@ public void store(UUID automatedKudosId) {
4981
automatedKudosId.toString());
5082
}
5183
}
52-
53-
public void remove(UUID automatedKudosId) {
54-
automatedKudosRepository.deleteById(automatedKudosId);
55-
}
5684
}

0 commit comments

Comments
 (0)