93 lines
2.8 KiB
Java
93 lines
2.8 KiB
Java
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<UUID> personIds = personRepository.findAllByRaidGroupId(raidGroupId).stream().map(Person::getPersonId).toList();
|
|
personCharacterService.deletePersonCharactersByPersonIds(personIds);
|
|
|
|
personRepository.deleteAllByRaidGroupId(raidGroupId);
|
|
}
|
|
|
|
public void deleteByRaidGroupIds(Iterable<UUID> raidGroupIds){
|
|
List<UUID> 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<Person> getPeopleByRaidGroup(UUID raidGroupId, int page, int pageSize){
|
|
return personRepository.findAllByRaidGroupId(raidGroupId, PageRequest.of(page, pageSize, Sort.by("personName").ascending()));
|
|
}
|
|
|
|
public List<Person> 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);
|
|
}
|
|
}
|