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