Skip to content
Snippets Groups Projects
Commit 66f1e0bf authored by Daniel Gerhardt's avatar Daniel Gerhardt Committed by Daniel Gerhardt
Browse files

Add moderators for rooms

Moderators can assist a room owner in managing the room. This commit
adds API and persistence support for moderators.
parent 170a4a5b
Branches
1 merge request!131Room moderators
......@@ -19,13 +19,22 @@ package de.thm.arsnova.controller;
import de.thm.arsnova.model.Room;
import de.thm.arsnova.service.RoomService;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Set;
@RestController
@RequestMapping(RoomController.REQUEST_MAPPING)
public class RoomController extends AbstractEntityController<Room> {
protected static final String REQUEST_MAPPING = "/room";
private static final String GET_MODERATORS_MAPPING = DEFAULT_ID_MAPPING + "/moderator";
private static final String MODERATOR_MAPPING = DEFAULT_ID_MAPPING + "/moderator/{userId}";
private RoomService roomService;
......@@ -43,4 +52,29 @@ public class RoomController extends AbstractEntityController<Room> {
protected String resolveAlias(final String shortId) {
return roomService.getIdByShortId(shortId);
}
@GetMapping(GET_MODERATORS_MAPPING)
public Set<Room.Moderator> getModerators(@PathVariable final String id) {
return roomService.get(id).getModerators();
}
@PutMapping(MODERATOR_MAPPING)
public void putModerator(@PathVariable final String id, @PathVariable final String userId,
@RequestBody final Room.Moderator moderator) {
final Room room = roomService.get(id);
moderator.setUserId(userId);
if (moderator.getRoles().isEmpty()) {
moderator.getRoles().add(Room.Moderator.Role.EXECUTIVE_MODERATOR);
}
room.getModerators().removeIf(m -> m.getUserId().equals(userId));
room.getModerators().add(moderator);
roomService.update(room);
}
@DeleteMapping(MODERATOR_MAPPING)
public void deleteModerator(@PathVariable final String id, @PathVariable final String userId) {
final Room room = roomService.get(id);
room.getModerators().removeIf(m -> m.getUserId().equals(userId));
roomService.update(room);
}
}
......@@ -98,6 +98,40 @@ public class Room extends Entity {
}
}
public static class Moderator {
public enum Role {
EDITING_MODERATOR,
EXECUTIVE_MODERATOR
}
private String userId;
private Set<Role> roles;
@JsonView({View.Persistence.class, View.Public.class})
public String getUserId() {
return userId;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setUserId(final String userId) {
this.userId = userId;
}
@JsonView({View.Persistence.class, View.Public.class})
public Set<Role> getRoles() {
if (roles == null) {
roles = new HashSet<>();
}
return roles;
}
@JsonView({View.Persistence.class, View.Public.class})
public void setRoles(final Set<Role> roles) {
this.roles = roles;
}
}
public static class Settings {
private boolean questionsEnabled = true;
private boolean slidesEnabled = true;
......@@ -420,6 +454,7 @@ public class Room extends Entity {
private String description;
private boolean closed;
private Set<ContentGroup> contentGroups;
private Set<Moderator> moderators;
private Settings settings;
private Author author;
private PoolProperties poolProperties;
......@@ -509,6 +544,20 @@ public class Room extends Entity {
this.contentGroups = new HashSet<>(groups.values());
}
@JsonView(View.Persistence.class)
public Set<Moderator> getModerators() {
if (moderators == null) {
moderators = new HashSet<>();
}
return moderators;
}
@JsonView(View.Persistence.class)
public void setModerators(final Set<Moderator> moderators) {
this.moderators = moderators;
}
@JsonView({View.Persistence.class, View.Public.class})
public Settings getSettings() {
if (settings == null) {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment