feat: init development branch with permanent access token and menu handlers
This commit is contained in:
@@ -27,18 +27,21 @@ public class WebhookController {
|
||||
private final GrievanceHandler grievanceHandler;
|
||||
private final LoginHandler loginHandler;
|
||||
private final ObjectMapper objectMapper;
|
||||
private final com.rit.whatsapp.handler.FacultyMenuHandler facultyMenuHandler;
|
||||
|
||||
@Autowired
|
||||
public WebhookController(WhatsAppMessageService messageService,
|
||||
SessionService sessionService,
|
||||
StudentMenuHandler studentMenuHandler,
|
||||
GrievanceHandler grievanceHandler,
|
||||
LoginHandler loginHandler) {
|
||||
LoginHandler loginHandler,
|
||||
com.rit.whatsapp.handler.FacultyMenuHandler facultyMenuHandler) {
|
||||
this.messageService = messageService;
|
||||
this.sessionService = sessionService;
|
||||
this.studentMenuHandler = studentMenuHandler;
|
||||
this.grievanceHandler = grievanceHandler;
|
||||
this.loginHandler = loginHandler;
|
||||
this.facultyMenuHandler = facultyMenuHandler;
|
||||
this.objectMapper = new ObjectMapper();
|
||||
}
|
||||
|
||||
@@ -88,13 +91,24 @@ public class WebhookController {
|
||||
if ("text".equals(messageType) && messageNode.get("text").get("body").asText().trim().equalsIgnoreCase("reset")) {
|
||||
sessionService.resetState(fromPhoneNumber);
|
||||
if (isAuthenticated) {
|
||||
studentMenuHandler.sendMainMenu(fromPhoneNumber);
|
||||
if (sessionService.isFaculty(fromPhoneNumber)) {
|
||||
facultyMenuHandler.sendMainMenu(fromPhoneNumber);
|
||||
} else {
|
||||
studentMenuHandler.sendMainMenu(fromPhoneNumber);
|
||||
}
|
||||
} else {
|
||||
loginHandler.startLoginFlow(fromPhoneNumber);
|
||||
}
|
||||
return ResponseEntity.ok("EVENT_RECEIVED");
|
||||
}
|
||||
|
||||
// Global erase command
|
||||
if ("text".equals(messageType) && messageNode.get("text").get("body").asText().trim().equalsIgnoreCase("erase")) {
|
||||
sessionService.deleteUser(fromPhoneNumber);
|
||||
messageService.sendMessage(fromPhoneNumber, "Your IMS credentials have been deleted from our records. Type 'Hi' to start again.");
|
||||
return ResponseEntity.ok("EVENT_RECEIVED");
|
||||
}
|
||||
|
||||
// Route unauthenticated users strictly to Login Flow
|
||||
if (!isAuthenticated) {
|
||||
if ("text".equals(messageType)) {
|
||||
@@ -117,7 +131,11 @@ public class WebhookController {
|
||||
String mimeType = imageNode.has("mime_type") ? imageNode.get("mime_type").asText() : "image/jpeg";
|
||||
grievanceHandler.handleImageInput(fromPhoneNumber, mediaId, mimeType);
|
||||
} else {
|
||||
studentMenuHandler.sendMainMenu(fromPhoneNumber);
|
||||
if (sessionService.isFaculty(fromPhoneNumber)) {
|
||||
facultyMenuHandler.sendMainMenu(fromPhoneNumber);
|
||||
} else {
|
||||
studentMenuHandler.sendMainMenu(fromPhoneNumber);
|
||||
}
|
||||
}
|
||||
} else if ("interactive".equals(messageType)) {
|
||||
JsonNode interactiveNode = messageNode.get("interactive");
|
||||
@@ -170,9 +188,16 @@ public class WebhookController {
|
||||
messageService.sendMessage(phoneNumber, "Please send a photo or type 'skip' / click 'Skip Image' button.");
|
||||
}
|
||||
break;
|
||||
case AWAITING_ABSENTEES:
|
||||
facultyMenuHandler.handleAbsenteesInput(phoneNumber, messageBody);
|
||||
break;
|
||||
case MAIN_MENU:
|
||||
default:
|
||||
studentMenuHandler.sendMainMenu(phoneNumber);
|
||||
if (sessionService.isFaculty(phoneNumber)) {
|
||||
facultyMenuHandler.sendMainMenu(phoneNumber);
|
||||
} else {
|
||||
studentMenuHandler.sendMainMenu(phoneNumber);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -188,16 +213,27 @@ public class WebhookController {
|
||||
grievanceHandler.handleDeleteSelection(phoneNumber, selectedListId);
|
||||
} else if (selectedListId.startsWith("student_")) {
|
||||
studentMenuHandler.handleMenuSelection(phoneNumber, selectedListId);
|
||||
} else if (selectedListId.startsWith("faculty_")) {
|
||||
facultyMenuHandler.handleMenuSelection(phoneNumber, selectedListId);
|
||||
} else if (selectedListId.startsWith("sem_")) {
|
||||
studentMenuHandler.handleSemesterSelection(phoneNumber, selectedListId);
|
||||
} else if (selectedListId.startsWith("receipt_") || selectedListId.startsWith("exam_") || selectedListId.startsWith("acad_") || selectedListId.startsWith("cons_")) {
|
||||
studentMenuHandler.handleReceiptSelection(phoneNumber, selectedListId);
|
||||
} else {
|
||||
studentMenuHandler.sendMainMenu(phoneNumber);
|
||||
if (sessionService.isFaculty(phoneNumber)) {
|
||||
facultyMenuHandler.sendMainMenu(phoneNumber);
|
||||
} else {
|
||||
studentMenuHandler.sendMainMenu(phoneNumber);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void handleInteractiveButtonSelection(String phoneNumber, String selectedButtonId, UserState currentState) {
|
||||
if (selectedButtonId.startsWith("faculty_")) {
|
||||
facultyMenuHandler.handleButtonSelection(phoneNumber, selectedButtonId);
|
||||
return;
|
||||
}
|
||||
|
||||
if ("student_logout".equals(selectedButtonId)) {
|
||||
sessionService.logoutUser(phoneNumber);
|
||||
messageService.sendMessage(phoneNumber, "You have been logged out successfully. Type 'Hi' to log in again.");
|
||||
@@ -247,7 +283,11 @@ public class WebhookController {
|
||||
if ("grv_skip_image".equals(selectedButtonId)) {
|
||||
grievanceHandler.handleSkipImage(phoneNumber);
|
||||
} else {
|
||||
studentMenuHandler.sendMainMenu(phoneNumber);
|
||||
if (sessionService.isFaculty(phoneNumber)) {
|
||||
facultyMenuHandler.sendMainMenu(phoneNumber);
|
||||
} else {
|
||||
studentMenuHandler.sendMainMenu(phoneNumber);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user