Commit 36c55089 authored by Grzegorz Pietrusza's avatar Grzegorz Pietrusza

implelemtn get all solutions endpoint group by task id

parent 37e4655a
import api.ProxyResource; import api.ProxyResource;
import api.SolutionsResource;
import api.TasksResource; import api.TasksResource;
import api.TeamsResource; import api.TeamsResource;
import com.bazaarvoice.dropwizard.webjars.WebJarBundle; import com.bazaarvoice.dropwizard.webjars.WebJarBundle;
...@@ -76,6 +77,7 @@ public class CTFApplication extends Application<ApplicationConfiguration> { ...@@ -76,6 +77,7 @@ public class CTFApplication extends Application<ApplicationConfiguration> {
environment.jersey().register(injector.getInstance(TeamsResource.class)); environment.jersey().register(injector.getInstance(TeamsResource.class));
environment.jersey().register(injector.getInstance(TasksResource.class)); environment.jersey().register(injector.getInstance(TasksResource.class));
environment.jersey().register(injector.getInstance(ProxyResource.class)); environment.jersey().register(injector.getInstance(ProxyResource.class));
environment.jersey().register(injector.getInstance(SolutionsResource.class));
//REGISTER AUTH //REGISTER AUTH
environment.jersey().register(new AuthDynamicFeature( environment.jersey().register(new AuthDynamicFeature(
...@@ -137,6 +139,7 @@ public class CTFApplication extends Application<ApplicationConfiguration> { ...@@ -137,6 +139,7 @@ public class CTFApplication extends Application<ApplicationConfiguration> {
bind(TasksResource.class).toInstance(new TasksResource(tasksRepository bind(TasksResource.class).toInstance(new TasksResource(tasksRepository
)); ));
bind(ProxyResource.class).toInstance(new ProxyResource()); bind(ProxyResource.class).toInstance(new ProxyResource());
bind(SolutionsResource.class).toInstance(new SolutionsResource(solutionsRepository));
} }
}); });
......
package api;
import objects.Solution;
import repositories.SolutionsRepository;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* Created by gpietrus on 16.02.16.
*/
@Path(value = "/solutions")
@Produces(MediaType.APPLICATION_JSON)
public class SolutionsResource {
private SolutionsRepository solutionsRepository;
@Inject
public SolutionsResource(SolutionsRepository solutionsRepository) {
this.solutionsRepository = solutionsRepository;
}
@GET
@Path("/all")
//todo: refactor mapping
public Map<String, List<String>> getTeamsSolutions() {
//todo: general refactor
return solutionsRepository.getAll()
.stream()
.collect(Collectors.groupingBy(new Function<Solution, String>() {
@Override
public String apply(Solution solution) {
return solution.getTaskId();
}
}))
.entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue().stream()
.map(Solution::getTeamId)
.collect(Collectors.toList())
));
}
}
package objects; package objects;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import org.bson.Document;
import java.util.Map; import java.util.Map;
...@@ -16,9 +17,22 @@ public class Solution { ...@@ -16,9 +17,22 @@ public class Solution {
this.taskId = taskId; this.taskId = taskId;
} }
public String getTaskId() {
return taskId;
}
public String getTeamId() {
return teamId;
}
public Solution(Document document) {
this.taskId = document.get("taskId").toString(); //todo: refactor mapping
this.teamId = document.get("teamId").toString();
}
//todo: refactor mapping //todo: refactor mapping
public Map<String, Object> toMap() { public Map<String, String> toMap() {
return ImmutableMap.<String, Object>builder() return ImmutableMap.<String, String>builder()
.put("teamId",teamId) .put("teamId",teamId)
.put("taskId", taskId) .put("taskId", taskId)
.build(); .build();
......
...@@ -2,9 +2,10 @@ package repositories; ...@@ -2,9 +2,10 @@ package repositories;
import database.MongoDBConnector; import database.MongoDBConnector;
import objects.Solution; import objects.Solution;
import org.bson.Document;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* Created by gpietrus on 20.02.2016. * Created by gpietrus on 20.02.2016.
...@@ -21,15 +22,15 @@ public class SolutionsRepository implements Repository { ...@@ -21,15 +22,15 @@ public class SolutionsRepository implements Repository {
// //
// } // }
// public List<Solution> getAll() { public List<Solution> getAll() {
// return mongoDBConnector.getCollection("solutions") return mongoDBConnector.getCollection("solutions")
// .stream() .stream()
// .map(Solution::new) .map(Solution::new)
// .collect(Collectors.toList()); .collect(Collectors.toList());
// } }
public void add(Solution solution) { public void add(Solution solution) { //todo
mongoDBConnector.addDocument("solutions", new Document(solution.toMap())); // mongoDBConnector.addDocument("solutions", new Document(solution.toMap()));
} }
public void clean() { public void clean() {
......
Markdown is supported
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