Skip to content

Commit

Permalink
fix: time cost create error
Browse files Browse the repository at this point in the history
  • Loading branch information
kastnerorz committed Nov 20, 2019
1 parent 077377b commit 9a9fda8
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 27 deletions.
10 changes: 9 additions & 1 deletion src/main/java/cn/kastner/oj/domain/TimeCost.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class TimeCost {
@Column(length = 40)
private String id = UUID.randomUUID().toString();

@ManyToOne(fetch = FetchType.EAGER)
@ManyToOne(fetch = FetchType.LAZY)
@NotFound(action = NotFoundAction.IGNORE)
private ContestProblem contestProblem;

Expand All @@ -36,6 +36,14 @@ public class TimeCost {
@NotFound(action = NotFoundAction.IGNORE)
private RankingUser rankingUser;

public TimeCost() {
}

public TimeCost(ContestProblem contestProblem, RankingUser rankingUser) {
this.contestProblem = contestProblem;
this.rankingUser = rankingUser;
}

public void addTotalTime(Long milliseconds) {
this.totalTime += milliseconds;
}
Expand Down
21 changes: 4 additions & 17 deletions src/main/java/cn/kastner/oj/factory/RankingUserFactory.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
package cn.kastner.oj.factory;

import cn.kastner.oj.domain.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import cn.kastner.oj.domain.Contest;
import cn.kastner.oj.domain.Group;
import cn.kastner.oj.domain.RankingUser;
import cn.kastner.oj.domain.User;

public final class RankingUserFactory {

private RankingUserFactory() {
}

public static RankingUser create(User user, Contest contest, Group group) {
Set<ContestProblem> contestProblemSet = contest.getContestProblemSet();
RankingUser rankingUser = new RankingUser();
rankingUser.setContest(contest);
rankingUser.setUser(user);
Expand All @@ -22,17 +20,6 @@ public static RankingUser create(User user, Contest contest, Group group) {
rankingUser.setTeacherId(group.getAuthor().getId());
}

// initialize timeCostList
List<TimeCost> timeCostList = new ArrayList<>();
for (ContestProblem contestProblem : contestProblemSet) {

TimeCost timeCost = new TimeCost();
timeCost.setContestProblem(contestProblem);
timeCost.setRankingUser(rankingUser);
timeCostList.add(timeCost);
}
rankingUser.setTimeList(timeCostList);

// process exclude rankingUser
if (!contest.getUserListExcluded().contains(user)) {
rankingUser.setRanked(true);
Expand Down
26 changes: 26 additions & 0 deletions src/main/java/cn/kastner/oj/factory/TimeCostFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package cn.kastner.oj.factory;

import cn.kastner.oj.domain.Contest;
import cn.kastner.oj.domain.ContestProblem;
import cn.kastner.oj.domain.RankingUser;
import cn.kastner.oj.domain.TimeCost;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public final class TimeCostFactory {

private TimeCostFactory() {
}

public static List<TimeCost> createList(Contest contest, RankingUser rankingUser) {
Set<ContestProblem> contestProblemSet = contest.getContestProblemSet();
List<TimeCost> timeCostList = new ArrayList<>();
for (ContestProblem contestProblem : contestProblemSet) {
TimeCost timeCost = new TimeCost(contestProblem, rankingUser);
timeCostList.add(timeCost);
}
return timeCostList;
}
}
22 changes: 13 additions & 9 deletions src/main/java/cn/kastner/oj/service/impl/ContestServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import cn.kastner.oj.exception.ContestException;
import cn.kastner.oj.exception.ProblemException;
import cn.kastner.oj.factory.RankingUserFactory;
import cn.kastner.oj.factory.TimeCostFactory;
import cn.kastner.oj.query.ContestQuery;
import cn.kastner.oj.query.RankingQuery;
import cn.kastner.oj.repository.*;
Expand Down Expand Up @@ -246,13 +247,15 @@ public List<RankingUserDTO> addUsersByGroups(List<String> groupIdList, String co
for (Group group : groupList) {
for (User user : group.getUserSet()) {
if (!userSet.contains(user)) {
RankingUser rankingUser = RankingUserFactory.create(user, contest, group);
timeCostRepository.saveAll(rankingUser.getTimeList());
RankingUser rankingUser =
rankingUserRepository.save(RankingUserFactory.create(user, contest, group));
List<TimeCost> timeCostList = TimeCostFactory.createList(contest, rankingUser);
timeCostRepository.saveAll(timeCostList);
addRankingUserList.add(rankingUser);
}
}
}
return mapper.toRankingUserDTOs(rankingUserRepository.saveAll(addRankingUserList));
return mapper.toRankingUserDTOs(addRankingUserList);
}

@Override
Expand Down Expand Up @@ -280,12 +283,13 @@ public List<RankingUserDTO> addUsers(List<String> userIdList, String contestId)
List<User> userList = userRepository.findAllById(userIdList);
for (User user : userList) {
if (!userSet.contains(user)) {
RankingUser rankingUser = RankingUserFactory.create(user, contest, null);
timeCostRepository.saveAll(rankingUser.getTimeList());
RankingUser rankingUser =
rankingUserRepository.save(RankingUserFactory.create(user, contest, null));
timeCostRepository.saveAll(TimeCostFactory.createList(contest, rankingUser));
addRankingUserList.add(rankingUser);
}
}
return mapper.toRankingUserDTOs(rankingUserRepository.saveAll(addRankingUserList));
return mapper.toRankingUserDTOs(addRankingUserList);
}

@Override
Expand Down Expand Up @@ -572,9 +576,9 @@ private void addUserToRanking(Contest contest, User user) {
.map(RankingUser::getUser)
.collect(Collectors.toSet());
if (!userSet.contains(user)) {
RankingUser rankingUser = RankingUserFactory.create(user, contest, null);
timeCostRepository.saveAll(rankingUser.getTimeList());
rankingUserRepository.save(rankingUser);
RankingUser rankingUser =
rankingUserRepository.save(RankingUserFactory.create(user, contest, null));
timeCostRepository.saveAll(TimeCostFactory.createList(contest, rankingUser));
}
}

Expand Down

0 comments on commit 9a9fda8

Please sign in to comment.