public class ApartmentService { private static final ApartmentId NO_ID = ApartmentId.nullObject(); public ApartmentId add(OwnerId ownerId, ApartmentDto dto) { if (ownerRepository.exists(ownerId)) { Address address = new Address(dto.getStreet(), dto.getHouseNumber(), dto.getApartmentNumber(), dto.getCity(), dto.getCountry()); Optional found = apartmentRepository.findBy(address); if (found.isPresent()) { Apartment apartment = found.get(); eventRegistry.publish(new ApartmentAlreadyCreated(apartment.getId(), dto.getStreet(), dto.getHouseNumber(), dto.getApartmentNumber(), dto.getCity(), dto.getCountry())); return apartment.getId(); } else { Apartment apartment = new Apartment(ownerId, address); return apartmentRepository.save(apartment); } } else { eventRegistry.publish(new OwnerNotFound(ownerId)); } return NO_ID; }