From 797999a868d864ff43a37539c3226b0cee615cde Mon Sep 17 00:00:00 2001 From: Denys Date: Fri, 8 Nov 2024 04:37:02 +0200 Subject: [PATCH 1/4] upgrd interface --- .../m2/repository/ContactDtoRepository.java | 54 ++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) 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..487bf64 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,59 @@ package ua.com.javarush.gnew.m2.repository; +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 com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import lombok.SneakyThrows; import ua.com.javarush.gnew.m2.dto.ContactDto; public interface ContactDtoRepository { - List findAll(); - - Optional findById(long id); + ObjectMapper objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT); + @SneakyThrows + default List findAll() throws IOException { + File file = new File("demo.st"); + if (!file.exists()) { + return new ArrayList<>(); + } + return objectMapper.readValue(file, objectMapper.getTypeFactory().constructCollectionType(List.class, ContactDto.class)); + } - void deleteById(long id); + @SneakyThrows + default Optional findById(long id) throws IOException { + return findAll().stream().filter(contact -> contact.getId() == id).findFirst(); + } - void saveAll(List contacts); + 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); + }; - void save(ContactDto contactDto); + 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()); + } } From ee6227efb480992f5a13aafeb44d4e2208a91df3 Mon Sep 17 00:00:00 2001 From: Denys Date: Fri, 8 Nov 2024 05:26:17 +0200 Subject: [PATCH 2/4] upgrd interface --- .../gnew/m2/service/SimplePhoneBook.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) 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..e3d4283 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,31 @@ 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 From a5d1d27e631f6ef479cef66f5fe33116294414a2 Mon Sep 17 00:00:00 2001 From: Denys Date: Fri, 8 Nov 2024 06:29:28 +0200 Subject: [PATCH 3/4] re-check interface --- .../com/javarush/gnew/m2/repository/ContactDtoRepository.java | 3 +++ .../java/ua/com/javarush/gnew/m2/service/SimplePhoneBook.java | 2 ++ 2 files changed, 5 insertions(+) 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 487bf64..fd2de15 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 @@ -20,6 +20,7 @@ default List findAll() throws IOException { if (!file.exists()) { return new ArrayList<>(); } + return objectMapper.readValue(file, objectMapper.getTypeFactory().constructCollectionType(List.class, ContactDto.class)); } @@ -38,6 +39,7 @@ default void deleteById(long id) throws IOException { System.out.println("Контакт с id " + id + " не найден."); } } + @SneakyThrows default void saveAll(List contacts) throws IOException { objectMapper.writeValue(new File("demo.st"),contacts); @@ -48,6 +50,7 @@ default void save(ContactDto contactDto) throws IOException { contacts.add(contactDto); saveAll(contacts); } + default List findByKeyword(String keyword) throws IOException { List contacts = findAll(); return contacts.stream() 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 e3d4283..ecbb3a0 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 @@ -12,6 +12,7 @@ public class SimplePhoneBook implements PhoneBookInterface, ContactDtoRepository { @Override public ContactDto add(ContactDto contactDto) { + return ContactDto.builder() .fullName(contactDto.getFullName()) .phones(List.of(String.valueOf(contactDto.getPhones()))) @@ -22,6 +23,7 @@ public ContactDto add(ContactDto contactDto) { @SneakyThrows @Override public List search(String str) { + List contacts = findAll(); return contacts.stream() .filter(contact -> contact.getFullName().contains(str) || From 34dce20f79512ac9e2d9cc4fa7b9553de0b55439 Mon Sep 17 00:00:00 2001 From: Denys Date: Fri, 8 Nov 2024 06:40:47 +0200 Subject: [PATCH 4/4] re-check interface --- pom.xml | 18 ++++++++++++++ .../m2/repository/ContactDtoRepository.java | 24 +++++++++++-------- .../gnew/m2/service/SimplePhoneBook.java | 21 ++++++++-------- 3 files changed, 43 insertions(+), 20 deletions(-) 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 fd2de15..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,19 +1,19 @@ 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 com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; import lombok.SneakyThrows; import ua.com.javarush.gnew.m2.dto.ContactDto; public interface ContactDtoRepository { ObjectMapper objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT); + @SneakyThrows default List findAll() throws IOException { File file = new File("demo.st"); @@ -21,7 +21,8 @@ default List findAll() throws IOException { return new ArrayList<>(); } - return objectMapper.readValue(file, objectMapper.getTypeFactory().constructCollectionType(List.class, ContactDto.class)); + return objectMapper.readValue( + file, objectMapper.getTypeFactory().constructCollectionType(List.class, ContactDto.class)); } @SneakyThrows @@ -42,8 +43,9 @@ default void deleteById(long id) throws IOException { @SneakyThrows default void saveAll(List contacts) throws IOException { - objectMapper.writeValue(new File("demo.st"),contacts); - }; + objectMapper.writeValue(new File("demo.st"), contacts); + } + ; default void save(ContactDto contactDto) throws IOException { List contacts = findAll(); @@ -54,9 +56,11 @@ default void save(ContactDto contactDto) throws IOException { 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()); + .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 ecbb3a0..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 @@ -4,7 +4,6 @@ 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; @@ -13,11 +12,11 @@ public class SimplePhoneBook implements PhoneBookInterface, ContactDtoRepository @Override public ContactDto add(ContactDto contactDto) { - return ContactDto.builder() - .fullName(contactDto.getFullName()) - .phones(List.of(String.valueOf(contactDto.getPhones()))) - .emails(List.of(String.valueOf(contactDto.getEmails()))) - .build(); + return ContactDto.builder() + .fullName(contactDto.getFullName()) + .phones(List.of(String.valueOf(contactDto.getPhones()))) + .emails(List.of(String.valueOf(contactDto.getEmails()))) + .build(); } @SneakyThrows @@ -26,10 +25,12 @@ public List search(String str) { 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()); + .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