Skip to content

Commit

Permalink
Refactor DatabaseRuleMetaDataNode
Browse files Browse the repository at this point in the history
  • Loading branch information
terrymanu committed Jan 7, 2025
1 parent 3a08580 commit 67e2f69
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,85 +26,81 @@
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class DatabaseRuleMetaDataNode {

private static final String ROOT_NODE = "metadata";
private static final String ROOT_NODE = "/metadata";

private static final String RULE_NODE = "rules";

private static final String ACTIVE_VERSION = "active_version";
private static final String VERSIONS_NODE = "versions";

private static final String VERSIONS = "versions";
private static final String ACTIVE_VERSION_NODE = "active_version";

/**
* Get database rule active version node.
* Get database root path.
*
* @param databaseName database name
* @param ruleName rule name
* @param key key
* @return database rule active version node
* @return database root path
*/
public static String getDatabaseRuleActiveVersionNode(final String databaseName, final String ruleName, final String key) {
return String.join("/", getDatabaseRuleNode(databaseName, ruleName), key, ACTIVE_VERSION);
public static String getRootPath(final String databaseName) {
return String.join("/", ROOT_NODE, databaseName, RULE_NODE);
}

/**
* Get database rule versions node.
* Get database rule path.
*
* @param databaseName database name
* @param ruleName rule name
* @param key key
* @return database rule versions node
* @param ruleTypeName rule type name
* @return database rule path
*/
public static String getDatabaseRuleVersionsNode(final String databaseName, final String ruleName, final String key) {
return String.join("/", getDatabaseRuleNode(databaseName, ruleName), key, VERSIONS);
public static String getRulePath(final String databaseName, final String ruleTypeName) {
return String.join("/", getRootPath(databaseName), ruleTypeName);
}

/**
* Get database rule version node.
* Get database rule path.
*
* @param databaseName database name
* @param ruleName rule name
* @param ruleTypeName rule type name
* @param key key
* @param version version
* @return database rule next version
* @return database rule path without version
*/
public static String getDatabaseRuleVersionNode(final String databaseName, final String ruleName, final String key, final String version) {
return String.join("/", getDatabaseRuleNode(databaseName, ruleName), key, VERSIONS, version);
public static String getRulePath(final String databaseName, final String ruleTypeName, final String key) {
return String.join("/", getRulePath(databaseName, ruleTypeName), key);
}

/**
* Get database rule node.
* Get database rule versions path.
*
* @param databaseName database name
* @param ruleName rule name
* @param ruleTypeName rule type name
* @param key key
* @return database rule node without version
* @return database rule versions path
*/
public static String getDatabaseRuleNode(final String databaseName, final String ruleName, final String key) {
return String.join("/", getDatabaseRuleNode(databaseName, ruleName), key);
public static String getVersionsPath(final String databaseName, final String ruleTypeName, final String key) {
return String.join("/", getRulePath(databaseName, ruleTypeName, key), VERSIONS_NODE);
}

/**
* Get database rule root node.
* Get database rule version path.
*
* @param databaseName database name
* @param ruleName rule name
* @return database rule root node
* @param ruleTypeName rule type name
* @param key key
* @param version version
* @return database rule next version
*/
public static String getDatabaseRuleNode(final String databaseName, final String ruleName) {
return String.join("/", getRulesNode(databaseName), ruleName);
public static String getVersionPath(final String databaseName, final String ruleTypeName, final String key, final String version) {
return String.join("/", getVersionsPath(databaseName, ruleTypeName, key), version);
}

/**
* Get database rules node.
* Get database rule active version path.
*
* @param databaseName database name
* @return database rules node
* @param ruleTypeName rule type name
* @param key key
* @return database rule active version path
*/
public static String getRulesNode(final String databaseName) {
return String.join("/", getMetaDataNode(), databaseName, RULE_NODE);
}

private static String getMetaDataNode() {
return String.join("/", "", ROOT_NODE);
public static String getActiveVersionPath(final String databaseName, final String ruleTypeName, final String key) {
return String.join("/", getRulePath(databaseName, ruleTypeName, key), ACTIVE_VERSION_NODE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public DatabaseRulePersistService(final PersistRepository repository) {
* @return configurations
*/
public Collection<RuleConfiguration> load(final String databaseName) {
return new RepositoryTupleSwapperEngine().swapToRuleConfigurations(repositoryTuplePersistService.load(DatabaseRuleMetaDataNode.getRulesNode(databaseName)));
return new RepositoryTupleSwapperEngine().swapToRuleConfigurations(repositoryTuplePersistService.load(DatabaseRuleMetaDataNode.getRootPath(databaseName)));
}

/**
Expand All @@ -85,19 +85,19 @@ public Collection<MetaDataVersion> persist(final String databaseName, final Coll
private Collection<MetaDataVersion> persistDataNodes(final String databaseName, final String ruleName, final Collection<RepositoryTuple> repositoryTuples) {
Collection<MetaDataVersion> result = new LinkedList<>();
for (RepositoryTuple each : repositoryTuples) {
List<String> versions = metaDataVersionPersistService.getVersions(DatabaseRuleMetaDataNode.getDatabaseRuleVersionsNode(databaseName, ruleName, each.getKey()));
List<String> versions = metaDataVersionPersistService.getVersions(DatabaseRuleMetaDataNode.getVersionsPath(databaseName, ruleName, each.getKey()));
String nextVersion = versions.isEmpty() ? MetaDataVersion.DEFAULT_VERSION : String.valueOf(Integer.parseInt(versions.get(0)) + 1);
repository.persist(DatabaseRuleMetaDataNode.getDatabaseRuleVersionNode(databaseName, ruleName, each.getKey(), nextVersion), each.getValue());
repository.persist(DatabaseRuleMetaDataNode.getVersionPath(databaseName, ruleName, each.getKey(), nextVersion), each.getValue());
if (Strings.isNullOrEmpty(getActiveVersion(databaseName, ruleName, each.getKey()))) {
repository.persist(DatabaseRuleMetaDataNode.getDatabaseRuleActiveVersionNode(databaseName, ruleName, each.getKey()), MetaDataVersion.DEFAULT_VERSION);
repository.persist(DatabaseRuleMetaDataNode.getActiveVersionPath(databaseName, ruleName, each.getKey()), MetaDataVersion.DEFAULT_VERSION);
}
result.add(new MetaDataVersion(DatabaseRuleMetaDataNode.getDatabaseRuleNode(databaseName, ruleName, each.getKey()), getActiveVersion(databaseName, ruleName, each.getKey()), nextVersion));
result.add(new MetaDataVersion(DatabaseRuleMetaDataNode.getRulePath(databaseName, ruleName, each.getKey()), getActiveVersion(databaseName, ruleName, each.getKey()), nextVersion));
}
return result;
}

private String getActiveVersion(final String databaseName, final String ruleName, final String key) {
return repository.query(DatabaseRuleMetaDataNode.getDatabaseRuleActiveVersionNode(databaseName, ruleName, key));
return repository.query(DatabaseRuleMetaDataNode.getActiveVersionPath(databaseName, ruleName, key));
}

/**
Expand All @@ -107,7 +107,7 @@ private String getActiveVersion(final String databaseName, final String ruleName
* @param ruleTypeName rule type name
*/
public void delete(final String databaseName, final String ruleTypeName) {
repository.delete(DatabaseRuleMetaDataNode.getDatabaseRuleNode(databaseName, ruleTypeName));
repository.delete(DatabaseRuleMetaDataNode.getRulePath(databaseName, ruleTypeName));
}

/**
Expand Down Expand Up @@ -135,7 +135,7 @@ public Collection<MetaDataVersion> delete(final String databaseName, final Colle
private Collection<MetaDataVersion> delete(final String databaseName, final String ruleName, final Collection<RepositoryTuple> repositoryTuples) {
Collection<MetaDataVersion> result = new LinkedList<>();
for (RepositoryTuple each : repositoryTuples) {
String toBeDeletedKey = DatabaseRuleMetaDataNode.getDatabaseRuleNode(databaseName, ruleName, each.getKey());
String toBeDeletedKey = DatabaseRuleMetaDataNode.getRulePath(databaseName, ruleName, each.getKey());
repository.delete(toBeDeletedKey);
result.add(new MetaDataVersion(toBeDeletedKey));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,32 @@
class DatabaseRuleMetaDataNodeTest {

@Test
void assertGetDatabaseRuleActiveVersionNode() {
assertThat(DatabaseRuleMetaDataNode.getDatabaseRuleActiveVersionNode("foo_db", "foo_rule", "foo_tbl"), is("/metadata/foo_db/rules/foo_rule/foo_tbl/active_version"));
void assertGetRootPath() {
assertThat(DatabaseRuleMetaDataNode.getRootPath("foo_db"), is("/metadata/foo_db/rules"));
}

@Test
void assertGetDatabaseRuleVersionsNode() {
assertThat(DatabaseRuleMetaDataNode.getDatabaseRuleVersionsNode("foo_db", "sharding", "foo_key"), is("/metadata/foo_db/rules/sharding/foo_key/versions"));
void assertGetRulePath() {
assertThat(DatabaseRuleMetaDataNode.getRulePath("foo_db", "foo_rule"), is("/metadata/foo_db/rules/foo_rule"));
}

@Test
void assertGetDatabaseRuleVersionNode() {
assertThat(DatabaseRuleMetaDataNode.getDatabaseRuleVersionNode("foo_db", "foo_rule", "foo_tbl", "1"), is("/metadata/foo_db/rules/foo_rule/foo_tbl/versions/1"));
void assertGetRulePathWithKey() {
assertThat(DatabaseRuleMetaDataNode.getRulePath("foo_db", "foo_rule", "sharding"), is("/metadata/foo_db/rules/foo_rule/sharding"));
}

@Test
void assertGetDatabaseRuleNode() {
assertThat(DatabaseRuleMetaDataNode.getDatabaseRuleNode("foo_db", "foo_rule", "sharding"), is("/metadata/foo_db/rules/foo_rule/sharding"));
void assertGetVersionsPath() {
assertThat(DatabaseRuleMetaDataNode.getVersionsPath("foo_db", "sharding", "foo_key"), is("/metadata/foo_db/rules/sharding/foo_key/versions"));
}

@Test
void assertGetVersionPath() {
assertThat(DatabaseRuleMetaDataNode.getVersionPath("foo_db", "foo_rule", "foo_tbl", "1"), is("/metadata/foo_db/rules/foo_rule/foo_tbl/versions/1"));
}

@Test
void assertGetActiveVersionPath() {
assertThat(DatabaseRuleMetaDataNode.getActiveVersionPath("foo_db", "foo_rule", "foo_tbl"), is("/metadata/foo_db/rules/foo_rule/foo_tbl/active_version"));
}
}

0 comments on commit 67e2f69

Please sign in to comment.