10 changed files with 201 additions and 32 deletions
@ -1,6 +1,12 @@ |
|||||||
/* © SRSoftware 2025 */ |
/* © SRSoftware 2025 */ |
||||||
package de.srsoftware.umbrella.bookmarks; |
package de.srsoftware.umbrella.bookmarks; |
||||||
|
|
||||||
|
import de.srsoftware.umbrella.core.model.Bookmark; |
||||||
|
import de.srsoftware.umbrella.core.model.Hash; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
public interface BookmarkDb { |
public interface BookmarkDb { |
||||||
String save(String url, String comment, long userId); |
Bookmark save(String url, String comment, long userId); |
||||||
|
|
||||||
|
Map<Hash, Bookmark> list(long id); |
||||||
} |
} |
||||||
|
|||||||
@ -0,0 +1,37 @@ |
|||||||
|
/* © SRSoftware 2025 */ |
||||||
|
package de.srsoftware.umbrella.core.model; |
||||||
|
|
||||||
|
import static de.srsoftware.umbrella.core.Constants.*; |
||||||
|
import static de.srsoftware.umbrella.core.Util.SHA1; |
||||||
|
import static de.srsoftware.umbrella.core.Util.sha1; |
||||||
|
import static java.time.ZoneOffset.UTC; |
||||||
|
|
||||||
|
import de.srsoftware.tools.Mappable; |
||||||
|
import java.sql.ResultSet; |
||||||
|
import java.sql.SQLException; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Collection; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
public record Bookmark(String url, Hash hash, String comment, LocalDateTime timestamp, Collection<String> tags) implements Mappable { |
||||||
|
|
||||||
|
public static Bookmark of(ResultSet rs) throws SQLException { |
||||||
|
return new Bookmark(rs.getString(URL),new Hash(rs.getString(HASH),SHA1),rs.getString(COMMENT),LocalDateTime.ofEpochSecond(rs.getLong(TIMESTAMP),0, UTC),new ArrayList<>()); |
||||||
|
} |
||||||
|
|
||||||
|
public static Bookmark of(String url, String comment, LocalDateTime timestamp){ |
||||||
|
return new Bookmark(url,sha1(url),comment,timestamp,new ArrayList<>()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Map<String, Object> toMap() { |
||||||
|
return Map.of( |
||||||
|
URL, url, |
||||||
|
COMMENT, comment, |
||||||
|
HASH, Map.of(VALUE,hash.value(),TYPE,hash.type()), |
||||||
|
TAGS, tags, |
||||||
|
TIMESTAMP, timestamp.withNano(0) |
||||||
|
); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,22 @@ |
|||||||
|
/* © SRSoftware 2025 */ |
||||||
|
package de.srsoftware.umbrella.core.model; |
||||||
|
|
||||||
|
import java.util.Objects; |
||||||
|
|
||||||
|
public record Hash(String value, String type){ |
||||||
|
@Override |
||||||
|
public boolean equals(Object o) { |
||||||
|
if (!(o instanceof Hash(String v, String t))) return false; |
||||||
|
return Objects.equals(type, t) && Objects.equals(value, v); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public int hashCode() { |
||||||
|
return Objects.hash(value, type); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return value; |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue