diff --git a/.gitignore b/.gitignore
index 6bc0bfa..8f9a6c5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -82,3 +82,9 @@ fabric.properties
.idea/sonarlint
# End of https://www.gitignore.io/api/intellij
+
+/target/
+/target/*
+/target/**
+
+*.DS_Store
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index f006a55..7ad4cb7 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -7,6 +7,7 @@
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 803a716..48b4b95 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/src/main/java/daos/DAO.java b/src/main/java/daos/DAO.java
new file mode 100644
index 0000000..6ac0d3b
--- /dev/null
+++ b/src/main/java/daos/DAO.java
@@ -0,0 +1,172 @@
+package daos;
+
+import models.User;
+import models.ConnectionFactory;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DAO implements UserDAO {
+
+ private List allUsers;
+
+ public User findById(Integer id) {
+
+ Connection connection = ConnectionFactory.getConnection();
+ try {
+ Statement stmt = connection.createStatement();
+ ResultSet rs = stmt.executeQuery("SELECT * FROM user WHERE id=" + id);
+ if(rs.next())
+ {
+ return extractUserFromResultSet(rs);
+ }
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ }
+
+ return null;
+ }
+
+ public List findAll() {
+ allUsers = new ArrayList();
+ Connection connection = ConnectionFactory.getConnection();
+ try {
+ Statement stmt = connection.createStatement();
+ ResultSet rs = stmt.executeQuery("SELECT * FROM user");
+ while(rs.next())
+ {
+ allUsers.add(extractUserFromResultSet(rs));
+ }
+ return allUsers;
+
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ }
+
+ return null;
+ }
+
+ public Boolean updateUser(User dto) {
+ Connection connection = ConnectionFactory.getConnection();
+ try {
+ PreparedStatement ps = createStatement(StatementType.UPDATE,connection,dto);
+ int i = ps.executeUpdate();
+ if(i == 1) {
+ return true;
+ }
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ } finally {
+ try {
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ return false;
+ }
+
+ public Boolean createUser(User dto) {
+ Connection connection = ConnectionFactory.getConnection();
+ try {
+ PreparedStatement ps = createStatement(StatementType.INSERT,connection,dto);
+ int i = ps.executeUpdate();
+ if(i == 1) {
+ return true;
+ }
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ } finally {
+ try {
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ return false;
+
+ }
+
+ public Boolean deleteUser(Integer id) {
+
+ Connection connection = ConnectionFactory.getConnection();
+ try {
+ Statement stmt = connection.createStatement();
+ int i = stmt.executeUpdate("DELETE FROM user WHERE id=" + id);
+ if(i == 1) {
+ return true;
+ }
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ } finally {
+ try {
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ return false;
+ }
+
+
+ private User extractUserFromResultSet(ResultSet rs) throws SQLException {
+ User user = new User();
+ user.setId( rs.getInt("id") );
+ user.setName( rs.getString("name") );
+ user.setPass( rs.getString("password") );
+ user.setEmail(rs.getString("email") );
+ user.setPhoneNumber(rs.getString("phone_number"));
+ return user;
+ }
+
+ private PreparedStatement createStatement (StatementType stmtype, Connection connection, User dto) throws SQLException {
+ PreparedStatement ps;
+
+ if (stmtype.getStatementType().equals("Insert")){
+ ps = connection.prepareStatement("INSERT INTO user VALUES (NULL, ?, ?, ?,?)");
+ ps.setString(1, dto.getName());
+ ps.setString(2, dto.getPass());
+ ps.setString(3,dto.getEmail());
+ ps.setString(4,dto.getPhoneNumber());
+
+ return ps;
+ }
+
+ if (stmtype.getStatementType().equals("Update")){
+ ps = connection.prepareStatement("UPDATE user SET name=?, password=?, email=?, phone_number=? WHERE id=?");
+ ps.setString(1, dto.getName());
+ ps.setString(2, dto.getPass());
+ ps.setString(3,dto.getEmail());
+ ps.setString(4,dto.getPhoneNumber());
+ ps.setInt(5, dto.getId());
+
+ return ps;
+ }
+ return null;
+ }
+}
+
+enum StatementType{
+ INSERT (1,"Insert"), UPDATE (2,"Update");
+
+ private String statementType;
+
+
+ private Integer key;
+
+ StatementType(Integer key, String stmtType) {
+ statementType = stmtType;
+ this.key = key;
+ }
+
+
+ public String getStatementType() {
+ return statementType;
+ }
+
+ public Integer getKey() {
+ return key;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/daos/DELETEME.txt b/src/main/java/daos/DELETEME.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/main/java/daos/UserDAO.java b/src/main/java/daos/UserDAO.java
new file mode 100644
index 0000000..0f8a1cd
--- /dev/null
+++ b/src/main/java/daos/UserDAO.java
@@ -0,0 +1,13 @@
+package daos;
+
+import models.User;
+
+import java.util.List;
+
+public interface UserDAO {
+ User findById (Integer id);
+ List findAll();
+ Boolean updateUser (User dto);
+ Boolean createUser (User dto);
+ Boolean deleteUser (Integer id);
+}
diff --git a/src/main/java/models/ConnectionFactory.java b/src/main/java/models/ConnectionFactory.java
new file mode 100644
index 0000000..66ebecb
--- /dev/null
+++ b/src/main/java/models/ConnectionFactory.java
@@ -0,0 +1,21 @@
+package models;
+
+import com.mysql.jdbc.Driver;
+import java.sql.*;
+
+public class ConnectionFactory {
+
+ public static final String URL = "jdbc:mysql://localhost:3306/myDB?autoReconnect=true&useSSL=false";
+ public static final String USER = "root";
+ public static final String PASS = "easy123";
+
+
+ public static Connection getConnection() {
+ try {
+ DriverManager.registerDriver(new Driver());
+ return DriverManager.getConnection(URL, USER, PASS);
+ } catch (SQLException ex) {
+ throw new RuntimeException("Error connecting to the database", ex);
+ }
+ }
+}
diff --git a/src/main/java/models/DELETEME.txt b/src/main/java/models/DELETEME.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/main/java/models/DTO.java b/src/main/java/models/DTO.java
new file mode 100644
index 0000000..ff40e32
--- /dev/null
+++ b/src/main/java/models/DTO.java
@@ -0,0 +1,5 @@
+package models;
+
+public interface DTO {
+ Integer getId();
+}
diff --git a/src/main/java/models/User.java b/src/main/java/models/User.java
new file mode 100644
index 0000000..22dc60d
--- /dev/null
+++ b/src/main/java/models/User.java
@@ -0,0 +1,62 @@
+package models;
+
+public class User implements DTO {
+
+ private Integer id;
+ private String name;
+ private String pwd;
+ private String email;
+ private String phoneNumber;
+
+// ---- constructors ---------------------
+ public User() {
+ }
+
+ public User(String name, String pass) {
+ this.name = name;
+ this.pwd = pass;
+ }
+
+ public User(Integer id, String name, String pass, String email, String phoneNumber) {
+ this.id = id;
+ this.name = name;
+ this.pwd = pass;
+ this.email = email;
+ this.phoneNumber = phoneNumber;
+ }
+
+// --------- getters & setters -------------
+
+ public Integer getId() {
+ return id;
+ }
+ public void setId(Integer id) {
+ this.id = id;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public String getPass() {
+ return pwd;
+ }
+ public void setPass(String pass) {
+ this.pwd = pass;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getPhoneNumber() {
+ return phoneNumber;
+ }
+ public void setPhoneNumber(String phoneNumber) {
+ this.phoneNumber = phoneNumber;
+ }
+}
diff --git a/src/test/java/daos/DAOTest.java b/src/test/java/daos/DAOTest.java
new file mode 100644
index 0000000..96c0c54
--- /dev/null
+++ b/src/test/java/daos/DAOTest.java
@@ -0,0 +1,66 @@
+package daos;
+
+import models.User;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.List;
+
+public class DAOTest {
+
+ DAO testDao;
+
+
+ @Before
+ public void setUp() throws Exception {
+ testDao = new DAO();
+ }
+
+
+ @Test
+ public void findById() {
+ User expected = testDao.findById(4);
+ Assert.assertEquals("Nedda",expected.getName());
+ }
+
+ @Test
+ public void findAll() {
+ List allUsers = testDao.findAll();
+ Integer expected = 10;
+ Integer actual = allUsers.size();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void updateUser() {
+ String expected = "newpassword";
+ User testUpdate = new User(7,"Matilda",expected,null,null);
+ testDao.updateUser(testUpdate);
+
+ User updated = testDao.findById(7);
+ String actual = updated.getPass();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void createUser() {
+ User testUpdate = new User(19,"Mark",null,null,null);
+ testDao.createUser(testUpdate);
+ Integer expected = 11;
+ Integer actual = testDao.findAll().size();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void deleteUser() {
+ testDao.deleteUser(7);
+ Integer expected = 10;
+ Integer actual = testDao.findAll().size();
+
+ Assert.assertEquals(expected,actual);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/daos/DELETEME.txt b/src/test/java/daos/DELETEME.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/test/java/models/ConnectionFactoryTest.java b/src/test/java/models/ConnectionFactoryTest.java
new file mode 100644
index 0000000..dc94bf6
--- /dev/null
+++ b/src/test/java/models/ConnectionFactoryTest.java
@@ -0,0 +1,29 @@
+package models;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import static org.junit.Assert.*;
+
+public class ConnectionFactoryTest {
+ Connection connection;
+
+
+ @Test
+ public void getConnection() {
+ connection = ConnectionFactory.getConnection();
+ Boolean actual = false;
+
+ try {
+ actual = connection.isClosed();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+
+ Assert.assertFalse(actual);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/models/DELETEME.txt b/src/test/java/models/DELETEME.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/test/java/models/UserTest.java b/src/test/java/models/UserTest.java
new file mode 100644
index 0000000..6aec834
--- /dev/null
+++ b/src/test/java/models/UserTest.java
@@ -0,0 +1,103 @@
+package models;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.sql.Connection;
+
+import static org.junit.Assert.*;
+
+public class UserTest {
+
+ User testUser;
+
+ @Before
+ public void setUp() throws Exception {
+ testUser = new User(1,"Joe","testpass","joe@gmail.com","215-222-3333");
+ }
+
+ @Test
+ public void getId() {
+ Integer actual = 1;
+ Integer expected = testUser.getId();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setId() {
+ Integer actual = 6;
+ testUser.setId(actual);
+ Integer expected = testUser.getId();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void getName() {
+ String expected = "Joe";
+ String actual = testUser.getName();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setName() {
+ String actual = "Jane";
+ testUser.setName(actual);
+ String expected = testUser.getName();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void getPass() {
+ String expected = "testpass";
+ String actual = testUser.getPass();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setPass() {
+ String expected = "secondpass";
+ testUser.setPass(expected);
+ String actual = testUser.getPass();
+
+ }
+
+ @Test
+ public void getEmail() {
+ String expected = "joe@gmail.com";
+ String actual = testUser.getEmail();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setEmail() {
+ String expected = "jane@gmail.com";
+ testUser.setEmail(expected);
+ String actual = testUser.getEmail();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void getPhoneNumber() {
+ String expected = "215-222-3333";
+ String actual = testUser.getPhoneNumber();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+ @Test
+ public void setPhoneNumber() {
+ String expected = "215-333-4444";
+ testUser.setPhoneNumber(expected);
+ String actual = testUser.getPhoneNumber();
+
+ Assert.assertEquals(expected,actual);
+ }
+}
\ No newline at end of file