package de.gedoplan.seminar.sbt.sbtrestexercise.repository; import de.gedoplan.seminar.sbt.sbtrestexercise.domain.Person; import org.springframework.stereotype.Component; import org.springframework.util.ReflectionUtils; import java.lang.reflect.Field; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Stream; @Component public class PersonRepository { private static ConcurrentHashMap personen = new ConcurrentHashMap<>(); private static AtomicInteger nextId = new AtomicInteger(1); public PersonRepository() { init(); } public void save(Person person) { if(Objects.isNull(person.getId())) { setId(person,nextId.getAndIncrement()); } personen.put(person.getId(),person); } public Optional findById(Integer id) { return Optional.ofNullable(personen.get(id)); } public void deleteById(Integer id) { personen.remove(id); } public List findAll() { return personen.values().stream().toList(); } private void setId(Person person, Integer id) { Field field = ReflectionUtils.findField(Person.class, "id"); ReflectionUtils.makeAccessible(field); ReflectionUtils.setField(field, person, id); } private void init() { Stream.of(new Person("Mustermann", "Max"), new Person("Musterfrau", "Erika")) .forEach(this::save); } }