package com.mattrixwv.raidbuilder.service; import java.util.List; import java.util.UUID; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.mattrixwv.raidbuilder.entity.Person; import com.mattrixwv.raidbuilder.repository.person.PersonRepository; import lombok.RequiredArgsConstructor; @Service @Transactional(rollbackFor = Exception.class) @RequiredArgsConstructor public class PersonService{ private final PersonRepository personRepository; //Related services private final PersonCharacterService personCharacterService; //Write public Person createPerson(Person person){ return personRepository.save(person); } public Person updatePerson(Person person){ return personRepository.save(person); } public void deletePerson(UUID personId){ personCharacterService.deletePersonCharactersByPersonId(personId); personRepository.deleteById(personId); } public void deleteByRaidGroupId(UUID raidGroupId){ List personIds = personRepository.findAllByRaidGroupId(raidGroupId).stream().map(Person::getPersonId).toList(); personCharacterService.deletePersonCharactersByPersonIds(personIds); personRepository.deleteAllByRaidGroupId(raidGroupId); } public void deleteByRaidGroupIds(Iterable raidGroupIds){ List personIds = personRepository.findAllByRaidGroupIdIn(raidGroupIds).stream().map(Person::getPersonId).toList(); personCharacterService.deletePersonCharactersByPersonIds(personIds); personRepository.deleteAllByRaidGroupIdIn(raidGroupIds); } //Read public Person getPerson(UUID personId, UUID raidGroupId){ Person person = personRepository.findById(personId).orElse(null); if(person != null && person.getRaidGroupId().equals(raidGroupId)){ return person; } else{ return null; } } public Person getPersonByName(String personName, UUID raidGroupId){ return personRepository.findByPersonNameAndRaidGroupId(personName, raidGroupId); } public List getPeopleByRaidGroup(UUID raidGroupId, int page, int pageSize){ return personRepository.findAllByRaidGroupId(raidGroupId, PageRequest.of(page, pageSize, Sort.by("personName").ascending())); } public List getPeopleByRaidGroup(UUID raidGroupId, int page, int pageSize, String searchTerm){ return personRepository.findAllByRaidGroupIdAndPersonNameContainingIgnoreCase( raidGroupId, searchTerm, PageRequest.of(page, pageSize, Sort.by("personName").ascending()) ); } public long getPeopleCountByRaidGroup(UUID raidGroupId){ return personRepository.countByRaidGroupId(raidGroupId); } public long getPeopleCountByRaidGroup(UUID raidGroupId, String searchTerm){ return personRepository.countByRaidGroupIdAndPersonNameContainingIgnoreCase(raidGroupId, searchTerm); } }