preparing poll module
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -103,6 +103,7 @@ public class Field {
|
||||
public static final String OBJECT = "object";
|
||||
public static final String OFFSET = "offset";
|
||||
public static final String OPTIONAL = "optional";
|
||||
public static final String OPTION_ID = "option_id";
|
||||
public static final String OWNER = "owner";
|
||||
public static final String OWNER_NUMBER = "owner_number";
|
||||
|
||||
@@ -113,11 +114,13 @@ public class Field {
|
||||
public static final String PATH = "path";
|
||||
public static final String PERMISSION = "permission";
|
||||
public static final String PHONE = "phone";
|
||||
public static final String POLL_ID = "poll_id";
|
||||
public static final String POS = "pos";
|
||||
public static final String POSITIONS = "positions";
|
||||
public static final String PRICE = "single_price";
|
||||
public static final String PRICE_FORMAT = "price_format";
|
||||
public static final String PRIORITY = "priority";
|
||||
public static final String PRIVATE = "private";
|
||||
public static final String PROJECT = "project";
|
||||
public static final String PROJECT_ID = "project_id";
|
||||
public static final String PROPERTIES = "properties";
|
||||
@@ -178,4 +181,5 @@ public class Field {
|
||||
public static final String VERSION = "version";
|
||||
public static final String VERSIONS = "versions";
|
||||
|
||||
public static final String WEIGHT = "weight";
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package de.srsoftware.umbrella.poll;
|
||||
|
||||
public class Constants {
|
||||
public static final String CONFIG_DATABASE = "de.umbrella.module.polls";
|
||||
public static final String TABLE_OPTIONS = "options";
|
||||
public static final String TABLE_POLLS = "polls";
|
||||
public static final String TABLE_SELECTIONS = "selections";
|
||||
public static final String TABLE_WEIGHTS = "weights";
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package de.srsoftware.umbrella.poll;
|
||||
|
||||
public interface PollDb {
|
||||
}
|
||||
@@ -1,7 +1,23 @@
|
||||
package de.srsoftware.umbrella.poll;
|
||||
|
||||
import de.srsoftware.configuration.Configuration;
|
||||
import de.srsoftware.umbrella.core.BaseHandler;
|
||||
import de.srsoftware.umbrella.core.ModuleRegistry;
|
||||
import de.srsoftware.umbrella.core.api.PollService;
|
||||
|
||||
import static de.srsoftware.umbrella.core.ConnectionProvider.connect;
|
||||
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingField;
|
||||
import static de.srsoftware.umbrella.poll.Constants.CONFIG_DATABASE;
|
||||
|
||||
public class PollModule extends BaseHandler implements PollService {
|
||||
|
||||
private PollDb pollDb;
|
||||
|
||||
PollModule(Configuration config){
|
||||
super();
|
||||
var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingField(CONFIG_DATABASE));
|
||||
pollDb = new SqliteDb(connect(dbFile));
|
||||
ModuleRegistry.add(this);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
83
poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java
Normal file
83
poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java
Normal file
@@ -0,0 +1,83 @@
|
||||
package de.srsoftware.umbrella.poll;
|
||||
|
||||
import de.srsoftware.umbrella.core.BaseDb;
|
||||
import de.srsoftware.umbrella.core.constants.Field;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import static de.srsoftware.umbrella.core.constants.Field.*;
|
||||
import static de.srsoftware.umbrella.core.constants.Field.DESCRIPTION;
|
||||
import static de.srsoftware.umbrella.core.constants.Field.SHOW_CLOSED;
|
||||
import static de.srsoftware.umbrella.core.constants.Field.STATUS;
|
||||
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.failedToCreateTable;
|
||||
import static de.srsoftware.umbrella.core.model.Status.OPEN;
|
||||
import static de.srsoftware.umbrella.poll.Constants.*;
|
||||
import static java.text.MessageFormat.format;
|
||||
|
||||
public class SqliteDb extends BaseDb implements PollDb {
|
||||
|
||||
public SqliteDb(Connection connection) {
|
||||
super(connection);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int createTables() {
|
||||
var version = createSettingsTable();
|
||||
switch (version){
|
||||
case 0:
|
||||
createPollsTable();
|
||||
createOptionsTable();
|
||||
createWeightsTable();
|
||||
createSelectionsTable();
|
||||
case 1:
|
||||
createSharesTable();
|
||||
}
|
||||
return setCurrentVersion(2);
|
||||
}
|
||||
|
||||
private void createOptionsTable() {
|
||||
var sql = "CREATE TABLE IF NOT EXISTS {0} ({1} INT NOT NULL, {2} VARCHAR(255) NOT NULL REFERENCES {3}({1}), {4} VARCHAR(255) NOT NULL, {5} TEXT, {6} INT DEFAULT 0, PRIMARY KEY ({1}, {2}))";
|
||||
try {
|
||||
var stmt = db.prepareStatement(format(sql,TABLE_OPTIONS, Field.ID,Field.POLL_ID,TABLE_POLLS,Field.NAME, Field.DESCRIPTION, Field.STATUS));
|
||||
stmt.execute();
|
||||
stmt.close();
|
||||
} catch (SQLException e) {
|
||||
throw failedToCreateTable(TABLE_OPTIONS).causedBy(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void createPollsTable() {
|
||||
var sql = "CREATE TABLE IF NOT EXISTS {0} ({1} VARCHAR(255) NOT NULL PRIMARY_KEY, {2} INT NOT NULL, {3} VARCHAR(255) NOT NULL, {4} TEXT, {5} BOOLEAN)";
|
||||
try {
|
||||
var stmt = db.prepareStatement(format(sql,TABLE_POLLS, Field.ID,Field.USER_ID,Field.NAME,Field.DESCRIPTION, Field.PRIVATE));
|
||||
stmt.execute();
|
||||
stmt.close();
|
||||
} catch (SQLException e) {
|
||||
throw failedToCreateTable(TABLE_POLLS).causedBy(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void createSelectionsTable() {
|
||||
var sql = "CREATE TABLE IF NOT EXISTS {0} ({1} INT NOT NULL REFERENCES {2}({3}), {4} VARCHAR(255) NOT NULL REFERENCES {5}({3}), {6} VARCHAR(255) NOT NULL, {7} INT NOT NULL REFERENCES {8}({7}), PRIMARY KEY ({1}, {4}, {6}))";
|
||||
try {
|
||||
var stmt = db.prepareStatement(format(sql,TABLE_SELECTIONS,Field.OPTION_ID,TABLE_OPTIONS,ID, POLL_ID, TABLE_POLLS, USER, Field.WEIGHT, TABLE_WEIGHTS));
|
||||
stmt.execute();
|
||||
stmt.close();
|
||||
} catch (SQLException e) {
|
||||
throw failedToCreateTable(TABLE_SELECTIONS).causedBy(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void createWeightsTable(){
|
||||
var sql = "CREATE TABLE {0} ( {1} INT NOT NULL, {2} VARCHAR(255) NOT NULL REFERENCES {3}({4}), {5} TEXT, PRIMARY KEY ({2}, {1}))"
|
||||
try {
|
||||
var stmt = db.prepareStatement(format(sql,TABLE_WEIGHTS, WEIGHT,POLL_ID,TABLE_POLLS, ID, DESCRIPTION));
|
||||
stmt.execute();
|
||||
stmt.close();
|
||||
} catch (SQLException e) {
|
||||
throw failedToCreateTable(TABLE_WEIGHTS).causedBy(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user