working on editor for polls
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -8,4 +8,6 @@ import java.util.Collection;
|
||||
|
||||
public interface PollDb {
|
||||
Collection<Poll> listPolls(UmbrellaUser user);
|
||||
|
||||
Poll loadPoll(String id);
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import static de.srsoftware.umbrella.core.ModuleRegistry.userService;
|
||||
import static de.srsoftware.umbrella.core.constants.Path.LIST;
|
||||
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingField;
|
||||
import static de.srsoftware.umbrella.poll.Constants.CONFIG_DATABASE;
|
||||
import static java.lang.System.Logger.Level.WARNING;
|
||||
|
||||
import com.sun.net.httpserver.HttpExchange;
|
||||
import de.srsoftware.configuration.Configuration;
|
||||
@@ -15,6 +16,7 @@ import de.srsoftware.umbrella.core.BaseHandler;
|
||||
import de.srsoftware.umbrella.core.ModuleRegistry;
|
||||
import de.srsoftware.umbrella.core.api.PollService;
|
||||
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
|
||||
import de.srsoftware.umbrella.core.model.Poll;
|
||||
import de.srsoftware.umbrella.core.model.Token;
|
||||
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
||||
|
||||
@@ -42,15 +44,23 @@ public class PollModule extends BaseHandler implements PollService {
|
||||
var head = path.pop();
|
||||
return switch (head) {
|
||||
case LIST -> getPollList(ex,user.get());
|
||||
case null, default -> super.doGet(path,ex);
|
||||
case null -> super.doGet(path,ex);
|
||||
default -> getPoll(ex,user.get(),head);
|
||||
};
|
||||
} catch (UmbrellaException e){
|
||||
return send(ex,e);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean getPoll(HttpExchange ex, UmbrellaUser user, String id) throws IOException {
|
||||
var poll = pollDb.loadPoll(id);
|
||||
// TODO: check permissions
|
||||
LOG.log(WARNING,"no permission checks on PollModule.getPoll({0})",id);
|
||||
return sendContent(ex,poll);
|
||||
}
|
||||
|
||||
private boolean getPollList(HttpExchange ex, UmbrellaUser user) throws IOException {
|
||||
var list = pollDb.listPolls(user);
|
||||
var list = pollDb.listPolls(user).stream().map(Poll::toMap);
|
||||
return sendContent(ex,list);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ package de.srsoftware.umbrella.poll;
|
||||
import static de.srsoftware.tools.jdbc.Condition.equal;
|
||||
import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL;
|
||||
import static de.srsoftware.tools.jdbc.Query.select;
|
||||
import static de.srsoftware.umbrella.core.ModuleRegistry.userService;
|
||||
import static de.srsoftware.umbrella.core.constants.Field.*;
|
||||
import static de.srsoftware.umbrella.core.constants.Field.DESCRIPTION;
|
||||
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.*;
|
||||
@@ -12,6 +13,7 @@ import static java.text.MessageFormat.format;
|
||||
|
||||
import de.srsoftware.umbrella.core.BaseDb;
|
||||
import de.srsoftware.umbrella.core.constants.Field;
|
||||
import de.srsoftware.umbrella.core.constants.Text;
|
||||
import de.srsoftware.umbrella.core.model.Poll;
|
||||
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
||||
|
||||
@@ -19,6 +21,7 @@ import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class SqliteDb extends BaseDb implements PollDb {
|
||||
@@ -99,15 +102,54 @@ public class SqliteDb extends BaseDb implements PollDb {
|
||||
|
||||
@Override
|
||||
public Collection<Poll> listPolls(UmbrellaUser user) {
|
||||
// TODO
|
||||
try {
|
||||
var rs = select(ALL).from(TABLE_POLLS).where(USER_ID,equal(user.id())).exec(db);
|
||||
var sql = "SELECT DISTINCT {0}.*, {5} FROM {0} LEFT JOIN {1} ON {0}.{2} = {1}.{4} WHERE {0}.{3} = ? OR {1}.{3} = ? ORDER BY {6} ASC;";
|
||||
var ps = db.prepareStatement(format(sql,TABLE_POLLS,TABLE_SHARES, ID, USER_ID, POLL_ID, PERMISSION, NAME));
|
||||
ps.setLong(1,user.id());
|
||||
ps.setLong(2, user.id());
|
||||
var rs = ps.executeQuery();
|
||||
var list = new ArrayList<Poll>();
|
||||
while (rs.next()) list.add(Poll.of(rs));
|
||||
while (rs.next()) {
|
||||
var poll = Poll.of(rs);
|
||||
poll.shares().put(user,rs.getLong(PERMISSION));
|
||||
list.add(poll);
|
||||
}
|
||||
return list;
|
||||
} catch (SQLException sqle){
|
||||
throw failedToLoadObject(TABLE_POLLS);
|
||||
}
|
||||
return List.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Poll loadPoll(String id) {
|
||||
try {
|
||||
var rs = select(ALL).from(TABLE_POLLS).where(ID,equal(id)).exec(db);
|
||||
Poll poll = null;
|
||||
if (rs.next()) poll = Poll.of(rs);
|
||||
rs.close();
|
||||
if (poll == null) throw failedToLoadObject(Text.POLL,id);
|
||||
|
||||
rs = select(ALL).from(TABLE_OPTIONS).where(POLL_ID,equal(id)).exec(db);
|
||||
while (rs.next()) poll.options().add(Poll.Option.of(rs));
|
||||
rs.close();
|
||||
|
||||
rs = select(ALL).from(TABLE_WEIGHTS).where(POLL_ID,equal(id)).exec(db);
|
||||
while (rs.next()) {
|
||||
var weight = rs.getInt(WEIGHT);
|
||||
var descr = rs.getString(DESCRIPTION);
|
||||
poll.weights().put(weight,descr);
|
||||
}
|
||||
rs.close();
|
||||
|
||||
rs = select(ALL).from(TABLE_SHARES).where(POLL_ID,equal(id)).exec(db);
|
||||
var shares = new HashMap<Long,Long>();
|
||||
while (rs.next()) shares.put(rs.getLong(USER_ID),rs.getLong(PERMISSION));
|
||||
rs.close();
|
||||
var users = userService().list(null,null,shares.keySet());
|
||||
for (var entry : users.entrySet())poll.shares().put(entry.getValue(),shares.get(entry.getKey()));
|
||||
return poll;
|
||||
} catch (SQLException e) {
|
||||
throw failedToLoadObject(Text.POLL,id).causedBy(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user