diff --git a/.env b/.env
new file mode 100644
index 0000000..d312488
--- /dev/null
+++ b/.env
@@ -0,0 +1,3 @@
+DB_URL=jdbc:postgresql://localhost:5432/whatsapp_bot
+DB_USERNAME=whatsapp_user
+DB_PASSWORD=RITHosting123
diff --git a/db/whatsappbot.mv.db b/db/whatsappbot.mv.db
index d10c6e6..770bc98 100644
Binary files a/db/whatsappbot.mv.db and b/db/whatsappbot.mv.db differ
diff --git a/pom.xml b/pom.xml
index 11e2628..5376ff9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,11 @@
h2
runtime
+
+ org.postgresql
+ postgresql
+ runtime
+
com.fasterxml.jackson.core
jackson-databind
diff --git a/src/main/java/com/rit/whatsapp/controller/WebhookController.java b/src/main/java/com/rit/whatsapp/controller/WebhookController.java
index 6e09149..488b28c 100644
--- a/src/main/java/com/rit/whatsapp/controller/WebhookController.java
+++ b/src/main/java/com/rit/whatsapp/controller/WebhookController.java
@@ -198,11 +198,36 @@ public class WebhookController {
return;
}
+ if ("student_show_menu".equals(selectedButtonId)) {
+ studentMenuHandler.sendStudentMenuDirectly(phoneNumber);
+ return;
+ }
+
if ("student_exam_fees".equals(selectedButtonId)) {
studentMenuHandler.handleExamFees(phoneNumber);
return;
}
+ if ("student_cat1_marks".equals(selectedButtonId)) {
+ studentMenuHandler.handleCat1Marks(phoneNumber);
+ return;
+ }
+
+ if ("student_cat2_marks".equals(selectedButtonId)) {
+ studentMenuHandler.handleCat2Marks(phoneNumber);
+ return;
+ }
+
+ if ("student_cat3_marks".equals(selectedButtonId)) {
+ studentMenuHandler.handleCat3Marks(phoneNumber);
+ return;
+ }
+
+ if ("student_assignment_marks".equals(selectedButtonId)) {
+ studentMenuHandler.handleAssignmentMarks(phoneNumber);
+ return;
+ }
+
if ("student_payment_history".equals(selectedButtonId)) {
studentMenuHandler.handlePaymentHistory(phoneNumber);
return;
diff --git a/src/main/java/com/rit/whatsapp/handler/GrievanceHandler.java b/src/main/java/com/rit/whatsapp/handler/GrievanceHandler.java
index 5137562..638c5cc 100644
--- a/src/main/java/com/rit/whatsapp/handler/GrievanceHandler.java
+++ b/src/main/java/com/rit/whatsapp/handler/GrievanceHandler.java
@@ -7,6 +7,8 @@ import com.rit.whatsapp.service.WhatsAppMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import org.springframework.context.annotation.Lazy;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -18,11 +20,13 @@ public class GrievanceHandler {
private final WhatsAppMessageService messageService;
private final SessionService sessionService;
+ private final StudentMenuHandler studentMenuHandler;
@Autowired
- public GrievanceHandler(WhatsAppMessageService messageService, SessionService sessionService) {
+ public GrievanceHandler(WhatsAppMessageService messageService, SessionService sessionService, @Lazy StudentMenuHandler studentMenuHandler) {
this.messageService = messageService;
this.sessionService = sessionService;
+ this.studentMenuHandler = studentMenuHandler;
}
public void startGrievanceFlow(String phoneNumber) {
@@ -39,6 +43,7 @@ public class GrievanceHandler {
);
messageService.sendInteractiveMessage(phoneNumber, buttonMessage);
+ studentMenuHandler.sendStudentMenuDirectly(phoneNumber);
}
public void handleCategorySelection(String phoneNumber, String selectedCategory) {
@@ -60,6 +65,9 @@ public class GrievanceHandler {
// Reset state back to main menu
sessionService.resetState(phoneNumber);
+
+ // Display student menu
+ studentMenuHandler.sendStudentMenuDirectly(phoneNumber);
}
private Map createButton(String id, String title) {
diff --git a/src/main/java/com/rit/whatsapp/handler/StudentMenuHandler.java b/src/main/java/com/rit/whatsapp/handler/StudentMenuHandler.java
index d1f1b04..253cb25 100644
--- a/src/main/java/com/rit/whatsapp/handler/StudentMenuHandler.java
+++ b/src/main/java/com/rit/whatsapp/handler/StudentMenuHandler.java
@@ -81,22 +81,43 @@ public class StudentMenuHandler {
weeklyBtn.put("id", "student_weekly_timetable");
weeklyBtn.put("title", "Weekly Timetable");
buttons.add(weeklyBtn);
+
+ Map menuBtn = new HashMap<>();
+ menuBtn.put("id", "student_show_menu");
+ menuBtn.put("title", "Student Menu");
+ buttons.add(menuBtn);
+
System.out.println("FINAL TODAY TIMETABLE MESSAGE:\n" + todaySchedule);
Map buttonMessage = WhatsAppMessageBuilder.buildButtonMessage(todaySchedule, buttons);
messageService.sendInteractiveMessage(phoneNumber, buttonMessage);
+ sendStudentMenuDirectly(phoneNumber);
+ break;
+
+ case "student_internal_marks":
+ sendInternalMarksMenu(phoneNumber);
break;
- case "student_internal_marks":
- String rawCatMarks = imsApiService.getCatMarks(token);
- String rawAssignmentMarks = imsApiService.getAssignmentMarks(token);
- sendResponseWithMenu(phoneNumber, MessageFormatter.formatInternalMarks(rawCatMarks, rawAssignmentMarks));
+ case "student_cat1_marks":
+ handleCat1Marks(phoneNumber);
break;
-
+
+ case "student_cat2_marks":
+ handleCat2Marks(phoneNumber);
+ break;
+
+ case "student_cat3_marks":
+ handleCat3Marks(phoneNumber);
+ break;
+
+ case "student_assignment_marks":
+ handleAssignmentMarks(phoneNumber);
+ break;
+
case "student_semester_results":
sendSemesterSelection(phoneNumber, token);
break;
-
+
case "student_fee_details": {
String rawFees = imsApiService.getFees(token);
String bodyText = MessageFormatter.formatAcademicFeesOnly(rawFees);
@@ -118,6 +139,7 @@ public class StudentMenuHandler {
Map feeButtonMessage = WhatsAppMessageBuilder.buildButtonMessage(bodyText, feeButtons);
messageService.sendInteractiveMessage(phoneNumber, feeButtonMessage);
+ sendStudentMenuDirectly(phoneNumber);
break;
}
@@ -166,6 +188,7 @@ public class StudentMenuHandler {
);
messageService.sendInteractiveMessage(phoneNumber, interactiveList);
+ sendStudentMenuDirectly(phoneNumber);
}
public void handleSemesterSelection(String phoneNumber, String selectedOptionId) {
@@ -312,6 +335,7 @@ public class StudentMenuHandler {
"Receipts", formattedHistory, "Download Receipt", receiptRows
);
messageService.sendInteractiveMessage(phoneNumber, listMessage);
+ sendStudentMenuDirectly(phoneNumber);
} else {
sendResponseWithMenu(phoneNumber, formattedHistory);
}
@@ -344,6 +368,80 @@ public class StudentMenuHandler {
rows
);
messageService.sendInteractiveMessage(phoneNumber, interactiveList);
+ sendStudentMenuDirectly(phoneNumber);
+ }
+
+ public void sendStudentMenuDirectly(String phoneNumber) {
+ sessionService.setUserState(phoneNumber, UserState.MAIN_MENU);
+
+ Map interactiveList = WhatsAppMessageBuilder.buildListMessage(
+ null,
+ "Select an option from the menu below",
+ "Student Menu",
+ getStudentMenuRows()
+ );
+ messageService.sendInteractiveMessage(phoneNumber, interactiveList);
+ }
+
+ public void sendInternalMarksMenu(String phoneNumber) {
+ List