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());
+ }
+ }
+
+}