diff --git a/src/main/java/com/sprint/mission/discodeit/DiscodeitAdvancedJavaApplication.java b/src/main/java/com/sprint/mission/discodeit/DiscodeitAdvancedJavaApplication.java index 7f0f2b8..18d1442 100644 --- a/src/main/java/com/sprint/mission/discodeit/DiscodeitAdvancedJavaApplication.java +++ b/src/main/java/com/sprint/mission/discodeit/DiscodeitAdvancedJavaApplication.java @@ -2,8 +2,10 @@ import com.sprint.mission.discodeit.model.*; import com.sprint.mission.discodeit.service.*; +import com.sprint.mission.discodeit.service.file.*; import com.sprint.mission.discodeit.service.jcf.*; +import java.io.File; import java.util.List; public class DiscodeitAdvancedJavaApplication { @@ -42,11 +44,11 @@ static void directMessageTest(DirectMessageService directMessageService, User se public static void main(String[] args) { // Service Initialization - UserService userService = new JCFUserService(); - CategoryService categoryService = new JCFCategoryService(); - ChannelService channelService = new JCFChannelService(categoryService, userService); - MessageService messageService = new JCFMessageService(userService, channelService); - DirectMessageService directMessageService = new JCFDirectMessageService(userService); + UserService userService = new FileUserService(); + CategoryService categoryService = new FileCategoryService(); + ChannelService channelService = new FileChannelService(categoryService, userService); + MessageService messageService = new FileMessageService(userService, channelService); + DirectMessageService directMessageService = new FileDirectMessageService(userService); // Set up List users = setUpUsers(userService); Category category = setUpCategory(categoryService); diff --git a/src/main/java/com/sprint/mission/discodeit/DiscodeitLayeredJavaApplication.java b/src/main/java/com/sprint/mission/discodeit/DiscodeitLayeredJavaApplication.java new file mode 100644 index 0000000..f5389a2 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/DiscodeitLayeredJavaApplication.java @@ -0,0 +1,62 @@ +package com.sprint.mission.discodeit; + +import com.sprint.mission.discodeit.model.*; +import com.sprint.mission.discodeit.repository.*; +import com.sprint.mission.discodeit.repository.file.*; +import com.sprint.mission.discodeit.service.*; +import com.sprint.mission.discodeit.service.basic.*; + +import java.util.List; + +public class DiscodeitLayeredJavaApplication { + static List setUpUsers(UserService userService) { + // User + User user1 = userService.createUser("woody", "woody@codeit.com", "woody1234", "https://lumiere-a.akamaihd.net/v1/images/open-uri20150422-20810-10n7ovy_9b42e613.jpeg"); + System.out.println("Created User1: " + user1); + User user2 = userService.createUser("buzz", "buzz@codeit.com", "buzz1234", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRSr8RwnYAsvEYAvc199pUF6AIYE6CIRBNVGg&s"); + System.out.println("Created User2: " + user2); + + return List.of(user1, user2); + } + + static Category setUpCategory(CategoryService categoryService) { + // Category + Category category = categoryService.createCategory("favorite"); + System.out.println("Created Category: " + category); + return category; + } + + static Channel channelTest(ChannelService channelService, Category category, User owner) { + Channel channel = channelService.createChannel("sports", "Channel for sports.", category.getId(), owner.getId()); + System.out.println("Created Channel: " + channel); + return channel; + } + + static void messageTest(MessageService messageService, User author, Channel channel) { + Message message = messageService.createMessage("EPL is my favorite!!", author.getId(), channel.getId()); + System.out.println("Created Message: " + message); + } + + static void directMessageTest(DirectMessageService directMessageService, User sender, User receiver) { + DirectMessage directMessage = directMessageService.createDirectMessage("EPL is my favorite!!", sender.getId(), receiver.getId()); + System.out.println("Created DirectMessage: " + directMessage); + } + + public static void main(String[] args) { + // Service Initialization + UserService userService = new BasicUserService(); + CategoryService categoryService = new BasicCategoryService(); + ChannelService channelService = new BasicChannelService(); + MessageService messageService = new BasicMessageService(); + DirectMessageService directMessageService = new BasicDirectMessageService(); + + // Set up + List users = setUpUsers(userService); + Category category = setUpCategory(categoryService); + + // Test + Channel channel = channelTest(channelService, category, users.get(0)); + messageTest(messageService, users.get(0), channel); + directMessageTest(directMessageService, users.get(0), users.get(1)); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/CategoryRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/CategoryRepository.java new file mode 100644 index 0000000..4569c0e --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/CategoryRepository.java @@ -0,0 +1,13 @@ +package com.sprint.mission.discodeit.repository; + +import com.sprint.mission.discodeit.model.Category; + +import java.util.Optional; +import java.util.UUID; + +public interface CategoryRepository { + Category save(Category category); + Optional findById(UUID id); + boolean existsById(UUID id); + void deleteById(UUID id); +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java new file mode 100644 index 0000000..23fedaa --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java @@ -0,0 +1,13 @@ +package com.sprint.mission.discodeit.repository; + +import com.sprint.mission.discodeit.model.Channel; + +import java.util.Optional; +import java.util.UUID; + +public interface ChannelRepository { + Channel save(Channel channel); + Optional findById(UUID id); + boolean existsById(UUID id); + void deleteById(UUID id); +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/DirectMessageRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/DirectMessageRepository.java new file mode 100644 index 0000000..627bf07 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/DirectMessageRepository.java @@ -0,0 +1,13 @@ +package com.sprint.mission.discodeit.repository; + +import com.sprint.mission.discodeit.model.DirectMessage; + +import java.util.Optional; +import java.util.UUID; + +public interface DirectMessageRepository { + DirectMessage save(DirectMessage directMessage); + Optional findById(UUID id); + boolean existsById(UUID id); + void deleteById(UUID id); +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java new file mode 100644 index 0000000..6bb7f31 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java @@ -0,0 +1,13 @@ +package com.sprint.mission.discodeit.repository; + +import com.sprint.mission.discodeit.model.Message; + +import java.util.Optional; +import java.util.UUID; + +public interface MessageRepository { + Message save(Message message); + Optional findById(UUID id); + boolean existsById(UUID id); + void deleteById(UUID id); +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java new file mode 100644 index 0000000..076e1eb --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -0,0 +1,13 @@ +package com.sprint.mission.discodeit.repository; + +import com.sprint.mission.discodeit.model.User; + +import java.util.Optional; +import java.util.UUID; + +public interface UserRepository { + User save(User user); + Optional findById(UUID id); + boolean existsById(UUID id); + void deleteById(UUID id); +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/file/FileCategoryRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/file/FileCategoryRepository.java new file mode 100644 index 0000000..a77a0e7 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileCategoryRepository.java @@ -0,0 +1,70 @@ +package com.sprint.mission.discodeit.repository.file; + +import com.sprint.mission.discodeit.model.Category; +import com.sprint.mission.discodeit.repository.CategoryRepository; + +import java.io.*; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +public class FileCategoryRepository implements CategoryRepository { + String filePath = "data/category.dat"; + Map data; + + public FileCategoryRepository() { + loadData(); + } + + private void loadData() { + File file = new File(filePath); + if (file.exists()) { + try { + FileInputStream fis = new FileInputStream(file); + ObjectInputStream ois = new ObjectInputStream(fis); + data = (Map) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + data = new HashMap<>(); + } + } + + @Override + public Category save(Category category) { + data.put(category.getId(), category); + save(data); + return category; + } + + @Override + public Optional findById(UUID id) { + Category categoryNullable = data.get(id); + return Optional.ofNullable(categoryNullable); + } + + @Override + public boolean existsById(UUID id) { + return data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + data.remove(id); + save(data); + } + + private void save(Map data) { + try( + FileOutputStream fos = new FileOutputStream(filePath); + ObjectOutputStream oos = new ObjectOutputStream(fos); + ) { + oos.writeObject(data); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java new file mode 100644 index 0000000..b16b59d --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -0,0 +1,70 @@ +package com.sprint.mission.discodeit.repository.file; + +import com.sprint.mission.discodeit.model.Channel; +import com.sprint.mission.discodeit.repository.ChannelRepository; + +import java.io.*; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +public class FileChannelRepository implements ChannelRepository { + String filePath = "data/channel.dat"; + Map data; + + public FileChannelRepository() { + loadData(); + } + + private void loadData() { + File file = new File(filePath); + if (file.exists()) { + try { + FileInputStream fis = new FileInputStream(file); + ObjectInputStream ois = new ObjectInputStream(fis); + data = (Map) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + data = new HashMap<>(); + } + } + + @Override + public Channel save(Channel channel) { + data.put(channel.getId(), channel); + save(data); + return channel; + } + + @Override + public Optional findById(UUID id) { + Channel channelNullable = data.get(id); + return Optional.ofNullable(channelNullable); + } + + @Override + public boolean existsById(UUID id) { + return data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + data.remove(id); + save(data); + } + + private void save(Map data) { + try( + FileOutputStream fos = new FileOutputStream(filePath); + ObjectOutputStream oos = new ObjectOutputStream(fos); + ) { + oos.writeObject(data); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/file/FileDirectMessageRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/file/FileDirectMessageRepository.java new file mode 100644 index 0000000..a218935 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileDirectMessageRepository.java @@ -0,0 +1,70 @@ +package com.sprint.mission.discodeit.repository.file; + +import com.sprint.mission.discodeit.model.DirectMessage; +import com.sprint.mission.discodeit.repository.DirectMessageRepository; + +import java.io.*; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +public class FileDirectMessageRepository implements DirectMessageRepository { + String filePath = "data/directMessage.dat"; + Map data; + + public FileDirectMessageRepository() { + loadData(); + } + + private void loadData() { + File file = new File(filePath); + if (file.exists()) { + try { + FileInputStream fis = new FileInputStream(file); + ObjectInputStream ois = new ObjectInputStream(fis); + data = (Map) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + data = new HashMap<>(); + } + } + + @Override + public DirectMessage save(DirectMessage directMessage) { + data.put(directMessage.getId(), directMessage); + save(data); + return directMessage; + } + + @Override + public Optional findById(UUID id) { + DirectMessage directMessageNullable = data.get(id); + return Optional.ofNullable(directMessageNullable); + } + + @Override + public boolean existsById(UUID id) { + return data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + data.remove(id); + save(data); + } + + private void save(Map data) { + try( + FileOutputStream fos = new FileOutputStream(filePath); + ObjectOutputStream oos = new ObjectOutputStream(fos); + ) { + oos.writeObject(data); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java new file mode 100644 index 0000000..c875d14 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -0,0 +1,70 @@ +package com.sprint.mission.discodeit.repository.file; + +import com.sprint.mission.discodeit.model.Message; +import com.sprint.mission.discodeit.repository.MessageRepository; + +import java.io.*; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +public class FileMessageRepository implements MessageRepository { + String filePath = "data/message.dat"; + Map data; + + public FileMessageRepository() { + loadData(); + } + + private void loadData() { + File file = new File(filePath); + if (file.exists()) { + try { + FileInputStream fis = new FileInputStream(file); + ObjectInputStream ois = new ObjectInputStream(fis); + data = (Map) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + data = new HashMap<>(); + } + } + + @Override + public Message save(Message message) { + data.put(message.getId(), message); + save(data); + return message; + } + + @Override + public Optional findById(UUID id) { + Message messageNullable = data.get(id); + return Optional.ofNullable(messageNullable); + } + + @Override + public boolean existsById(UUID id) { + return data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + data.remove(id); + save(data); + } + + private void save(Map data) { + try( + FileOutputStream fos = new FileOutputStream(filePath); + ObjectOutputStream oos = new ObjectOutputStream(fos); + ) { + oos.writeObject(data); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java new file mode 100644 index 0000000..a1a3594 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -0,0 +1,71 @@ +package com.sprint.mission.discodeit.repository.file; + +import com.sprint.mission.discodeit.model.User; +import com.sprint.mission.discodeit.repository.UserRepository; + +import java.io.*; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +public class FileUserRepository implements UserRepository { + String filePath = "data/users.dat"; + Map data; + + public FileUserRepository() { + loadData(); + } + + + private void loadData() { + File file = new File(filePath); + if (file.exists()) { + try { + FileInputStream fis = new FileInputStream(file); + ObjectInputStream ois = new ObjectInputStream(fis); + data = (Map) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + data = new HashMap<>(); + } + } + + @Override + public User save(User user) { + data.put(user.getId(), user); + save(data); + return user; + } + + @Override + public Optional findById(UUID id) { + User userNullable = data.get(id); + return Optional.ofNullable(userNullable); + } + + @Override + public boolean existsById(UUID id) { + return data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + data.remove(id); + save(data); + } + + private void save(Map data) { + try( + FileOutputStream fos = new FileOutputStream(filePath); + ObjectOutputStream oos = new ObjectOutputStream(fos); + ) { + oos.writeObject(data); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFCategoryRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFCategoryRepository.java new file mode 100644 index 0000000..67942d1 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFCategoryRepository.java @@ -0,0 +1,39 @@ +package com.sprint.mission.discodeit.repository.jcf; + +import com.sprint.mission.discodeit.model.Category; +import com.sprint.mission.discodeit.repository.CategoryRepository; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +public class JCFCategoryRepository implements CategoryRepository { + private final Map data; + + public JCFCategoryRepository() { + this.data = new HashMap<>(); + } + + @Override + public Category save(Category category) { + data.put(category.getId(), category); + return category; + } + + @Override + public Optional findById(UUID id) { + Category categoryNullable = data.get(id); + return Optional.ofNullable(categoryNullable); + } + + @Override + public boolean existsById(UUID id) { + return data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + data.remove(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java new file mode 100644 index 0000000..362cf72 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java @@ -0,0 +1,39 @@ +package com.sprint.mission.discodeit.repository.jcf; + +import com.sprint.mission.discodeit.model.Channel; +import com.sprint.mission.discodeit.repository.ChannelRepository; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +public class JCFChannelRepository implements ChannelRepository { + private final Map data; + + public JCFChannelRepository() { + this.data = new HashMap<>(); + } + + @Override + public Channel save(Channel channel) { + data.put(channel.getId(), channel); + return channel; + } + + @Override + public Optional findById(UUID id) { + Channel channelNullable = data.get(id); + return Optional.ofNullable(channelNullable); + } + + @Override + public boolean existsById(UUID id) { + return data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + data.remove(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFDirectMessageRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFDirectMessageRepository.java new file mode 100644 index 0000000..2fffcd7 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFDirectMessageRepository.java @@ -0,0 +1,39 @@ +package com.sprint.mission.discodeit.repository.jcf; + +import com.sprint.mission.discodeit.model.DirectMessage; +import com.sprint.mission.discodeit.repository.DirectMessageRepository; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +public class JCFDirectMessageRepository implements DirectMessageRepository { + private final Map data; + + public JCFDirectMessageRepository() { + this.data = new HashMap<>(); + } + + @Override + public DirectMessage save(DirectMessage directMessage) { + data.put(directMessage.getId(), directMessage); + return directMessage; + } + + @Override + public Optional findById(UUID id) { + DirectMessage directMessageNullable = data.get(id); + return Optional.ofNullable(directMessageNullable); + } + + @Override + public boolean existsById(UUID id) { + return data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + data.remove(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java new file mode 100644 index 0000000..50e8858 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java @@ -0,0 +1,39 @@ +package com.sprint.mission.discodeit.repository.jcf; + +import com.sprint.mission.discodeit.model.Message; +import com.sprint.mission.discodeit.repository.MessageRepository; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +public class JCFMessageRepository implements MessageRepository { + private final Map data; + + public JCFMessageRepository() { + this.data = new HashMap<>(); + } + + @Override + public Message save(Message message) { + data.put(message.getId(), message); + return message; + } + + @Override + public Optional findById(UUID id) { + Message messageNullable = data.get(id); + return Optional.ofNullable(messageNullable); + } + + @Override + public boolean existsById(UUID id) { + return data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + data.remove(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java new file mode 100644 index 0000000..36f3fb0 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java @@ -0,0 +1,39 @@ +package com.sprint.mission.discodeit.repository.jcf; + +import com.sprint.mission.discodeit.model.User; +import com.sprint.mission.discodeit.repository.UserRepository; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +public class JCFUserRepository implements UserRepository { + private final Map data; + + public JCFUserRepository() { + this.data = new HashMap<>(); + } + + @Override + public User save(User user) { + data.put(user.getId(), user); + return user; + } + + @Override + public Optional findById(UUID id) { + User userNullable = data.get(id); + return Optional.ofNullable(userNullable); + } + + @Override + public boolean existsById(UUID id) { + return data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + data.remove(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicCategoryService.java b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicCategoryService.java new file mode 100644 index 0000000..190364f --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicCategoryService.java @@ -0,0 +1,51 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.model.Category; +import com.sprint.mission.discodeit.repository.CategoryRepository; +import com.sprint.mission.discodeit.repository.file.FileCategoryRepository; +import com.sprint.mission.discodeit.service.CategoryService; + +import java.time.LocalDateTime; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.UUID; + +public class BasicCategoryService implements CategoryService { + private final CategoryRepository categoryRepository = new FileCategoryRepository(); + + @Override + public Category createCategory(String name) { + UUID id = UUID.randomUUID(); + LocalDateTime now = LocalDateTime.now(); + + Category category = new Category(id, name, now); + categoryRepository.save(category); + return category; + } + + @Override + public Optional findCategory(UUID id) { + return categoryRepository.findById(id); + } + + @Override + public Category updateCategory(Category category) { + UUID id = category.getId(); + if (!categoryRepository.existsById(id)) { + throw new NoSuchElementException("Category with id " + id + " not found"); + } + Category categoryToUpdate = categoryRepository.findById(id).get(); + categoryToUpdate.updateName(category.getName()); + categoryRepository.save(categoryToUpdate); + return categoryToUpdate; + } + + @Override + public void deleteCategory(UUID id) { + if (!categoryRepository.existsById(id)) { + throw new NoSuchElementException("Category with id " + id + " not found"); + } + + categoryRepository.deleteById(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java new file mode 100644 index 0000000..842bbc8 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -0,0 +1,65 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.model.Channel; +import com.sprint.mission.discodeit.repository.CategoryRepository; +import com.sprint.mission.discodeit.repository.ChannelRepository; +import com.sprint.mission.discodeit.repository.UserRepository; +import com.sprint.mission.discodeit.repository.file.FileCategoryRepository; +import com.sprint.mission.discodeit.repository.file.FileChannelRepository; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import com.sprint.mission.discodeit.service.ChannelService; + +import java.time.LocalDateTime; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.UUID; + +public class BasicChannelService implements ChannelService { + private final ChannelRepository channelRepository = new FileChannelRepository(); + private final CategoryRepository categoryRepository = new FileCategoryRepository(); + private final UserRepository userRepository = new FileUserRepository(); + + @Override + public Channel createChannel(String name, String description, UUID categoryId, UUID ownerId) { + UUID id = UUID.randomUUID(); + LocalDateTime now = LocalDateTime.now(); + + if (!categoryRepository.existsById(categoryId)) { + throw new NoSuchElementException("Category with id " + categoryId + " not found"); + } + if (!userRepository.existsById(ownerId)) { + throw new NoSuchElementException("Owner with id " + ownerId + " not found"); + } + + Channel channel = new Channel(id, name, description, categoryId, ownerId, now); + channelRepository.save(channel); + return channel; + } + + @Override + public Optional findChannel(UUID id) { + return channelRepository.findById(id); + } + + @Override + public Channel updateChannel(Channel channel) { + UUID id = channel.getId(); + if (!channelRepository.existsById(id)) { + throw new NoSuchElementException("Channel with id " + id + " not found"); + } + Channel channelToUpdate = channelRepository.findById(id).get(); + channelToUpdate.updateDescription(channel.getDescription()); + channelRepository.save(channelToUpdate); + + return channelToUpdate; + } + + @Override + public void deleteChannel(UUID id) { + if (!channelRepository.existsById(id)) { + throw new NoSuchElementException("Channel with id " + id + " not found"); + } + + channelRepository.deleteById(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicDirectMessageService.java b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicDirectMessageService.java new file mode 100644 index 0000000..55b9192 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicDirectMessageService.java @@ -0,0 +1,62 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.model.DirectMessage; +import com.sprint.mission.discodeit.repository.DirectMessageRepository; +import com.sprint.mission.discodeit.repository.UserRepository; +import com.sprint.mission.discodeit.repository.file.FileDirectMessageRepository; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import com.sprint.mission.discodeit.service.DirectMessageService; + +import java.time.LocalDateTime; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.UUID; + +public class BasicDirectMessageService implements DirectMessageService { + private final DirectMessageRepository directMessageRepository = new FileDirectMessageRepository(); + private final UserRepository userRepository = new FileUserRepository(); + + @Override + public DirectMessage createDirectMessage(String content, UUID senderId, UUID receiverId) { + UUID id = UUID.randomUUID(); + LocalDateTime now = LocalDateTime.now(); + + if (!userRepository.existsById(senderId)) { + throw new NoSuchElementException("Sender with id " + senderId + " not found"); + } + if (!userRepository.existsById(receiverId)) { + throw new NoSuchElementException("Receiver with id " + receiverId + " not found"); + } + + DirectMessage directMessage = new DirectMessage(id, content, senderId, receiverId, now, null); + directMessageRepository.save(directMessage); + return directMessage; + } + + @Override + public Optional findDirectMessage(UUID id) { + return directMessageRepository.findById(id); + } + + @Override + public DirectMessage updateDirectMessage(DirectMessage directMessage) { + UUID id = directMessage.getId(); + if (!directMessageRepository.existsById(id)) { + throw new IllegalArgumentException("DirectMessage with id " + id + " does not exist"); + } + DirectMessage directMessageToUpdate = directMessageRepository.findById(id).get(); + directMessageToUpdate.updateContent(directMessage.getContent(), LocalDateTime.now()); + directMessageRepository.save(directMessageToUpdate); + + return directMessageToUpdate; + } + + @Override + public void deleteDirectMessage(UUID id) { + if (!directMessageRepository.existsById(id)) { + throw new IllegalArgumentException("DirectMessage with id " + id + " does not exist"); + } + + directMessageRepository.deleteById(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java new file mode 100644 index 0000000..e5227de --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -0,0 +1,65 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.model.Message; +import com.sprint.mission.discodeit.repository.ChannelRepository; +import com.sprint.mission.discodeit.repository.MessageRepository; +import com.sprint.mission.discodeit.repository.UserRepository; +import com.sprint.mission.discodeit.repository.file.FileChannelRepository; +import com.sprint.mission.discodeit.repository.file.FileMessageRepository; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import com.sprint.mission.discodeit.service.MessageService; + +import java.time.LocalDateTime; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.UUID; + +public class BasicMessageService implements MessageService { + private final MessageRepository messageRepository = new FileMessageRepository(); + private final UserRepository userRepository = new FileUserRepository(); + private final ChannelRepository channelRepository = new FileChannelRepository(); + + @Override + public Message createMessage(String content, UUID authorId, UUID channelId) { + UUID id = UUID.randomUUID(); + LocalDateTime now = LocalDateTime.now(); + + if (!userRepository.existsById(authorId)) { + throw new NoSuchElementException("Author with id " + authorId + " not found"); + } + if (!channelRepository.existsById(channelId)) { + throw new NoSuchElementException("Channel with id " + channelId + " not found"); + } + + Message message = new Message(id, content, authorId, channelId, now, now); + messageRepository.save(message); + return message; + } + + @Override + public Optional findMessage(UUID id) { + return messageRepository.findById(id); + } + + @Override + public Message updateMessage(Message message) { + UUID id = message.getId(); + if(!messageRepository.existsById(id)) { + throw new NoSuchElementException("Message with id " + id + " not found"); + } + Message messageToUpdate = messageRepository.findById(id).get(); + messageToUpdate.updateContent(message.getContent(), LocalDateTime.now()); + messageRepository.save(messageToUpdate); + + return messageToUpdate; + } + + @Override + public void deleteMessage(UUID id) { + if(!messageRepository.existsById(id)) { + throw new NoSuchElementException("Message with id " + id + " not found"); + } + + messageRepository.deleteById(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java new file mode 100644 index 0000000..d73a971 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -0,0 +1,52 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.model.User; +import com.sprint.mission.discodeit.repository.UserRepository; +import com.sprint.mission.discodeit.repository.file.FileUserRepository; +import com.sprint.mission.discodeit.service.UserService; + +import java.time.LocalDateTime; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.UUID; + +public class BasicUserService implements UserService { + private final UserRepository userRepository = new FileUserRepository(); + + @Override + public User createUser(String username, String email, String password, String avatarUrl) { + UUID id = UUID.randomUUID(); + LocalDateTime now = LocalDateTime.now(); + + User user = new User(id, username, email, password, avatarUrl, now); + userRepository.save(user); + return user; + } + + @Override + public Optional findUser(UUID id) { + return userRepository.findById(id); + } + + @Override + public User updateUser(User user) { + UUID id = user.getId(); + if (!userRepository.existsById(id)) { + throw new NoSuchElementException("User with id " + id + " not found"); + } + User userToUpdate = userRepository.findById(id).get(); + userToUpdate.updateEmail(user.getEmail()); + userRepository.save(userToUpdate); + + return userToUpdate; + } + + @Override + public void deleteUser(UUID id) { + if (!userRepository.existsById(id)) { + throw new NoSuchElementException("User with id " + id + " not found"); + } + + userRepository.deleteById(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/file/FileCategoryService.java b/src/main/java/com/sprint/mission/discodeit/service/file/FileCategoryService.java new file mode 100644 index 0000000..a304f89 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileCategoryService.java @@ -0,0 +1,74 @@ +package com.sprint.mission.discodeit.service.file; + +import com.sprint.mission.discodeit.model.Category; +import com.sprint.mission.discodeit.service.CategoryService; + +import java.io.File; +import java.io.FileInputStream; +import java.io.ObjectInputStream; +import java.time.LocalDateTime; +import java.util.*; + +public class FileCategoryService implements CategoryService { + String filePath = "data/category.dat"; + Map data; + + public FileCategoryService() { + loadData(); + } + + + private void loadData() { + File file = new File(filePath); + if (file.exists()) { + try { + FileInputStream fis = new FileInputStream(file); + ObjectInputStream ois = new ObjectInputStream(fis); + data = (Map) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + data = new HashMap<>(); + } + } + + @Override + public Category createCategory(String name) { + UUID id = UUID.randomUUID(); + LocalDateTime now = LocalDateTime.now(); + + Category category = new Category(id, name, now); + data.put(id, category); + return category; + } + + @Override + public Optional findCategory(UUID id) { + Category categoryNullable = data.get(id); + return Optional.ofNullable(categoryNullable); + } + + @Override + public Category updateCategory(Category category) { + UUID id = UUID.randomUUID(); + if (!data.containsKey(id)) { + throw new NoSuchElementException("Category with id " + id + " not found"); + } + Category categoryToUpdate = data.get(id); + categoryToUpdate.updateName(category.getName()); + data.put(id, categoryToUpdate); + + return categoryToUpdate; + } + + @Override + public void deleteCategory(UUID id) { + if (!data.containsKey(id)) { + throw new NoSuchElementException("Category with id " + id + " not found"); + } + + data.remove(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java b/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java new file mode 100644 index 0000000..b5aa099 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java @@ -0,0 +1,88 @@ +package com.sprint.mission.discodeit.service.file; + +import com.sprint.mission.discodeit.model.Channel; +import com.sprint.mission.discodeit.service.CategoryService; +import com.sprint.mission.discodeit.service.ChannelService; +import com.sprint.mission.discodeit.service.UserService; + +import java.io.File; +import java.io.FileInputStream; +import java.io.ObjectInputStream; +import java.time.LocalDateTime; +import java.util.*; + +public class FileChannelService implements ChannelService { + String filePath = "data/channel.dat"; + Map data; + + private final CategoryService categoryService; + private final UserService userService; + + public FileChannelService(CategoryService categoryService, UserService userService) { + this.categoryService = categoryService; + this.userService = userService; + + loadData(); + } + + private void loadData() { + File file = new File(filePath); + if (file.exists()) { + try { + FileInputStream fis = new FileInputStream(file); + ObjectInputStream ois = new ObjectInputStream(fis); + data = (Map) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + data = new HashMap<>(); + } + } + + @Override + public Channel createChannel(String name, String description, UUID categoryId, UUID ownerId) { + UUID id = UUID.randomUUID(); + LocalDateTime now = LocalDateTime.now(); + + if (categoryService.findCategory(categoryId).isEmpty()) { + throw new NoSuchElementException("Category with id " + categoryId + " not found"); + } + if (userService.findUser(ownerId).isEmpty()) { + throw new NoSuchElementException("Owner with id " + ownerId + " not found"); + } + + Channel channel = new Channel(id, name, description, categoryId, ownerId, now); + data.put(id, channel); + return channel; + } + + @Override + public Optional findChannel(UUID id) { + Channel channelNullable = data.get(id); + return Optional.ofNullable(channelNullable); + } + + @Override + public Channel updateChannel(Channel channel) { + UUID id = channel.getId(); + if (!data.containsKey(id)) { + throw new NoSuchElementException("Channel with id " + id + " not found"); + } + Channel channelToUpdate = data.get(id); + channelToUpdate.updateDescription(channel.getDescription()); + data.put(id, channelToUpdate); + + return channelToUpdate; + } + + @Override + public void deleteChannel(UUID id) { + if (!data.containsKey(id)) { + throw new NoSuchElementException("Channel with id " + id + " not found"); + } + + data.remove(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/file/FileDirectMessageService.java b/src/main/java/com/sprint/mission/discodeit/service/file/FileDirectMessageService.java new file mode 100644 index 0000000..b240ec4 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileDirectMessageService.java @@ -0,0 +1,84 @@ +package com.sprint.mission.discodeit.service.file; + +import com.sprint.mission.discodeit.model.DirectMessage; +import com.sprint.mission.discodeit.service.DirectMessageService; +import com.sprint.mission.discodeit.service.UserService; + +import java.io.File; +import java.io.FileInputStream; +import java.io.ObjectInputStream; +import java.time.LocalDateTime; +import java.util.*; + +public class FileDirectMessageService implements DirectMessageService { + String filePath = "data/directMessage.dat"; + Map data; + + private final UserService userService; + + public FileDirectMessageService(UserService userService) { + this.userService = userService; + loadData(); + } + + private void loadData() { + File file = new File(filePath); + if (file.exists()) { + try { + FileInputStream fis = new FileInputStream(file); + ObjectInputStream ois = new ObjectInputStream(fis); + data = (Map) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + data = new HashMap<>(); + } + } + + @Override + public DirectMessage createDirectMessage(String content, UUID senderId, UUID receiverId) { + UUID id = UUID.randomUUID(); + LocalDateTime now = LocalDateTime.now(); + + if (userService.findUser(senderId).isEmpty()) { + throw new NoSuchElementException("Sender with id " + senderId + " not found"); + } + if (userService.findUser(receiverId).isEmpty()) { + throw new NoSuchElementException("Receiver with id " + receiverId + " not found"); + } + + DirectMessage directMessage = new DirectMessage(id, content, senderId, receiverId, now, null); + data.put(id, directMessage); + return directMessage; + } + + @Override + public Optional findDirectMessage(UUID id) { + DirectMessage directMessageNullable = data.get(id); + return Optional.ofNullable(directMessageNullable); + } + + @Override + public DirectMessage updateDirectMessage(DirectMessage directMessage) { + UUID id = directMessage.getId(); + if (!data.containsKey(id)) { + throw new IllegalArgumentException("DirectMessage with id " + id + " does not exist"); + } + DirectMessage directMessageToUpdate = data.get(id); + directMessageToUpdate.updateContent(directMessage.getContent(), LocalDateTime.now()); + data.put(id, directMessageToUpdate); + + return directMessageToUpdate; + } + + @Override + public void deleteDirectMessage(UUID id) { + if (!data.containsKey(id)) { + throw new IllegalArgumentException("DirectMessage with id " + id + " does not exist"); + } + + data.remove(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java b/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java new file mode 100644 index 0000000..b8730d6 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java @@ -0,0 +1,87 @@ +package com.sprint.mission.discodeit.service.file; + +import com.sprint.mission.discodeit.model.Message; +import com.sprint.mission.discodeit.service.ChannelService; +import com.sprint.mission.discodeit.service.MessageService; +import com.sprint.mission.discodeit.service.UserService; + +import java.io.File; +import java.io.FileInputStream; +import java.io.ObjectInputStream; +import java.time.LocalDateTime; +import java.util.*; + +public class FileMessageService implements MessageService { + String filePath = "data/message.dat"; + Map data; + + private final UserService userService; + private final ChannelService channelService; + + public FileMessageService(UserService userService, ChannelService channelService) { + this.userService = userService; + this.channelService = channelService; + loadData(); + } + + private void loadData() { + File file = new File(filePath); + if (file.exists()) { + try { + FileInputStream fis = new FileInputStream(file); + ObjectInputStream ois = new ObjectInputStream(fis); + data = (Map) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + data = new HashMap<>(); + } + } + + @Override + public Message createMessage(String content, UUID authorId, UUID channelId) { + UUID id = UUID.randomUUID(); + LocalDateTime now = LocalDateTime.now(); + + if (userService.findUser(authorId).isEmpty()) { + throw new NoSuchElementException("Author with id " + authorId + " not found"); + } + if (channelService.findChannel(channelId).isEmpty()) { + throw new NoSuchElementException("Channel with id " + channelId + " not found"); + } + + Message message = new Message(id, content, authorId, channelId, now, now); + data.put(id, message); + return message; + } + + @Override + public Optional findMessage(UUID id) { + Message messageNullable = data.get(id); + return Optional.ofNullable(messageNullable); + } + + @Override + public Message updateMessage(Message message) { + UUID id = message.getId(); + if(!data.containsKey(id)) { + throw new NoSuchElementException("Message with id " + id + " not found"); + } + Message messageToUpdate = data.get(id); + messageToUpdate.updateContent(messageToUpdate.getContent(), LocalDateTime.now()); + data.put(id, messageToUpdate); + + return messageToUpdate; + } + + @Override + public void deleteMessage(UUID id) { + if(!data.containsKey(id)) { + throw new NoSuchElementException("Message with id " + id + " not found"); + } + + data.remove(id); + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java b/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java new file mode 100644 index 0000000..92fb2c4 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -0,0 +1,66 @@ +package com.sprint.mission.discodeit.service.file; + +import com.sprint.mission.discodeit.model.User; +import com.sprint.mission.discodeit.service.UserService; + +import java.io.File; +import java.io.FileInputStream; +import java.io.ObjectInputStream; +import java.time.LocalDateTime; +import java.util.*; + +public class FileUserService implements UserService { + String filePath = "data/users.dat"; + Map data; + + public FileUserService() { + this.data = new HashMap<>(); + loadData(); + } + + private void loadData() { + File file = new File(filePath); + if (file.exists()) { + try { + FileInputStream fis = new FileInputStream(file); + ObjectInputStream ois = new ObjectInputStream(fis); + data = (Map) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } else { + data = new HashMap<>(); + } + } + + @Override + public User createUser(String username, String email, String password, String avatarUrl) { + UUID id = UUID.randomUUID(); + User user = new User(id, username, email, password, avatarUrl, LocalDateTime.now()); + data.put(id, user); + return user; + } + + @Override + public Optional findUser(UUID id) { + return Optional.ofNullable(data.get(id)); + } + + @Override + public User updateUser(User user) { + if (!data.containsKey(user.getId())) { + throw new NoSuchElementException("User not found"); + } + data.put(user.getId(), user); + return user; + } + + @Override + public void deleteUser(UUID id) { + if (!data.containsKey(id)) { + throw new NoSuchElementException("User not found"); + } + data.remove(id); + } +} \ No newline at end of file