11 changed files with 116 additions and 19 deletions
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
/* © SRSoftware 2025 */ |
||||
package de.srsoftware.umbrella.bookmarks; |
||||
|
||||
import static de.srsoftware.umbrella.bookmarks.Constants.CONFIG_DATABASE; |
||||
import static de.srsoftware.umbrella.core.ConnectionProvider.connect; |
||||
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException; |
||||
|
||||
import de.srsoftware.configuration.Configuration; |
||||
import de.srsoftware.umbrella.core.BaseHandler; |
||||
import de.srsoftware.umbrella.core.api.UserService; |
||||
|
||||
public class BookmarkApi extends BaseHandler { |
||||
private final BookmarkDb db; |
||||
private final UserService users; |
||||
|
||||
public BookmarkApi(Configuration config, UserService userService) { |
||||
var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingFieldException(CONFIG_DATABASE)); |
||||
db = new SqliteDb(connect(dbFile)); |
||||
users = userService; |
||||
} |
||||
} |
||||
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
/* © SRSoftware 2025 */ |
||||
package de.srsoftware.umbrella.bookmarks; |
||||
|
||||
public interface BookmarkDb { |
||||
} |
||||
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
/* © SRSoftware 2025 */ |
||||
package de.srsoftware.umbrella.bookmarks; |
||||
|
||||
public class Constants { |
||||
public static final String CONFIG_DATABASE = "umbrella.modules.bookmark.database"; |
||||
public static final String TABLE_URLS = "urls"; |
||||
public static final String TABLE_URL_COMMENTS = "url_comments"; |
||||
|
||||
} |
||||
@ -0,0 +1,59 @@
@@ -0,0 +1,59 @@
|
||||
/* © SRSoftware 2025 */ |
||||
package de.srsoftware.umbrella.bookmarks; |
||||
|
||||
import static de.srsoftware.umbrella.bookmarks.Constants.TABLE_URLS; |
||||
import static de.srsoftware.umbrella.bookmarks.Constants.TABLE_URL_COMMENTS; |
||||
import static de.srsoftware.umbrella.core.Constants.*; |
||||
import static de.srsoftware.umbrella.core.Constants.ERROR_FAILED_CREATE_TABLE; |
||||
import static java.lang.System.Logger.Level.ERROR; |
||||
|
||||
import de.srsoftware.umbrella.core.BaseDb; |
||||
import java.sql.Connection; |
||||
import java.sql.SQLException; |
||||
|
||||
public class SqliteDb extends BaseDb implements BookmarkDb { |
||||
public SqliteDb(Connection conn) { |
||||
super(conn); |
||||
} |
||||
|
||||
@Override |
||||
protected int createTables() { |
||||
var version = createSettingsTable(); |
||||
switch (version){ |
||||
case 0: |
||||
createUrlsTable(); |
||||
createUrlCommentsTable(); |
||||
} |
||||
return setCurrentVersion(1); |
||||
} |
||||
|
||||
private void createUrlCommentsTable() { |
||||
var sql = """ |
||||
CREATE TABLE IF NOT EXISTS "url_comments" ( |
||||
`url_hash` VARCHAR ( 255 ) NOT NULL, |
||||
`user_id` LONG NOT NULL, |
||||
`comment` TEXT NOT NULL, |
||||
PRIMARY KEY (`url_hash`,`user_id`) |
||||
)"""; |
||||
try { |
||||
var stmt = db.prepareStatement(sql); |
||||
stmt.execute(); |
||||
stmt.close(); |
||||
} catch (SQLException e) { |
||||
LOG.log(ERROR, ERROR_FAILED_CREATE_TABLE, TABLE_URL_COMMENTS, e); |
||||
throw new RuntimeException(e); |
||||
} |
||||
} |
||||
|
||||
private void createUrlsTable() { |
||||
var sql = "CREATE TABLE IF NOT EXISTS urls (hash VARCHAR(255) PRIMARY KEY, url TEXT NOT NULL)"; |
||||
try { |
||||
var stmt = db.prepareStatement(sql); |
||||
stmt.execute(); |
||||
stmt.close(); |
||||
} catch (SQLException e) { |
||||
LOG.log(ERROR, ERROR_FAILED_CREATE_TABLE, TABLE_URLS, e); |
||||
throw new RuntimeException(e); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
/* © SRSoftware 2025 */ |
||||
package de.srsoftware.umbrella.core.api; |
||||
|
||||
public interface BookmarkService { |
||||
} |
||||
Loading…
Reference in new issue