implemented loading of bookmarks and bookmark list

This commit is contained in:
2025-08-03 13:07:11 +02:00
parent 61b5a6ffbb
commit eac9eaeb9f
10 changed files with 201 additions and 32 deletions

View File

@@ -1,18 +1,26 @@
/* © SRSoftware 2025 */
package de.srsoftware.umbrella.bookmarks;
import static de.srsoftware.tools.jdbc.Query.insertInto;
import static de.srsoftware.tools.jdbc.Query.replaceInto;
import static de.srsoftware.tools.jdbc.Query.*;
import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL;
import static de.srsoftware.umbrella.bookmarks.Constants.*;
import static de.srsoftware.umbrella.core.Constants.*;
import static de.srsoftware.umbrella.core.Constants.ERROR_FAILED_CREATE_TABLE;
import static de.srsoftware.umbrella.core.Util.sha1;
import static java.lang.System.Logger.Level.ERROR;
import static java.text.MessageFormat.format;
import static java.time.ZoneOffset.UTC;
import de.srsoftware.tools.jdbc.Condition;
import de.srsoftware.umbrella.core.BaseDb;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
import de.srsoftware.umbrella.core.model.Bookmark;
import de.srsoftware.umbrella.core.model.Hash;
import java.sql.Connection;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
public class SqliteDb extends BaseDb implements BookmarkDb {
public SqliteDb(Connection conn) {
@@ -32,14 +40,15 @@ public class SqliteDb extends BaseDb implements BookmarkDb {
private void createUrlCommentsTable() {
var sql = """
CREATE TABLE IF NOT EXISTS "url_comments" (
`hash` VARCHAR ( 255 ) NOT NULL,
`user_id` LONG NOT NULL,
`comment` TEXT NOT NULL,
PRIMARY KEY (`hash`,`user_id`)
CREATE TABLE IF NOT EXISTS {0} (
`{1}` VARCHAR ( 255 ) NOT NULL,
`{2}` LONG NOT NULL,
`{3}` TEXT NOT NULL,
`{4}` DATETIME NOT NULL,
PRIMARY KEY (`{1}`,`{2}`)
)""";
try {
var stmt = db.prepareStatement(sql);
var stmt = db.prepareStatement(format(sql,TABLE_URL_COMMENTS,HASH,USER_ID,COMMENT,TIMESTAMP));
stmt.execute();
stmt.close();
} catch (SQLException e) {
@@ -61,15 +70,33 @@ CREATE TABLE IF NOT EXISTS "url_comments" (
}
@Override
public String save(String url, String comment, long userId) {
public Map<Hash, Bookmark> list(long userId) {
try {
var map = new HashMap<Hash,Bookmark>();
var rs = select(ALL).from(TABLE_URL_COMMENTS).leftJoin(HASH,TABLE_URLS,HASH).where(USER_ID, Condition.equal(userId)).exec(db);
while (rs.next()){
var bookmark = Bookmark.of(rs);
map.put(bookmark.hash(),bookmark);
}
rs.close();;
return map;
} catch (SQLException e) {
throw new UmbrellaException("Failed to load bookmark list");
}
}
@Override
public Bookmark save(String url, String comment, long userId) {
var hash = sha1(url);
try {
var timestamp = LocalDateTime.now();
replaceInto(TABLE_URLS,HASH,URL)
.values(hash,url).execute(db).close();
replaceInto(TABLE_URL_COMMENTS,HASH,USER_ID,COMMENT)
.values(hash,userId,comment)
replaceInto(TABLE_URL_COMMENTS,HASH,USER_ID,COMMENT, TIMESTAMP)
.values(hash,userId,comment,timestamp.toEpochSecond(UTC))
.execute(db).close();
return hash;
return Bookmark.of(url,comment,timestamp);
} catch (SQLException e) {
throw new UmbrellaException("Failed to store url");
}