From b95cdd32ecd5407e410833e1aa761903a4d7c831 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Tue, 10 Mar 2026 15:34:15 +0100 Subject: [PATCH] bugfix + recalling of selections already made by user Signed-off-by: Stephan Richter --- frontend/src/routes/poll/View.svelte | 2 +- .../java/de/srsoftware/umbrella/poll/PollDb.java | 2 ++ .../de/srsoftware/umbrella/poll/PollModule.java | 7 +++++-- .../de/srsoftware/umbrella/poll/SqliteDb.java | 16 +++++++++++++++- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/frontend/src/routes/poll/View.svelte b/frontend/src/routes/poll/View.svelte index 8dad43ec..27d66ea1 100644 --- a/frontend/src/routes/poll/View.svelte +++ b/frontend/src/routes/poll/View.svelte @@ -16,8 +16,8 @@ let res = await get(url); if (res.ok){ poll = await res.json(); + if (poll.selection) selection = poll.selection; yikes(); - console.log(Object.entries(poll.weights).sort((a,b) => a[0] - b[0])); } else error(res); } diff --git a/poll/src/main/java/de/srsoftware/umbrella/poll/PollDb.java b/poll/src/main/java/de/srsoftware/umbrella/poll/PollDb.java index 0f894183..943df9c1 100644 --- a/poll/src/main/java/de/srsoftware/umbrella/poll/PollDb.java +++ b/poll/src/main/java/de/srsoftware/umbrella/poll/PollDb.java @@ -15,6 +15,8 @@ public interface PollDb { Poll loadPoll(String id); + Map loadSelections(Poll poll, UmbrellaUser user); + Poll save(Poll poll); void saveSelection(Poll poll, Map optionsToWeights, String guestName); diff --git a/poll/src/main/java/de/srsoftware/umbrella/poll/PollModule.java b/poll/src/main/java/de/srsoftware/umbrella/poll/PollModule.java index 460354ca..067f8d9c 100644 --- a/poll/src/main/java/de/srsoftware/umbrella/poll/PollModule.java +++ b/poll/src/main/java/de/srsoftware/umbrella/poll/PollModule.java @@ -97,7 +97,10 @@ public class PollModule extends BaseHandler implements PollService { var poll = pollDb.loadPoll(pollId); var permitted = !poll.isPrivate() || poll.owner().equals(user); if (!permitted && poll.permissions().get(user) == null) throw forbidden(Text.NOT_ALLOWED_TO_EDIT, Field.OBJECT,Text.POLL); - return sendContent(ex,poll); + var result = new HashMap<>(poll.toMap()); + if (user != null) result.put(SELECTION,pollDb.loadSelections(poll, user)); + + return sendContent(ex,result); } private boolean getPollEvaluation(HttpExchange ex, UmbrellaUser user, Path path) throws IOException { @@ -208,7 +211,7 @@ public class PollModule extends BaseHandler implements PollService { var poll = pollDb.loadPoll(id); if (SELECT.equals(head)) { if (user == null && poll.isPrivate()) return unauthorized(ex); - return postSelection(ex, poll, null); + return postSelection(ex, poll, user); } var permitted = poll.owner().equals(user); if (!permitted && !Set.of(Permission.OWNER, Permission.EDIT).contains(poll.permissions().get(user))) throw forbidden(Text.NOT_ALLOWED_TO_EDIT, Field.OBJECT,Text.POLL); diff --git a/poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java b/poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java index fda8516c..b8b40a31 100644 --- a/poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java +++ b/poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java @@ -197,6 +197,20 @@ public class SqliteDb extends BaseDb implements PollDb { } } + @Override + public Map loadSelections(Poll poll, UmbrellaUser user) { + try { + var map = new HashMap(); + var rs = select(ALL).from(TABLE_SELECTIONS).where(POLL_ID, equal(poll.id())).where(USER, equal(user.id())).exec(db); + while (rs.next()) map.put(rs.getInt(OPTION_ID),rs.getInt(WEIGHT)); + rs.close(); + return map; + } catch (SQLException e) { + throw failedToLoadObject(Text.SELECTIONS); + } + + } + @Override public Poll save(Poll poll) { return is0(poll.id()) ? saveNew(poll) : update(poll); @@ -243,7 +257,7 @@ public class SqliteDb extends BaseDb implements PollDb { private void saveSelection(String pollId, Map optionsToWeights, Object editor) { - var query = replaceInto(TABLE_SELECTIONS,POLL_ID,OPTION_ID,USER_ID,WEIGHT); + var query = replaceInto(TABLE_SELECTIONS,POLL_ID,OPTION_ID,USER,WEIGHT); for (var entry : optionsToWeights.entrySet()){ var optionId = entry.getKey(); var weight = entry.getValue();