From c6fba262d10e8d7d4d9befce028dd541be9d4908 Mon Sep 17 00:00:00 2001
From: Aditya Bhansali <adityab3@illinois.edu>
Date: Thu, 5 Nov 2020 15:45:19 -0600
Subject: [PATCH] Added a check for duplicate emails in
 AddPreRegisteredPatientAction

---
 .../action/AddPreRegisteredPatientAction.java |  7 +++++-
 .../ncsu/csc/itrust/dao/mysql/PatientDAO.java | 24 ++++++++++++++++++-
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/iTrust/src/edu/ncsu/csc/itrust/action/AddPreRegisteredPatientAction.java b/iTrust/src/edu/ncsu/csc/itrust/action/AddPreRegisteredPatientAction.java
index 54dcbd3..639ffd0 100644
--- a/iTrust/src/edu/ncsu/csc/itrust/action/AddPreRegisteredPatientAction.java
+++ b/iTrust/src/edu/ncsu/csc/itrust/action/AddPreRegisteredPatientAction.java
@@ -49,7 +49,12 @@ public class AddPreRegisteredPatientAction {
 	
 	public long addPatient(PatientBean p) throws FormValidationException, ITrustException {
 		
-		new AddPatientValidator().validate(p);
+        new AddPatientValidator().validate(p);
+        
+        // Make sure the email is unique
+        if (patientDAO.isEmailInUse(p.getEmail())) {
+            throw new ITrustException("This email is already in use. Please use another email address.");
+        }
 		
 		long newMID = patientDAO.addEmptyPatient();   // the new added row id in the database
 		p.setMID(newMID);
diff --git a/iTrust/src/edu/ncsu/csc/itrust/dao/mysql/PatientDAO.java b/iTrust/src/edu/ncsu/csc/itrust/dao/mysql/PatientDAO.java
index 0b9ed80..416a2aa 100644
--- a/iTrust/src/edu/ncsu/csc/itrust/dao/mysql/PatientDAO.java
+++ b/iTrust/src/edu/ncsu/csc/itrust/dao/mysql/PatientDAO.java
@@ -222,7 +222,29 @@ public class PatientDAO {
 		} finally {
 			DBUtil.closeConnection(conn, ps);
 		}
-	}
+    }
+    
+    public boolean isEmailInUse(String email) throws DBException {
+        Connection conn = null;
+		PreparedStatement ps = null;
+		boolean emailInUse = false;
+		try {
+			conn = factory.getConnection();
+			ps = conn.prepareStatement("SELECT * FROM patients WHERE email=?");
+			ps.setString(1, email);
+			ResultSet rs;
+			rs = ps.executeQuery();
+			emailInUse = rs.next();
+			rs.close();
+			ps.close();
+		} catch (SQLException e) {
+			
+			throw new DBException(e);
+		} finally {
+			DBUtil.closeConnection(conn, ps);
+		}
+		return emailInUse;
+    }
 	
 	public void addHistory(long pid, long hcpid) throws DBException {
 		Connection conn = null;
-- 
GitLab