diff --git a/pom.xml b/pom.xml index 41e27e1..d5e1dc6 100644 --- a/pom.xml +++ b/pom.xml @@ -56,8 +56,29 @@ 1.60 + + + + com.j256.ormlite + ormlite-core + 5.1 + + + + com.j256.ormlite + ormlite-jdbc + 5.1 + + + + org.postgresql + postgresql + 42.2.5 + + + 1.8 diff --git a/src/main/java/Application/App.java b/src/main/java/application/App.java similarity index 97% rename from src/main/java/Application/App.java rename to src/main/java/application/App.java index a122df1..a20e040 100644 --- a/src/main/java/Application/App.java +++ b/src/main/java/application/App.java @@ -1,4 +1,4 @@ -package Application; +package application; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; diff --git a/src/main/java/database/DatabaseHelper.java b/src/main/java/database/DatabaseHelper.java new file mode 100644 index 0000000..d511d1d --- /dev/null +++ b/src/main/java/database/DatabaseHelper.java @@ -0,0 +1,20 @@ +package database; + +import com.j256.ormlite.jdbc.JdbcConnectionSource; +import com.j256.ormlite.support.ConnectionSource; + +public class DatabaseHelper { + private static final String DATABASE_NAME = "monnethic"; + private static final String DATABASE_USER = ""; + private static final String DATABASE_PWD = ""; + private final static String DATABASE_URL = "jdbc:postgresql://host:port/"+DATABASE_NAME; + + public ConnectionSource setupDatabaseConnection(){ + try{ + return new JdbcConnectionSource(DATABASE_URL, DATABASE_USER, DATABASE_PWD); + }catch (Exception e){ + System.out.print("\n"+e.getMessage()); + return null; + } + } +} diff --git a/src/main/java/database/DatabaseTest.java b/src/main/java/database/DatabaseTest.java new file mode 100644 index 0000000..f2c3c53 --- /dev/null +++ b/src/main/java/database/DatabaseTest.java @@ -0,0 +1,38 @@ +package database; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +@DatabaseTable(tableName = "T_TEST") +public class DatabaseTest { + private static final String NAME_FIELD_NAME = "name"; + private static final String ID_FIELD_NAME = "id"; + + @DatabaseField(columnName = ID_FIELD_NAME, id = true) + private int id; + @DatabaseField(columnName = NAME_FIELD_NAME, canBeNull = false) + private String name; + + public DatabaseTest(int id, String name) { + this.id = id; + this.name = name; + } + + public DatabaseTest() { } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/main/java/database/transaction/Transaction.java b/src/main/java/database/transaction/Transaction.java new file mode 100644 index 0000000..85aa124 --- /dev/null +++ b/src/main/java/database/transaction/Transaction.java @@ -0,0 +1,106 @@ +package database.transaction; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +import java.math.BigInteger; +import java.util.Date; + +@DatabaseTable(tableName = "T_TRANSACTION") +public class Transaction { + @DatabaseField(columnName = "transactionId", generatedId = true, unique = true) + private int id; + @DatabaseField(columnName = "transactionDate") + private Date transactionDate; + @DatabaseField(columnName = "transactionDSrcAddress") + private String sourceAddress; + @DatabaseField(columnName = "transactionDestAddress") + private String destAddress; + @DatabaseField(columnName = "transactionHash") + private String transactionHash; + @DatabaseField(columnName = "transactionBlockNumber") + private String blockNumber; + @DatabaseField(columnName = "transactionAmout") + private BigInteger amount; + @DatabaseField(columnName = "transactionUnit") + private String unit; + + public Transaction() { + super(); + } + + public Transaction(Date transactionDate, String sourceAddress, String destAddress, String transactionHash, String blockNumber, BigInteger amount, String unit) { + super(); + this.transactionDate = transactionDate; + this.sourceAddress = sourceAddress; + this.destAddress = destAddress; + this.transactionHash = transactionHash; + this.blockNumber = blockNumber; + this.amount = amount; + this.unit = unit; + } + + public String getSourceAddress() { + return sourceAddress; + } + + public void setSourceAddress(String sourceAddress) { + this.sourceAddress = sourceAddress; + } + + public String getDestAddress() { + return destAddress; + } + + public void setDestAddress(String destAddress) { + this.destAddress = destAddress; + } + + public String getTransactionHash() { + return transactionHash; + } + + public void setTransactionHash(String transactionHash) { + this.transactionHash = transactionHash; + } + + public BigInteger getAmount() { + return amount; + } + + public void setAmount(BigInteger amount) { + this.amount = amount; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public Date getTransactionDate() { + return transactionDate; + } + + public void setTransactionDate(Date transactionDate) { + this.transactionDate = transactionDate; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + + public String getBlockNumber() { + return blockNumber; + } + + public void setBlockNumber(String blockNumber) { + this.blockNumber = blockNumber; + } +} diff --git a/src/main/java/database/user/User.java b/src/main/java/database/user/User.java new file mode 100644 index 0000000..851f2a3 --- /dev/null +++ b/src/main/java/database/user/User.java @@ -0,0 +1,115 @@ +package database.user; + +import com.j256.ormlite.field.DatabaseField; +import com.j256.ormlite.table.DatabaseTable; + +//Class User which represent an User in the postgresDB +@DatabaseTable(tableName = "T_USER") +public class User { + @DatabaseField(canBeNull = false) + private String name; + @DatabaseField(canBeNull = false) + private String firstname; + @DatabaseField(id = true) + private String email; + @DatabaseField(canBeNull = false) + private String password; + @DatabaseField(canBeNull = false) + private long creation_date; + @DatabaseField(canBeNull = false) + private long modification_date; + @DatabaseField(canBeNull = false) + private boolean verified; + @DatabaseField(canBeNull = false) + private boolean approved; + + //Constructors + //Default constructor for ORMLite + public User() { + } + + public User(String name, String firstname, String email, String password) { + this.name = name; + this.firstname = firstname; + this.email = email; + this.password = password; + } + + public User(String name, String firstname, String email, String password, long creation_date, long modification_date, boolean verified, boolean approved) { + this.name = name; + this.firstname = firstname; + this.email = email; + this.password = password; + this.creation_date = creation_date; + this.modification_date = modification_date; + this.verified = verified; + this.approved = approved; + } + + + //Getters and Setters + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public long getCreation_date() { + return creation_date; + } + + public void setCreation_date(long creation_date) { + this.creation_date = creation_date; + } + + public long getModification_date() { + return modification_date; + } + + public void setModification_date(long modification_date) { + this.modification_date = modification_date; + } + + public boolean isVerified() { + return verified; + } + + public void setVerified(boolean verified) { + this.verified = verified; + } + + public boolean isApproved() { + return approved; + } + + public void setApproved(boolean approved) { + this.approved = approved; + } + +} diff --git a/src/main/java/database/user/UserDao.java b/src/main/java/database/user/UserDao.java new file mode 100644 index 0000000..307b0eb --- /dev/null +++ b/src/main/java/database/user/UserDao.java @@ -0,0 +1,119 @@ +package database.user; + +import com.j256.ormlite.dao.Dao; +import com.j256.ormlite.dao.DaoManager; +import com.j256.ormlite.stmt.PreparedQuery; +import com.j256.ormlite.stmt.QueryBuilder; +import com.j256.ormlite.stmt.UpdateBuilder; +import database.DatabaseHelper; + +import java.sql.Timestamp; + +//Class to communicate with database with ORMLite +public class UserDao { + private DatabaseHelper dbh = new DatabaseHelper(); + private Dao userDao; + + public Dao createUserDaoConnection(){ + try { + return DaoManager.createDao(dbh.setupDatabaseConnection(),User.class); + }catch (Exception e){ + System.out.println(e.getMessage()); + return null; + } + } + + public void addUser(User user)throws Exception { + userDao = createUserDaoConnection(); + userDao.create(user); + } + + public boolean checkApprovedUser(String email) throws Exception { + userDao = createUserDaoConnection(); + QueryBuilder queryBuilder = userDao.queryBuilder(); + queryBuilder.where().eq("email",email); + PreparedQuery preparedQuery = queryBuilder.prepare(); + User user = userDao.queryForFirst(preparedQuery); + return user.isApproved(); + } + + public boolean checkVerifiedUser(String email) throws Exception { + userDao = createUserDaoConnection(); + QueryBuilder queryBuilder = userDao.queryBuilder(); + queryBuilder.where().eq("email",email); + PreparedQuery preparedQuery = queryBuilder.prepare(); + User user = userDao.queryForFirst(preparedQuery); + return user.isVerified(); + } + + public boolean updateUserPassword(String email, String password) throws Exception { + userDao = createUserDaoConnection(); + UpdateBuilder updateBuilder = userDao.updateBuilder(); + updateBuilder.updateColumnValue("password",password); + Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + updateBuilder.updateColumnValue("modification_date",timestamp.getTime()); + updateBuilder.where().eq("email",email); + updateBuilder.update(); + + if(checkUserPassword(email, password)){ + return true; + }else{ + return false; + } + } + + private boolean verifyUserExist(String email) throws Exception { + userDao = createUserDaoConnection(); + QueryBuilder queryBuilder = userDao.queryBuilder(); + queryBuilder.where().eq("email",email); + PreparedQuery preparedQuery = queryBuilder.prepare(); + User user = userDao.queryForFirst(preparedQuery); + + if(user==null){ + return false; + }else{ + return true; + } + } + + public boolean checkUserPassword(String email, String password) throws Exception { + User user = getUser(email); + if(password.equals(user.getPassword())){ + return true; + }else{ + return false; + } + } + + public User getUser(String email) throws Exception { + if(!verifyUserExist(email)){ + return null; + }else{ + userDao = createUserDaoConnection(); + QueryBuilder queryBuilder = userDao.queryBuilder(); + queryBuilder.where().eq("email",email); + PreparedQuery preparedQuery = queryBuilder.prepare(); + return userDao.queryForFirst(preparedQuery); + } + } + + + public void approveUser (String email) throws Exception{ + userDao = createUserDaoConnection(); + UpdateBuilder updateBuilder = userDao.updateBuilder(); + updateBuilder.updateColumnValue("approved",true); + Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + updateBuilder.updateColumnValue("modification_date",timestamp.getTime()); + updateBuilder.where().eq("email",email); + updateBuilder.update(); + } + public void verifyUser (String email) throws Exception{ + userDao = createUserDaoConnection(); + UpdateBuilder updateBuilder = userDao.updateBuilder(); + updateBuilder.updateColumnValue("verified",true); + Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + updateBuilder.updateColumnValue("modification_date",timestamp.getTime()); + updateBuilder.where().eq("email",email); + updateBuilder.update(); + } +} diff --git a/src/test/java/database/DatabaseHelperTest.java b/src/test/java/database/DatabaseHelperTest.java new file mode 100644 index 0000000..02dea81 --- /dev/null +++ b/src/test/java/database/DatabaseHelperTest.java @@ -0,0 +1,26 @@ +package database; + +import com.j256.ormlite.dao.Dao; +import com.j256.ormlite.dao.DaoManager; +import org.junit.Test; + +//Testing class for postgresql connection +public class DatabaseHelperTest { + private DatabaseHelper dbh = new DatabaseHelper(); + + //Test connection by getting existing data in T_TEST + @Test + public void TestConnection(){ + Dao testDao; + try{ + testDao = DaoManager.createDao(dbh.setupDatabaseConnection(),DatabaseTest.class); + DatabaseTest dbt = testDao.queryForId(1); + System.out.println(dbt.getName()); + assert dbt != null; + assert "thomas".equals(dbt.getName()); + }catch (Exception e){ + System.out.println("\n"+e.getMessage()); + } + } + +}