refactor
This commit is contained in:
@@ -126,7 +126,6 @@ public class IikoOlapColumnsImporter {
|
|||||||
|
|
||||||
// Запрос полей для конкретного reportType
|
// Запрос полей для конкретного reportType
|
||||||
private Future<JsonObject> fetchColumnsFromIiko(String reportType, String token) {
|
private Future<JsonObject> fetchColumnsFromIiko(String reportType, String token) {
|
||||||
|
|
||||||
Promise<JsonObject> promise = Promise.promise();
|
Promise<JsonObject> promise = Promise.promise();
|
||||||
String url = "https://" + iikoServer + "/resto/api/v2/reports/olap/columns?key=" + token + "&reportType=" + reportType;
|
String url = "https://" + iikoServer + "/resto/api/v2/reports/olap/columns?key=" + token + "&reportType=" + reportType;
|
||||||
|
|
||||||
@@ -163,7 +162,7 @@ public class IikoOlapColumnsImporter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------- Методы работы с БД (те же, с поддержкой UTF8) ----------
|
// ---------- Методы работы с БД (с префиксом iiko_) ----------
|
||||||
private Future<Void> storeColumnsToDb(String reportType, JsonObject columns) {
|
private Future<Void> storeColumnsToDb(String reportType, JsonObject columns) {
|
||||||
return getOrCreateReportType(reportType)
|
return getOrCreateReportType(reportType)
|
||||||
.compose(reportTypeId -> {
|
.compose(reportTypeId -> {
|
||||||
@@ -178,14 +177,14 @@ public class IikoOlapColumnsImporter {
|
|||||||
|
|
||||||
private Future<Integer> getOrCreateReportType(String reportType) {
|
private Future<Integer> getOrCreateReportType(String reportType) {
|
||||||
Promise<Integer> promise = Promise.promise();
|
Promise<Integer> promise = Promise.promise();
|
||||||
String selectSql = "SELECT report_type_id FROM report_types WHERE name = ?";
|
String selectSql = "SELECT report_type_id FROM iiko_report_types WHERE name = ?";
|
||||||
dbPool.preparedQuery(selectSql)
|
dbPool.preparedQuery(selectSql)
|
||||||
.execute(Tuple.of(reportType))
|
.execute(Tuple.of(reportType))
|
||||||
.onComplete(ar -> {
|
.onComplete(ar -> {
|
||||||
if (ar.succeeded() && ar.result().size() > 0) {
|
if (ar.succeeded() && ar.result().size() > 0) {
|
||||||
promise.complete(ar.result().iterator().next().getInteger("report_type_id"));
|
promise.complete(ar.result().iterator().next().getInteger("report_type_id"));
|
||||||
} else if (ar.succeeded()) {
|
} else if (ar.succeeded()) {
|
||||||
String insertSql = "INSERT INTO report_types (name, description) VALUES (?, ?)";
|
String insertSql = "INSERT INTO iiko_report_types (name, description) VALUES (?, ?)";
|
||||||
dbPool.preparedQuery(insertSql)
|
dbPool.preparedQuery(insertSql)
|
||||||
.execute(Tuple.of(reportType, "OLAP report type: " + reportType))
|
.execute(Tuple.of(reportType, "OLAP report type: " + reportType))
|
||||||
.onComplete(insAr -> {
|
.onComplete(insAr -> {
|
||||||
@@ -224,7 +223,7 @@ public class IikoOlapColumnsImporter {
|
|||||||
JsonArray tagsArray = fieldDef.getJsonArray("tags", new JsonArray());
|
JsonArray tagsArray = fieldDef.getJsonArray("tags", new JsonArray());
|
||||||
|
|
||||||
String insertFieldSql = """
|
String insertFieldSql = """
|
||||||
INSERT INTO fields (
|
INSERT INTO iiko_fields (
|
||||||
report_type_id, field_key, field_key_normal, name, type, type_normal,
|
report_type_id, field_key, field_key_normal, name, type, type_normal,
|
||||||
aggregation_allowed, grouping_allowed, filtering_allowed
|
aggregation_allowed, grouping_allowed, filtering_allowed
|
||||||
)
|
)
|
||||||
@@ -244,7 +243,7 @@ public class IikoOlapColumnsImporter {
|
|||||||
aggregationAllowed, groupingAllowed, filteringAllowed
|
aggregationAllowed, groupingAllowed, filteringAllowed
|
||||||
))
|
))
|
||||||
.compose(ignored -> {
|
.compose(ignored -> {
|
||||||
String selectFieldIdSql = "SELECT field_id FROM fields WHERE report_type_id = ? AND field_key = ?";
|
String selectFieldIdSql = "SELECT field_id FROM iiko_fields WHERE report_type_id = ? AND field_key = ?";
|
||||||
return dbPool.preparedQuery(selectFieldIdSql)
|
return dbPool.preparedQuery(selectFieldIdSql)
|
||||||
.execute(Tuple.of(reportTypeId, fieldKey))
|
.execute(Tuple.of(reportTypeId, fieldKey))
|
||||||
.compose(rows -> {
|
.compose(rows -> {
|
||||||
@@ -269,14 +268,14 @@ public class IikoOlapColumnsImporter {
|
|||||||
|
|
||||||
private Future<Integer> getOrCreateTag(String tagName) {
|
private Future<Integer> getOrCreateTag(String tagName) {
|
||||||
Promise<Integer> promise = Promise.promise();
|
Promise<Integer> promise = Promise.promise();
|
||||||
String selectSql = "SELECT tag_id FROM tags WHERE tag_name = ?";
|
String selectSql = "SELECT tag_id FROM iiko_tags WHERE tag_name = ?";
|
||||||
dbPool.preparedQuery(selectSql)
|
dbPool.preparedQuery(selectSql)
|
||||||
.execute(Tuple.of(tagName))
|
.execute(Tuple.of(tagName))
|
||||||
.onComplete(ar -> {
|
.onComplete(ar -> {
|
||||||
if (ar.succeeded() && ar.result().size() > 0) {
|
if (ar.succeeded() && ar.result().size() > 0) {
|
||||||
promise.complete(ar.result().iterator().next().getInteger("tag_id"));
|
promise.complete(ar.result().iterator().next().getInteger("tag_id"));
|
||||||
} else {
|
} else {
|
||||||
String insertSql = "INSERT IGNORE INTO tags (tag_name) VALUES (?)";
|
String insertSql = "INSERT IGNORE INTO iiko_tags (tag_name) VALUES (?)";
|
||||||
dbPool.preparedQuery(insertSql)
|
dbPool.preparedQuery(insertSql)
|
||||||
.execute(Tuple.of(tagName))
|
.execute(Tuple.of(tagName))
|
||||||
.onComplete(insAr -> {
|
.onComplete(insAr -> {
|
||||||
@@ -297,7 +296,7 @@ public class IikoOlapColumnsImporter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Future<Void> linkFieldTag(int fieldId, int tagId) {
|
private Future<Void> linkFieldTag(int fieldId, int tagId) {
|
||||||
String sql = "INSERT IGNORE INTO field_tags (field_id, tag_id) VALUES (?, ?)";
|
String sql = "INSERT IGNORE INTO iiko_field_tags (field_id, tag_id) VALUES (?, ?)";
|
||||||
return dbPool.preparedQuery(sql)
|
return dbPool.preparedQuery(sql)
|
||||||
.execute(Tuple.of(fieldId, tagId))
|
.execute(Tuple.of(fieldId, tagId))
|
||||||
.mapEmpty();
|
.mapEmpty();
|
||||||
@@ -305,14 +304,14 @@ public class IikoOlapColumnsImporter {
|
|||||||
|
|
||||||
private Future<Void> createTablesIfNotExist() {
|
private Future<Void> createTablesIfNotExist() {
|
||||||
String createReportTypesTable = """
|
String createReportTypesTable = """
|
||||||
CREATE TABLE IF NOT EXISTS report_types (
|
CREATE TABLE IF NOT EXISTS iiko_report_types (
|
||||||
report_type_id INT AUTO_INCREMENT PRIMARY KEY,
|
report_type_id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
name VARCHAR(50) UNIQUE NOT NULL,
|
name VARCHAR(50) UNIQUE NOT NULL,
|
||||||
description TEXT NOT NULL
|
description TEXT NOT NULL
|
||||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
|
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
|
||||||
""";
|
""";
|
||||||
String createFieldsTable = """
|
String createFieldsTable = """
|
||||||
CREATE TABLE IF NOT EXISTS fields (
|
CREATE TABLE IF NOT EXISTS iiko_fields (
|
||||||
field_id INT AUTO_INCREMENT PRIMARY KEY,
|
field_id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
report_type_id INT NOT NULL,
|
report_type_id INT NOT NULL,
|
||||||
field_key VARCHAR(255) NOT NULL,
|
field_key VARCHAR(255) NOT NULL,
|
||||||
@@ -325,27 +324,27 @@ public class IikoOlapColumnsImporter {
|
|||||||
filtering_allowed BOOLEAN NOT NULL DEFAULT 0,
|
filtering_allowed BOOLEAN NOT NULL DEFAULT 0,
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
UNIQUE KEY uk_fields_report_type_field_key (report_type_id, field_key),
|
UNIQUE KEY uk_fields_report_type_field_key (report_type_id, field_key),
|
||||||
FOREIGN KEY (report_type_id) REFERENCES report_types(report_type_id) ON DELETE RESTRICT
|
FOREIGN KEY (report_type_id) REFERENCES iiko_report_types(report_type_id) ON DELETE RESTRICT
|
||||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
|
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
|
||||||
""";
|
""";
|
||||||
String createTagsTable = """
|
String createTagsTable = """
|
||||||
CREATE TABLE IF NOT EXISTS tags (
|
CREATE TABLE IF NOT EXISTS iiko_tags (
|
||||||
tag_id INT AUTO_INCREMENT PRIMARY KEY,
|
tag_id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
tag_name VARCHAR(100) UNIQUE NOT NULL
|
tag_name VARCHAR(100) UNIQUE NOT NULL
|
||||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
|
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
|
||||||
""";
|
""";
|
||||||
String createFieldTagsTable = """
|
String createFieldTagsTable = """
|
||||||
CREATE TABLE IF NOT EXISTS field_tags (
|
CREATE TABLE IF NOT EXISTS iiko_field_tags (
|
||||||
field_id INT NOT NULL,
|
field_id INT NOT NULL,
|
||||||
tag_id INT NOT NULL,
|
tag_id INT NOT NULL,
|
||||||
PRIMARY KEY (field_id, tag_id),
|
PRIMARY KEY (field_id, tag_id),
|
||||||
FOREIGN KEY (field_id) REFERENCES fields(field_id) ON DELETE CASCADE,
|
FOREIGN KEY (field_id) REFERENCES iiko_fields(field_id) ON DELETE CASCADE,
|
||||||
FOREIGN KEY (tag_id) REFERENCES tags(tag_id) ON DELETE CASCADE
|
FOREIGN KEY (tag_id) REFERENCES iiko_tags(tag_id) ON DELETE CASCADE
|
||||||
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
|
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
|
||||||
""";
|
""";
|
||||||
String createIdxFieldsReportType = "CREATE INDEX IF NOT EXISTS idx_fields_report_type ON fields(report_type_id)";
|
String createIdxFieldsReportType = "CREATE INDEX IF NOT EXISTS idx_fields_report_type ON iiko_fields(report_type_id)";
|
||||||
String createIdxFieldsName = "CREATE INDEX IF NOT EXISTS idx_fields_name ON fields(name)";
|
String createIdxFieldsName = "CREATE INDEX IF NOT EXISTS idx_fields_name ON iiko_fields(name)";
|
||||||
String createIdxFieldTagsTagId = "CREATE INDEX IF NOT EXISTS idx_field_tags_tag_id ON field_tags(tag_id)";
|
String createIdxFieldTagsTagId = "CREATE INDEX IF NOT EXISTS idx_field_tags_tag_id ON iiko_field_tags(tag_id)";
|
||||||
|
|
||||||
return dbPool.query(createReportTypesTable).execute()
|
return dbPool.query(createReportTypesTable).execute()
|
||||||
.compose(ignored -> dbPool.query(createFieldsTable).execute())
|
.compose(ignored -> dbPool.query(createFieldsTable).execute())
|
||||||
|
|||||||
Reference in New Issue
Block a user