channels ux cleanup and create-flow recovery

This commit is contained in:
DrygMira
2026-04-14 02:08:44 +03:00
parent 07e57b8563
commit 126b4ba3a1
22 changed files with 2322 additions and 664 deletions
@@ -373,6 +373,7 @@ public final class DatabaseInitializer {
CREATE TABLE IF NOT EXISTS channel_names_state (
slug TEXT NOT NULL PRIMARY KEY,
display_name TEXT NOT NULL,
channel_description TEXT NOT NULL DEFAULT '',
owner_login TEXT NOT NULL,
owner_bch_name TEXT NOT NULL,
channel_root_block_number INTEGER NOT NULL,
@@ -86,6 +86,7 @@ public final class SqliteDbController {
rebuildConnectionsStateTable(st);
}
ensureChannelNamesStateTable(st);
ensureChannelNamesDescriptionColumn(c, st);
ensureConnectionsIndexes(st);
ensureReactionsIndexes(st);
ensureChannelNamesIndexes(st);
@@ -179,6 +180,7 @@ public final class SqliteDbController {
CREATE TABLE IF NOT EXISTS channel_names_state (
slug TEXT NOT NULL PRIMARY KEY,
display_name TEXT NOT NULL,
channel_description TEXT NOT NULL DEFAULT '',
owner_login TEXT NOT NULL,
owner_bch_name TEXT NOT NULL,
channel_root_block_number INTEGER NOT NULL,
@@ -188,6 +190,24 @@ public final class SqliteDbController {
""");
}
private static void ensureChannelNamesDescriptionColumn(Connection c, Statement st) throws SQLException {
boolean hasDescription = false;
try (Statement probe = c.createStatement();
ResultSet rs = probe.executeQuery("PRAGMA table_info(channel_names_state)")) {
while (rs.next()) {
String name = rs.getString("name");
if ("channel_description".equalsIgnoreCase(name)) {
hasDescription = true;
break;
}
}
}
if (!hasDescription) {
st.executeUpdate("ALTER TABLE channel_names_state ADD COLUMN channel_description TEXT NOT NULL DEFAULT ''");
}
}
private static void ensureChannelNamesIndexes(Statement st) throws SQLException {
st.executeUpdate("""
CREATE UNIQUE INDEX IF NOT EXISTS uq_channel_names_state_slug
@@ -51,21 +51,23 @@ public final class ChannelNameStateDAO {
INSERT INTO channel_names_state (
slug,
display_name,
channel_description,
owner_login,
owner_bch_name,
channel_root_block_number,
channel_root_block_hash,
created_at_ms
) VALUES (?, ?, ?, ?, ?, ?, ?)
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""";
try (PreparedStatement ps = c.prepareStatement(sql)) {
ps.setString(1, entry.getSlug());
ps.setString(2, entry.getDisplayName());
ps.setString(3, entry.getOwnerLogin());
ps.setString(4, entry.getOwnerBlockchainName());
ps.setInt(5, entry.getChannelRootBlockNumber());
ps.setBytes(6, entry.getChannelRootBlockHash());
ps.setLong(7, entry.getCreatedAtMs());
ps.setString(3, entry.getChannelDescription() == null ? "" : entry.getChannelDescription());
ps.setString(4, entry.getOwnerLogin());
ps.setString(5, entry.getOwnerBlockchainName());
ps.setInt(6, entry.getChannelRootBlockNumber());
ps.setBytes(7, entry.getChannelRootBlockHash());
ps.setLong(8, entry.getCreatedAtMs());
ps.executeUpdate();
}
}
@@ -5,6 +5,7 @@ import java.util.Arrays;
public class ChannelNameStateEntry {
private String slug;
private String displayName;
private String channelDescription;
private String ownerLogin;
private String ownerBlockchainName;
private int channelRootBlockNumber;
@@ -27,6 +28,14 @@ public class ChannelNameStateEntry {
this.displayName = displayName;
}
public String getChannelDescription() {
return channelDescription;
}
public void setChannelDescription(String channelDescription) {
this.channelDescription = channelDescription;
}
public String getOwnerLogin() {
return ownerLogin;
}