implemented updating of option names. next: update option description
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -3,10 +3,11 @@ package de.srsoftware.umbrella.poll;
|
||||
|
||||
import static de.srsoftware.umbrella.core.ConnectionProvider.connect;
|
||||
import static de.srsoftware.umbrella.core.ModuleRegistry.userService;
|
||||
import static de.srsoftware.umbrella.core.constants.Field.FIELD;
|
||||
import static de.srsoftware.umbrella.core.constants.Field.ID;
|
||||
import static de.srsoftware.umbrella.core.constants.Path.LIST;
|
||||
import static de.srsoftware.umbrella.core.constants.Path.OPTION;
|
||||
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.forbidden;
|
||||
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingField;
|
||||
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.*;
|
||||
import static de.srsoftware.umbrella.poll.Constants.CONFIG_DATABASE;
|
||||
import static java.lang.System.Logger.Level.WARNING;
|
||||
|
||||
@@ -57,6 +58,23 @@ public class PollModule extends BaseHandler implements PollService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doPatch(Path path, HttpExchange ex) throws IOException {
|
||||
addCors(ex);
|
||||
try {
|
||||
Optional<Token> token = SessionToken.from(ex).map(Token::of);
|
||||
var user = userService().loadUser(token);
|
||||
if (user.isEmpty()) return unauthorized(ex);
|
||||
var head = path.pop();
|
||||
return switch (head) {
|
||||
case null -> super.doPatch(path,ex);
|
||||
default -> patchPoll(ex,user.get(),head, path);
|
||||
};
|
||||
} catch (UmbrellaException e){
|
||||
return send(ex,e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doPost(Path path, HttpExchange ex) throws IOException {
|
||||
addCors(ex);
|
||||
@@ -66,7 +84,7 @@ public class PollModule extends BaseHandler implements PollService {
|
||||
if (user.isEmpty()) return unauthorized(ex);
|
||||
var head = path.pop();
|
||||
return switch (head) {
|
||||
case null -> super.doGet(path,ex);
|
||||
case null -> super.doPost(path,ex);
|
||||
default -> postToPoll(ex,user.get(),head, path);
|
||||
};
|
||||
} catch (UmbrellaException e){
|
||||
@@ -86,6 +104,46 @@ public class PollModule extends BaseHandler implements PollService {
|
||||
return sendContent(ex,list);
|
||||
}
|
||||
|
||||
private boolean patchPoll(HttpExchange ex, UmbrellaUser user, String id, Path path) throws IOException {
|
||||
var poll = pollDb.loadPoll(id);
|
||||
var permitted = user.equals(poll.owner());
|
||||
if (!permitted) {
|
||||
var permission = poll.shares().get(user);
|
||||
if (permission == null || permission < 2) throw forbidden(Text.NOT_ALLOWED_TO_EDIT, Field.OBJECT,Text.POLL);
|
||||
}
|
||||
var head = path.pop();
|
||||
return switch (head){
|
||||
case OPTION -> patchPollOptions(ex, path, poll);
|
||||
default -> notFound(ex);
|
||||
};
|
||||
}
|
||||
|
||||
private boolean patchPollOptions(HttpExchange ex, Path path, Poll poll) throws IOException {
|
||||
try {
|
||||
if (path.empty()) throw missingField(ID);
|
||||
var optionId = Integer.parseInt(path.pop());
|
||||
var option = poll.options().stream().filter(o -> o.id()==optionId).findFirst().orElse(null);
|
||||
if (option == null) throw failedToLoadObject(Text.OPTION);
|
||||
var json = json(ex);
|
||||
for (var key : json.keySet()){
|
||||
switch (key) {
|
||||
case ID:
|
||||
break;
|
||||
case Field.NAME:
|
||||
option.name(json.getString(key)); break;
|
||||
case Field.DESCRIPTION:
|
||||
option.description(json.getString(key)); break;
|
||||
default:
|
||||
throw UmbrellaException.badRequest(Text.UNKNOWN_FIELD,FIELD,key);
|
||||
}
|
||||
}
|
||||
|
||||
return sendContent(ex, pollDb.save(poll));
|
||||
} catch (NumberFormatException nfe){
|
||||
throw invalidField(ID,Text.NUMBER).causedBy(nfe);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean postToPoll(HttpExchange ex, UmbrellaUser user, String id, Path path) throws IOException {
|
||||
var poll = pollDb.loadPoll(id);
|
||||
var permitted = user.equals(poll.owner());
|
||||
|
||||
@@ -188,9 +188,8 @@ public class SqliteDb extends BaseDb implements PollDb {
|
||||
}
|
||||
|
||||
private Poll.Option update(String pollId, Poll.Option option) throws SQLException {
|
||||
updateIgnore(TABLE_OPTIONS)
|
||||
.set(NAME, DESCRIPTION, STATUS).where(ID, equal(pollId)).prepare(db)
|
||||
.apply(option.name(), option.description(), option.status()).execute();
|
||||
replaceInto(TABLE_OPTIONS,POLL_ID, ID, NAME, DESCRIPTION, STATUS)
|
||||
.values(pollId, option.id(), option.name(), option.description(), option.status()).execute(db);
|
||||
return option;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user