diff --git a/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java b/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java index b9a9da0..c6803f6 100644 --- a/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java +++ b/backend/src/main/java/de/srsoftware/umbrella/backend/Application.java @@ -62,14 +62,14 @@ public class Application { var server = HttpServer.create(new InetSocketAddress(port), 0); var userModule = new UserModule(config,messageSystem); - var bookmarkApi = new BookmarkApi(config,userModule); + var tagModule = new TagModule(config,userModule); + var bookmarkApi = new BookmarkApi(config,tagModule); var companyModule = new CompanyModule(config, userModule); var documentApi = new DocumentApi(companyModule, translationModule, config); var itemApi = new ItemApi(config,companyModule); var legacyApi = new LegacyApi(userModule.userDb(),config); var markdownApi = new MarkdownApi(userModule); var messageApi = new MessageApi(messageSystem); - var tagModule = new TagModule(config,userModule); var notesModule = new NoteModule(config,userModule); var projectModule = new ProjectModule(config,companyModule,tagModule); var taskModule = new TaskModule(config,projectModule,tagModule,notesModule); diff --git a/bookmark/src/main/java/de/srsoftware/umbrella/bookmarks/BookmarkApi.java b/bookmark/src/main/java/de/srsoftware/umbrella/bookmarks/BookmarkApi.java index 45992ff..800f6a8 100644 --- a/bookmark/src/main/java/de/srsoftware/umbrella/bookmarks/BookmarkApi.java +++ b/bookmark/src/main/java/de/srsoftware/umbrella/bookmarks/BookmarkApi.java @@ -3,8 +3,7 @@ package de.srsoftware.umbrella.bookmarks; import static de.srsoftware.umbrella.bookmarks.Constants.*; import static de.srsoftware.umbrella.core.ConnectionProvider.connect; -import static de.srsoftware.umbrella.core.Constants.COMMENT; -import static de.srsoftware.umbrella.core.Constants.URL; +import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.Paths.LIST; import static de.srsoftware.umbrella.core.Util.mapValues; import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingFieldException; @@ -15,21 +14,27 @@ import de.srsoftware.configuration.Configuration; import de.srsoftware.tools.Path; import de.srsoftware.tools.SessionToken; import de.srsoftware.umbrella.core.BaseHandler; +import de.srsoftware.umbrella.core.api.TagService; import de.srsoftware.umbrella.core.api.UserService; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import de.srsoftware.umbrella.core.model.Token; import de.srsoftware.umbrella.core.model.UmbrellaUser; +import org.json.JSONArray; + import java.io.IOException; +import java.util.List; import java.util.Optional; public class BookmarkApi extends BaseHandler { private final BookmarkDb db; private final UserService users; + private final TagService tags; - public BookmarkApi(Configuration config, UserService userService) { + public BookmarkApi(Configuration config, TagService tagService) { var dbFile = config.get(CONFIG_DATABASE).orElseThrow(() -> missingFieldException(CONFIG_DATABASE)); db = new SqliteDb(connect(dbFile)); - users = userService; + tags = tagService; + users = tagService.userService(); } @Override @@ -80,6 +85,10 @@ public class BookmarkApi extends BaseHandler { if (!(json.has(URL) && json.get(URL) instanceof String url)) throw missingFieldException(URL); if (!(json.has(COMMENT) && json.get(COMMENT) instanceof String comment)) throw missingFieldException(COMMENT); var bookmark = db.save(url,comment, user.id()); + if (json.has(TAGS) && json.get(TAGS) instanceof JSONArray tagList){ + var list = tagList.toList().stream().map(Object::toString).toList(); + tags.save(BOOKMARK,bookmark.id(), List.of(user.id()),list); + } return sendContent(ex,bookmark); } } diff --git a/core/src/main/java/de/srsoftware/umbrella/core/Constants.java b/core/src/main/java/de/srsoftware/umbrella/core/Constants.java index 8e16a13..f0a4ef6 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/Constants.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/Constants.java @@ -15,6 +15,7 @@ public class Constants { public static final String AUTHORIZATION = "Authorization"; public static final String BODY = "body"; + public static final String BOOKMARK = "bookmark"; public static final String CODE = "code"; public static final String COMMENT = "comment"; diff --git a/core/src/main/java/de/srsoftware/umbrella/core/api/TagService.java b/core/src/main/java/de/srsoftware/umbrella/core/api/TagService.java index 4b0e688..562ecee 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/api/TagService.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/api/TagService.java @@ -13,4 +13,6 @@ public interface TagService { void save(String module, long entityId, Collection userIds, Collection tags); String save(String module, long entityId, Collection userIds, String tag); + + UserService userService(); } diff --git a/frontend/src/Components/MarkdownEditor.svelte b/frontend/src/Components/MarkdownEditor.svelte index d73d5da..f103dec 100644 --- a/frontend/src/Components/MarkdownEditor.svelte +++ b/frontend/src/Components/MarkdownEditor.svelte @@ -111,4 +111,4 @@ {#if editing} {/if} -{@html editValue.rendered} +{@html editValue.rendered} diff --git a/frontend/src/Components/MultilineEditor.svelte b/frontend/src/Components/MultilineEditor.svelte index 85741af..27d3316 100644 --- a/frontend/src/Components/MultilineEditor.svelte +++ b/frontend/src/Components/MultilineEditor.svelte @@ -85,7 +85,7 @@ {:else} {#if value} - + {#each value.split("\n") as line} {line}
{/each} diff --git a/frontend/src/routes/bookmark/Index.svelte b/frontend/src/routes/bookmark/Index.svelte index 22aee11..d56e9ea 100644 --- a/frontend/src/routes/bookmark/Index.svelte +++ b/frontend/src/routes/bookmark/Index.svelte @@ -5,11 +5,18 @@ import { t } from '../../translations.svelte.js'; import Editor from '../../Components/MarkdownEditor.svelte'; + import Tags from '../tags/TagList.svelte'; - let bookmarks = $state(null); - let comment = $state({source:null,rendered:null}); - let error = $state(null); - let link = $state(null); + let bookmarks = $state(null); + let new_bookmark = $state({ + comment:{ + source:null, + rendered:null + }, + tags:[], + url:null + }); + let error = $state(null); async function loadBookmarks(){ const url = api('bookmark/list'); @@ -28,11 +35,13 @@ } async function onclick(ev){ - let data = { - url : link, - comment : comment.source - }; + delete new_bookmark.comment.rendered; const url = api('bookmark/save'); + const data = { + comment : new_bookmark.comment.source, + url : new_bookmark.url, + tags : new_bookmark.tags + } const resp = await fetch(url,{ credentials : 'include', method : 'POST', @@ -56,12 +65,13 @@ {/if} + {#if bookmarks} {#each bookmarks as bookmark} @@ -73,6 +83,7 @@ {bookmark.timestamp.replace('T',' ')} {bookmark.comment} + {/each} {/if} diff --git a/tags/src/main/java/de/srsoftware/umbrella/tags/TagModule.java b/tags/src/main/java/de/srsoftware/umbrella/tags/TagModule.java index e1b4fcc..b055bb1 100644 --- a/tags/src/main/java/de/srsoftware/umbrella/tags/TagModule.java +++ b/tags/src/main/java/de/srsoftware/umbrella/tags/TagModule.java @@ -136,4 +136,9 @@ public class TagModule extends BaseHandler implements TagService { save(module,entityId,userIds,List.of(tag)); return tag; } + + @Override + public UserService userService() { + return users; + } }