Skip to content

Commit 568a05d

Browse files
committed
Merge branch 'nudge-rwb-users'
2 parents 85f02ef + 237edc8 commit 568a05d

File tree

3 files changed

+44
-10
lines changed

3 files changed

+44
-10
lines changed

avni-server-api/src/main/java/org/avni/messaging/api/MessageController.java

+29-5
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
package org.avni.messaging.api;
22

3+
import org.avni.messaging.contract.ManualMessageContract;
34
import org.avni.messaging.contract.glific.GlificMessageTemplate;
45
import org.avni.messaging.contract.web.MessageRequestResponse;
56
import org.avni.messaging.domain.MessageDeliveryStatus;
67
import org.avni.messaging.domain.MessageRequest;
78
import org.avni.messaging.domain.ReceiverType;
9+
import org.avni.messaging.domain.exception.GlificNotConfiguredException;
810
import org.avni.messaging.service.MessageRequestService;
911
import org.avni.messaging.service.MessageTemplateService;
12+
import org.avni.messaging.service.MessagingService;
13+
import org.avni.messaging.service.PhoneNumberNotAvailableOrIncorrectException;
1014
import org.avni.server.dao.UserRepository;
15+
import org.avni.server.domain.accessControl.PrivilegeType;
1116
import org.avni.server.service.IndividualService;
17+
import org.avni.server.service.accessControl.AccessControlService;
1218
import org.springframework.beans.factory.annotation.Autowired;
1319
import org.springframework.http.ResponseEntity;
1420
import org.springframework.security.access.prepost.PreAuthorize;
1521
import org.springframework.transaction.annotation.Transactional;
16-
import org.springframework.web.bind.annotation.PathVariable;
17-
import org.springframework.web.bind.annotation.RequestMapping;
18-
import org.springframework.web.bind.annotation.RequestMethod;
19-
import org.springframework.web.bind.annotation.RestController;
22+
import org.springframework.web.bind.annotation.*;
2023

