|
|
|
|
@ -15,8 +15,8 @@ import de.srsoftware.tools.jdbc.Condition;
@@ -15,8 +15,8 @@ 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.PreparedStatement; |
|
|
|
|
import java.sql.SQLException; |
|
|
|
|
import java.time.LocalDateTime; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
@ -41,14 +41,14 @@ public class SqliteDb extends BaseDb implements BookmarkDb {
@@ -41,14 +41,14 @@ public class SqliteDb extends BaseDb implements BookmarkDb {
|
|
|
|
|
private void createUrlCommentsTable() { |
|
|
|
|
var sql = """ |
|
|
|
|
CREATE TABLE IF NOT EXISTS {0} ( |
|
|
|
|
`{1}` VARCHAR ( 255 ) NOT NULL, |
|
|
|
|
`{2}` LONG NOT NULL, |
|
|
|
|
`{1}` INTEGER NOT NULL, |
|
|
|
|
`{2}` INTEGER NOT NULL, |
|
|
|
|
`{3}` TEXT NOT NULL, |
|
|
|
|
`{4}` DATETIME NOT NULL, |
|
|
|
|
PRIMARY KEY (`{1}`,`{2}`) |
|
|
|
|
)"""; |
|
|
|
|
try { |
|
|
|
|
var stmt = db.prepareStatement(format(sql,TABLE_URL_COMMENTS,HASH,USER_ID,COMMENT,TIMESTAMP)); |
|
|
|
|
var stmt = db.prepareStatement(format(sql,TABLE_URL_COMMENTS,URL_ID,USER_ID,COMMENT,TIMESTAMP)); |
|
|
|
|
stmt.execute(); |
|
|
|
|
stmt.close(); |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
@ -58,7 +58,7 @@ CREATE TABLE IF NOT EXISTS {0} (
@@ -58,7 +58,7 @@ CREATE TABLE IF NOT EXISTS {0} (
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void createUrlsTable() { |
|
|
|
|
var sql = "CREATE TABLE IF NOT EXISTS urls (hash VARCHAR(255) PRIMARY KEY, url TEXT NOT NULL)"; |
|
|
|
|
var sql = "CREATE TABLE IF NOT EXISTS urls (ID INTEGER PRIMARY KEY, url TEXT UNIQUE NOT NULL)"; |
|
|
|
|
try { |
|
|
|
|
var stmt = db.prepareStatement(sql); |
|
|
|
|
stmt.execute(); |
|
|
|
|
@ -70,14 +70,13 @@ CREATE TABLE IF NOT EXISTS {0} (
@@ -70,14 +70,13 @@ CREATE TABLE IF NOT EXISTS {0} (
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Map<Hash, Bookmark> list(long userId) { |
|
|
|
|
|
|
|
|
|
public Map<Long, 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); |
|
|
|
|
var map = new HashMap<Long,Bookmark>(); |
|
|
|
|
var rs = select(ALL).from(TABLE_URL_COMMENTS).leftJoin(URL_ID,TABLE_URLS,ID).where(USER_ID, Condition.equal(userId)).exec(db); |
|
|
|
|
while (rs.next()){ |
|
|
|
|
var bookmark = Bookmark.of(rs); |
|
|
|
|
map.put(bookmark.hash(),bookmark); |
|
|
|
|
map.put(bookmark.id(),bookmark); |
|
|
|
|
} |
|
|
|
|
rs.close();; |
|
|
|
|
return map; |
|
|
|
|
@ -88,15 +87,23 @@ CREATE TABLE IF NOT EXISTS {0} (
@@ -88,15 +87,23 @@ CREATE TABLE IF NOT EXISTS {0} (
|
|
|
|
|
|
|
|
|
|
@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, TIMESTAMP) |
|
|
|
|
.values(hash,userId,comment,timestamp.toEpochSecond(UTC)) |
|
|
|
|
var rs = select(ID).from(TABLE_URLS).where(URL,Condition.equal(url)).exec(db); |
|
|
|
|
var id = 0L; |
|
|
|
|
if (rs.next()) id = rs.getLong(ID); |
|
|
|
|
rs.close(); |
|
|
|
|
if (id == 0) { |
|
|
|
|
var stmt = insertInto(TABLE_URLS, URL).values(url).execute(db); |
|
|
|
|
rs = stmt.getGeneratedKeys(); |
|
|
|
|
if (rs.next()) id = rs.getLong(1); |
|
|
|
|
rs.close(); |
|
|
|
|
stmt.close(); |
|
|
|
|
} |
|
|
|
|
replaceInto(TABLE_URL_COMMENTS,URL_ID,USER_ID,COMMENT, TIMESTAMP) |
|
|
|
|
.values(id,userId,comment,timestamp.toEpochSecond(UTC)) |
|
|
|
|
.execute(db).close(); |
|
|
|
|
return Bookmark.of(url,comment,timestamp); |
|
|
|
|
return Bookmark.of(id,url,comment,timestamp); |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
throw new UmbrellaException("Failed to store url"); |
|
|
|
|
} |
|
|
|
|
|