diff --git a/frontend/src/routes/poll/Edit.svelte b/frontend/src/routes/poll/Edit.svelte index 92e20d3e..dfee2865 100644 --- a/frontend/src/routes/poll/Edit.svelte +++ b/frontend/src/routes/poll/Edit.svelte @@ -43,9 +43,7 @@ async function patch_option(option, field, newVal){ let url = api(`poll/${id}/option/${option.id}`); - let data = {} - data[field] = newVal; - let res = await patch(url,data); + let res = await patch(url,{[field]: newVal}); if (res.ok) { yikes(); const json = await res.json(); @@ -64,7 +62,14 @@ if (res.ok) { yikes(); const json = await res.json(); - console.log(json); + const weights = json.weights; + for (let weight of Object.keys(data)){ + let desc = data[weight]; + console.log(weight, desc); + if (desc) { + poll.weights[weight] = desc; + } else delete poll.weights[weight]; // TODO: this corrupts the display of the following element! + } return true; } error(res); @@ -153,7 +158,7 @@ - patch_weight({weight: desc})} /> + patch_weight({[weight]: desc})} /> {/each} 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 7c81aeaf..b0f68754 100644 --- a/poll/src/main/java/de/srsoftware/umbrella/poll/PollModule.java +++ b/poll/src/main/java/de/srsoftware/umbrella/poll/PollModule.java @@ -137,8 +137,15 @@ public class PollModule extends BaseHandler implements PollService { } private boolean patchWeights(HttpExchange ex, Poll poll) throws IOException { - // TODO - return notFound(ex); + var json = json(ex); + for (var key : json.keySet()) try { + var weight = Integer.parseInt(key); + if (!(json.get(key) instanceof String description)) throw invalidField(Field.DESCRIPTION,Text.STRING); + poll.setWeight(weight,description); + } catch (NumberFormatException nfe) { + throw invalidField(Text.WEIGHT,Text.NUMBER); + } + return sendContent(ex,pollDb.save(poll)); } private boolean patchPollOptions(HttpExchange ex, Path path, Poll poll) throws IOException { 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 e957e985..6387ffa3 100644 --- a/poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java +++ b/poll/src/main/java/de/srsoftware/umbrella/poll/SqliteDb.java @@ -112,7 +112,7 @@ public class SqliteDb extends BaseDb implements PollDb { private void dropWeight(Poll poll, int weight){ try { - delete().from(TABLE_WEIGHTS).where(POLL_ID, equal(poll.id())).where(ID, equal(weight)).execute(db); + delete().from(TABLE_WEIGHTS).where(POLL_ID, equal(poll.id())).where(WEIGHT, equal(weight)).execute(db); poll.weights().remove(weight); } catch (SQLException e){ throw failedToDropObject(Text.WEIGHT);