Commit d6585259 authored by Grzegorz Pietrusza's avatar Grzegorz Pietrusza

refactor nulls and optionals

parent 5cf6b178
...@@ -5,6 +5,8 @@ import org.bson.types.ObjectId; ...@@ -5,6 +5,8 @@ import org.bson.types.ObjectId;
import org.mongodb.morphia.annotations.Entity; import org.mongodb.morphia.annotations.Entity;
import org.mongodb.morphia.annotations.Id; import org.mongodb.morphia.annotations.Id;
import static com.google.common.base.Preconditions.checkNotNull;
@Entity("solutions") @Entity("solutions")
public class Solution public class Solution
{ {
...@@ -17,10 +19,10 @@ public class Solution ...@@ -17,10 +19,10 @@ public class Solution
public Solution(Team team, Task task, Flag flag, String hashValue) public Solution(Team team, Task task, Flag flag, String hashValue)
{ {
this.team = team; this.team = checkNotNull(team);
this.task = task; this.task = checkNotNull(task);
this.flag = flag; this.flag = checkNotNull(flag);
this.hashValue = hashValue; this.hashValue = checkNotNull(hashValue);
} }
public Solution() public Solution()
......
...@@ -67,16 +67,14 @@ public class TasksRepository extends Repository<Task> ...@@ -67,16 +67,14 @@ public class TasksRepository extends Repository<Task>
)); ));
} }
private Optional<Pair<Task, Flag>> getTaskFlagPairByHashValue(User user, String userHash, int taskLevel) private Pair<Task, Flag> getTaskFlagPairByHashValue(User user, String userHash, int taskLevel)
{ {
String username = user.getName(); String username = user.getName();
Optional<Flag> matchedFlag = getByLevel(taskLevel).getFlags().stream() Flag matchedFlag = getByLevel(taskLevel).getFlags().stream()
.filter(flag -> calculateHashValue(username, flag.getValue()).equals(userHash)) .filter(flag -> calculateHashValue(username, flag.getValue()).equals(userHash))
.findFirst(); .findFirst()
if (matchedFlag.isPresent()) { .get();
return Optional.of(new Pair<>(getByLevel(taskLevel), matchedFlag.get())); return new Pair<>(getByLevel(taskLevel), matchedFlag);
}
return Optional.empty();
} }
public String calculateHashValue(String username, String flagValue) public String calculateHashValue(String username, String flagValue)
...@@ -87,23 +85,14 @@ public class TasksRepository extends Repository<Task> ...@@ -87,23 +85,14 @@ public class TasksRepository extends Repository<Task>
public boolean checkHash(User user, String hashValue, int taskLevel) public boolean checkHash(User user, String hashValue, int taskLevel)
{ {
//todo: refactor Team team = teamsRepository.getTeamByUser(user);
Optional<Pair<Task, Flag>> taskFlagPairOptional = getTaskFlagPairByHashValue(user, hashValue, taskLevel); Pair<Task, Flag> taskFlagPair = getTaskFlagPairByHashValue(user, hashValue, taskLevel);
if (!taskFlagPairOptional.isPresent()) {
return false;
}
Pair<Task, Flag> taskFlagPair = taskFlagPairOptional.get(); Solution solution = new Solution(team, taskFlagPair.getKey(), taskFlagPair.getValue(), hashValue);
Task task = taskFlagPair.getKey();
Flag flag = taskFlagPair.getValue();
Optional<Team> team = teamsRepository.getTeamByUser(user);
if (team.isPresent()) {
Solution solution = new Solution(team.get(), task, flag, hashValue);
if (!solutionsRepository.isAlreadySubmittedSolution(solution)) { if (!solutionsRepository.isAlreadySubmittedSolution(solution)) {
solutionsRepository.add(solution); solutionsRepository.add(solution);
return true; return true;
} }
}
return false; return false;
} }
......
...@@ -6,9 +6,6 @@ import org.mongodb.morphia.Datastore; ...@@ -6,9 +6,6 @@ import org.mongodb.morphia.Datastore;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
@Singleton @Singleton
public class TeamsRepository extends Repository<Team> public class TeamsRepository extends Repository<Team>
...@@ -26,20 +23,15 @@ public class TeamsRepository extends Repository<Team> ...@@ -26,20 +23,15 @@ public class TeamsRepository extends Repository<Team>
this.usersRepository = usersRepository; this.usersRepository = usersRepository;
} }
public Optional<Team> getTeamByUser(User user) public Team getTeamByUser(User user)
{ {
return datastore.createQuery(Team.class).asList().stream() return datastore.createQuery(Team.class).asList().stream()
.filter(team -> team.getMembers().contains(user)) .filter(team -> team.getMembers().contains(user))
.findFirst(); .findFirst().get();
} }
public Optional<Team> getTeamByUserName(String username) public Team getTeamByUserName(String username)
{ {
return getTeamByUser(usersRepository.getUserByName(username)); return getTeamByUser(usersRepository.getUserByName(username));
} }
public void get(UUID uuid)
{
}
} }
...@@ -51,8 +51,7 @@ public class SolutionsResource ...@@ -51,8 +51,7 @@ public class SolutionsResource
@Path("/completed") @Path("/completed")
public List<Integer> getTeamCompletedTasks(@Auth User user) public List<Integer> getTeamCompletedTasks(@Auth User user)
{ {
Optional<Team> team = teamsRepository.getTeamByUser(user); return tasksRepository.getCompletedTasks(teamsRepository.getTeamByUser(user));
return tasksRepository.getCompletedTasks(team.get());
} }
@GET @GET
...@@ -71,8 +70,8 @@ public class SolutionsResource ...@@ -71,8 +70,8 @@ public class SolutionsResource
@Path("/my") @Path("/my")
public Map<Integer, List<String>> getTeamSolutions(@Auth User user) public Map<Integer, List<String>> getTeamSolutions(@Auth User user)
{ {
Optional<Team> team = teamsRepository.getTeamByUser(user); Team team = teamsRepository.getTeamByUser(user);
return solutionsRepository.getTeamSolutions(team.get()); return solutionsRepository.getTeamSolutions(team);
} }
@GET @GET
......
...@@ -17,7 +17,6 @@ import javax.ws.rs.core.MediaType; ...@@ -17,7 +17,6 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Optional;
@Singleton @Singleton
@Path("/") @Path("/")
...@@ -35,16 +34,22 @@ public class UtilResource ...@@ -35,16 +34,22 @@ public class UtilResource
@GET @GET
@Path("/whoami") @Path("/whoami")
public ImmutableMap<Object, Object> getUserData(@Auth User user) public Response getUserData(@Auth User user)
{ {
ImmutableMap.Builder<Object, Object> responseBuilder = ImmutableMap.builder(); ImmutableMap.Builder<Object, Object> responseBuilder = ImmutableMap.builder();
String userName = user.getName(); String userName = user.getName();
responseBuilder.put("userName", userName); responseBuilder.put("userName", userName);
Optional<Team> team = teamsRepository.getTeamByUserName(userName); if (!user.isAdmin()) {
if (team.isPresent()) { Team team = teamsRepository.getTeamByUserName(userName);
responseBuilder.put("teamName", team.get().getName()); responseBuilder.put("teamName", team.getName());
} }
return responseBuilder.build(); else {
responseBuilder.put("isAdmin", true);
}
return Response.ok()
.entity(responseBuilder.build())
.build();
} }
@GET @GET
......
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