From a3723138c1b7dcd5bd9b6c314d4519ea3c00f031 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Wed, 30 Jul 2025 22:15:41 +0200 Subject: [PATCH] working on tak use list Signed-off-by: Stephan Richter --- .../srsoftware/umbrella/core/Constants.java | 1 + frontend/src/App.svelte | 2 +- frontend/src/routes/tags/TagUses.svelte | 17 ++++++++++++-- .../de/srsoftware/umbrella/tags/SqliteDb.java | 22 ++++++++++++++++--- .../de/srsoftware/umbrella/tags/TagDB.java | 4 ++++ .../srsoftware/umbrella/tags/TagModule.java | 5 +++++ 6 files changed, 45 insertions(+), 6 deletions(-) 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 811de1b..44aa986 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/Constants.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/Constants.java @@ -116,6 +116,7 @@ public class Constants { public static final String USER = "user"; public static final String USER_ID = "user_id"; public static final String USER_LIST = "user_list"; + public static final String USES = "uses"; public static final String UTF8 = UTF_8.displayName(); public static final String VALUE = "value"; diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index 4b4e998..907258b 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -62,7 +62,7 @@ - + diff --git a/frontend/src/routes/tags/TagUses.svelte b/frontend/src/routes/tags/TagUses.svelte index bcc142c..bd7e332 100644 --- a/frontend/src/routes/tags/TagUses.svelte +++ b/frontend/src/routes/tags/TagUses.svelte @@ -7,19 +7,24 @@ let { tag } = $props(); let error = $state(null); + let router = useTinyRouter(); let uses = $state(null); async function loadUses(){ const url = api(`tags/uses/${tag}`); - const resp = await fetch(api,{credentials:'include'}); + const resp = await fetch(url,{credentials:'include'}); if (resp.ok){ - uses = await resp.json; + uses = await resp.json(); error = null; } else { error = await resp.text(); } } + function go(module,id){ + router.navigate(`/${module}/${id}/view`); + } + onMount(loadUses);
@@ -27,4 +32,12 @@ {#if error} {error} {/if} + {#if uses} + {#each Object.entries(uses) as [module,ids]} +

{t(module)}

+ {#each ids as id} + + {/each} + {/each} + {/if}
\ No newline at end of file diff --git a/tags/src/main/java/de/srsoftware/umbrella/tags/SqliteDb.java b/tags/src/main/java/de/srsoftware/umbrella/tags/SqliteDb.java index 6ba8bed..d0bd8e5 100644 --- a/tags/src/main/java/de/srsoftware/umbrella/tags/SqliteDb.java +++ b/tags/src/main/java/de/srsoftware/umbrella/tags/SqliteDb.java @@ -4,6 +4,7 @@ package de.srsoftware.umbrella.tags; import static de.srsoftware.tools.jdbc.Condition.equal; import static de.srsoftware.tools.jdbc.Condition.isNull; import static de.srsoftware.tools.jdbc.Query.*; +import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL; import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.Constants.ERROR_FAILED_CREATE_TABLE; import static de.srsoftware.umbrella.core.Constants.USER_ID; @@ -16,9 +17,7 @@ import de.srsoftware.tools.jdbc.Query; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; import java.sql.Connection; import java.sql.SQLException; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; +import java.util.*; public class SqliteDb implements TagDB{ private static final int INITIAL_DB_VERSION = 1; @@ -110,6 +109,23 @@ CREATE TABLE IF NOT EXISTS "{0}" ( } } + @Override + public Map> getUses(String tag, long userId) { + try { + var rs = select(ALL).from(TABLE_TAGS).where(TAG,equal(tag)).where(USER_ID,equal(userId)).exec(db); + var result = new HashMap>(); + while (rs.next()){ + var module = rs.getString(MODULE); + var entityId = rs.getLong(ID); + result.computeIfAbsent(module, k -> new ArrayList<>()).add(entityId); + } + rs.close(); + return result; + } catch (SQLException e){ + throw new UmbrellaException("Failed to load uses of tag \"{0}\"!",tag); + } + } + private void init(){ var version = createTables(); LOG.log(INFO,"Updated task db to version {0}",version); diff --git a/tags/src/main/java/de/srsoftware/umbrella/tags/TagDB.java b/tags/src/main/java/de/srsoftware/umbrella/tags/TagDB.java index d7f4f52..493dce8 100644 --- a/tags/src/main/java/de/srsoftware/umbrella/tags/TagDB.java +++ b/tags/src/main/java/de/srsoftware/umbrella/tags/TagDB.java @@ -2,6 +2,8 @@ package de.srsoftware.umbrella.tags; import java.util.Collection; +import java.util.List; +import java.util.Map; import java.util.Set; public interface TagDB { @@ -9,6 +11,8 @@ public interface TagDB { void deleteEntity(String module, long entityId); + Map> getUses(String tag, long id); + Set list(long id, String module, long entityId); void save(Collection userIds, String module, long entityId, Collection tags); 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 69376af..e1b4fcc 100644 --- a/tags/src/main/java/de/srsoftware/umbrella/tags/TagModule.java +++ b/tags/src/main/java/de/srsoftware/umbrella/tags/TagModule.java @@ -68,6 +68,7 @@ public class TagModule extends BaseHandler implements TagService { var module = path.pop(); if (module == null) throw unprocessable("Module missing in path."); var head = path.pop(); + if (USES.equals(module)) return getTagUses(ex,head,user.get()); long entityId = Long.parseLong(head); return sendContent(ex, getTags(module,entityId,user.get())); } catch (NumberFormatException e){ @@ -77,6 +78,10 @@ public class TagModule extends BaseHandler implements TagService { } } + private boolean getTagUses(HttpExchange ex, String tag, UmbrellaUser user) throws IOException { + return sendContent(ex,tagDb.getUses(tag,user.id())); + } + @Override public boolean doOptions(Path path, HttpExchange ex) throws IOException { addCors(ex);