2124
import java.util.List;
2225
import java.util.stream.Collectors;
@@ -25,15 +28,19 @@
2528
@RestController
2629
public class MessageController {
2730
private static final String MessageEndpoint = "/web/message";
31+
private final AccessControlService accessControlService;
2832
private final MessageRequestService messageRequestService;
33+
private final MessagingService messagingService;
2934
private final UserRepository userRepository;
3035
private final IndividualService individualService;
3136
private final MessageTemplateService messageTemplateService;
3237

3338
@Autowired
34-
public MessageController(MessageRequestService messageRequestService, UserRepository userRepository,
39+
public MessageController(AccessControlService accessControlService, MessageRequestService messageRequestService, MessagingService messagingService, UserRepository userRepository,
3540
IndividualService individualService, MessageTemplateService messageTemplateService) {
41+
this.accessControlService = accessControlService;
3642
this.messageRequestService = messageRequestService;
43+
this.messagingService = messagingService;
3744
this.userRepository = userRepository;
3845
this.individualService = individualService;
3946
this.messageTemplateService = messageTemplateService;
@@ -61,6 +68,23 @@ public ResponseEntity<List<MessageRequestResponse>> fetchAllMsgsNotYetSentForCon
6168
.collect(Collectors.toList()));
6269
}
6370

71+
@RequestMapping(value = MessageEndpoint + "/sendMsg", method = RequestMethod.POST)
72+
@PreAuthorize(value = "hasAnyAuthority('user')")
73+
@Transactional
74+
public ResponseEntity<MessageDeliveryStatus> sendMsgToContactUser(@RequestBody ManualMessageContract manualMessageContract) {
75+
accessControlService.checkPrivilege(PrivilegeType.Messaging);
76+
accessControlService.checkPrivilege(PrivilegeType.EditUserConfiguration);
77+
// TODO: 25/12/24 Return exception message as well in response to enable reporting insight into the issue
78+
try {
79+
messagingService.sendMessageSynchronously(manualMessageContract);
80+
} catch (GlificNotConfiguredException | PhoneNumberNotAvailableOrIncorrectException e) {
81+
return ResponseEntity.badRequest().body(MessageDeliveryStatus.NotSent);
82+
} catch (Exception e) {
83+
return ResponseEntity.internalServerError().body(MessageDeliveryStatus.Failed);
84+
}
85+
return ResponseEntity.ok(MessageDeliveryStatus.Sent);
86+
}
87+
6488
@RequestMapping(value = MessageEndpoint + "/contactGroup/{id}/msgsNotYetSent", method = RequestMethod.GET)
6589
@PreAuthorize(value = "hasAnyAuthority('user')")
6690
@Transactional(readOnly = true)

avni-server-api/src/main/java/org/avni/messaging/service/MessagingService.java

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.avni.messaging.service;
22

33
import com.bugsnag.Bugsnag;
4+
import org.avni.messaging.contract.ManualMessageContract;
45
import org.avni.messaging.contract.MessageRuleContract;
56
import org.avni.messaging.domain.*;
67
import org.avni.messaging.domain.exception.GlificGroupMessageFailureException;
@@ -130,6 +131,18 @@ public Page<MessageRule> findByEntityTypeAndEntityTypeId(EntityType entityType,
130131
return messageRuleRepository.findByEntityTypeAndEntityTypeId(entityType, entityTypeId, pageable);
131132
}
132133

134+
@Transactional
135+
public void sendMessageSynchronously(ManualMessageContract manualMessageContract)
136+
throws GlificNotConfiguredException, RuleExecutionException, PhoneNumberNotAvailableOrIncorrectException {
137+
ManualMessage manualMessage = new ManualMessage(manualMessageContract.getMessageTemplateId(), manualMessageContract.getParameters());
138+
manualMessage.assignUUIDIfRequired();
139+
MessageReceiver messageReceiver = messageReceiverService.saveReceiverIfRequired(manualMessageContract.getReceiverType(),
140+
Long.parseLong(manualMessageContract.getReceiverId()));
141+
MessageRequest messageRequest = new MessageRequest(manualMessage, messageReceiver, manualMessageContract.getScheduledDateTime());
142+
messageRequest.assignUUIDIfRequired();
143+
sendMessageToGlific(messageRequest);
144+
}
145+
133146
@Transactional(propagation = Propagation.REQUIRES_NEW)
134147
public MessageRequest sendMessage(MessageRequest messageRequest) {
135148
logger.debug(String.format("Sending message for %d", messageRequest.getId()));
@@ -170,8 +183,8 @@ public void scheduleManualMessage(String receiverId, ReceiverType receiverType,
170183
messageRequestService.createManualMessageRequest(manualMessage, messageReceiver, scheduledDateTime);
171184
}
172185

173-
private void sendMessageToGlific(MessageRequest messageRequest) throws PhoneNumberNotAvailableOrIncorrectException, RuleExecutionException, GlificNotConfiguredException {
174-
if(messageRequest.getManualMessage() != null)
186+
public void sendMessageToGlific(MessageRequest messageRequest) throws PhoneNumberNotAvailableOrIncorrectException, RuleExecutionException, GlificNotConfiguredException {
187+
if (messageRequest.getManualMessage() != null)
175188
sendManualMessage(messageRequest);
176189
else
177190
individualMessagingService.sendAutomatedMessage(messageRequest);

makefiles/staging.mk

-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
# I have setup the environment variables in my bash_profile so that I can just run it whenever I want in live mode. You could do that too (Vivek).
2-
tunnel_staging_db:
3-
ssh avni-staging -L 6015:stagingdb.openchs.org:5432
4-
52
tunnel_staging_server_for_debug:
63
ssh avni-staging -L 5005:127.0.0.1:5005
74

0 commit comments

Comments
 (0)