diff --git a/pom.xml b/pom.xml
index 5e0cab1..48637fc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -65,6 +65,24 @@
picocli
4.7.6
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ 2.18.1
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.18.1
+
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ 2.18.1
+
diff --git a/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java b/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java
index 0381963..b81e94d 100644
--- a/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java
+++ b/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java
@@ -1,17 +1,66 @@
package ua.com.javarush.gnew.m2.repository;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+import java.util.stream.Collectors;
+import lombok.SneakyThrows;
import ua.com.javarush.gnew.m2.dto.ContactDto;
public interface ContactDtoRepository {
- List findAll();
+ ObjectMapper objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
- Optional findById(long id);
+ @SneakyThrows
+ default List findAll() throws IOException {
+ File file = new File("demo.st");
+ if (!file.exists()) {
+ return new ArrayList<>();
+ }
- void deleteById(long id);
+ return objectMapper.readValue(
+ file, objectMapper.getTypeFactory().constructCollectionType(List.class, ContactDto.class));
+ }
- void saveAll(List contacts);
+ @SneakyThrows
+ default Optional findById(long id) throws IOException {
+ return findAll().stream().filter(contact -> contact.getId() == id).findFirst();
+ }
- void save(ContactDto contactDto);
+ default void deleteById(long id) throws IOException {
+ Optional contactToDelete = findById(id);
+ if (contactToDelete.isPresent()) {
+ List contacts = findAll();
+ contacts.remove(contactToDelete.get());
+ saveAll(contacts);
+ } else {
+ System.out.println("Контакт с id " + id + " не найден.");
+ }
+ }
+
+ @SneakyThrows
+ default void saveAll(List contacts) throws IOException {
+ objectMapper.writeValue(new File("demo.st"), contacts);
+ }
+ ;
+
+ default void save(ContactDto contactDto) throws IOException {
+ List contacts = findAll();
+ contacts.add(contactDto);
+ saveAll(contacts);
+ }
+
+ default List findByKeyword(String keyword) throws IOException {
+ List contacts = findAll();
+ return contacts.stream()
+ .filter(
+ contact ->
+ contact.getFullName().contains(keyword)
+ || contact.getPhones().stream().anyMatch(phones -> phones.contains(keyword))
+ || contact.getEmails().stream().anyMatch(emails -> emails.contains(keyword)))
+ .collect(Collectors.toList());
+ }
}
diff --git a/src/main/java/ua/com/javarush/gnew/m2/service/SimplePhoneBook.java b/src/main/java/ua/com/javarush/gnew/m2/service/SimplePhoneBook.java
index eeda8d8..abfdcd4 100644
--- a/src/main/java/ua/com/javarush/gnew/m2/service/SimplePhoneBook.java
+++ b/src/main/java/ua/com/javarush/gnew/m2/service/SimplePhoneBook.java
@@ -3,17 +3,34 @@
import java.util.Collections;
import java.util.List;
import java.util.Optional;
+import java.util.stream.Collectors;
+import lombok.SneakyThrows;
import ua.com.javarush.gnew.m2.dto.ContactDto;
+import ua.com.javarush.gnew.m2.repository.ContactDtoRepository;
-public class SimplePhoneBook implements PhoneBookInterface {
+public class SimplePhoneBook implements PhoneBookInterface, ContactDtoRepository {
@Override
public ContactDto add(ContactDto contactDto) {
- return contactDto;
+
+ return ContactDto.builder()
+ .fullName(contactDto.getFullName())
+ .phones(List.of(String.valueOf(contactDto.getPhones())))
+ .emails(List.of(String.valueOf(contactDto.getEmails())))
+ .build();
}
+ @SneakyThrows
@Override
public List search(String str) {
- return Collections.emptyList();
+
+ List contacts = findAll();
+ return contacts.stream()
+ .filter(
+ contact ->
+ contact.getFullName().contains(str)
+ || contact.getPhones().stream().anyMatch(phones -> phones.contains(str))
+ || contact.getEmails().stream().anyMatch(emails -> emails.contains(str)))
+ .collect(Collectors.toList());
}
@Override