From 979afd75c60de0aa867cd5366d8ad7c5add1ccc0 Mon Sep 17 00:00:00 2001 From: Gelin Luo Date: Tue, 28 Jan 2020 20:48:20 +1100 Subject: [PATCH] WIP --- pom.xml | 2 +- src/main/java/act/db/DbPlugin.java | 2 +- src/main/java/act/db/DbSession.java | 25 +++++++++++++++++ src/main/java/act/db/EntityFilter.java | 9 +++++++ src/main/java/act/db/Operator.java | 7 +++++ src/main/java/act/db/filter/FilterPart.java | 11 ++++++++ src/main/java/act/db2/Dao.java | 7 +++++ src/main/java/act/db2/DbService.java | 30 +++++++++++++++++++++ src/main/java/act/view/ActErrorResult.java | 22 +++++++++------ 9 files changed, 105 insertions(+), 10 deletions(-) create mode 100644 src/main/java/act/db/DbSession.java create mode 100644 src/main/java/act/db/EntityFilter.java create mode 100644 src/main/java/act/db/Operator.java create mode 100644 src/main/java/act/db/filter/FilterPart.java create mode 100644 src/main/java/act/db2/Dao.java create mode 100644 src/main/java/act/db2/DbService.java diff --git a/pom.xml b/pom.xml index 44de922f1..fe62a2efd 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ org.actframework act jar - 1.8.32-SNAPSHOT + 1.9.0-SNAPSHOT ACT Framework The ACT full stack MVC framework diff --git a/src/main/java/act/db/DbPlugin.java b/src/main/java/act/db/DbPlugin.java index 6385763cb..5ac1a2b88 100644 --- a/src/main/java/act/db/DbPlugin.java +++ b/src/main/java/act/db/DbPlugin.java @@ -49,7 +49,7 @@ public void register() { * @return entity class annotations */ public Set> entityAnnotations() { - return C.set(); + return C.Set(); } @Override diff --git a/src/main/java/act/db/DbSession.java b/src/main/java/act/db/DbSession.java new file mode 100644 index 000000000..797d312f2 --- /dev/null +++ b/src/main/java/act/db/DbSession.java @@ -0,0 +1,25 @@ +package act.db; + +/** + * a `DbSession` encapsulates information that is required + * to interact with database, e.g. + * + * * DbService - provides db configuration/connection + * * (nested) TxScope and associated Tx spec + * * tenantId - for multi-tenancy support + * * target table(s)/collection(s) + * * entity (row/document) filter including pagination spec + * * field/property (column) projector + * * operation - CRUD + * * mapper - map result back to model entity + * + */ +public class DbSession { + + private DbService db; + + public DbService db() { + return db; + } + +} diff --git a/src/main/java/act/db/EntityFilter.java b/src/main/java/act/db/EntityFilter.java new file mode 100644 index 000000000..5befc78f9 --- /dev/null +++ b/src/main/java/act/db/EntityFilter.java @@ -0,0 +1,9 @@ +package act.db; + +/** + * The `EntityFilter` encapsulates the information used to filter entities + */ +public class EntityFilter { + + +} diff --git a/src/main/java/act/db/Operator.java b/src/main/java/act/db/Operator.java new file mode 100644 index 000000000..d24796fe1 --- /dev/null +++ b/src/main/java/act/db/Operator.java @@ -0,0 +1,7 @@ +package act.db; + +/** + * An `Operator` is used to specify a relationship in {@link EntityFilter filter}. + */ +public interface Operator { +} diff --git a/src/main/java/act/db/filter/FilterPart.java b/src/main/java/act/db/filter/FilterPart.java new file mode 100644 index 000000000..ffb3b6d7b --- /dev/null +++ b/src/main/java/act/db/filter/FilterPart.java @@ -0,0 +1,11 @@ +package act.db.filter; + +/** + * A `FilterPart` is a discrete part of a filter defines database records/rows that + * is impact by a certain DB operations. + * + * A `FilterPart` is composed of + * - + */ +public interface FilterPart { +} diff --git a/src/main/java/act/db2/Dao.java b/src/main/java/act/db2/Dao.java new file mode 100644 index 000000000..227e9a519 --- /dev/null +++ b/src/main/java/act/db2/Dao.java @@ -0,0 +1,7 @@ +package act.db2; + +/** + * A `Dao` is the main entry to access a database table (or collection in mongodb). + */ +public class Dao { +} diff --git a/src/main/java/act/db2/DbService.java b/src/main/java/act/db2/DbService.java new file mode 100644 index 000000000..db53a0a80 --- /dev/null +++ b/src/main/java/act/db2/DbService.java @@ -0,0 +1,30 @@ +package act.db2; + +import org.osgl.util.E; + +import java.util.Map; + +/** + * A `DbService` provides methods to access a database source via underline service provider + * object, e.g. JDBC `Connection` for SQL database or `MongoClient` for mongodb. + * + * A `DbService` instance require a group of database configuration to be setup, including: + * - connection URL + * - username + * - password + * - other provider specific database configurations + */ +public class DbService { + + /** + * Run query statement with optional parameters and returns the result set. + * + * @param queryStatement the query statement + * @param parameters parameters + * @return + */ + public Map runQuery(String queryStatement, Object ... parameters) { + throw E.tbd(); + } + +} diff --git a/src/main/java/act/view/ActErrorResult.java b/src/main/java/act/view/ActErrorResult.java index 49750cad0..94dfcd38e 100644 --- a/src/main/java/act/view/ActErrorResult.java +++ b/src/main/java/act/view/ActErrorResult.java @@ -20,18 +20,15 @@ * #L% */ -import static act.util.ActError.Util.errorMessage; -import static act.util.ActError.Util.loadSourceInfo; -import static org.osgl.http.H.Status.INTERNAL_SERVER_ERROR; - import act.Act; -import act.app.*; +import act.app.ActionContext; +import act.app.App; +import act.app.SourceInfo; import act.asm.AsmContext; import act.asm.AsmException; import act.exception.BindException; import act.util.ActError; import org.osgl.$; -import org.osgl.exception.InvalidRangeException; import org.osgl.exception.ToBeImplemented; import org.osgl.exception.UnsupportedException; import org.osgl.http.H; @@ -41,9 +38,18 @@ import org.osgl.util.E; import org.osgl.util.S; -import java.util.*; import javax.persistence.PersistenceException; -import javax.validation.*; +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.ValidationException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static act.util.ActError.Util.errorMessage; +import static act.util.ActError.Util.loadSourceInfo; +import static org.osgl.http.H.Status.INTERNAL_SERVER_ERROR; public class ActErrorResult extends ErrorResult implements ActError {