|
|
|
@ -1,9 +1,7 @@
|
|
|
|
|
package fr.uca.iut.services;
|
|
|
|
|
|
|
|
|
|
import com.mongodb.lang.Nullable;
|
|
|
|
|
import fr.uca.iut.entities.Pokemong;
|
|
|
|
|
import fr.uca.iut.entities.PokemongMove;
|
|
|
|
|
import fr.uca.iut.entities.Type;
|
|
|
|
|
import fr.uca.iut.entities.*;
|
|
|
|
|
import fr.uca.iut.repositories.PokemongRepository;
|
|
|
|
|
import fr.uca.iut.utils.StringUtils;
|
|
|
|
|
import fr.uca.iut.utils.enums.PokemongName;
|
|
|
|
@ -15,6 +13,7 @@ import org.jetbrains.annotations.NotNull;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
|
|
@ApplicationScoped
|
|
|
|
@ -26,6 +25,9 @@ public class PokemongService extends GenericService<Pokemong> {
|
|
|
|
|
@Inject
|
|
|
|
|
MoveService moveService;
|
|
|
|
|
|
|
|
|
|
@Inject
|
|
|
|
|
TrainerService trainerService;
|
|
|
|
|
|
|
|
|
|
@PostConstruct
|
|
|
|
|
public void init() {
|
|
|
|
|
setRepository(pokemongRepository);
|
|
|
|
@ -33,15 +35,34 @@ public class PokemongService extends GenericService<Pokemong> {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Pokemong addOne(@NotNull Pokemong pokemong) {
|
|
|
|
|
// TODO if this pokemong has a trainer, make sure that the trainer's "pokemongs" field gets updated accordingly.
|
|
|
|
|
// (add a TrainerPokemong to the list, update the trainer)
|
|
|
|
|
return super.addOne(pokemong);
|
|
|
|
|
Pokemong persistedPokemong = super.addOne(pokemong);
|
|
|
|
|
|
|
|
|
|
Trainer trainer = trainerService.getOneById(pokemong.getTrainer());
|
|
|
|
|
if (trainer != null) {
|
|
|
|
|
TrainerPokemong trainerPokemong = new TrainerPokemong();
|
|
|
|
|
trainerPokemong.setId(pokemong.getId());
|
|
|
|
|
trainerPokemong.setNickname(pokemong.getNickname());
|
|
|
|
|
trainerPokemong.setSpecies(pokemong.getSpecies());
|
|
|
|
|
trainer.getPokemongs()
|
|
|
|
|
.add(trainerPokemong);
|
|
|
|
|
trainerService.updateOne(trainer);
|
|
|
|
|
}
|
|
|
|
|
return persistedPokemong;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void deleteOneById(String id) {
|
|
|
|
|
Pokemong pokemong = getOneById(id);
|
|
|
|
|
if (pokemong != null && pokemong.getTrainer() != null) {
|
|
|
|
|
Trainer trainer = trainerService.getOneById(pokemong.getTrainer());
|
|
|
|
|
if (trainer != null) {
|
|
|
|
|
trainer.getPokemongs()
|
|
|
|
|
.removeIf(trainerPokemong -> trainerPokemong.getId()
|
|
|
|
|
.equals(id));
|
|
|
|
|
trainerService.updateOne(trainer);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
super.deleteOneById(id);
|
|
|
|
|
// TODO also delete any corresponding PokemongTrainer among trainers
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -49,19 +70,45 @@ public class PokemongService extends GenericService<Pokemong> {
|
|
|
|
|
public Pokemong updateOne(@NotNull Pokemong pokemong) {
|
|
|
|
|
Pokemong existingPokemong = pokemongRepository.findById(pokemong.getId());
|
|
|
|
|
if (existingPokemong != null) {
|
|
|
|
|
boolean nicknameChanged = !Objects.equals(existingPokemong.getNickname(), pokemong.getNickname());
|
|
|
|
|
boolean evoStageChanged = !Objects.equals(existingPokemong.getEvoStage(), pokemong.getEvoStage());
|
|
|
|
|
boolean evoTrackChanged = !Objects.equals(existingPokemong.getEvoTrack(), pokemong.getEvoTrack());
|
|
|
|
|
|
|
|
|
|
existingPokemong.setNickname(pokemong.getNickname());
|
|
|
|
|
// TODO if nickname changed also update any corresponding PokemongTrainer's nickname
|
|
|
|
|
existingPokemong.setDob(pokemong.getDob());
|
|
|
|
|
existingPokemong.setLevel(pokemong.getLevel());
|
|
|
|
|
existingPokemong.setPokedexId(pokemong.getPokedexId());
|
|
|
|
|
existingPokemong.setEvoStage(pokemong.getEvoStage());
|
|
|
|
|
// TODO if evoStage changed, also update any corresponding PokemongTrainer's species
|
|
|
|
|
existingPokemong.setEvoTrack(pokemong.getEvoTrack());
|
|
|
|
|
// TODO if evoTrack changed, also update any corresponding PokemongTrainer's species
|
|
|
|
|
existingPokemong.setTrainer(pokemong.getTrainer());
|
|
|
|
|
existingPokemong.setTypes(pokemong.getTypes());
|
|
|
|
|
existingPokemong.setMoveSet(pokemong.getMoveSet());
|
|
|
|
|
|
|
|
|
|
pokemongRepository.persistOrUpdate(existingPokemong);
|
|
|
|
|
|
|
|
|
|
if (nicknameChanged || evoStageChanged || evoTrackChanged) {
|
|
|
|
|
Trainer trainer = trainerService.getOneById(existingPokemong.getTrainer());
|
|
|
|
|
if (trainer != null) {
|
|
|
|
|
TrainerPokemong trainerPokemong = trainer.getPokemongs()
|
|
|
|
|
.stream()
|
|
|
|
|
.filter(tp -> tp.getId()
|
|
|
|
|
.equals(existingPokemong.getId()))
|
|
|
|
|
.findFirst()
|
|
|
|
|
.orElse(null);
|
|
|
|
|
|
|
|
|
|
if (trainerPokemong != null) {
|
|
|
|
|
if (nicknameChanged) {
|
|
|
|
|
trainerPokemong.setNickname(existingPokemong.getNickname());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (evoStageChanged || evoTrackChanged) {
|
|
|
|
|
trainerPokemong.setSpecies(existingPokemong.getSpecies());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
trainerService.updateOne(trainer);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return existingPokemong;
|
|
|
|
|
}
|
|
|
|
@ -136,11 +183,20 @@ public class PokemongService extends GenericService<Pokemong> {
|
|
|
|
|
public boolean isEvoValid(String id, PokemongName species) {
|
|
|
|
|
Pokemong pokemong = pokemongRepository.findById(id);
|
|
|
|
|
|
|
|
|
|
return pokemong != null && pokemong.getEvoTrack()
|
|
|
|
|
.get(pokemong.getEvoStage()) == species;
|
|
|
|
|
return pokemong != null && pokemong.getSpecies() == species;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean existsById(String pokemongId) {
|
|
|
|
|
return repository.existsById(pokemongId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void batchUpdatePokemongTrainers(List<TrainerPokemong> trainerPokemongs, @Nullable String trainerId) {
|
|
|
|
|
for (TrainerPokemong trainerPokemong : trainerPokemongs) {
|
|
|
|
|
Pokemong pokemong = getOneById(trainerPokemong.getId());
|
|
|
|
|
if (pokemong != null) {
|
|
|
|
|
pokemong.setTrainer(trainerId);
|
|
|
|
|
updateOne(pokemong);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|