Skip to content

Commit

Permalink
Merge pull request #341 from bannergress/fix-mission-status-in-list-i…
Browse files Browse the repository at this point in the history
…mport

Rework mission import logic for creator mission list.
  • Loading branch information
ewoerner authored Oct 9, 2023
2 parents 20a3e8c + 1afe25d commit 288b4f6
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

/**
Expand Down Expand Up @@ -53,9 +52,8 @@ public void importGetMissionForProfile(@RequestBody @Valid CreatorGetMissionForP

@RolesAllowed(Roles.IMPORT_DATA)
@PostMapping("/import/getMissionsList")
public void importGetMissionsList(@RequestBody @Valid CreatorGetMissionsList data,
@RequestParam Optional<String> author) {
creatorImportService.importGetMissionsList(data, author);
public void importGetMissionsList(@RequestBody @Valid CreatorGetMissionsList data) {
creatorImportService.importGetMissionsList(data);
}

private Map<String, MissionStatusDto> toStatusMap(Collection<Mission> imported) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import com.bannergress.backend.dto.CreatorGetMissionsList;
import jakarta.validation.Valid;

import java.util.Optional;

/**
* Service for imports from mission creator.
*/
Expand All @@ -21,7 +19,6 @@ public interface CreatorImportService {
* Imports a a list of user missions from creator-based data.
*
* @param data Creator-based data.
* @param author Author.
*/
void importGetMissionsList(@Valid CreatorGetMissionsList data, Optional<String> author);
void importGetMissionsList(@Valid CreatorGetMissionsList data);
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,46 +45,45 @@ public void importGetMissionForProfile(@Valid CreatorGetMissionForProfile data)
}

@Override
public void importGetMissionsList(@Valid CreatorGetMissionsList data, Optional<String> optionalAuthor) {
public void importGetMissionsList(@Valid CreatorGetMissionsList data) {
withRecalculation(tracker -> {
for (List<CreatorMission> list : data.missionLists) {
for (CreatorMission creatorMission : list) {
if (!Strings.isNullOrEmpty(creatorMission.mission_guid)
&& (creatorMission.state == CreatorMissionStatus.PUBLISHED
|| creatorMission.state == CreatorMissionStatus.DISABLED)) {
Mission mission = importMission(creatorMission.mission_guid, creatorMission, List.of(),
tracker);
setMissionStatus(mission, toMissionStatus(creatorMission.state), tracker);
optionalAuthor.ifPresent(author -> setMissionAuthor(mission, author, null));
entityManager.persist(mission);
if (!Strings.isNullOrEmpty(creatorMission.mission_guid)) {
if (creatorMission.state == CreatorMissionStatus.PUBLISHED) {
// Published version can always be imported
Mission mission = importMission(creatorMission.mission_guid, creatorMission, List.of(),
tracker);
setMissionStatus(mission, MissionStatus.published, tracker);
} else if (list.size() == 1) {
// All other versions can only be imported if there is no second (published) item
Mission mission = entityManager.find(Mission.class, creatorMission.mission_guid);
if (mission == null) {
mission = importMission(creatorMission.mission_guid, creatorMission, List.of(),
tracker);
mission.setStatus(MissionStatus.submitted);
entityManager.persist(mission);
} else if (mission.getStatus() == MissionStatus.published) {
setMissionStatus(mission, MissionStatus.disabled, tracker);
}
}
}
}
}
});
}

private static MissionStatus toMissionStatus(CreatorMissionStatus creatorStatus) {
switch (creatorStatus) {
case SUBMITTED:
return MissionStatus.submitted;
case PUBLISHED:
return MissionStatus.published;
case DISABLED:
return MissionStatus.disabled;
default:
throw new IllegalArgumentException(creatorStatus.toString());
}
}

private Mission importMission(String id, CreatorMission creatorMission, List<CreatorPoi> creatorPois,
RecalculationTracker tracker) {
Mission mission = importMissionById(id);
setMissionAuthor(mission, creatorMission.definition.author_nickname, null);
setMissionAverageDurationMilliseconds(mission, creatorMission.stats.median_completion_time);
setMissionDescription(mission, creatorMission.definition.description);
setMissionNumberCompleted(mission, creatorMission.stats.num_completed);
if (creatorMission.stats != null) {
setMissionAverageDurationMilliseconds(mission, creatorMission.stats.median_completion_time);
setMissionNumberCompleted(mission, creatorMission.stats.num_completed);
setMissionRating(mission, creatorMission.stats.rating / 100d);
}
setMissionPicture(mission, creatorMission.definition.logo_url, tracker);
setMissionRating(mission, creatorMission.stats.rating / 100d);
setMissionTitle(mission, creatorMission.definition.name);
setMissionType(mission, creatorMission.definition.mission_type);
if (creatorMission.definition.waypoints != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ public Mission importMission(IntelMissionDetails data, boolean setMissionOnline)
for (int i = 0; i < steps.size(); i++) {
importMissionStep(steps.get(i), mission.getSteps().get(i), tracker);
}
setMissionStatus(mission, setMissionOnline ? MissionStatus.published : null, tracker);
setMissionStatus(mission, setMissionOnline ? MissionStatus.published
: mission.getStatus() == MissionStatus.submitted ? MissionStatus.disabled : null, tracker);
entityManager.persist(mission);
return mission;
});
Expand Down

0 comments on commit 288b4f6

Please sign in to comment.