Skip to content
Snippets Groups Projects
Commit 1e854b8e authored by Tom Käsler's avatar Tom Käsler
Browse files

Merge branch 'room-contentgroup-stats' into 'master'

Add /stats endpoint for rooms with content group stats

See merge request !158
parents 45b8e8e7 1ddb215d
Branches
1 merge request!158Add /stats endpoint for rooms with content group stats
Pipeline #30309 passed with warnings with stages
in 2 minutes and 53 seconds
...@@ -18,7 +18,9 @@ ...@@ -18,7 +18,9 @@
package de.thm.arsnova.controller; package de.thm.arsnova.controller;
import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
...@@ -30,6 +32,7 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -30,6 +32,7 @@ import org.springframework.web.bind.annotation.RestController;
import de.thm.arsnova.model.ContentGroup; import de.thm.arsnova.model.ContentGroup;
import de.thm.arsnova.model.Room; import de.thm.arsnova.model.Room;
import de.thm.arsnova.model.RoomStatistics;
import de.thm.arsnova.service.ContentGroupService; import de.thm.arsnova.service.ContentGroupService;
import de.thm.arsnova.service.RoomService; import de.thm.arsnova.service.RoomService;
...@@ -41,6 +44,7 @@ public class RoomController extends AbstractEntityController<Room> { ...@@ -41,6 +44,7 @@ public class RoomController extends AbstractEntityController<Room> {
private static final String MODERATOR_MAPPING = DEFAULT_ID_MAPPING + "/moderator/{userId}"; private static final String MODERATOR_MAPPING = DEFAULT_ID_MAPPING + "/moderator/{userId}";
private static final String CONTENTGROUP_MAPPING = DEFAULT_ID_MAPPING + "/contentgroup/{groupName}"; private static final String CONTENTGROUP_MAPPING = DEFAULT_ID_MAPPING + "/contentgroup/{groupName}";
private static final String CONTENTGROUP_ADD_MAPPING = CONTENTGROUP_MAPPING + "/{contentId}"; private static final String CONTENTGROUP_ADD_MAPPING = CONTENTGROUP_MAPPING + "/{contentId}";
private static final String STATS_MAPPING = DEFAULT_ID_MAPPING + "/stats";
private RoomService roomService; private RoomService roomService;
private ContentGroupService contentGroupService; private ContentGroupService contentGroupService;
...@@ -96,4 +100,16 @@ public class RoomController extends AbstractEntityController<Room> { ...@@ -96,4 +100,16 @@ public class RoomController extends AbstractEntityController<Room> {
@RequestBody final String contentId) { @RequestBody final String contentId) {
contentGroupService.addContentToGroup(id, groupName, contentId); contentGroupService.addContentToGroup(id, groupName, contentId);
} }
@GetMapping(STATS_MAPPING)
public RoomStatistics getStats(@PathVariable final String id) {
final RoomStatistics roomStatistics = new RoomStatistics();
final List<ContentGroup> contentGroups = contentGroupService.getByRoomId(id);
roomStatistics.setGroupStats(contentGroups.stream()
.map(cg -> new RoomStatistics.ContentGroupStatistics(cg)).collect(Collectors.toList()));
roomStatistics.setContentCount(contentGroups.stream()
.mapToInt(cg -> cg.getContentIds().size()).reduce((a, b) -> a + b).getAsInt());
return roomStatistics;
}
} }
...@@ -19,24 +19,35 @@ ...@@ -19,24 +19,35 @@
package de.thm.arsnova.model; package de.thm.arsnova.model;
import com.fasterxml.jackson.annotation.JsonView; import com.fasterxml.jackson.annotation.JsonView;
import java.util.ArrayList;
import java.util.List;
import org.springframework.core.style.ToStringCreator; import org.springframework.core.style.ToStringCreator;
import de.thm.arsnova.model.serialization.View; import de.thm.arsnova.model.serialization.View;
public class RoomStatistics { public class RoomStatistics {
private int currentParticipants;
private int contentCount = 0; private int contentCount = 0;
private int unansweredContentCount = 0; private int unansweredContentCount = 0;
private int answerCount = 0; private int answerCount = 0;
private int unreadAnswerCount = 0; private int unreadAnswerCount = 0;
private int commentCount = 0; private int commentCount = 0;
private int unreadCommentCount = 0; private int unreadCommentCount = 0;
private List<ContentGroupStatistics> groupStats;
@JsonView(View.Public.class) @JsonView(View.Public.class)
public int getCurrentParticipants() {
return currentParticipants;
}
public void setCurrentParticipants(final int currentParticipants) {
this.currentParticipants = currentParticipants;
}
public int getUnansweredContentCount() { public int getUnansweredContentCount() {
return unansweredContentCount; return unansweredContentCount;
} }
@JsonView(View.Public.class)
public void setUnansweredContentCount(final int unansweredContentCount) { public void setUnansweredContentCount(final int unansweredContentCount) {
this.unansweredContentCount = unansweredContentCount; this.unansweredContentCount = unansweredContentCount;
} }
...@@ -59,7 +70,6 @@ public class RoomStatistics { ...@@ -59,7 +70,6 @@ public class RoomStatistics {
this.answerCount = answerCount; this.answerCount = answerCount;
} }
@JsonView(View.Public.class)
public int getUnreadAnswerCount() { public int getUnreadAnswerCount() {
return unreadAnswerCount; return unreadAnswerCount;
} }
...@@ -77,7 +87,6 @@ public class RoomStatistics { ...@@ -77,7 +87,6 @@ public class RoomStatistics {
this.commentCount = commentCount; this.commentCount = commentCount;
} }
@JsonView(View.Public.class)
public int getUnreadCommentCount() { public int getUnreadCommentCount() {
return unreadCommentCount; return unreadCommentCount;
} }
...@@ -86,15 +95,70 @@ public class RoomStatistics { ...@@ -86,15 +95,70 @@ public class RoomStatistics {
this.unreadCommentCount = unreadCommentCount; this.unreadCommentCount = unreadCommentCount;
} }
@JsonView(View.Public.class)
public List<ContentGroupStatistics> getGroupStats() {
if (groupStats == null) {
groupStats = new ArrayList<>();
}
return groupStats;
}
public void setGroupStats(final List<ContentGroupStatistics> groupStats) {
this.groupStats = groupStats;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringCreator(this) return new ToStringCreator(this)
.append("currentParticipants", currentParticipants)
.append("contentCount", contentCount)
.append("unansweredContentCount", unansweredContentCount)
.append("answerCount", answerCount)
.append("unreadAnswerCount", unreadAnswerCount)
.append("commentCount", commentCount)
.append("unreadCommentCount", unreadCommentCount)
.append("groupStats", groupStats)
.toString();
}
public static class ContentGroupStatistics {
private String groupName;
private int contentCount = 0;
public ContentGroupStatistics() {
}
public ContentGroupStatistics(final ContentGroup contentGroup) {
this.setGroupName(contentGroup.getName());
this.setContentCount(contentGroup.getContentIds().size());
}
@JsonView(View.Public.class)
public String getGroupName() {
return groupName;
}
public void setGroupName(final String groupName) {
this.groupName = groupName;
}
@JsonView(View.Public.class)
public int getContentCount() {
return contentCount;
}
public void setContentCount(final int contentCount) {
this.contentCount = contentCount;
}
@Override
public String toString() {
return new ToStringCreator(this)
.append("groupName", groupName)
.append("contentCount", contentCount) .append("contentCount", contentCount)
.append("unansweredContentCount", unansweredContentCount)
.append("answerCount", answerCount)
.append("unreadAnswerCount", unreadAnswerCount)
.append("commentCount", commentCount)
.append("unreadCommentCount", unreadCommentCount)
.toString(); .toString();
}
} }
} }
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