From 892d422cb2b53a3e7cb5b949aff5b76cfa190c46 Mon Sep 17 00:00:00 2001 From: Leichtstar Date: Tue, 15 Apr 2025 18:20:08 +0900 Subject: [PATCH 01/10] =?UTF-8?q?-=20PR=20=EB=A6=AC=EB=B7=B0=20=EC=BD=94?= =?UTF-8?q?=EB=A9=98=ED=8A=B8=20=EC=B0=B8=EA=B3=A0=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20=20=20=E3=84=B41.=20{break;}=20=EB=93=B1?= =?UTF-8?q?=EC=9D=98=20=EC=BB=A8=EB=B2=A4=EC=85=98,=20=EC=A4=84=EB=B0=94?= =?UTF-8?q?=EA=BF=88,=20=EB=93=A4=EC=97=AC=EC=93=B0=EA=B8=B0=20=EB=93=B1?= =?UTF-8?q?=20=EC=A0=84=EB=B0=98=EC=A0=81=EC=9D=B8=20=EB=AC=B8=EB=B2=95=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC=20=20=20=E3=84=B42.=20Channel=20entity?= =?UTF-8?q?=EA=B0=80=20MessageService=20=EA=B0=9D=EC=B2=B4=EB=A5=BC=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=EA=B0=92=EC=9C=BC=EB=A1=9C=20=EA=B0=80?= =?UTF-8?q?=EC=A7=80=EB=8A=94=20=EB=B6=80=EB=B6=84=20=EC=88=98=EC=A0=95.?= =?UTF-8?q?=20MessageList=20=EC=BB=AC=EB=A0=89=EC=85=98=EC=9D=84=20Channel?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=EC=9D=98=20UUID=EB=A5=BC=20=ED=82=A4?= =?UTF-8?q?=EA=B0=92=EC=9C=BC=EB=A1=9C=20=EA=B0=96=EB=8A=94=20Map=20?= =?UTF-8?q?=ED=98=95=ED=83=9C=EB=A1=9C=20=EA=B5=AC=EC=A1=B0=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=ED=95=A8.=20=20=20=E3=84=B43.=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20=ED=98=B8=EC=B6=9C,=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=84=A0=EC=96=B8=20=EB=93=B1=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=20=20=20=E3=84=B44.=20=EB=A9=94=EC=84=9C=EB=93=9C=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C=20=EC=8B=9C=20=EB=84=98=EA=B8=B0=EB=8A=94=20=ED=8C=8C?= =?UTF-8?q?=EB=9D=BC=EB=AF=B8=ED=84=B0=EA=B0=92=EC=9D=84=20=ED=95=84?= =?UTF-8?q?=EC=9A=94=EC=B5=9C=EC=86=8C=EB=A1=9C=20=EC=A1=B0=EC=A0=95?= =?UTF-8?q?=ED=95=A8.=EC=98=88=EC=8B=9C=20:=20(User=20user=20->=20String?= =?UTF-8?q?=20user.getName())=20=20=20=E3=84=B45.=20=EB=B6=80=EB=AA=A8=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=EC=84=9C=20=EC=9E=90?= =?UTF-8?q?=EC=8B=9D=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EB=A5=BC=20=EC=B0=B8=EC=A1=B0=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=93=B1=20=EC=9E=98=EB=AA=BB=EB=90=9C=20=EC=83=81?= =?UTF-8?q?=EC=86=8D=EA=B4=80=EA=B3=84=20=EC=88=98=EC=A0=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/jcf/JCFChannelService.java | 65 ---------------- .../service/jcf/JCFMessageService.java | 60 --------------- .../discodeit/service/jcf/JCFUserService.java | 74 ------------------- .../mission/discodeit/JavaApplication.java | 49 +++++++++--- .../discodeit/control/ChannelControl.java | 30 ++++---- .../discodeit/control/MessageControl.java | 69 ++++++++++------- .../discodeit/control/UserControl.java | 36 +++------ .../mission/discodeit/entity/Channel.java | 45 +++++++---- .../mission/discodeit/entity/Message.java | 38 +++++++--- .../sprint/mission/discodeit/entity/User.java | 45 ++++++----- .../discodeit/jcf/JCFChannelService.java | 11 +-- .../discodeit/jcf/JCFMessageService.java | 71 +++++++++++------- .../mission/discodeit/jcf/JCFUserService.java | 1 - .../discodeit/service/ChannelService.java | 6 +- .../discodeit/service/MessageService.java | 17 ++--- .../service/file/FileChannelService.java | 4 + .../service/file/FileMessageService.java | 4 + .../service/file/FileUserService.java | 4 + 18 files changed, 258 insertions(+), 371 deletions(-) delete mode 100644 src/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java delete mode 100644 src/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java delete mode 100644 src/com/sprint/mission/discodeit/service/jcf/JCFUserService.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java diff --git a/src/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java b/src/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java deleted file mode 100644 index d731f9cc..00000000 --- a/src/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.sprint.mission.discodeit.jcf; - -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.ChannelService; - -import java.util.ArrayList; -import java.util.List; - -public class JCFChannelService implements ChannelService { - // 초기 채널 입력 - private final List channels = new ArrayList<>(); - public JCFChannelService(){ - channels.add(new Channel("ch01","default Channel","관리자",1744036548250L,1744036548250L)); - - } - // 채널 생성 메서드 - @Override - public Channel addChannel(String channelName, String channelDesc, User user){ - long now = System.currentTimeMillis(); - Channel channel = new Channel(channelName,channelDesc,user.getName(),now,now); - channels.add(channel); - System.out.print("\n ▶ [새로운 채널 생성완료]"); - System.out.println(" ▶ 채널명 : " + channel.getChannelName() + " ▶ 생성시간 : " + channel.getCreatedAt()); - return channel; - }; - // 채널 수정 메서드 - @Override - public void UpdateChannel(Channel channel, String channelName, String channelDescription){ - long now = System.currentTimeMillis(); - channel.setChannelName(channelName); - channel.setChannelDescription(channelDescription); - channel.setUpdatedAt(now); - System.out.print("\n ▶ [채널 정보 수정 완료]"); - System.out.println(channel); - }; - // 채널 삭제 메서드 - @Override - public void deleteChannel(Channel channel){ - channels.remove(channel); - }; - // 전체채널목록 출력 메서드 - @Override - public void printAllChannels(){ - System.out.println("<< 생성된 전체 채널 >>"); - System.out.println("채널명 | 개설자 | 채널설명(개설시간)"); - channels.forEach(chan -> System.out.println(chan.getChannelName()+" | "+chan.getChannelCreater()+" | "+chan.getChannelDescription()+" ("+chan.getCreatedAt() + ")")); - System.out.println(""); - } - - @Override - public List getAllChannels() { - return List.of(); - } - - @Override // 이름으로 채널 검색 메서드. 채널객체를 return - public Channel findChannelByName(String name){ - for (Channel channel : channels) { - if (channel.getChannelName().equals(name)) { - return channel; // 일치하는 name 발견시 channel 객체를 리턴 - } - } - return null; // 없으면 null - } -} diff --git a/src/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java b/src/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java deleted file mode 100644 index c9013ad9..00000000 --- a/src/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.sprint.mission.discodeit.jcf; - -import com.sprint.mission.discodeit.entity.Message; -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.MessageService; - -import java.util.ArrayList; -import java.util.List; - -public class JCFMessageService implements MessageService { - private final List messages = new ArrayList<>(); - // 테스트용 초기 더미 데이터 입력 - public JCFMessageService() { - messages.add(new Message(001,"희동이","더미 데이터 1 요리보고 조리봐도", 1744036548250L , 1744036548250L)); - messages.add(new Message(002,"희동이","더미 데이터 2 알수없는 둘리둘리", 1744036558250L , 1744036558250L)); - messages.add(new Message(003,"도우너","더미 데이터 3 빙하타고~내려와아", 1744036938250L , 1744036938250L)); - messages.add(new Message(004,"고길동","더미 데이터 4 치인구를 만났지만", 1744036938250L , 1744036938250L)); - } - @Override - public void uploadMsg(User user,String txtMsg){ - long now = System.currentTimeMillis(); - Message message = new Message(messages.size() + 1,user.getName(),txtMsg,now,now); - messages.add(message); - } - - @Override - public void updateMsg(User user, Message message,String newMsg) { - String resetColor = "\u001B[0m"; - String setColorYellow = "\u001B[33m"; - message.setTextMsg(newMsg + setColorYellow + " *** [" + user.getName() + "] 에 의해 수정됨" + resetColor); - message.setUpdatedAt(System.currentTimeMillis()); - } - - public void deleteMessage(User user, Message message){ - String resetColor = "\u001B[0m"; - String setColorRed = "\u001B[31m"; - message.setTextMsg(setColorRed + " - ////// " + user.getName() + " 사용자에 의해 삭제됨 ////// -" +message.getUpdatedAt() + resetColor); - message.setUpdatedAt(System.currentTimeMillis()); - } - public Message findMessageByNum(int num){ - for (Message message : messages) { - if (message.getMsgNumber() == num) { - return message; // 일치하는 메세지 번호 발견시 message 리턴 - } - }return null; - } - public void printAllMessages() { - System.out.println("<< 입력된 전체 메세지 >>"); - System.out.println("번호 | 사용자 : 메세지"); - messages.forEach(m -> System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n",m.getMsgNumber(),m.getAuthor(),m.getTextMsg(),m.getCreatedAt(),m.getUpdatedAt(),m.getId())); - System.out.println(); - } - public void printOneMessage(int msgNum){ - Message message = findMessageByNum(msgNum); - System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", message.getMsgNumber(),message.getAuthor(),message.getTextMsg(),message.getCreatedAt(),message.getUpdatedAt(),message.getId() ); - } - public List getMessagesList() { - return messages; - } -} diff --git a/src/com/sprint/mission/discodeit/service/jcf/JCFUserService.java b/src/com/sprint/mission/discodeit/service/jcf/JCFUserService.java deleted file mode 100644 index 46b50eab..00000000 --- a/src/com/sprint/mission/discodeit/service/jcf/JCFUserService.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.sprint.mission.discodeit.jcf; - -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.UserService; - -import java.util.*; - -public class JCFUserService implements UserService { - private final List users = new ArrayList<>(); - // 테스트용 초기 더미 데이터 입력 - public JCFUserService() { - users.add(new User("희동이" , 1744036538250L , 1744036538250L)); - users.add(new User("고길동" , 1744036738250L , 1744071238250L)); - users.add(new User("도우너" , 1744036938250L , 1744036538250L)); - } - - @Override // 유저 생성 메서드 createUser() - public User createUser(String name) { - long now = System.currentTimeMillis(); - User user = new User(name, now, now); - users.add(user); - System.out.println("사용자의 이름을 [" + user.getName() + "] 으로 생성하였습니다. | " + user.getCreatedAt()); - return user; - } - - @Override //유저 이름 변경 메서드 updateUserName() - public void updateUserName(User user, String newName) { - String oldName = user.getName(); - user.setName(newName); - user.setUpdatedAt(System.currentTimeMillis()); - System.out.println("[" + oldName + "] 사용자의 이름을 [" + user.getName() + "] 으로 변경하였습니다. | " + user.getUpdatedAt()); - } - - @Override - public boolean deleteUser(UUID id) { - return users.removeIf(user -> user.getId().equals(id)); - } - - @Override - public boolean deleteUser(String name) { - return users.removeIf(user -> user.getName().equals(name)); - } - - @Override - public User findUserById(UUID id) { - for (User user : users) { - if (user.getId().equals(id)) { - return user; // 일치하는 ID 발견시 user 리턴 - } - } - return null; // 없으면 null 리턴 - } - - @Override - public User findUserByName(String name) { - for (User user : users) { - if (user.getName().equals(name)) { - return user; // 일치하는 name 발견시 user 리턴 - } - } - return null; // 없으면 null 리턴 - } - - // 유틸 메서드: 모든 사용자 출력 - public void printAllUsers(){ - System.out.println(" □ □ □ 전체 사용자 목록 □ □ □ \n 사용자이름 | 사용자생성시간 | 사용자정보 수정시간 | 사용자UUID"); - users.forEach(u -> System.out.println(" " + u.getName() + " | " + u.getCreatedAt() + " | " + u.getUpdatedAt() + " | " + u.getId())); - System.out.println(); - } - public List getUserslist() { - return users; - } - -} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/JavaApplication.java b/src/main/java/com/sprint/mission/discodeit/JavaApplication.java index ac67e001..16ab66bb 100644 --- a/src/main/java/com/sprint/mission/discodeit/JavaApplication.java +++ b/src/main/java/com/sprint/mission/discodeit/JavaApplication.java @@ -2,6 +2,9 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.jcf.JCFChannelService; +import com.sprint.mission.discodeit.jcf.JCFMessageService; +import com.sprint.mission.discodeit.jcf.JCFUserService; import com.sprint.mission.discodeit.control.ChannelControl; import com.sprint.mission.discodeit.control.MessageControl; import com.sprint.mission.discodeit.control.UserControl; @@ -10,17 +13,24 @@ import java.util.Scanner; public class JavaApplication { + public static final JCFUserService userService = new JCFUserService(); + public static final JCFMessageService messageService = new JCFMessageService(); + public static final JCFChannelService channelService = new JCFChannelService(); + public static final Scanner scanner = new Scanner(System.in); - public static User currentUser; - public static Channel currentChannel; + public static final ThreadLocal nowUser = new ThreadLocal<>(); + public static final ThreadLocal nowChannel = new ThreadLocal<>(); public static void main(String[] args) { - // 0. 초기 사용자 인증 - currentUser = UserControl.verifyUser(); - // 0_1. intro 메세지 + // 0. intro 메세지 System.out.println(" ▶ discodeit 메세지 서비스에 연결되었습니다."); - // 1. mainmenu 호출 + // 0_1. 초기 사용자 인증 + nowUser.set(UserControl.verifyUser()); + // 1. mainmenu 호출. menuMain(); + nowUser.remove(); + nowChannel.remove(); + //// <<메뉴 트리>> //// 메인메뉴 ┬ 1. 채널입장 (채널상 메세지 관리) || 메서드 : control.menuMessageMng() //// │ ├ 1_1 메세지 작성 ok @@ -63,6 +73,21 @@ public static int scanInt(){ // 메뉴 선택시 int값 입력 필터링 메 return inputNum; } + public static User verifyUser(){ // 사용자명 입력 >> 없는 사용자 : 사용자 생성 / 있는 사용자 : 이름으로 확인, ID연결 + System.out.print(" ▶ 사용자명을 입력해 주세요 : "); + String username = scanner.nextLine(); + User user = userService.findUserByName(username); + if (user != null) { + System.out.println("[" + user.getName() + "] 님 환영합니다." + ", ID: " + user.getId()); + return user; + } else { + System.out.println("\n ▶ 존재하지 않는 사용자입니다. 신규 사용자로 등록합니다."); + User newUser = userService.createUser(username); + System.out.println("\n ▶ 환영합니다 [" + newUser.getName() + "] 님, 새로운 ID가 발급되였습니다. 신규 사용자 UUID : " + newUser.getId()); + return newUser; + } + } + public static void menuMain(){ // 메인 메뉴 call 메서드. 각 세부 메뉴로 접근하기 위함. while (true) { @@ -77,14 +102,14 @@ public static void menuMain(){ // 메인 메뉴 call 메서드. 각 세부 switch (choice) { case 1: // 채널 입장 : 메세지 관리 메서드 호출 - currentChannel = ChannelControl.verifyChannel(); - MessageControl.menuMessageMng(currentUser,currentChannel); + nowChannel.set(ChannelControl.joinChannel()); + MessageControl.menuMessageMng(nowUser.get(),nowChannel.get()); break; case 2: - ChannelControl.menuChannelMng(currentUser); + ChannelControl.menuChannelMng(nowUser.get()); break; case 3: // 사용자 관리 : 사용자 관리 메서드 호출 - UserControl.menuUserMng(currentUser); + UserControl.menuUserMng(nowUser.get()); break; case 4: System.out.println(" ▶ 프로그램을 종료합니다."); @@ -92,7 +117,9 @@ public static void menuMain(){ // 메인 메뉴 call 메서드. 각 세부 default: System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); } - if (choice == 4) {break;} + if (choice == 4) { + break; + } } } } diff --git a/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java b/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java index 9a05b86c..45eb7b5f 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java @@ -3,13 +3,11 @@ import com.sprint.mission.discodeit.JavaApplication; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.jcf.JCFChannelService; public class ChannelControl extends JavaApplication { - private static final JCFChannelService channelService = new JCFChannelService(); - public static Channel verifyChannel(){ // 채널입장시 Channel 신규개설 판별 메서드. 있으면 있는 채널에 참가 / 없으면 없는채널 생성 - System.out.print(" ▶ 채널명을 입력해 주세요 : "); + public static Channel joinChannel(){ // 채널입장시 Channel 신규개설 판별 메서드. 있으면 있는 채널에 참가 / 없으면 없는채널 생성 + System.out.print(" ▶ 채널명을 입력해 주세요 : "); String chanName = scanner.nextLine(); Channel channel = channelService.findChannelByName(chanName); if (channel != null) { @@ -19,7 +17,7 @@ public static Channel verifyChannel(){ // 채널입장시 Channel 신규개설 System.out.println("\n ▶ 존재하지 않는 채널입니다. 새로운 채널을 개설합니다."); System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); String chanDesc = scanner.nextLine(); - Channel newChannel = channelService.addChannel(chanName,chanDesc,currentUser); + Channel newChannel = channelService.addChannel(chanName,chanDesc,nowUser.get().getName()); System.out.println(" ▶ [" + newChannel.getChannelName() + "] 채널에 접속합니다." + " 채널 ID: " + newChannel.getId()); return newChannel; } @@ -47,10 +45,12 @@ public static void menuChannelMng(User currentUser){ // 2. 채널 관리 if (channel == null) { System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); String chanDesc = scanner.nextLine(); - Channel newChan = channelService.addChannel(chanName, chanDesc, currentUser); + Channel newChan = channelService.addChannel(chanName, chanDesc, currentUser.getName()); System.out.println("\n ▶ "+newChan.getChannelName()+" 채널 생성에 성공하였습니다."); break; - } else {System.out.println("\n ▶ 이미 존재하는 채널입니다. 다른 이름을 입력해주세요.");} + } else { + System.out.println("\n ▶ 이미 존재하는 채널입니다. 다른 이름을 입력해주세요."); + } } break; case 2: // 2_2 채널 이름으로 검색하여 개별 채널 조회 @@ -82,12 +82,12 @@ public static void menuChannelMng(User currentUser){ // 2. 채널 관리 System.out.print(" >> "); newName = scanner.nextLine(); if(channelService.findChannelByName(newName) == null){ - if (newName.length() != 0) { - toRenameChannel.setChannelName(newName); - break; - } else { - System.out.println(" ▶ 잘못된 입력입니다. 다시 입력해 주세요."); - } + if (newName.length() != 0) { + toRenameChannel.setChannelName(newName); + break; + } else { + System.out.println(" ▶ 잘못된 입력입니다. 다시 입력해 주세요."); + } } else { System.out.println(" ▶ 이미 존재하는 채널명입니다. 다시 입력해 주세요."); } @@ -146,7 +146,9 @@ public static void menuChannelMng(User currentUser){ // 2. 채널 관리 default: // 세부메뉴 입력예외처리 System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); } - if (choice == 6) {break;} + if (choice == 6) { + break; + } } diff --git a/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java b/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java index 5f56b2ae..a38fd4f1 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java @@ -4,13 +4,13 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.jcf.JCFUserService; import java.util.List; +import java.util.UUID; public class MessageControl extends JavaApplication { - private static final JCFUserService userService = new JCFUserService(); public static void menuMessageMng(User currentUser, Channel currentChannel){ // 1 메세지 관리 메서드 + while (true) { System.out.println(" *******************************************************\n" + " || ["+currentChannel.getChannelName()+"] 채널에 입장했습니다.\n" @@ -27,23 +27,34 @@ public static void menuMessageMng(User currentUser, Channel currentChannel){ int choice = scanInt(); // 숫자 입력 필터링 메서드 호출 int inputMsgNum; Message currentMsg; - List messages = currentChannel.messageService().getMessagesList(); + UUID channelId = currentChannel.getId(); + List messages = messageService.getMessagesList(channelId); + System.out.println(messages.size()); switch (choice) { case 1: // 1_1 메세지 작성 - System.out.print(" ▶ 새로운 대화를 시작합니다.\n"); - while (true){ - int goNum; - if((messages.size()) < 5){goNum=0;}else{goNum = messages.size() - 5;} + System.out.print(" ▶ 새로운 대화를 시작합니다. 대화를 종료하려면 빈 값을 입력해주세요.\n"); + currentChannel.getId(); + while (true){ //대화메세지를 연속으로 입력받도록 루프 + int msgDisplaySize; + if((messages.size()) < 5){ + msgDisplaySize=0; + System.out.println("5이하의메세지크기"); + } else { + System.out.println("5이상의메세지크기"); + msgDisplaySize = messages.size() - 5 + ; + } System.out.println("번호 | 사용자명 : 메세지(생성일/수정일)"); - for (int i = goNum ; i < messages.size(); i++) { - currentChannel.messageService().printOneMessage(i+1); + for (int i = msgDisplaySize ; i < messages.size(); i++) { + messageService.printOneMessage(channelId,i+1); } System.out.print(" >> "); String txtMsg = scanner.nextLine(); if (txtMsg.length()!=0) { - currentChannel.messageService().uploadMsg(currentUser, txtMsg); - }else { + + messageService.uploadMsg(channelId, currentUser.getName(), txtMsg); + } else { System.out.println(" ▶ 메세지 입력을 종료합니다"); break; } @@ -52,7 +63,7 @@ public static void menuMessageMng(User currentUser, Channel currentChannel){ case 2: //1_2 전체 메세지 조회 System.out.println(" ▶ 채널에 등록된 모든 메세지를 조회합니다.\n "); - currentChannel.messageService().printAllMessages(); + messageService.printAllMessages(channelId); break; case 3: //1_3 단건 메세지 조회 System.out.println(" ▶ 조회할 메세지의 번호를 입력해 주세요"); @@ -60,51 +71,53 @@ public static void menuMessageMng(User currentUser, Channel currentChannel){ if(inputMsgNum <= messages.size()) { System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); System.out.println("번호 | 사용자 : 메세지 ( 생성시각 / 수정시각 )"); - currentChannel.messageService().printOneMessage(inputMsgNum); - break;} + messageService.printOneMessage(channelId,inputMsgNum); + break; + } System.out.println(" ▶ 잘못된 입력입니다. 상위메뉴로 돌아갑니다."); break; case 4: // 1_4 메세지 수정 System.out.println(" ▶ 현재 등록된 메세지는 아래와 같습니다."); - currentChannel.messageService().printAllMessages(); + messageService.printAllMessages(channelId); System.out.println(" ▶ 수정할 메세지의 번호를 입력해 주세요"); inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 if(inputMsgNum <= messages.size()) { - currentMsg = currentChannel.messageService().findMessageByNum(inputMsgNum); + currentMsg = messageService.findMessageByNum(channelId,inputMsgNum); System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); System.out.println(currentMsg.getTextMsg()); System.out.print("수정할 새로운 메세지를 입력해 주세요.\n >> "); String newMessage = scanner.nextLine(); - currentChannel.messageService().updateMsg(currentUser,currentMsg, newMessage); + messageService.updateMsg(currentUser.getName(),currentMsg, newMessage); System.out.println("기존 내용을 [" + currentMsg.getTextMsg() + "] 로 수정하였습니다."); - break;} + break; + } System.out.println(" ▶ 잘못된 입력입니다. 상위메뉴로 돌아갑니다."); break; case 5: // 1_5 메세지 삭제 System.out.println(" ▶ 현재 등록된 메세지는 아래와 같습니다."); - currentChannel.messageService().printAllMessages(); + messageService.printAllMessages(channelId); System.out.println(" ▶ 삭제할 메세지의 번호를 입력해 주세요"); inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 - currentMsg = currentChannel.messageService().findMessageByNum(inputMsgNum); + currentMsg = messageService.findMessageByNum(channelId,inputMsgNum); System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); System.out.println(currentMsg.getTextMsg()); - System.out.println(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); + System.out.print(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); String deleteConfirm = scanner.nextLine(); if (deleteConfirm.length() == 0) { System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); break; - }else if(deleteConfirm.equals("삭제")) { - currentChannel.messageService().deleteMessage(currentUser,currentMsg); + } else if (deleteConfirm.equals("삭제")) { + messageService.deleteMessage(currentUser.getName(),currentMsg); System.out.println("메세지가 삭제되었습니다."); - }else{ + } else { System.out.println(" ▶ 잘못된 입력입니다. 사용자 삭제를 취소합니다."); } break; case 6: // 1_6 현재 채널 변경 - currentChannel = ChannelControl.verifyChannel(); + currentChannel = ChannelControl.joinChannel(); break; case 7: // 1_7 현재 사용자 변경 System.out.print(" ▶ 어떤 사용자로 로그인할까요?"); @@ -124,9 +137,9 @@ public static void menuMessageMng(User currentUser, Channel currentChannel){ default: // 세부메뉴 입력예외처리 System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); } - if (choice == 8) {break;} + if (choice == 8) { + break; + } } - - } // 1 메세지 관리 메서드 } diff --git a/src/main/java/com/sprint/mission/discodeit/control/UserControl.java b/src/main/java/com/sprint/mission/discodeit/control/UserControl.java index 2bedad50..fb57aa26 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/UserControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/UserControl.java @@ -2,28 +2,13 @@ import com.sprint.mission.discodeit.JavaApplication; import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.jcf.JCFUserService; import java.util.InputMismatchException; public class UserControl extends JavaApplication { - private static final JCFUserService userService = new JCFUserService(); + // 어플리케이션 최초 실행시 User 신규여부 판별 메서드. 있으면 있는 유저로 로그인 / 없으면 새 유저 생성 - public static User verifyUser(){ // 사용자명 입력 >> 없는 사용자 : 사용자 생성 / 있는 사용자 : 이름으로 확인, ID연결 - System.out.print(" ▶ 사용자명을 입력해 주세요 : "); - String username = scanner.nextLine(); - User user = userService.findUserByName(username); - if (user != null) { - System.out.println("[" + user.getName() + "] 님 환영합니다." + ", ID: " + user.getId()); - return user; - } else { - System.out.println("\n ▶ 존재하지 않는 사용자입니다. 신규 사용자로 등록합니다."); - User newUser = userService.createUser(username); - System.out.println("\n ▶ 환영합니다 [" + newUser.getName() + "] 님, 새로운 ID가 발급되였습니다.\n 신규 사용자 UUID : " + newUser.getId()); - return newUser; - } - } - // 1_3 사용자 관리 세부메뉴 메서드 +// 1_3 사용자 관리 세부메뉴 메서드 public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 내부메뉴 메서드 while (true) { System.out.println(" *******************************************************\n" @@ -54,7 +39,8 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 String username = scanner.nextLine(); if (username.length() == 0) { // 입력값이 없는경우 상위 메뉴로 이동 System.out.println(" ▶ 입력값이 없습니다. 사용자 생성을 취소합니다.\n"); - break;} + break; + } User user = userService.findUserByName(username); if (user == null) { // 중복 유저명 체크하여 중복유저가 없는경우 사용자 생성 User newUser = userService.createUser(username); @@ -85,11 +71,12 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 String newName = scanner.nextLine(); if(newName.length() ==0) {// 사용자 이름 입력값이 없는경우 상위메뉴로 이동 System.out.println(" ▶ 새 이름을 입력하지 않았습니다. 사용자 이름 변경을 취소합니다."); - break;} + break; + } User user = userService.findUserByName(newName); if(user != null){ // 중복값 존재시 재입력 System.out.print(" ▶ 이미 존재하는 이름입니다. 다시 입력해 주세요.\n >>> "); - } else{ // 중복값 미확인시 유저명 변경 + } else { // 중복값 미확인시 유저명 변경 userService.updateUserName(currentUser, newName); break; } @@ -116,10 +103,10 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 if (deleteConfirm.length() == 0) { System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); break; - }else if(deleteConfirm.equals("삭제")) { + } else if (deleteConfirm.equals("삭제")) { userService.deleteUser(deleteUser); System.out.println("[" + deleteUser + "] 사용자가 삭제되었습니다."); - }else{ + } else { System.out.println(" ▶ 잘못된 입력입니다. 사용자 삭제를 취소합니다."); } } @@ -157,8 +144,9 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 default: // 1_4 세부메뉴 입력예외처리 System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); } - if (choice == 7) {break;} + if (choice == 7) { + break; + } } } // 1_3 사용자 관리 세부메뉴 메서드 - } diff --git a/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/src/main/java/com/sprint/mission/discodeit/entity/Channel.java index 7bce68ed..a92fe50e 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/Channel.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -1,12 +1,13 @@ package com.sprint.mission.discodeit.entity; - import com.sprint.mission.discodeit.jcf.JCFMessageService; +import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.UUID; -public class Channel { +public class Channel implements Serializable { + private static final long serialVersionUID = 1L; private final UUID id = UUID.randomUUID(); private long createdAt = System.currentTimeMillis(); private long updatedAt; @@ -14,7 +15,6 @@ public class Channel { private String channelDescription; private String channelCreater; - private JCFMessageService messageService; public Channel(String channelName, String channelDescription, String channelCreater, long createdAt, long updatedAt) { @@ -23,28 +23,43 @@ public Channel(String channelName, String channelDescription, String channelCrea this.channelCreater = channelCreater; this.createdAt = createdAt; this.updatedAt = updatedAt; - this.messageService = new JCFMessageService(); + + JCFMessageService.setDefaultBoard(this); } - public UUID getId() {return id;} + public UUID getId() { + return id; + } public String getCreatedAt() { String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(createdAt); - return formatedTime;} + return formatedTime; + } public String getUpdatedAt() { String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(updatedAt); - return formatedTime;} - public void setUpdatedAt(long updatedAt) {this.updatedAt = updatedAt;} - - public String getChannelName() {return channelName;} - public void setChannelName(String channelName) {this.channelName = channelName;} + return formatedTime; + } + public void setUpdatedAt(long updatedAt) { + this.updatedAt = updatedAt; + } - public String getChannelDescription() {return channelDescription;} - public void setChannelDescription(String channelDescription) {this.channelDescription = channelDescription;} + public String getChannelName() { + return channelName; + } + public void setChannelName(String channelName) { + this.channelName = channelName; + } - public String getChannelCreater() {return channelCreater;} + public String getChannelDescription() { + return channelDescription; + } + public void setChannelDescription(String channelDescription) { + this.channelDescription = channelDescription; + } - public JCFMessageService messageService() {return messageService;} + public String getChannelCreater() { + return channelCreater; + } @Override public String toString() { String result; diff --git a/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/src/main/java/com/sprint/mission/discodeit/entity/Message.java index 6fc6e858..7baeb7b4 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -1,15 +1,16 @@ package com.sprint.mission.discodeit.entity; +import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.UUID; -public class Message { +public class Message implements Serializable { + private static final long serialVersionUID = 1L; private final UUID id = UUID.randomUUID(); private long createdAt = System.currentTimeMillis(); private long updatedAt; private int msgNumber; - private String author; private String textMsg; @@ -21,21 +22,36 @@ public Message(int msgNumber, String author, String textMsg,long createdAt, long this.createdAt = createdAt; this.updatedAt = updatedAt; } - public UUID getId() {return id;} - public int getMsgNumber() {return msgNumber;} - public String getAuthor() {return author;} - public void setAuthor(String newAuthor) {this.author = newAuthor;} - public void setTextMsg(String textMsg) {this.textMsg = textMsg;} - public String getTextMsg() {return textMsg;} + public UUID getId() { + return id; + } + public int getMsgNumber() { + return msgNumber; + } + public String getAuthor() { + return author; + } + public void setAuthor(String newAuthor) { + this.author = newAuthor; + } + public void setTextMsg(String textMsg) { + this.textMsg = textMsg; + } + public String getTextMsg() { + return textMsg; + } public String getCreatedAt() { String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(createdAt); - return formatedTime;} + return formatedTime; + } public String getUpdatedAt() { String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(updatedAt); - return formatedTime;} + return formatedTime; + } public void setUpdatedAt(long updatedAt) { - this.updatedAt = updatedAt;} + this.updatedAt = updatedAt; + } @Override public String toString() { String result; diff --git a/src/main/java/com/sprint/mission/discodeit/entity/User.java b/src/main/java/com/sprint/mission/discodeit/entity/User.java index d6d6bcf8..ca206e41 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -1,9 +1,11 @@ package com.sprint.mission.discodeit.entity; +import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.UUID; -public class User { +public class User implements Serializable { + private static final long serialVersionUID = 1L; private final UUID id = UUID.randomUUID(); private long createdAt = System.currentTimeMillis(); private long updatedAt; @@ -15,29 +17,36 @@ public User(String name, long createdAt, long updatedAt) { this.updatedAt = updatedAt; } - public UUID getId() {return id;} - public String getName() {return name;} - public void setName(String name) {this.name = name;} + public UUID getId() { + return id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } public String getCreatedAt() { String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(createdAt); - return formatedTime;} + return formatedTime; + } public String getUpdatedAt() { String aformatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(updatedAt); - return aformatedTime;} - public void setUpdatedAt(long updatedAt) {this.updatedAt = updatedAt;} - -@Override -public String toString() { - String result; - if(getCreatedAt().equals(getUpdatedAt())){ - result = "\n 사용자 이름 : " + name + "\n 생성일 : " + getCreatedAt() + "\n 사용자 UUID : " + id + "\n"; - } else { - result = "\n 사용자 이름 : " + name + "\n 생성일 : " + getCreatedAt() + "\n 수정일 : " + getUpdatedAt() + "\n 사용자 UUID : " + id + "\n"; + return aformatedTime; } - return result; + public void setUpdatedAt(long updatedAt) { + this.updatedAt = updatedAt; } - - + @Override + public String toString() { + String result; + if(getCreatedAt().equals(getUpdatedAt())){ + result = "\n 사용자 이름 : " + name + "\n 생성일 : " + getCreatedAt() + "\n 사용자 UUID : " + id + "\n"; + } else { + result = "\n 사용자 이름 : " + name + "\n 생성일 : " + getCreatedAt() + "\n 수정일 : " + getUpdatedAt() + "\n 사용자 UUID : " + id + "\n"; + } + return result; + } } diff --git a/src/main/java/com/sprint/mission/discodeit/jcf/JCFChannelService.java b/src/main/java/com/sprint/mission/discodeit/jcf/JCFChannelService.java index d731f9cc..3964768a 100644 --- a/src/main/java/com/sprint/mission/discodeit/jcf/JCFChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/jcf/JCFChannelService.java @@ -1,7 +1,6 @@ package com.sprint.mission.discodeit.jcf; import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.ChannelService; import java.util.ArrayList; @@ -12,13 +11,13 @@ public class JCFChannelService implements ChannelService { private final List channels = new ArrayList<>(); public JCFChannelService(){ channels.add(new Channel("ch01","default Channel","관리자",1744036548250L,1744036548250L)); - } + // 채널 생성 메서드 @Override - public Channel addChannel(String channelName, String channelDesc, User user){ + public Channel addChannel(String channelName, String channelDesc, String createrName) { long now = System.currentTimeMillis(); - Channel channel = new Channel(channelName,channelDesc,user.getName(),now,now); + Channel channel = new Channel(channelName,channelDesc,createrName,now,now); channels.add(channel); System.out.print("\n ▶ [새로운 채널 생성완료]"); System.out.println(" ▶ 채널명 : " + channel.getChannelName() + " ▶ 생성시간 : " + channel.getCreatedAt()); @@ -48,10 +47,6 @@ public void printAllChannels(){ System.out.println(""); } - @Override - public List getAllChannels() { - return List.of(); - } @Override // 이름으로 채널 검색 메서드. 채널객체를 return public Channel findChannelByName(String name){ diff --git a/src/main/java/com/sprint/mission/discodeit/jcf/JCFMessageService.java b/src/main/java/com/sprint/mission/discodeit/jcf/JCFMessageService.java index c9013ad9..117282b3 100644 --- a/src/main/java/com/sprint/mission/discodeit/jcf/JCFMessageService.java +++ b/src/main/java/com/sprint/mission/discodeit/jcf/JCFMessageService.java @@ -1,60 +1,77 @@ package com.sprint.mission.discodeit.jcf; +import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; -import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.MessageService; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; public class JCFMessageService implements MessageService { - private final List messages = new ArrayList<>(); - // 테스트용 초기 더미 데이터 입력 - public JCFMessageService() { - messages.add(new Message(001,"희동이","더미 데이터 1 요리보고 조리봐도", 1744036548250L , 1744036548250L)); - messages.add(new Message(002,"희동이","더미 데이터 2 알수없는 둘리둘리", 1744036558250L , 1744036558250L)); - messages.add(new Message(003,"도우너","더미 데이터 3 빙하타고~내려와아", 1744036938250L , 1744036938250L)); - messages.add(new Message(004,"고길동","더미 데이터 4 치인구를 만났지만", 1744036938250L , 1744036938250L)); - } + private static final Map> channelMsgBoard = new ConcurrentHashMap<>(); + + + public static void setDefaultBoard(Channel channel){ + channelMsgBoard.computeIfAbsent(channel.getId(), id -> { + List list = new ArrayList<>(); + list.add(new Message(1, "defaultUser", "defaultMessage", 1744036548250L, 1744036548250L)); + return list; + }); + }; + + @Override - public void uploadMsg(User user,String txtMsg){ + public void uploadMsg(UUID channelId,String uploaderName,String txtMsg){ + channelMsgBoard.putIfAbsent(channelId,new ArrayList<>()); + int msgNumber = channelMsgBoard.get(channelId).size() +1; long now = System.currentTimeMillis(); - Message message = new Message(messages.size() + 1,user.getName(),txtMsg,now,now); - messages.add(message); + Message message = new Message(msgNumber,uploaderName,txtMsg,now,now); + channelMsgBoard.get(channelId).add(message); } @Override - public void updateMsg(User user, Message message,String newMsg) { + public void updateMsg(String editerName, Message message,String newMsg) { String resetColor = "\u001B[0m"; String setColorYellow = "\u001B[33m"; - message.setTextMsg(newMsg + setColorYellow + " *** [" + user.getName() + "] 에 의해 수정됨" + resetColor); message.setUpdatedAt(System.currentTimeMillis()); + message.setTextMsg(newMsg + setColorYellow + " *** [" + editerName + "] 에 의해 수정됨" + resetColor); } - public void deleteMessage(User user, Message message){ + public void deleteMessage(String deleterName, Message message){ String resetColor = "\u001B[0m"; String setColorRed = "\u001B[31m"; - message.setTextMsg(setColorRed + " - ////// " + user.getName() + " 사용자에 의해 삭제됨 ////// -" +message.getUpdatedAt() + resetColor); message.setUpdatedAt(System.currentTimeMillis()); + message.setTextMsg(setColorRed + " - ////// " + deleterName + " 사용자에 의해 삭제됨 ////// -" +message.getUpdatedAt() + resetColor); } - public Message findMessageByNum(int num){ - for (Message message : messages) { + public Message findMessageByNum(UUID channelId,int num){ + for (Message message : channelMsgBoard.get(channelId)) { if (message.getMsgNumber() == num) { return message; // 일치하는 메세지 번호 발견시 message 리턴 } }return null; } - public void printAllMessages() { - System.out.println("<< 입력된 전체 메세지 >>"); - System.out.println("번호 | 사용자 : 메세지"); - messages.forEach(m -> System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n",m.getMsgNumber(),m.getAuthor(),m.getTextMsg(),m.getCreatedAt(),m.getUpdatedAt(),m.getId())); - System.out.println(); + + + + public void printAllMessages(UUID channelId) { + if(channelMsgBoard.get(channelId)!=null) { + System.out.println("<< 입력된 전체 메세지 >>"); + System.out.println("번호 | 사용자 : 메세지"); + channelMsgBoard.get(channelId).forEach(m -> System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", m.getMsgNumber(), m.getAuthor(), m.getTextMsg(), m.getCreatedAt(), m.getUpdatedAt(), m.getId())); + System.out.println(); + } else { + System.out.println("<<선택된 채널에 입력된 메세지 없음>>"); + } + } - public void printOneMessage(int msgNum){ - Message message = findMessageByNum(msgNum); + public void printOneMessage(UUID channelId,int msgNum){ + Message message = findMessageByNum(channelId,msgNum); System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", message.getMsgNumber(),message.getAuthor(),message.getTextMsg(),message.getCreatedAt(),message.getUpdatedAt(),message.getId() ); } - public List getMessagesList() { - return messages; + public List getMessagesList(UUID channelId) { + return channelMsgBoard.get(channelId); } } diff --git a/src/main/java/com/sprint/mission/discodeit/jcf/JCFUserService.java b/src/main/java/com/sprint/mission/discodeit/jcf/JCFUserService.java index 46b50eab..65d13a0b 100644 --- a/src/main/java/com/sprint/mission/discodeit/jcf/JCFUserService.java +++ b/src/main/java/com/sprint/mission/discodeit/jcf/JCFUserService.java @@ -70,5 +70,4 @@ public void printAllUsers(){ public List getUserslist() { return users; } - } \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index 2ac81252..b7da376a 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -1,17 +1,13 @@ package com.sprint.mission.discodeit.service; import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.User; - -import java.util.List; public interface ChannelService { - Channel addChannel(String channelName, String channelDesc, User user); + Channel addChannel(String channelName, String channelDesc, String createrName); void UpdateChannel(Channel channel, String channelName, String channelDescription); void deleteChannel(Channel channel); void printAllChannels(); - List getAllChannels(); Channel findChannelByName(String name); } diff --git a/src/main/java/com/sprint/mission/discodeit/service/MessageService.java b/src/main/java/com/sprint/mission/discodeit/service/MessageService.java index 9ef7819e..8ba05d47 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/MessageService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/MessageService.java @@ -1,19 +1,16 @@ package com.sprint.mission.discodeit.service; - import com.sprint.mission.discodeit.entity.Message; -import com.sprint.mission.discodeit.entity.User; import java.util.*; public interface MessageService{ - void uploadMsg(User user,String txtMsg); - void updateMsg(User user, Message message,String Msg); - Message findMessageByNum(int num); - - void deleteMessage(User user, Message message); + void uploadMsg(UUID channelId, String uploaderName,String txtMsg); + void updateMsg(String editerName, Message message, String Msg); + Message findMessageByNum(UUID channelId,int num); - void printAllMessages(); - void printOneMessage(int msgNum); - List getMessagesList(); // 사용자 전체 조회 + void deleteMessage(String deleterName, Message message); + void printAllMessages(UUID channelId); + void printOneMessage(UUID channelId,int msgNum); + List getMessagesList(UUID channelId); // 사용자 전체 조회 } 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 00000000..cb6d7e52 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.service.file; + +public interface FileChannelService { +} 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 00000000..2ce6ec92 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.service.file; + +public interface FileMessageService { +} 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 00000000..1eddd8ad --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.service.file; + +public interface FileUserService { +} From a94ad077eda66beba4fb3eabb22942d63a473330 Mon Sep 17 00:00:00 2001 From: Leichtstar Date: Mon, 21 Apr 2025 00:17:30 +0900 Subject: [PATCH 02/10] =?UTF-8?q?-=20Application=20=EB=82=B4=EB=B6=80=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=20currentUser=EC=99=80=20currentChannel=20st?= =?UTF-8?q?atic=20=EC=A0=9C=EA=B1=B0,=20private=EA=B0=92=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=ED=95=98=EC=97=AC=20ThreadSafe=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission/discodeit/JavaApplication.java | 26 ++-- .../discodeit/control/ChannelControl.java | 112 ++++++++++-------- .../discodeit/control/MessageControl.java | 12 +- .../discodeit/control/UserControl.java | 37 +++--- .../discodeit/service/UserService.java | 7 +- .../service/file/FileUserService.java | 77 +++++++++++- .../{ => service}/jcf/JCFChannelService.java | 10 +- .../{ => service}/jcf/JCFMessageService.java | 4 +- .../{ => service}/jcf/JCFUserService.java | 19 +-- 9 files changed, 182 insertions(+), 122 deletions(-) rename src/main/java/com/sprint/mission/discodeit/{ => service}/jcf/JCFChannelService.java (96%) rename src/main/java/com/sprint/mission/discodeit/{ => service}/jcf/JCFMessageService.java (98%) rename src/main/java/com/sprint/mission/discodeit/{ => service}/jcf/JCFUserService.java (82%) diff --git a/src/main/java/com/sprint/mission/discodeit/JavaApplication.java b/src/main/java/com/sprint/mission/discodeit/JavaApplication.java index 16ab66bb..10b7923c 100644 --- a/src/main/java/com/sprint/mission/discodeit/JavaApplication.java +++ b/src/main/java/com/sprint/mission/discodeit/JavaApplication.java @@ -2,9 +2,9 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.jcf.JCFChannelService; -import com.sprint.mission.discodeit.jcf.JCFMessageService; -import com.sprint.mission.discodeit.jcf.JCFUserService; +import com.sprint.mission.discodeit.service.jcf.JCFChannelService; +import com.sprint.mission.discodeit.service.jcf.JCFMessageService; +import com.sprint.mission.discodeit.service.jcf.JCFUserService; import com.sprint.mission.discodeit.control.ChannelControl; import com.sprint.mission.discodeit.control.MessageControl; import com.sprint.mission.discodeit.control.UserControl; @@ -18,18 +18,15 @@ public class JavaApplication { public static final JCFChannelService channelService = new JCFChannelService(); public static final Scanner scanner = new Scanner(System.in); - public static final ThreadLocal nowUser = new ThreadLocal<>(); - public static final ThreadLocal nowChannel = new ThreadLocal<>(); public static void main(String[] args) { + User currentUser; // 0. intro 메세지 System.out.println(" ▶ discodeit 메세지 서비스에 연결되었습니다."); // 0_1. 초기 사용자 인증 - nowUser.set(UserControl.verifyUser()); + currentUser = UserControl.verifyUser(); // 1. mainmenu 호출. - menuMain(); - nowUser.remove(); - nowChannel.remove(); + menuMain(currentUser); //// <<메뉴 트리>> //// 메인메뉴 ┬ 1. 채널입장 (채널상 메세지 관리) || 메서드 : control.menuMessageMng() @@ -89,7 +86,8 @@ public static User verifyUser(){ // 사용자명 입력 >> 없는 사용자 : } - public static void menuMain(){ // 메인 메뉴 call 메서드. 각 세부 메뉴로 접근하기 위함. + public static void menuMain(User nowUser){ // 메인 메뉴 call 메서드. 각 세부 메뉴로 접근하기 위함. + Channel nowChannel = null; while (true) { System.out.println(" ▶ 원하는 메뉴를 선택해 주세요."); System.out.println("**********************************************\n" @@ -102,14 +100,14 @@ public static void menuMain(){ // 메인 메뉴 call 메서드. 각 세부 switch (choice) { case 1: // 채널 입장 : 메세지 관리 메서드 호출 - nowChannel.set(ChannelControl.joinChannel()); - MessageControl.menuMessageMng(nowUser.get(),nowChannel.get()); + nowChannel = ChannelControl.joinChannel(nowUser); + nowUser = MessageControl.menuMessageMng(nowUser,nowChannel); break; case 2: - ChannelControl.menuChannelMng(nowUser.get()); + ChannelControl.menuChannelMng(nowUser); break; case 3: // 사용자 관리 : 사용자 관리 메서드 호출 - UserControl.menuUserMng(nowUser.get()); + nowUser = UserControl.menuUserMng(nowUser); break; case 4: System.out.println(" ▶ 프로그램을 종료합니다."); diff --git a/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java b/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java index 45eb7b5f..4c72c2cb 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java @@ -6,19 +6,25 @@ public class ChannelControl extends JavaApplication { - public static Channel joinChannel(){ // 채널입장시 Channel 신규개설 판별 메서드. 있으면 있는 채널에 참가 / 없으면 없는채널 생성 - System.out.print(" ▶ 채널명을 입력해 주세요 : "); + public static Channel joinChannel(User nowUser){ // 채널입장시 Channel 신규개설 판별 메서드. 있으면 있는 채널에 참가 / 없으면 없는채널 생성 + + System.out.print(" ▶ 채널명을 입력해 주세요 : "); String chanName = scanner.nextLine(); Channel channel = channelService.findChannelByName(chanName); + + if (channel != null) { System.out.println("[" + channel.getChannelName() + "] 에 접속합니다." + ", 채널 ID: " + channel.getId()); + return channel; } else { System.out.println("\n ▶ 존재하지 않는 채널입니다. 새로운 채널을 개설합니다."); System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); String chanDesc = scanner.nextLine(); - Channel newChannel = channelService.addChannel(chanName,chanDesc,nowUser.get().getName()); + + Channel newChannel = channelService.addChannel(chanName,chanDesc,nowUser.getName()); System.out.println(" ▶ [" + newChannel.getChannelName() + "] 채널에 접속합니다." + " 채널 ID: " + newChannel.getId()); + return newChannel; } } @@ -38,15 +44,19 @@ public static void menuChannelMng(User currentUser){ // 2. 채널 관리 switch (choice) { case 1: // 2_1 신규 채널 생성, 채널설명 추가 System.out.println(" ▶ 새로운 채널을 개설합니다."); + while(true) { System.out.print(" ▶ 채널명을 입력해 주세요 : "); String chanName = scanner.nextLine(); Channel channel = channelService.findChannelByName(chanName); + if (channel == null) { System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); String chanDesc = scanner.nextLine(); Channel newChan = channelService.addChannel(chanName, chanDesc, currentUser.getName()); + System.out.println("\n ▶ "+newChan.getChannelName()+" 채널 생성에 성공하였습니다."); + break; } else { System.out.println("\n ▶ 이미 존재하는 채널입니다. 다른 이름을 입력해주세요."); @@ -54,80 +64,86 @@ public static void menuChannelMng(User currentUser){ // 2. 채널 관리 } break; case 2: // 2_2 채널 이름으로 검색하여 개별 채널 조회 - System.out.println(" ▶ 조회할 채널의 이름을 입력해 주세요."); - System.out.print(" >> "); + System.out.print(" ▶ 조회할 채널의 이름을 입력해 주세요.\n >> "); String chnName = scanner.nextLine(); Channel toPrintChannel = channelService.findChannelByName(chnName); + if (toPrintChannel != null) { System.out.println(toPrintChannel); break; - }else{System.out.println("존재하지 않는 채널명입니다. 다시 입력해 주세요"); + }else{ + System.out.println("존재하지 않는 채널명입니다. 다시 입력해 주세요"); } break; case 3: // 2_3 채널 이름으로 검색하여 해당 채널 이름,설명 변경 - while (true){ - System.out.println("\n ▶ 채널 이름을 변경합니다. 현재 개설된 채널은 아래와 같습니다. \n"); - channelService.printAllChannels(); - while(true) { - String newName; - String newDesc; - System.out.println(" ▶ 변경할 채널의 이름을 선택해 주세요."); - System.out.print(" >> "); - String fndChnName = scanner.nextLine(); - Channel toRenameChannel = channelService.findChannelByName(fndChnName); - if (toRenameChannel != null) { - System.out.println(" ▶ 선택하신 채널은 ["+toRenameChannel.getChannelName()+"] 입니다"); - System.out.println(" ▶ 변경할 이름을 입력해 주세요."); - while(true) { - System.out.print(" >> "); - newName = scanner.nextLine(); - if(channelService.findChannelByName(newName) == null){ - if (newName.length() != 0) { - toRenameChannel.setChannelName(newName); - break; - } else { - System.out.println(" ▶ 잘못된 입력입니다. 다시 입력해 주세요."); - } - } else { - System.out.println(" ▶ 이미 존재하는 채널명입니다. 다시 입력해 주세요."); - } - } + System.out.println("\n ▶ 채널 이름을 변경합니다. 현재 개설된 채널은 아래와 같습니다. \n"); + channelService.printAllChannels(); + + while(true) { + String newName; + String newDesc; + + System.out.print(" ▶ 변경할 채널의 이름을 선택해 주세요.\n >> "); + String fndChnName = scanner.nextLine(); + Channel toRenameChannel = channelService.findChannelByName(fndChnName); + + if (toRenameChannel != null) { + System.out.println(" ▶ 선택하신 채널은 ["+toRenameChannel.getChannelName()+"] 입니다"); + System.out.println(" ▶ 변경할 이름을 입력해 주세요."); + + while(true) { + System.out.print(" >> "); + newName = scanner.nextLine(); + + if(channelService.findChannelByName(newName) == null){ + if (!newName.isEmpty()) { + toRenameChannel.setChannelName(newName); - System.out.println(" ▶ 변경할 채널의 설명을 입력해 주세요."); - while(true){ - System.out.print(" >> "); - newDesc = scanner.nextLine(); - if (newDesc.length() == 0) { - channelService.UpdateChannel(toRenameChannel,newName,"-"); - System.out.println(" ▶ 채널 설명을 공백으로 설정했습니다."); - break; - }else{ - channelService.UpdateChannel(toRenameChannel,newName,newDesc); - System.out.println(" ▶ 채널정보 수정에 성공했습니다."); break; + } else { + System.out.println(" ▶ 잘못된 입력입니다. 다시 입력해 주세요."); } + } else { + System.out.println(" ▶ 이미 존재하는 채널명입니다. 다시 입력해 주세요."); } + } + + System.out.print(" ▶ 변경할 채널의 설명을 입력해 주세요.\n >> "); + newDesc = scanner.nextLine(); + + if (newDesc.isEmpty()) { + channelService.UpdateChannel(toRenameChannel,newName,"-"); + System.out.println(" ▶ 채널 설명을 공백으로 설정했습니다."); + break; + }else{ + channelService.UpdateChannel(toRenameChannel,newName,newDesc); + System.out.println(" ▶ 채널정보 수정에 성공했습니다."); break; - }else{System.out.println("존재하지 않는 채널명입니다. 다시 입력해 주세요"); } - }break; + }else{ + System.out.println("존재하지 않는 채널명입니다. 다시 입력해 주세요"); + } } break; case 4: // 2_4 개별 채널 삭제 System.out.println(" ▶ 현재 개설된 채널은 아래와 같습니다."); channelService.printAllChannels(); - System.out.println(" ▶ 삭제할 채널의 이름을 입력해 주세요"); + System.out.println(" ▶ 삭제할 채널의 이름을 입력해 주세요.\n >> "); String fndChnName = scanner.nextLine(); Channel toDeleteChannel = channelService.findChannelByName(fndChnName); + if (toDeleteChannel != null) { System.out.println(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); String deleteConfirm = scanner.nextLine(); - if (deleteConfirm.length() == 0) { + + if (deleteConfirm.isEmpty()) { System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); break; + }else if(deleteConfirm.equals("삭제")) { channelService.deleteChannel(toDeleteChannel); + System.out.println(" ▶ [" + fndChnName+ "]채널이 삭제되었습니다."); }else{ System.out.println(" ▶ 잘못된 입력입니다. 채널 삭제를 취소합니다."); diff --git a/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java b/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java index a38fd4f1..6cb19fe8 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java @@ -9,7 +9,7 @@ import java.util.UUID; public class MessageControl extends JavaApplication { - public static void menuMessageMng(User currentUser, Channel currentChannel){ // 1 메세지 관리 메서드 + public static User menuMessageMng(User currentUser, Channel currentChannel){ // 1 메세지 관리 메서드 while (true) { System.out.println(" *******************************************************\n" @@ -33,14 +33,11 @@ public static void menuMessageMng(User currentUser, Channel currentChannel){ switch (choice) { case 1: // 1_1 메세지 작성 System.out.print(" ▶ 새로운 대화를 시작합니다. 대화를 종료하려면 빈 값을 입력해주세요.\n"); - currentChannel.getId(); while (true){ //대화메세지를 연속으로 입력받도록 루프 int msgDisplaySize; if((messages.size()) < 5){ msgDisplaySize=0; - System.out.println("5이하의메세지크기"); } else { - System.out.println("5이상의메세지크기"); msgDisplaySize = messages.size() - 5 ; } @@ -51,7 +48,7 @@ public static void menuMessageMng(User currentUser, Channel currentChannel){ System.out.print(" >> "); String txtMsg = scanner.nextLine(); - if (txtMsg.length()!=0) { + if (!txtMsg.isEmpty()) { messageService.uploadMsg(channelId, currentUser.getName(), txtMsg); } else { @@ -106,7 +103,7 @@ public static void menuMessageMng(User currentUser, Channel currentChannel){ System.out.print(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); String deleteConfirm = scanner.nextLine(); - if (deleteConfirm.length() == 0) { + if (deleteConfirm.isEmpty()) { System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); break; } else if (deleteConfirm.equals("삭제")) { @@ -117,7 +114,7 @@ public static void menuMessageMng(User currentUser, Channel currentChannel){ } break; case 6: // 1_6 현재 채널 변경 - currentChannel = ChannelControl.joinChannel(); + currentChannel = ChannelControl.joinChannel(currentUser); break; case 7: // 1_7 현재 사용자 변경 System.out.print(" ▶ 어떤 사용자로 로그인할까요?"); @@ -141,5 +138,6 @@ public static void menuMessageMng(User currentUser, Channel currentChannel){ break; } } + return currentUser; } // 1 메세지 관리 메서드 } diff --git a/src/main/java/com/sprint/mission/discodeit/control/UserControl.java b/src/main/java/com/sprint/mission/discodeit/control/UserControl.java index fb57aa26..97f206f1 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/UserControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/UserControl.java @@ -3,13 +3,11 @@ import com.sprint.mission.discodeit.JavaApplication; import com.sprint.mission.discodeit.entity.User; -import java.util.InputMismatchException; - public class UserControl extends JavaApplication { // 어플리케이션 최초 실행시 User 신규여부 판별 메서드. 있으면 있는 유저로 로그인 / 없으면 새 유저 생성 // 1_3 사용자 관리 세부메뉴 메서드 - public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 내부메뉴 메서드 + public static User menuUserMng(User currentUser){ // 1_4 사용자 관리 내부메뉴 메서드 while (true) { System.out.println(" *******************************************************\n" + " || 사용자 관리 메뉴입니다. 원하는 기능을 선택하세요. ||\n" @@ -22,14 +20,7 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 + " || 7 > 상위 메뉴로 돌아가기 ||\n" + " *******************************************************\n"); System.out.print(" >> "); - int choice = -1; - try { - choice = scanner.nextInt(); - scanner.nextLine(); // scanner 내부 개행문자 제거 - } catch (InputMismatchException e){ - System.out.println("숫자만 입력해 주세요"); - scanner.nextLine(); // scanner 내부 개행문자 제거 - } + int choice = scanInt(); switch (choice) { case 1: // 1_4_1 신규 사용자 생성 메뉴 @@ -37,7 +28,7 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 while (true) { System.out.print(" ▶ 원하는 사용자명을 입력해 주세요 : "); String username = scanner.nextLine(); - if (username.length() == 0) { // 입력값이 없는경우 상위 메뉴로 이동 + if (username.isEmpty()) { // 입력값이 없는경우 상위 메뉴로 이동 System.out.println(" ▶ 입력값이 없습니다. 사용자 생성을 취소합니다.\n"); break; } @@ -66,16 +57,15 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 case 2: while (true){ // 1_4_2 사용자 이름 변경 메뉴 System.out.println("\n ▶ 사용자 이름을 변경합니다. * 현재 사용자 이름 : [" + currentUser.getName() + "]"); - System.out.println(" ▶ 변경할 사용자 이름을 입력해 주세요"); - System.out.print(" >> "); + System.out.print(" ▶ 변경할 사용자 이름을 입력해 주세요 \n >> "); String newName = scanner.nextLine(); - if(newName.length() ==0) {// 사용자 이름 입력값이 없는경우 상위메뉴로 이동 + if(newName.isEmpty()) {// 사용자 이름 입력값이 없는경우 상위메뉴로 이동 System.out.println(" ▶ 새 이름을 입력하지 않았습니다. 사용자 이름 변경을 취소합니다."); break; } User user = userService.findUserByName(newName); if(user != null){ // 중복값 존재시 재입력 - System.out.print(" ▶ 이미 존재하는 이름입니다. 다시 입력해 주세요.\n >>> "); + System.out.print(" ▶ 이미 존재하는 이름입니다. 다시 입력해 주세요.\n >> "); } else { // 중복값 미확인시 유저명 변경 userService.updateUserName(currentUser, newName); break; @@ -85,10 +75,10 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 case 3: // 1_4_3 사용자 삭제 메뉴 System.out.println(" ▶ 삭제할 사용자의 이름을 입력해 주세요"); System.out.println(" ▶ 현재 등록된 사용자는 아래와 같습니다."); - userService.printAllUsers(); + userService.showAllUsers(); System.out.print(" >> "); String deleteUser = scanner.nextLine(); - if ((deleteUser.length() == 0) || (userService.findUserByName(deleteUser) == null)) { + if ((deleteUser.isEmpty()) || (userService.findUserByName(deleteUser) == null)) { System.out.println(" ▶ 존재하지 않는 사용자이거나 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); } else if (deleteUser.equals(currentUser.getName())){ System.out.println(" ▶ 현재 로그인된 사용자는 삭제할 수 없습니다! 이전 메뉴로 돌아갑니다."); @@ -97,10 +87,9 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 System.out.println(" ▶ 입력하신 사용자는 아래와 같습니다."); User userToDel = userService.findUserByName(deleteUser); System.out.println(userToDel); - System.out.println(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요"); - System.out.print(" >> "); + System.out.println(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); String deleteConfirm = scanner.nextLine(); - if (deleteConfirm.length() == 0) { + if (deleteConfirm.isEmpty()) { System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); break; } else if (deleteConfirm.equals("삭제")) { @@ -114,7 +103,7 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 case 4: // 1_4_4 단일 사용자 정보 출력 메뉴 System.out.print(" ▶ 조회할 사용자의 이름을 입력해 주세요.\n >> "); String oneUser = scanner.nextLine(); - if ((oneUser.length() == 0) || (userService.findUserByName(oneUser) == null)) { + if ((oneUser.isEmpty()) || (userService.findUserByName(oneUser) == null)) { System.out.println(" ▶ 존재하지 않는 사용자이거나 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); } else { System.out.println(" ▶ 입력하신 사용자는 아래와 같습니다."); @@ -124,7 +113,7 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 break; case 5: // 1_4_5 모든 사용자 정보 출력 메뉴 System.out.println(" ▶ 모든 사용자 정보를 출력합니다."); - userService.printAllUsers(); + userService.showAllUsers(); break; case 6: // 1_4_6 다른 사용자로 진행 System.out.print(" ▶ 어떤 사용자로 로그인할까요?"); @@ -148,5 +137,7 @@ public static void menuUserMng(User currentUser){ // 1_4 사용자 관리 break; } } + + return currentUser; } // 1_3 사용자 관리 세부메뉴 메서드 } diff --git a/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/src/main/java/com/sprint/mission/discodeit/service/UserService.java index aca9a860..b850d938 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -3,18 +3,17 @@ import com.sprint.mission.discodeit.entity.User; import java.util.List; -import java.util.UUID; public interface UserService { User createUser(String name); // 새로운 유저 생성 void updateUserName(User user,String name); // 기존 유저 수정 - void printAllUsers(); + void showAllUsers(); List getUserslist(); // 유저 리스트 반환 - User findUserById(UUID id); // ID로 단일유저 찾기 User findUserByName(String name); // 이름으로 단일유저 찾기 - boolean deleteUser(UUID id); // ID로 유저 삭제 boolean deleteUser(String name); // 이름으로 유저 삭제 + +// User generateUser(String name); // 새로운 유저 생성 } 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 index 1eddd8ad..b2bc0e96 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -1,4 +1,77 @@ package com.sprint.mission.discodeit.service.file; -public interface FileUserService { -} +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.UserService; + +import java.io.*; +import java.util.*; + +public class FileUserService implements UserService { + private final List users; + private static final String userFileName = "src/files/user.ser"; + + public FileUserService() { + this.users = fileLoadUsers(); + } + + private List fileLoadUsers(){ + try (FileInputStream fis = new FileInputStream(userFileName); + ObjectInputStream ois = new ObjectInputStream(fis)){ + return (List)ois.readObject(); + } catch (IOException | ClassNotFoundException e){ + e.printStackTrace(); + return new ArrayList<>(); + } + } + + private void fileSaveUsers(){ + try(FileOutputStream fos = new FileOutputStream(userFileName); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(users); + } catch (IOException e){ + e.printStackTrace(); + } + } + @Override // 유저 생성 메서드 createUser() + public User createUser(String name) { + long now = System.currentTimeMillis(); + User user = new User(name, now, now); + users.add(user); + fileSaveUsers(); + System.out.println("사용자의 이름을 [" + user.getName() + "] 으로 생성하였습니다. | " + user.getCreatedAt()); + return user; + } + + @Override //유저 이름 변경 메서드 updateUserName() + public void updateUserName(User user, String newName) { + String oldName = user.getName(); + user.setName(newName); + user.setUpdatedAt(System.currentTimeMillis()); + System.out.println("[" + oldName + "] 사용자의 이름을 [" + user.getName() + "] 으로 변경하였습니다. | " + user.getUpdatedAt()); + } + + @Override + public boolean deleteUser(String name) { + return users.removeIf(user -> user.getName().equals(name)); + } + + @Override + public User findUserByName(String name) { + for (User user : users) { + if (user.getName().equals(name)) { + return user; // 일치하는 name 발견시 user 리턴 + } + } + return null; // 없으면 null 리턴 + } + + // 유틸 메서드: 모든 사용자 출력 + public void showAllUsers(){ + System.out.println(" □ □ □ 전체 사용자 목록 □ □ □ \n 사용자이름 | 사용자생성시간 | 사용자정보 수정시간 | 사용자UUID"); + users.forEach(u -> System.out.println(" " + u.getName() + " | " + u.getCreatedAt() + " | " + u.getUpdatedAt() + " | " + u.getId())); + System.out.println(); + } + public List getUserslist() { + return users; + } +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/jcf/JCFChannelService.java b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java similarity index 96% rename from src/main/java/com/sprint/mission/discodeit/jcf/JCFChannelService.java rename to src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java index 3964768a..760ab592 100644 --- a/src/main/java/com/sprint/mission/discodeit/jcf/JCFChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java @@ -1,4 +1,4 @@ -package com.sprint.mission.discodeit.jcf; +package com.sprint.mission.discodeit.service.jcf; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.service.ChannelService; @@ -22,7 +22,7 @@ public Channel addChannel(String channelName, String channelDesc, String creater System.out.print("\n ▶ [새로운 채널 생성완료]"); System.out.println(" ▶ 채널명 : " + channel.getChannelName() + " ▶ 생성시간 : " + channel.getCreatedAt()); return channel; - }; + } // 채널 수정 메서드 @Override public void UpdateChannel(Channel channel, String channelName, String channelDescription){ @@ -32,19 +32,19 @@ public void UpdateChannel(Channel channel, String channelName, String channelDes channel.setUpdatedAt(now); System.out.print("\n ▶ [채널 정보 수정 완료]"); System.out.println(channel); - }; + } // 채널 삭제 메서드 @Override public void deleteChannel(Channel channel){ channels.remove(channel); - }; + } // 전체채널목록 출력 메서드 @Override public void printAllChannels(){ System.out.println("<< 생성된 전체 채널 >>"); System.out.println("채널명 | 개설자 | 채널설명(개설시간)"); channels.forEach(chan -> System.out.println(chan.getChannelName()+" | "+chan.getChannelCreater()+" | "+chan.getChannelDescription()+" ("+chan.getCreatedAt() + ")")); - System.out.println(""); + System.out.println(); } diff --git a/src/main/java/com/sprint/mission/discodeit/jcf/JCFMessageService.java b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java similarity index 98% rename from src/main/java/com/sprint/mission/discodeit/jcf/JCFMessageService.java rename to src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java index 117282b3..d82b335c 100644 --- a/src/main/java/com/sprint/mission/discodeit/jcf/JCFMessageService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java @@ -1,4 +1,4 @@ -package com.sprint.mission.discodeit.jcf; +package com.sprint.mission.discodeit.service.jcf; import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; @@ -20,7 +20,7 @@ public static void setDefaultBoard(Channel channel){ list.add(new Message(1, "defaultUser", "defaultMessage", 1744036548250L, 1744036548250L)); return list; }); - }; + } @Override diff --git a/src/main/java/com/sprint/mission/discodeit/jcf/JCFUserService.java b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java similarity index 82% rename from src/main/java/com/sprint/mission/discodeit/jcf/JCFUserService.java rename to src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java index 65d13a0b..9935bffb 100644 --- a/src/main/java/com/sprint/mission/discodeit/jcf/JCFUserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java @@ -1,4 +1,4 @@ -package com.sprint.mission.discodeit.jcf; +package com.sprint.mission.discodeit.service.jcf; import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.service.UserService; @@ -31,26 +31,11 @@ public void updateUserName(User user, String newName) { System.out.println("[" + oldName + "] 사용자의 이름을 [" + user.getName() + "] 으로 변경하였습니다. | " + user.getUpdatedAt()); } - @Override - public boolean deleteUser(UUID id) { - return users.removeIf(user -> user.getId().equals(id)); - } - @Override public boolean deleteUser(String name) { return users.removeIf(user -> user.getName().equals(name)); } - @Override - public User findUserById(UUID id) { - for (User user : users) { - if (user.getId().equals(id)) { - return user; // 일치하는 ID 발견시 user 리턴 - } - } - return null; // 없으면 null 리턴 - } - @Override public User findUserByName(String name) { for (User user : users) { @@ -62,7 +47,7 @@ public User findUserByName(String name) { } // 유틸 메서드: 모든 사용자 출력 - public void printAllUsers(){ + public void showAllUsers(){ System.out.println(" □ □ □ 전체 사용자 목록 □ □ □ \n 사용자이름 | 사용자생성시간 | 사용자정보 수정시간 | 사용자UUID"); users.forEach(u -> System.out.println(" " + u.getName() + " | " + u.getCreatedAt() + " | " + u.getUpdatedAt() + " | " + u.getId())); System.out.println(); From cb1670887bd754e10d9f966c2d17e73dfd7b0066 Mon Sep 17 00:00:00 2001 From: Leichtstar Date: Mon, 21 Apr 2025 02:06:12 +0900 Subject: [PATCH 03/10] =?UTF-8?q?-=20File=EC=9E=85=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EA=B5=AC=ED=98=84=20=20=20?= =?UTF-8?q?=E3=84=B4FileJavaApplication.java=EC=97=90=EC=84=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=20=20=E3=84=B4src/files/user.ser,channel.ser,messa?= =?UTF-8?q?ges.ser=20=ED=8C=8C=EC=9D=BC=EB=A1=9C=20=EC=A0=80=EC=9E=A5=20?= =?UTF-8?q?=20=20=E3=84=B4=EA=B0=81=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EC=97=90?= =?UTF-8?q?=EC=84=9C=20int=EA=B0=92=EC=9D=B4=20=EC=95=84=EB=8B=8C=20?= =?UTF-8?q?=EA=B0=92=EC=9D=84=20=EC=9D=BD=EC=9D=80=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EB=8B=A4=EC=8B=9C=20=EC=9E=AC=EC=9E=85=EB=A0=A5=20=ED=99=9C?= =?UTF-8?q?=EC=84=B1=ED=99=94=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sprint/mission/discodeit/FileJavaApplication.java | 0 .../com/sprint/mission/discodeit/control/FileChannelControl.java | 0 .../com/sprint/mission/discodeit/control/FileMessageControl.java | 0 .../com/sprint/mission/discodeit/control/FileUserControl.java | 0 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java create mode 100644 src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java create mode 100644 src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java create mode 100644 src/main/java/com/sprint/mission/discodeit/control/FileUserControl.java diff --git a/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java b/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java b/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java b/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/sprint/mission/discodeit/control/FileUserControl.java b/src/main/java/com/sprint/mission/discodeit/control/FileUserControl.java new file mode 100644 index 00000000..e69de29b From eda81523727190340e0ef23c28dae17f3909042a Mon Sep 17 00:00:00 2001 From: Leichtstar Date: Mon, 21 Apr 2025 02:06:45 +0900 Subject: [PATCH 04/10] =?UTF-8?q?-=20File=EC=9E=85=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EA=B5=AC=ED=98=84=20=20=20?= =?UTF-8?q?=E3=84=B4FileJavaApplication.java=EC=97=90=EC=84=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=20=20=E3=84=B4src/files/user.ser,channel.ser,messa?= =?UTF-8?q?ges.ser=20=ED=8C=8C=EC=9D=BC=EB=A1=9C=20=EC=A0=80=EC=9E=A5=20?= =?UTF-8?q?=20=20=E3=84=B4=EA=B0=81=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EC=97=90?= =?UTF-8?q?=EC=84=9C=20int=EA=B0=92=EC=9D=B4=20=EC=95=84=EB=8B=8C=20?= =?UTF-8?q?=EA=B0=92=EC=9D=84=20=EC=9D=BD=EC=9D=80=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=EB=8B=A4=EC=8B=9C=20=EC=9E=AC=EC=9E=85=EB=A0=A5=20=ED=99=9C?= =?UTF-8?q?=EC=84=B1=ED=99=94=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 26650 -> 59905 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.10/fileHashes/fileHashes.bin | Bin 20497 -> 22497 bytes .gradle/8.10/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .idea/workspace.xml | 135 ++++++++++---- src/files/channel.ser | Bin 0 -> 503 bytes src/files/message.ser | Bin 0 -> 3286 bytes src/files/user.ser | Bin 0 -> 407 bytes .../discodeit/FileJavaApplication.java | 125 +++++++++++++ .../discodeit/control/FileChannelControl.java | 173 ++++++++++++++++++ .../discodeit/control/FileMessageControl.java | 143 +++++++++++++++ .../discodeit/control/FileUserControl.java | 142 ++++++++++++++ .../mission/discodeit/entity/Channel.java | 4 +- .../sprint/mission/discodeit/entity/User.java | 4 +- .../repository/ChannelRepository.java | 4 + .../repository/MessageRepository.java | 4 + .../discodeit/repository/UserRepository.java | 4 + .../file/FileChannelRepository.java | 4 + .../file/FileMessageRepository.java | 4 + .../repository/file/FileUserRepository.java | 4 + .../repository/jcf/JCFChannelRepository.java | 4 + .../repository/jcf/JCFMessageRepository.java | 4 + .../repository/jcf/JCFUserRepository.java | 4 + .../service/file/FileChannelService.java | 96 +++++++++- .../service/file/FileMessageService.java | 118 +++++++++++- .../service/file/FileUserService.java | 16 +- 28 files changed, 949 insertions(+), 43 deletions(-) create mode 100644 src/files/channel.ser create mode 100644 src/files/message.ser create mode 100644 src/files/user.ser create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java diff --git a/.gradle/8.10/executionHistory/executionHistory.bin b/.gradle/8.10/executionHistory/executionHistory.bin index a611ca2f9c984049a53ee0983fcd22ec0c3ba3e0..2de1c72593d4fcefe26ed2a421ba9d8229c5bad3 100644 GIT binary patch literal 59905 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 Kh)}G?S^p19a((Ck delta 896 zcmZp?!aVB&;{*{wMg}nOaAaWMss%C?Hzw{7pIBfsSyDoaDQMqjSBVZQ+oZy>;;QuQ zyu2inio}dequgwhf~-Wdf<%Ew^NPN#2{2@BV`X@`W_NDMB~A>X$rBg3Zl17c0^8*K zky!%$Em6FCD*6>gZ)9c{PAMC<}Y__oOIcEa&=sWKtzA^p`)^M z&cyzn5G`=>_k&5LYLg}7s|9MLc)Rts?3@ym9yK>}qWgzQrSpW&_6e@rx1jHlHctTi zlI*2vj9VuMmZ(gwNT?Lp!}#v(Dea1y9KP86-OuN5-prVIl2PDjMq5S33RR^y0x8p$ z2nu9OZme1;p2_`SK@Qt--8|C;Ja1pRC?9G6Gv~3?+E;lW#OYoaGjg5yQ<(9)?r@)=SlqJ_`2CI}M;`Zfwaiy75PU7H^Q?{g0{3mQI$bRg{<* zZT{ljR;6DWXXmed)fHm30Bq_D*2(KqHMp*UIp0|sCruVSC_LGxPN4n_*t}`1K=TY{ zi-wqlulaK`#`)p5&5P23LI+!zR)|*XR*UW3CfjgZe?L&j*u1vL(EZ$m8CeZ1m$u55 z0)=#6DxQ6C>upi{w4R*0W^YNL&{D@u3mD(mTJD$Ft8Jd*26ArPWwm23McSW~6`bCE x!DqKW%kun!lFdzNRg7}m@>XPA{a}6I=iP$dC5qeUzwQFXz$rEsV2%@w007Skm*xNf diff --git a/.gradle/8.10/executionHistory/executionHistory.lock b/.gradle/8.10/executionHistory/executionHistory.lock index 192b16204811238c61bbd50a5e7e1e7a48d519e6..8d4c8d3a2689763808f6dd9a6aabbe697d661ec2 100644 GIT binary patch literal 17 UcmZRcp6c(&bW-LR0|a~p04V$fG5`Po literal 17 UcmZRcp6c(&bW-LR0|bZy04N*-QUCw| diff --git a/.gradle/8.10/fileHashes/fileHashes.bin b/.gradle/8.10/fileHashes/fileHashes.bin index 072a2a34a78491409be2e0eebfca6a6aa6ba2119..4962937f1a07b2126d4685af57a8afe6f42bb0c8 100644 GIT binary patch literal 22497 zcmeI3c{EjPAIHy;=nx%4hDd`sln~04QklnNC{ap-E*UaJm!g445{`(7*D++MBnd?- zH&G->rVI^ND52=q>D~K0`*FKxyKB9FziaQc9A|wzpZ$BD?|$~MmS-E0NMh8V*hcz$ zTln`^;v10wkpPhZkpPhZkpPhZkpPhZkpPhZkpPhZkpPhZkpPhZkpPhZkpPhZk-+~; z0`|y2c)(!9lsV8Z3xY@_)%nO5>xlhp7%XkmR z$wh!08$zDRb#|HIL8U3ctwbUJ5A(?$@5WVI0k@qCd68juQMhZ19N=bdke6_Fx8DwW zbpdd@q#6E-axc+;pDo}HWsqOxdnR(+cOnXK<3lq%ChxfT;5r|`P4_{5yR@xVFr*Hv z>u3h~9g^b<;gCi#(B6D(h6~l?C|+P#0&cbn@&^H?Q8A9a?%4i+KwkgHa5z_fc`V?T zrI0^%+Q}$5I)wG#Iv4WhCvtv|Rm{ggd*gP`}LK)l7MabXv`P0AOqb&iPRtxzMIXKKi^OP~*cDo_}I#?uERDR4AYd;P- z*{`Q*sgSoQ;P$5>=L)~M;R4gM4{%E>$hm`eNU4r^+W~IdG{fHvmR1b^WB_ix5pv$| zr-ofbCBgtVcZQt$Y9GmR?1d8Gj^dDu|K`I;+#H4-7h5gJ7rnJv@XBCR5wy3t47t?J zn>y#Df5+yPNe1LgZJ*{T9(TSB+FKPtEZR*6hH{>fabf?$tio@oWtq0`FH08St!NX+G-Xaom)gbB56F&@_0k`UfTumcB zWti!M9be-d$k$}$2RZpY_5nNZ=K^B}&D< zE}r34j1G>TRBOO3q-Xfcw~g0>wZj3otB3r+#ypq$hM!nJX-bfLYkl;8CLoDj2OO3_ z?(5nV*2g7+-H$9jK<;nEeR)x%uNv6D)sY!~C7>eLy$rjbI=q8CxF=#{oBm(9puOoD z$l-4ii8~(rjrb%IAQB)FAQB)FAQB)FAQB)FAQB)FAQB)FAQB)FAQB)FAQB)FAQB)F zAQB)FAQB)FAQB)FAQB)FAQB)FAQB)FAQB)FAQB)FAQB)F_}>#yN1CDwgO{N{RGm~t z-ATtL-|FqB3*ENzwUS6=y5UEK^I(6i=$ip6|7nzV?HpzHbZl|^#63}@?}n`1MU8$5 zmLckcu8C(e;_t3nvu^8&^~MtFTi(5qM^>q$MjKeo%=uR)-k7?yXm@wH>V`_yX^uSJxUZ7LyGUYnuXxVrnU#5I$QuNRamKv>7@To^MdFSkM$&F?txRA@)#HsSrqh+L z8VfqxPu@SeRKnx=uLk9d8#mrC8R&3-lgm4KaHx6jJv}XCB`=zl9axDwSLQ0-h&2f3 zBySVQKhY#M^;W|iP4|~xiKA<5*^b9@j?Uh~?JZv%taVch2beYgFv^M@@P^Q-6Q|F< zUtnFeQ)h5NS`f1S{g)bw$@lRFb+q(S%X4mOVWWM+fTi%%uLdXIuom99knhN6jNNZdpVXdY88wZOEP=HAA>Qzq zTKv;r@x7bNgYq<9FKQmBVSud@mfMFnjCHcRhU>qb_k2x$dWAYx$})y10-y%ZLA=rM zAar1NRji~@Tvslooq?P|WV+V8^FhGiX5x(rnrgzwY-5 z(V+eV7?fG&Zp$K`aMKD8?c-gft(gj8CxD?r0S4bDd<}nBVU1gfJfhAr!kXrjOZ!km zvq`oI7`&*-HV(;&OCMvSQ>}fj2+6CMSuSPO`29%)Fvw+iBYKrr@Q8)Fp+IDBLQ_xl z5NhasF6RvmhUCsi(PeZ=z7Yip*1fNJ@=4}7ab2B=OYViYnJfI?ZOQ7T8M0-2FM57IJj4ms`p(NNPKx(pI+m(2)QS* z#(}->Bs|Mm>$*wsF{2_O>fxRQ#`OMJ#9?2bs~&jEDveoM^2YLJkb$zDUjx<72}rEHu8v)m!JU!WK>ys#Rx7^8_w z1Dj7Ic~-=JXfn#JKpxdty+URrYeSDc+c+vF`uyD77+Xl6qF*K5Y3|32?U=C>Z-`y7 z7FfNt;ZS~iH%ErbAFQm9k(>X!A?IL_u=U}i?X|b~lN~;svcPHtV1^66Mz_qG+T~G| z%!GM6k9FKCo&QRJ(6rSd;?bhDXIKui*odMMQL?qCutiC$HPi5+di)!wj##oJT%s`({*hXGQ3)|=3 zr`+OtR+5Xkv9=X6=>KjctW3$aT0hw3^*}#eB(i@oW~5_A2EInw3D>NHL&dTlypz3q z_t5n*1AAJUEnU}X>iN*u0hZq@n%{FY*3H3;e5^(izDB;|fwFrSg2Guyj545|j+uo>L7?2DTDNZ*|TCqEVY5X>k8hNu#Vga z78nDDATl%A(^U}U-`70GjN&ej(5PG(EzGJ>OpOJGge2a`@ip4~TxF$@Pe;CG`1Ne$ zyg>qu77a)1dyCZP=C2G)QGJgU?c9t4RpE+WugF>9WtK~_Z zP5Q_k6U~aE4vgi!_+IfGiqGUMYSl84-a1e`m>v&mTt=Vpkxg!vD}$xy4{G(c?gBYo zPON^tVmE`X#?5sb_6j`?$R_v+`B?d1j^eTL delta 1581 zcmaF3o^j#=#tkMCf*MU3mg-gi&HNd_z~6InuSCG)uM!fIRV583=SoUU-U_7uN+wJ$ zl}ecWR?1-VRB4IHcY)Ye#$fVUnTp9vWhExd%6Uv)E0-`iRNi3nTzMrX=8GE@e~521 z@DQmt2AZo0#EKv+U}D&0FV49+(0PTK#jJYyUIqrnsmb}~3xJY9a3L8;=%MPU3yGRh z#5{Z7-CpiFFPzdXQFMs+_G9W0{WkObG8^03zt?wd(H0gzx(G!JOH=CR%N{(83K8#D z>Fck(Y~H(aYSZ4EtL~wwV%5~2{NM9d{b$4JTmC&ess3jQKmS|M#Cc8z< z%DdjYyG%JNU@lb0ORxq85kX8HIbUXE^=xXm^XWf3kMrZl6;K`TAv(BHLou~X-XQ&QP znn!a-zRayPH-qf6Qx1Ngtaszt3j@g*_1PYJfxZ?0Wa7 z$BUy%A8J2iedM+VswNephT9BCqdEOL!_F(32fL=f5c=sOSeNz?s>2?lgY!D3jvI*Pe!2A`a5Rz#y0e zB+#67bUyEi`p1#1hxulIzTce<%)wyK27xs&2;ace!LG-!H+`~}KR*jFP>xQv^_Qxj z7;XOI-BzVv8fWLPebp6W1vNwgVhGa06G%{#Q*>R diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 0586ca9917b328fe2b1c1bc984d680f2a76a5e7a..16a11ee7ea656a22f5a342886b056ea57fee7682 100644 GIT binary patch literal 17 UcmZQ}cF$ + + + { "lastFilter": { @@ -82,51 +91,62 @@ "accountId": "89eeed5c-9622-43bd-9bda-9299693e6fad" } } + + { "customColor": "", "associatedIndex": 8 } + + + + - { + "keyToString": { + "Gradle.3-sprint-mission_01 [:com.sprint.mission.discodeit.JavaApplication.main()].executor": "Run", + "Gradle.3-sprint-mission_01 [clean].executor": "Run", + "Gradle.Build 3-sprint-mission_01.executor": "Run", + "RunOnceActivity.ShowReadmeOnStart": "true", + "RunOnceActivity.git.unshallow": "true", + "SHARE_PROJECT_CONFIGURATION_FILES": "true", + "git-widget-placeholder": "박인규-sprint1", + "junie.onboarding.icon.badge.shown": "true", + "kotlin-language-version-configured": "true", + "last_opened_file_path": "C:/myGitWs/3-sprint-mission_01/src/main/java/com/sprint/mission/discodeit/repository/jcf", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "project.structure.last.edited": "Modules", + "project.structure.proportion": "0.15", + "project.structure.side.proportion": "0.45524544", + "settings.editor.selected.configurable": "reference.settingsdialog.project.gradle", + "vue.rearranger.settings.migration": "true" }, - "keyToStringList": { - "GitStage.ChangesTree.GroupingKeys": [ - "directory", - "module", - "repository" + "keyToStringList": { + "GitStage.ChangesTree.GroupingKeys": [ + "directory", + "module", + "repository" ] } -}]]> +} + + + - + - @@ -172,8 +191,8 @@ - @@ -186,7 +205,12 @@ + + + - \ No newline at end of file diff --git a/src/files/channel.ser b/src/files/channel.ser new file mode 100644 index 0000000000000000000000000000000000000000..c2f0788e5ac109981f161f9ee9c28e37802d9524 GIT binary patch literal 503 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG z7?{dgKqOF;c5;5MUU5NDW?qS2Zf0?DW`3StN@j6#eoAU)iC$`6NoGlodqr6!i7rZ|=W*`)<35Vj8kUou3oGg!K)gh9v$DE3BLQqvMsl~}fnFS?4YYQ3b7?^z+xS=wBiMgpzA*Rff5(WW?F(B{hhlYB(Sc5#m zI4wju?hK4BVc>kVrQ!9mHE-rkC}EI-v)@dgpzvnyjJH#_D7&!}$?C4w#UM8`fnB6#G#N$%UG{pz)HiKCZ{{p1VNib4wC44^iEpRQ zc-=Kc;mxcKKqtT2(C}vAMxZMdAZ`NcfJnSqJ`rptXM2#C+1~cMx41q(2$=B4`&|V9 Dy{^ar literal 0 HcmV?d00001 diff --git a/src/files/message.ser b/src/files/message.ser new file mode 100644 index 0000000000000000000000000000000000000000..0bd4336d8901553efd228042f777b985833be984 GIT binary patch literal 3286 zcmeHHYfuwc7`+5gQ7n`y)mk-L1Vv0RR0dx~1Q8^`N7Qyeek{on7xQxWMgvp?MM0#B zLLj^xQBYK@FDlW|>QqG?DOT&FK8jAOwaqTpu}*b-OndKcfcR$Y-)08p-o5*sbG~!W zxAkqnouPq$DzS)=m>{KM{hbwGG--yge%6OQCkm8)_qx8Pu-|&NPuGQjKfp(*`}2 zPSU9RNK^Q%Us3n5C}NO+B+?Pu1+3|d^+d9kbOsB#vFpH2onc%1je_t=05A(dCPK#l zJy2HufA%I1Xz*UA^>gOLMja}1eQ4FKkcxn48t~MT1Ot_nW-cSeqh;2qRJItxEq5qzz?6xVmGAA1r?1{ z8FUiHNK@#`qN5mwGUz30icuNVBn2gCa4482QIHHnXh?jY=;tB=-KGH#6-}b}s3Tx3 z@X#@uc#|%fq|tMeQ7t@|gKmTg&Nt8y_y`lGCG;Ap5+X9qcsUSJY6!fYW)C}no_9x~ zgbGH3Gc+2@bt&=Q*;0;~+t(2EQj;l!NekyNB+aKSXxoAW%M9Pm?<+jBS}W{|MhM<> zyyK8>7T()%JG;d5`t@D+J=gZV=oK$iOE9{_6wDjk&h$3cvLB~jSz5Gq>HZ(Qt`^5c z`M!=dcb0GH;oP6E_WbMSjKZgJcX=(C)tzS*CZ@}*dF6LMscs07rJo)Z|FA7u`4TG+ z&%@33hszNS8d8@MyoSJo-EHAk7I2j{f+0I^_IO~-u#BHMIIYz_VbV1S#GECEJ+P6j zJtXFq)w3JcwOOoeez91n;;I^);Vpg$-j#&rbbESo1uFBeGX%KUHR&Jw(Evy@m7_4&^b-o#iLK(+BpKo^b%-0Lratudg zO@o`P>5S$3fvcw=Z2`}BTE3gzQZKeQW^twUTsdOm4SS*WdqeRB3M}`A;@0B?`1-K$ zJ%NWu)igzd%%@kT9)rN&VX3o=&i+=itLxa+HI9s~k6BfkUM5M}e?O|llpX&1zdw zz~$Gp<=fb8#axb!+nVL@>EN?&XJtqGXzH4RZv^TiPxA=)cHDTyZk@a@ez&l!aRTAN z=0Vq{*N%+c@Bbn7$6ZAxKAO;3IlJE=G_sDdMeCQx)^@gKToavi=JA??r@{62-Mcu`{6mI0PsRYCr#Rm@ie3QWmOpTgvwKzO`_4^Rsi2-$3AnqR4K^c_ob0 z2Y1SczMs^`38pBpb+1W)8qJ{`CTvb5_jKjZLuqfAk__s?GVfMvI`SK^c zig!-;Ci{hjxBuCf)x0ip-G%DNo3G1RA^F7k)0vE?0cFahM?vwmU1!BTE)uM=)hdS% zX`J9MpL?RnH!$uNJ~Fqr_4lZ;*ODfMji`XfTchJnz7s)R+pyjNGwN-76825bY*d_b zCa`!MT9Ui%SpTq#=_4bRhr$ literal 0 HcmV?d00001 diff --git a/src/files/user.ser b/src/files/user.ser new file mode 100644 index 0000000000000000000000000000000000000000..938789bcca760e4f97ff3448342aead723e39c0a GIT binary patch literal 407 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG z7?{ghKqOF;Msj|xUU5NDW?qS2Zf0?DW`3StN@j6#eoAU)iC$`6NoGlG*CK4RjPA!Y3dD_RM7dJ|nkPpNWCVi-9L6HL+S2fP*_t==CKMMk)G;uD zZBf}d8%Bdg**04T-u!(_l{2Sx<%Ew1yfcCNUT>KCX6}wx+vgzZQ{|ov)(4~^`Wi0& b@YlQ;>^j-9d~)?GH(RK_ww^b0mQ(-$@UoBZ literal 0 HcmV?d00001 diff --git a/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java b/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java index e69de29b..f717c73f 100644 --- a/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java +++ b/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java @@ -0,0 +1,125 @@ +package com.sprint.mission.discodeit; + +import com.sprint.mission.discodeit.control.FileChannelControl; +import com.sprint.mission.discodeit.control.FileUserControl; +import com.sprint.mission.discodeit.control.FileMessageControl; +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.file.FileChannelService; +import com.sprint.mission.discodeit.service.file.FileMessageService; +import com.sprint.mission.discodeit.service.file.FileUserService; + +import java.util.InputMismatchException; +import java.util.Scanner; + +public class FileJavaApplication { + public static final FileUserService fuserService = new FileUserService(); + public static final FileMessageService fmessageService = new FileMessageService(); + public static final FileChannelService fchannelService = new FileChannelService(); + + public static final Scanner scanner = new Scanner(System.in); + + public static void main(String[] args) { + User currentUser; + // 0. intro 메세지 + System.out.println(" ▶ discodeit 메세지 서비스에 연결되었습니다."); + // 0_1. 초기 사용자 인증 + currentUser = FileUserControl.verifyUser(); + // 1. mainmenu 호출. + menuMain(currentUser); + + //// <<메뉴 트리>> + //// 메인메뉴 ┬ 1. 채널입장 (채널상 메세지 관리) || 메서드 : control.menuMessageMng() + //// │ ├ 1_1 메세지 작성 ok + //// │ ├ 1_2 전체 메세지 조회 ok + //// │ ├ 1_3 단건 메세지 조회 ok + //// │ ├ 1_4 메세지 수정 ok + //// │ ├ 1_5 메세지 삭제 ok + //// │ └ 1_6 다른 채널에 접속 ok + //// │ └ 1_7 현재 사용자 변경 ok + //// │ └ 1_8 상위메뉴로 ok + //// ├ 2. 채널 관리(신규,수정,삭제) || 메서드 : control.menuChannelMng() + //// │ ├ 2_1 신규 채널 개설 ok + //// │ ├ 2_2 개별 채널 정보 상세조회 ok + //// │ ├ 2_3 개별 채널 이름,설명 변경 ok + //// │ └ 2_4 개별 채널 삭제 ok + //// │ └ 2_5 전체 채널 정보 상세조회 ok + //// │ └ 2_6 상위메뉴로 ok + //// ├ 3. 사용자 관리(신규,수정,삭제) || 메서드 : control.menuUserMng() + //// │ ├ 3_1 신규 사용자 추가 ok + //// │ ├ 3_2 현재 사용자 변경 ok + //// │ ├ 3_3 사용자 삭제 ok + //// │ └ 3_4 단일 사용자 상세 조회 ok + //// │ └ 3_5 전체 사용자 목록 조회 ok + //// │ └ 3_6 현재 사용자 변경 ok + //// │ └ 3_7 상위메뉴로 ok + //// └ 4. 프로그램 종료 + } + + // ▽▽▽main메서드에서 사용되는 내부 메서드 + public static int scanInt(){ // 메뉴 선택시 int값 입력 필터링 메서드 + int inputNum = -1; + while (inputNum < 0 ){ + System.out.print(" >> "); + try { + inputNum = scanner.nextInt(); + scanner.nextLine(); // scanner 내부 개행문자 제거 + } catch (InputMismatchException e){ + System.out.println("숫자만 입력해 주세요"); + scanner.nextLine(); // scanner 내부 개행문자 제거 + } + } + return inputNum; +} + + public static User verifyUser(){ // 사용자명 입력 >> 없는 사용자 : 사용자 생성 / 있는 사용자 : 이름으로 확인, ID연결 + System.out.print(" ▶ 사용자명을 입력해 주세요 : "); + String username = scanner.nextLine(); + User user = fuserService.findUserByName(username); + if (user != null) { + System.out.println("[" + user.getName() + "] 님 환영합니다." + ", ID: " + user.getId()); + return user; + } else { + System.out.println("\n ▶ 존재하지 않는 사용자입니다. 신규 사용자로 등록합니다."); + User newUser = fuserService.createUser(username); + System.out.println("\n ▶ 환영합니다 [" + newUser.getName() + "] 님, 새로운 ID가 발급되였습니다. 신규 사용자 UUID : " + newUser.getId()); + return newUser; + } + } + + + public static void menuMain(User nowUser){ // 메인 메뉴 call 메서드. 각 세부 메뉴로 접근하기 위함. + Channel nowChannel = null; + while (true) { + System.out.println(" ▶ 원하는 메뉴를 선택해 주세요."); + System.out.println("**********************************************\n" + + "[1] 채널 입장 및 메세지 관리\n" + + "[2] 채널 관리 (신규, 수정, 삭제, 조회)\n" + + "[3] 사용자 관리 (신규, 수정, 삭제, 조회)\n" + + "[4] 종료\n" + + "**********************************************\n"); + int choice = scanInt(); // 숫자 입력 메서드 호출 + + switch (choice) { + case 1: // 채널 입장 : 메세지 관리 메서드 호출 + nowChannel = FileChannelControl.joinChannel(nowUser); + nowUser = FileMessageControl.menuMessageMng(nowUser,nowChannel); + break; + case 2: + FileChannelControl.menuChannelMng(nowUser); + break; + case 3: // 사용자 관리 : 사용자 관리 메서드 호출 + nowUser = FileUserControl.menuUserMng(nowUser); + break; + case 4: + System.out.println(" ▶ 프로그램을 종료합니다."); + break; + default: + System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); + } + if (choice == 4) { + break; + } + } + } +} diff --git a/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java b/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java index e69de29b..56c2a992 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java @@ -0,0 +1,173 @@ +package com.sprint.mission.discodeit.control; + +import com.sprint.mission.discodeit.FileJavaApplication; +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.User; + +public class FileChannelControl extends FileJavaApplication { + + public static Channel joinChannel(User nowUser){ // 채널입장시 Channel 신규개설 판별 메서드. 있으면 있는 채널에 참가 / 없으면 없는채널 생성 + + System.out.print(" ▶ 채널명을 입력해 주세요 : "); + String chanName = scanner.nextLine(); + Channel channel = fchannelService.findChannelByName(chanName); + + + if (channel != null) { + System.out.println("[" + channel.getChannelName() + "] 에 접속합니다." + ", 채널 ID: " + channel.getId()); + + return channel; + } else { + System.out.println("\n ▶ 존재하지 않는 채널입니다. 새로운 채널을 개설합니다."); + System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); + String chanDesc = scanner.nextLine(); + + Channel newChannel = fchannelService.addChannel(chanName,chanDesc,nowUser.getName()); + System.out.println(" ▶ [" + newChannel.getChannelName() + "] 채널에 접속합니다." + " 채널 ID: " + newChannel.getId()); + + return newChannel; + } + } + public static void menuChannelMng(User currentUser){ // 2. 채널 관리 메서드 + while (true) { + System.out.println(" *******************************************************\n" + + " || 채널 관리 메뉴입니다. 원하는 기능을 선택하세요. ||\n" + + " || 1 > 신규 채널 생성 ||\n" + + " || 2 > 개별 채널 정보 상세조회 ||\n" + + " || 3 > 개별 채널 이름,설명 변경 ||\n" + + " || 4 > 개별 채널 삭제 ||\n" + + " || 5 > 전체 채널 정보 상세조회 ||\n" + + " || 6 > 상위 메뉴로 돌아가기 ||\n" + + " *******************************************************\n"); + int choice = scanInt(); // 숫자 입력 필터링 메서드 호출 + + switch (choice) { + case 1: // 2_1 신규 채널 생성, 채널설명 추가 + System.out.println(" ▶ 새로운 채널을 개설합니다."); + + while(true) { + System.out.print(" ▶ 채널명을 입력해 주세요 : "); + String chanName = scanner.nextLine(); + Channel channel = fchannelService.findChannelByName(chanName); + + if (channel == null) { + System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); + String chanDesc = scanner.nextLine(); + Channel newChan = fchannelService.addChannel(chanName, chanDesc, currentUser.getName()); + + System.out.println("\n ▶ "+newChan.getChannelName()+" 채널 생성에 성공하였습니다."); + + break; + } else { + System.out.println("\n ▶ 이미 존재하는 채널입니다. 다른 이름을 입력해주세요."); + } + } + break; + case 2: // 2_2 채널 이름으로 검색하여 개별 채널 조회 + System.out.print(" ▶ 조회할 채널의 이름을 입력해 주세요.\n >> "); + String chnName = scanner.nextLine(); + Channel toPrintChannel = fchannelService.findChannelByName(chnName); + + if (toPrintChannel != null) { + System.out.println(toPrintChannel); + break; + }else{ + System.out.println("존재하지 않는 채널명입니다. 다시 입력해 주세요"); + } + break; + case 3: // 2_3 채널 이름으로 검색하여 해당 채널 이름,설명 변경 + System.out.println("\n ▶ 채널 이름을 변경합니다. 현재 개설된 채널은 아래와 같습니다. \n"); + fchannelService.printAllChannels(); + + while(true) { + String newName; + String newDesc; + + System.out.print(" ▶ 변경할 채널의 이름을 선택해 주세요.\n >> "); + String fndChnName = scanner.nextLine(); + Channel toRenameChannel = fchannelService.findChannelByName(fndChnName); + + if (toRenameChannel != null) { + System.out.println(" ▶ 선택하신 채널은 ["+toRenameChannel.getChannelName()+"] 입니다"); + System.out.println(" ▶ 변경할 이름을 입력해 주세요."); + + while(true) { + System.out.print(" >> "); + newName = scanner.nextLine(); + + if(fchannelService.findChannelByName(newName) == null){ + if (!newName.isEmpty()) { + toRenameChannel.setChannelName(newName); + + break; + } else { + System.out.println(" ▶ 잘못된 입력입니다. 다시 입력해 주세요."); + } + } else { + System.out.println(" ▶ 이미 존재하는 채널명입니다. 다시 입력해 주세요."); + } + } + + System.out.print(" ▶ 변경할 채널의 설명을 입력해 주세요.\n >> "); + newDesc = scanner.nextLine(); + + if (newDesc.isEmpty()) { + fchannelService.UpdateChannel(toRenameChannel,newName,"-"); + System.out.println(" ▶ 채널 설명을 공백으로 설정했습니다."); + break; + }else{ + fchannelService.UpdateChannel(toRenameChannel,newName,newDesc); + System.out.println(" ▶ 채널정보 수정에 성공했습니다."); + break; + } + }else{ + System.out.println("존재하지 않는 채널명입니다. 다시 입력해 주세요"); + } + } + break; + case 4: // 2_4 개별 채널 삭제 + System.out.println(" ▶ 현재 개설된 채널은 아래와 같습니다."); + fchannelService.printAllChannels(); + + System.out.print(" ▶ 삭제할 채널의 이름을 입력해 주세요.\n >> "); + String fndChnName = scanner.nextLine(); + Channel toDeleteChannel = fchannelService.findChannelByName(fndChnName); + + if (toDeleteChannel != null) { + System.out.print(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); + String deleteConfirm = scanner.nextLine(); + + if (deleteConfirm.isEmpty()) { + System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); + break; + + }else if(deleteConfirm.equals("삭제")) { + fchannelService.deleteChannel(toDeleteChannel); + + System.out.println(" ▶ [" + fndChnName+ "]채널이 삭제되었습니다."); + }else{ + System.out.println(" ▶ 잘못된 입력입니다. 채널 삭제를 취소합니다."); + } + } else { + System.out.println(" ▶ 잘못된 입력입니다. 채널 삭제를 취소합니다."); + } + + + break; + case 5: // 2_5 개별 채널 정보 상세조회 + fchannelService.printAllChannels(); + break; + case 6: // 2_6 상위메뉴 복귀 + break; + default: // 세부메뉴 입력예외처리 + System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); + } + if (choice == 6) { + break; + } + } + + + } // 2. 채널 관리 메서드 + +} diff --git a/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java b/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java index e69de29b..edc0e7cc 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java @@ -0,0 +1,143 @@ +package com.sprint.mission.discodeit.control; + +import com.sprint.mission.discodeit.FileJavaApplication; +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.entity.User; + +import java.util.List; +import java.util.UUID; + +public class FileMessageControl extends FileJavaApplication { + public static User menuMessageMng(User currentUser, Channel currentChannel){ // 1 메세지 관리 메서드 + + while (true) { + System.out.println(" *******************************************************\n" + + " || ["+currentChannel.getChannelName()+"] 채널에 입장했습니다.\n" + + " || 원하는 기능을 선택하세요. ||\n" + + " || 1 > 신규 메세지 작성 ||\n" + + " || 2 > 전체 메세지 조회 ||\n" + + " || 3 > 단건 메세지 조회 ||\n" + + " || 4 > 메세지 수정 ||\n" + + " || 5 > 메세지 삭제 ||\n" + + " || 6 > 다른 채널에 접속 ||\n" + + " || 7 > 현재 사용자 변경 ||\n" + + " || 8 > 상위 메뉴로 돌아가기 ||\n" + + " *******************************************************\n"); + int choice = scanInt(); // 숫자 입력 필터링 메서드 호출 + int inputMsgNum; + Message currentMsg; + UUID channelId = currentChannel.getId(); + List messages = fmessageService.getMessagesList(channelId); + System.out.println(messages.size()); + switch (choice) { + case 1: // 1_1 메세지 작성 + System.out.print(" ▶ 새로운 대화를 시작합니다. 대화를 종료하려면 빈 값을 입력해주세요.\n"); + while (true){ //대화메세지를 연속으로 입력받도록 루프 + int msgDisplaySize; + if((messages.size()) < 5){ + msgDisplaySize=0; + } else { + msgDisplaySize = messages.size() - 5 + ; + } + System.out.println("번호 | 사용자명 : 메세지(생성일/수정일)"); + for (int i = msgDisplaySize ; i < messages.size(); i++) { + fmessageService.printOneMessage(channelId,i+1); + } + + System.out.print(" >> "); + String txtMsg = scanner.nextLine(); + if (!txtMsg.isEmpty()) { + + fmessageService.uploadMsg(channelId, currentUser.getName(), txtMsg); + } else { + System.out.println(" ▶ 메세지 입력을 종료합니다"); + break; + } + } + break; + + case 2: //1_2 전체 메세지 조회 + System.out.println(" ▶ 채널에 등록된 모든 메세지를 조회합니다.\n "); + fmessageService.printAllMessages(channelId); + break; + case 3: //1_3 단건 메세지 조회 + System.out.println(" ▶ 조회할 메세지의 번호를 입력해 주세요"); + inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 + if(inputMsgNum <= messages.size()) { + System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); + System.out.println("번호 | 사용자 : 메세지 ( 생성시각 / 수정시각 )"); + fmessageService.printOneMessage(channelId,inputMsgNum); + break; + } + System.out.println(" ▶ 잘못된 입력입니다. 상위메뉴로 돌아갑니다."); + + break; + case 4: // 1_4 메세지 수정 + System.out.println(" ▶ 현재 등록된 메세지는 아래와 같습니다."); + fmessageService.printAllMessages(channelId); + System.out.println(" ▶ 수정할 메세지의 번호를 입력해 주세요"); + inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 + if(inputMsgNum <= messages.size()) { + currentMsg = fmessageService.findMessageByNum(channelId,inputMsgNum); + System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); + System.out.println(currentMsg.getTextMsg()); + + System.out.print("수정할 새로운 메세지를 입력해 주세요.\n >> "); + String newMessage = scanner.nextLine(); + fmessageService.updateMsg(currentUser.getName(),currentMsg, newMessage); + System.out.println("기존 내용을 [" + currentMsg.getTextMsg() + "] 로 수정하였습니다."); + break; + } + System.out.println(" ▶ 잘못된 입력입니다. 상위메뉴로 돌아갑니다."); + break; + case 5: // 1_5 메세지 삭제 + System.out.println(" ▶ 현재 등록된 메세지는 아래와 같습니다."); + fmessageService.printAllMessages(channelId); + System.out.println(" ▶ 삭제할 메세지의 번호를 입력해 주세요"); + inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 + currentMsg = fmessageService.findMessageByNum(channelId,inputMsgNum); + System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); + System.out.println(currentMsg.getTextMsg()); + + System.out.print(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); + String deleteConfirm = scanner.nextLine(); + if (deleteConfirm.isEmpty()) { + System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); + break; + } else if (deleteConfirm.equals("삭제")) { + fmessageService.deleteMessage(currentUser.getName(),currentMsg); + System.out.println("메세지가 삭제되었습니다."); + } else { + System.out.println(" ▶ 잘못된 입력입니다. 사용자 삭제를 취소합니다."); + } + break; + case 6: // 1_6 현재 채널 변경 + currentChannel = ChannelControl.joinChannel(currentUser); + break; + case 7: // 1_7 현재 사용자 변경 + System.out.print(" ▶ 어떤 사용자로 로그인할까요?"); + String username = scanner.nextLine(); + User user = fuserService.findUserByName(username); + if (user != null) { + System.out.println("[" + user.getName() + "] 사용자로 진행합니다." + ", ID: " + user.getId()); + currentUser = user; + } else { + System.out.println("\n ▶ 존재하지 않는 사용자입니다. 기존 사용자[" + currentUser.getName() + "]로 진행합니다.\n 현재 사용가능한 사용자는 아래와 같습니다."); + fuserService.getUserslist().forEach(u -> System.out.print(u.getName()+ " , ")); + System.out.println(); + } + break; + case 8: // 1_8 상위메뉴로 이동 + break; + default: // 세부메뉴 입력예외처리 + System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); + } + if (choice == 8) { + break; + } + } + return currentUser; + } // 1 메세지 관리 메서드 +} diff --git a/src/main/java/com/sprint/mission/discodeit/control/FileUserControl.java b/src/main/java/com/sprint/mission/discodeit/control/FileUserControl.java index e69de29b..1175f56b 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/FileUserControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/FileUserControl.java @@ -0,0 +1,142 @@ +package com.sprint.mission.discodeit.control; + +import com.sprint.mission.discodeit.FileJavaApplication; +import com.sprint.mission.discodeit.entity.User; + +public class FileUserControl extends FileJavaApplication { + + // 어플리케이션 최초 실행시 User 신규여부 판별 메서드. 있으면 있는 유저로 로그인 / 없으면 새 유저 생성 +// 1_3 사용자 관리 세부메뉴 메서드 + public static User menuUserMng(User currentUser){ // 1_4 사용자 관리 내부메뉴 메서드 + while (true) { + System.out.println(" *******************************************************\n" + + " || 사용자 관리 메뉴입니다. 원하는 기능을 선택하세요. ||\n" + + " || 1 > 신규 사용자 생성 ||\n" + + " || 2 > 현재 사용자 이름 변경 ||\n" + + " || 3 > 사용자 삭제 ||\n" + + " || 4 > 단일 사용자 상세조회 ||\n" + + " || 5 > 전체 사용자 상세조회 ||\n" + + " || 6 > 다른 사용자로 진행 ||\n" + + " || 7 > 상위 메뉴로 돌아가기 ||\n" + + " *******************************************************\n"); + int choice = scanInt(); + + switch (choice) { + case 1: // 1_4_1 신규 사용자 생성 메뉴 + System.out.println(" ▶ 새로운 사용자를 생성합니다."); + while (true) { + System.out.print(" ▶ 원하는 사용자명을 입력해 주세요 : "); + String username = scanner.nextLine(); + if (username.isEmpty()) { // 입력값이 없는경우 상위 메뉴로 이동 + System.out.println(" ▶ 입력값이 없습니다. 사용자 생성을 취소합니다.\n"); + break; + } + User user = fuserService.findUserByName(username); + if (user == null) { // 중복 유저명 체크하여 중복유저가 없는경우 사용자 생성 + User newUser = fuserService.createUser(username); + System.out.println(" ▶ 사용자 생성에 성공했습니다."); + System.out.println(" ▶ 사용자명 : " + newUser.getName() + " SSID : " + newUser.getId() + "\n"); + + // 새로 생성한 사용자로 currentUser 변경여부 체크 + System.out.println(" ▶ 새로운 사용자로 로그인하시겠습니까? Y/N"); + String newUserChange = scanner.nextLine(); + if (newUserChange.equals("y") || newUserChange.equals("Y")) { + currentUser = newUser; + System.out.println("\n ▶ [" + currentUser.getName() + "] 사용자로 로그인 했습니다."); + } + + System.out.println(" ▶ 기존 사용자 [" + currentUser.getName() + "]로 계속합니다."); + break; + } else { // user.name 중복값 확인시 while문 재시작 + System.out.println(" ▶ 이미 존재하는 사용자명입니다. 다른 이름을 입력해 주세요.\n"); + } + } + break; + + case 2: + while (true){ // 1_4_2 사용자 이름 변경 메뉴 + System.out.println("\n ▶ 사용자 이름을 변경합니다. * 현재 사용자 이름 : [" + currentUser.getName() + "]"); + System.out.print(" ▶ 변경할 사용자 이름을 입력해 주세요 \n >> "); + String newName = scanner.nextLine(); + if(newName.isEmpty()) {// 사용자 이름 입력값이 없는경우 상위메뉴로 이동 + System.out.println(" ▶ 새 이름을 입력하지 않았습니다. 사용자 이름 변경을 취소합니다."); + break; + } + User user = fuserService.findUserByName(newName); + if(user != null){ // 중복값 존재시 재입력 + System.out.print(" ▶ 이미 존재하는 이름입니다. 다시 입력해 주세요.\n >> "); + } else { // 중복값 미확인시 유저명 변경 + fuserService.updateUserName(currentUser, newName); + break; + } + } + break; + case 3: // 1_4_3 사용자 삭제 메뉴 + System.out.println(" ▶ 삭제할 사용자의 이름을 입력해 주세요"); + System.out.println(" ▶ 현재 등록된 사용자는 아래와 같습니다."); + fuserService.showAllUsers(); + System.out.print(" >> "); + String deleteUser = scanner.nextLine(); + if ((deleteUser.isEmpty()) || (fuserService.findUserByName(deleteUser) == null)) { + System.out.println(" ▶ 존재하지 않는 사용자이거나 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); + } else if (deleteUser.equals(currentUser.getName())){ + System.out.println(" ▶ 현재 로그인된 사용자는 삭제할 수 없습니다! 이전 메뉴로 돌아갑니다."); + break; + } else { + System.out.println(" ▶ 입력하신 사용자는 아래와 같습니다."); + User userToDel = fuserService.findUserByName(deleteUser); + System.out.println(userToDel); + System.out.println(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); + String deleteConfirm = scanner.nextLine(); + if (deleteConfirm.isEmpty()) { + System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); + break; + } else if (deleteConfirm.equals("삭제")) { + fuserService.deleteUser(deleteUser); + System.out.println("[" + deleteUser + "] 사용자가 삭제되었습니다."); + } else { + System.out.println(" ▶ 잘못된 입력입니다. 사용자 삭제를 취소합니다."); + } + } + break; + case 4: // 1_4_4 단일 사용자 정보 출력 메뉴 + System.out.print(" ▶ 조회할 사용자의 이름을 입력해 주세요.\n >> "); + String oneUser = scanner.nextLine(); + if ((oneUser.isEmpty()) || (fuserService.findUserByName(oneUser) == null)) { + System.out.println(" ▶ 존재하지 않는 사용자이거나 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); + } else { + System.out.println(" ▶ 입력하신 사용자는 아래와 같습니다."); + User userToRead = fuserService.findUserByName(oneUser); + System.out.println(userToRead); + } + break; + case 5: // 1_4_5 모든 사용자 정보 출력 메뉴 + System.out.println(" ▶ 모든 사용자 정보를 출력합니다."); + fuserService.showAllUsers(); + break; + case 6: // 1_4_6 다른 사용자로 진행 + System.out.print(" ▶ 어떤 사용자로 로그인할까요?"); + String username = scanner.nextLine(); + User user = fuserService.findUserByName(username); + if (user != null) { + System.out.println("[" + user.getName() + "] 사용자로 진행합니다." + ", ID: " + user.getId()); + currentUser = user; + } else { + System.out.println("\n ▶ 존재하지 않는 사용자입니다. 기존 사용자[" + currentUser.getName() + "]로 진행합니다.\n 현재 사용가능한 사용자는 아래와 같습니다."); + fuserService.getUserslist().forEach(u -> System.out.print(u.getName()+ " , ")); + System.out.println(); + } + break; + case 7: // 1_4_7 상위메뉴 복귀 + break; + default: // 1_4 세부메뉴 입력예외처리 + System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); + } + if (choice == 7) { + break; + } + } + + return currentUser; + } // 1_3 사용자 관리 세부메뉴 메서드 +} diff --git a/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/src/main/java/com/sprint/mission/discodeit/entity/Channel.java index a92fe50e..87b2b187 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/Channel.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -1,5 +1,6 @@ package com.sprint.mission.discodeit.entity; -import com.sprint.mission.discodeit.jcf.JCFMessageService; +import com.sprint.mission.discodeit.service.file.FileMessageService; +import com.sprint.mission.discodeit.service.jcf.JCFMessageService; import java.io.Serializable; import java.text.SimpleDateFormat; @@ -25,6 +26,7 @@ public Channel(String channelName, String channelDescription, String channelCrea this.updatedAt = updatedAt; JCFMessageService.setDefaultBoard(this); + FileMessageService.setDefaultBoard(this); } public UUID getId() { diff --git a/src/main/java/com/sprint/mission/discodeit/entity/User.java b/src/main/java/com/sprint/mission/discodeit/entity/User.java index ca206e41..23795dc2 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -32,8 +32,8 @@ public String getCreatedAt() { return formatedTime; } public String getUpdatedAt() { - String aformatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(updatedAt); - return aformatedTime; + String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(updatedAt); + return formatedTime; } public void setUpdatedAt(long updatedAt) { this.updatedAt = updatedAt; 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 00000000..293de39c --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository; + +public interface ChannelRepository { +} 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 00000000..f0ba4a20 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository; + +public interface MessageRepository { +} 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 00000000..0ab7c94f --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository; + +public interface UserRepository { +} 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 00000000..44eb8b3a --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository.file; + +public interface FileChannelRepository { +} 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 00000000..e93cfd55 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository.file; + +public interface FileMessageRepository { +} 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 00000000..42ea9be2 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository.file; + +public interface FileUserRepository { +} 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 00000000..d0272c3f --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository.jcf; + +public interface JCFChannelRepository { +} 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 00000000..46887b7d --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository.jcf; + +public interface JCFMessageRepository { +} 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 00000000..1e7d191f --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java @@ -0,0 +1,4 @@ +package com.sprint.mission.discodeit.repository.jcf; + +public interface JCFUserRepository { +} 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 index cb6d7e52..94ac1882 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java @@ -1,4 +1,98 @@ package com.sprint.mission.discodeit.service.file; -public interface FileChannelService { +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.service.ChannelService; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +public class FileChannelService implements ChannelService { + // 초기 채널 입력 + private final List channels; + private static final String channelFileName = "src/files/channel.ser"; + + public FileChannelService(){ + this.channels = fileLoadChannels(); + if(channels.isEmpty()){ + channels.add(new Channel("ch01","default Channel","관리자",1744036548250L,1744036548250L)); + fileSaveChannels(); + } + + } + + // 파일 로드 메서드 + private List fileLoadChannels(){ + File file = new File(channelFileName); + if (!file.exists() || file.length() == 0) { + return new ArrayList<>(); + } + try (FileInputStream fis = new FileInputStream(channelFileName); + ObjectInputStream ois = new ObjectInputStream(fis)){ + return (List)ois.readObject(); + } catch (IOException | ClassNotFoundException e){ + e.printStackTrace(); + return new ArrayList<>(); + } + } + // 파일 세이브 메서드 + private void fileSaveChannels(){ + try(FileOutputStream fos = new FileOutputStream(channelFileName); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(channels); + System.out.println("파일생성 성공. ///channel.ser"); + } catch (IOException e){ + e.printStackTrace(); + System.out.println("파일생성에실패하였습니다. ///channel.ser"); + } + } + + // 채널 생성 메서드 + @Override + public Channel addChannel(String channelName, String channelDesc, String createrName) { + long now = System.currentTimeMillis(); + Channel channel = new Channel(channelName,channelDesc,createrName,now,now); + channels.add(channel); + fileSaveChannels(); + System.out.print("\n ▶ [새로운 채널 생성완료]"); + System.out.println(" ▶ 채널명 : " + channel.getChannelName() + " ▶ 생성시간 : " + channel.getCreatedAt()); + return channel; + } + // 채널 수정 메서드 + @Override + public void UpdateChannel(Channel channel, String channelName, String channelDescription){ + long now = System.currentTimeMillis(); + channel.setChannelName(channelName); + channel.setChannelDescription(channelDescription); + channel.setUpdatedAt(now); + fileSaveChannels(); + System.out.print("\n ▶ [채널 정보 수정 완료]"); + System.out.println(channel); + } + // 채널 삭제 메서드 + @Override + public void deleteChannel(Channel channel){ + channels.remove(channel); + fileSaveChannels(); + } + // 전체채널목록 출력 메서드 + @Override + public void printAllChannels(){ + System.out.println("<< 생성된 전체 채널 >>"); + System.out.println("채널명 | 개설자 | 채널설명(개설시간)"); + channels.forEach(chan -> System.out.println(chan.getChannelName()+" | "+chan.getChannelCreater()+" | "+chan.getChannelDescription()+" ("+chan.getCreatedAt() + ")")); + System.out.println(); + } + + + @Override // 이름으로 채널 검색 메서드. 채널객체를 return + public Channel findChannelByName(String name){ + for (Channel channel : channels) { + if (channel.getChannelName().equals(name)) { + return channel; // 일치하는 name 발견시 channel 객체를 리턴 + } + } + return null; // 없으면 null + } } 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 index 2ce6ec92..18f9d2b2 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java @@ -1,4 +1,120 @@ package com.sprint.mission.discodeit.service.file; -public interface FileMessageService { +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.service.MessageService; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class FileMessageService implements MessageService { + private static Map> channelMsgBoard = new ConcurrentHashMap<>(); + private static final String messageFileName = "src/files/message.ser"; + + public static void setDefaultBoard(Channel channel){ + channelMsgBoard.computeIfAbsent(channel.getId(), id -> { + List list = new ArrayList<>(); + list.add(new Message(1, "defaultUser", "defaultMessage", 1744036548250L, 1744036548250L)); + + try(FileOutputStream fos = new FileOutputStream(messageFileName); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(channelMsgBoard); + } catch (IOException e){ + e.printStackTrace(); + System.out.println("파일 생성에 실패하였습니다. ///message.ser"); + } + + return list; + }); + } + public FileMessageService() { + this.channelMsgBoard = fileLoadMessages(); + fileSaveMessages(); + } + // 파일 로드 메서드 + private Map> fileLoadMessages(){ + File file = new File(messageFileName); + if (!file.exists() || file.length() == 0) { + return new ConcurrentHashMap<>(); + } + try (FileInputStream fis = new FileInputStream(messageFileName); + ObjectInputStream ois = new ObjectInputStream(fis)){ + return (Map>)ois.readObject(); + } catch (IOException | ClassNotFoundException e){ + e.printStackTrace(); + + return new ConcurrentHashMap<>(); + } + } + // 파일 세이브 메서드 + private Map> fileSaveMessages(){ + try(FileOutputStream fos = new FileOutputStream(messageFileName); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(channelMsgBoard); + } catch (IOException e){ + e.printStackTrace(); + System.out.println("파일 생성에 실패하였습니다. ///message.ser"); + } + return channelMsgBoard; + } + + @Override + public void uploadMsg(UUID channelId,String uploaderName,String txtMsg){ + channelMsgBoard.putIfAbsent(channelId,new ArrayList<>()); + int msgNumber = channelMsgBoard.get(channelId).size() +1; + long now = System.currentTimeMillis(); + Message message = new Message(msgNumber,uploaderName,txtMsg,now,now); + channelMsgBoard.get(channelId).add(message); + fileSaveMessages(); + } + + @Override + public void updateMsg(String editerName, Message message,String newMsg) { + String resetColor = "\u001B[0m"; + String setColorYellow = "\u001B[33m"; + message.setUpdatedAt(System.currentTimeMillis()); + message.setTextMsg(newMsg + setColorYellow + " *** [" + editerName + "] 에 의해 수정됨" + resetColor); + fileSaveMessages(); + } + + public void deleteMessage(String deleterName, Message message){ + String resetColor = "\u001B[0m"; + String setColorRed = "\u001B[31m"; + message.setUpdatedAt(System.currentTimeMillis()); + message.setTextMsg(setColorRed + " - ////// " + deleterName + " 사용자에 의해 삭제됨 ////// -" +message.getUpdatedAt() + resetColor); + fileSaveMessages(); + } + public Message findMessageByNum(UUID channelId,int num){ + for (Message message : channelMsgBoard.get(channelId)) { + if (message.getMsgNumber() == num) { + return message; // 일치하는 메세지 번호 발견시 message 리턴 + } + }return null; + } + + + + public void printAllMessages(UUID channelId) { + if(channelMsgBoard.get(channelId)!=null) { + System.out.println("<< 입력된 전체 메세지 >>"); + System.out.println("번호 | 사용자 : 메세지"); + channelMsgBoard.get(channelId).forEach(m -> System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", m.getMsgNumber(), m.getAuthor(), m.getTextMsg(), m.getCreatedAt(), m.getUpdatedAt(), m.getId())); + System.out.println(); + } else { + System.out.println("<<선택된 채널에 입력된 메세지 없음>>"); + } + + } + public void printOneMessage(UUID channelId,int msgNum){ + Message message = findMessageByNum(channelId,msgNum); + System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", message.getMsgNumber(),message.getAuthor(),message.getTextMsg(),message.getCreatedAt(),message.getUpdatedAt(),message.getId() ); + } + public List getMessagesList(UUID channelId) { + return channelMsgBoard.get(channelId); + } + } 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 index b2bc0e96..4ec3b64c 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -13,7 +13,7 @@ public class FileUserService implements UserService { public FileUserService() { this.users = fileLoadUsers(); } - + // 파일 로드 메서드 private List fileLoadUsers(){ try (FileInputStream fis = new FileInputStream(userFileName); ObjectInputStream ois = new ObjectInputStream(fis)){ @@ -23,13 +23,14 @@ private List fileLoadUsers(){ return new ArrayList<>(); } } - + // 파일 세이브 메서드 private void fileSaveUsers(){ try(FileOutputStream fos = new FileOutputStream(userFileName); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(users); } catch (IOException e){ e.printStackTrace(); + System.out.println("파일생성에실패하였습니다 ///user.ser"); } } @Override // 유저 생성 메서드 createUser() @@ -47,12 +48,19 @@ public void updateUserName(User user, String newName) { String oldName = user.getName(); user.setName(newName); user.setUpdatedAt(System.currentTimeMillis()); + fileSaveUsers(); System.out.println("[" + oldName + "] 사용자의 이름을 [" + user.getName() + "] 으로 변경하였습니다. | " + user.getUpdatedAt()); } @Override public boolean deleteUser(String name) { - return users.removeIf(user -> user.getName().equals(name)); + users.remove(findUserByName(name)); + fileSaveUsers(); + if(findUserByName(name)==null){ + return true; + } else{ + return false; + } } @Override @@ -65,7 +73,7 @@ public User findUserByName(String name) { return null; // 없으면 null 리턴 } - // 유틸 메서드: 모든 사용자 출력 + // 모든 사용자 출력 public void showAllUsers(){ System.out.println(" □ □ □ 전체 사용자 목록 □ □ □ \n 사용자이름 | 사용자생성시간 | 사용자정보 수정시간 | 사용자UUID"); users.forEach(u -> System.out.println(" " + u.getName() + " | " + u.getCreatedAt() + " | " + u.getUpdatedAt() + " | " + u.getId())); From 28c469f0cd2452dd792a1ae65fbf0da8cdf662cb Mon Sep 17 00:00:00 2001 From: Leichtstar Date: Wed, 23 Apr 2025 18:51:51 +0900 Subject: [PATCH 05/10] =?UTF-8?q?-=20Repository=20=EC=A0=95=EC=9D=98?= =?UTF-8?q?=ED=95=A8=20-=20Repository=20=EC=A0=95=EC=9D=98=ED=95=98?= =?UTF-8?q?=EB=A9=B0=20Message=EA=B5=AC=EC=A1=B0=20=EC=A0=84=EB=B0=98?= =?UTF-8?q?=EC=A0=81=EC=9D=B8=20=EB=A6=AC=ED=8C=A9=ED=84=B0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +- src/files/channel.ser | Bin 503 -> 675 bytes src/files/message.ser | Bin 3286 -> 0 bytes ...e_0abd5c3a-679c-4aa6-8d65-dccf052e002e.ser | Bin 0 -> 364 bytes ...e_0af3e050-90fc-4bee-8752-1636bd87ddda.ser | Bin 0 -> 859 bytes .../discodeit/FileJavaApplication.java | 1 - .../discodeit/control/ChannelControl.java | 4 +- .../discodeit/control/FileChannelControl.java | 4 +- .../discodeit/control/FileMessageControl.java | 52 +++++---- .../discodeit/control/MessageControl.java | 6 +- .../mission/discodeit/entity/Channel.java | 3 - .../sprint/mission/discodeit/entity/User.java | 10 +- .../repository/ChannelRepository.java | 7 ++ .../repository/MessageRepository.java | 7 ++ .../discodeit/repository/UserRepository.java | 6 + .../file/FileChannelRepository.java | 50 +++++++- .../file/FileMessageRepository.java | 58 +++++++++- .../repository/file/FileUserRepository.java | 37 +++++- .../repository/jcf/JCFChannelRepository.java | 19 +++- .../repository/jcf/JCFMessageRepository.java | 27 ++++- .../repository/jcf/JCFUserRepository.java | 23 +++- .../discodeit/service/ChannelService.java | 12 +- .../discodeit/service/MessageService.java | 17 +-- .../discodeit/service/UserService.java | 14 +-- .../service/basic/BasicChannelService.java | 7 ++ .../service/basic/BasicMessageService.java | 35 ++++++ .../service/basic/BasicUserService.java | 6 + .../service/file/FileChannelService.java | 53 ++------- .../service/file/FileMessageService.java | 107 +++++------------- .../service/file/FileUserService.java | 43 ++----- .../service/jcf/JCFChannelService.java | 14 +-- .../service/jcf/JCFMessageService.java | 52 ++++----- .../discodeit/service/jcf/JCFUserService.java | 15 +-- 33 files changed, 428 insertions(+), 266 deletions(-) delete mode 100644 src/files/message.ser create mode 100644 src/files/message_0abd5c3a-679c-4aa6-8d65-dccf052e002e.ser create mode 100644 src/files/message_0af3e050-90fc-4bee-8752-1636bd87ddda.ser create mode 100644 src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java diff --git a/.gitignore b/.gitignore index e71ee009..78c63537 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,7 @@ bin/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store + +## 업로드금지품목 +.idea \ No newline at end of file diff --git a/src/files/channel.ser b/src/files/channel.ser index c2f0788e5ac109981f161f9ee9c28e37802d9524..4a05c83c0c9ffb0b778ed87e23bfe764365b5591 100644 GIT binary patch delta 193 zcmey)yqI-@5j#sc3j+fK%SOw+jP=EZ40Q}l3=E9Z67}PfVRQ)t=j#nq-^|_dYWo}@ z`*CYK1OeG^nmgWXY0j!g=c~fb@BaSD9OU(AK|84Al5n)~uV_zxAyd;i=Zm8x7 zy_q-hb^pw_Q)j%^>zeXv>zdb1GfEhEUUx5fy>th%;k~JM&a>(<=yC0hu}YugwX6aF DET>bc delta 20 bcmZ3?`ki@#5j#^k3j+fK(?-j^jEofkIjjW? diff --git a/src/files/message.ser b/src/files/message.ser deleted file mode 100644 index 0bd4336d8901553efd228042f777b985833be984..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3286 zcmeHHYfuwc7`+5gQ7n`y)mk-L1Vv0RR0dx~1Q8^`N7Qyeek{on7xQxWMgvp?MM0#B zLLj^xQBYK@FDlW|>QqG?DOT&FK8jAOwaqTpu}*b-OndKcfcR$Y-)08p-o5*sbG~!W zxAkqnouPq$DzS)=m>{KM{hbwGG--yge%6OQCkm8)_qx8Pu-|&NPuGQjKfp(*`}2 zPSU9RNK^Q%Us3n5C}NO+B+?Pu1+3|d^+d9kbOsB#vFpH2onc%1je_t=05A(dCPK#l zJy2HufA%I1Xz*UA^>gOLMja}1eQ4FKkcxn48t~MT1Ot_nW-cSeqh;2qRJItxEq5qzz?6xVmGAA1r?1{ z8FUiHNK@#`qN5mwGUz30icuNVBn2gCa4482QIHHnXh?jY=;tB=-KGH#6-}b}s3Tx3 z@X#@uc#|%fq|tMeQ7t@|gKmTg&Nt8y_y`lGCG;Ap5+X9qcsUSJY6!fYW)C}no_9x~ zgbGH3Gc+2@bt&=Q*;0;~+t(2EQj;l!NekyNB+aKSXxoAW%M9Pm?<+jBS}W{|MhM<> zyyK8>7T()%JG;d5`t@D+J=gZV=oK$iOE9{_6wDjk&h$3cvLB~jSz5Gq>HZ(Qt`^5c z`M!=dcb0GH;oP6E_WbMSjKZgJcX=(C)tzS*CZ@}*dF6LMscs07rJo)Z|FA7u`4TG+ z&%@33hszNS8d8@MyoSJo-EHAk7I2j{f+0I^_IO~-u#BHMIIYz_VbV1S#GECEJ+P6j zJtXFq)w3JcwOOoeez91n;;I^);Vpg$-j#&rbbESo1uFBeGX%KUHR&Jw(Evy@m7_4&^b-o#iLK(+BpKo^b%-0Lratudg zO@o`P>5S$3fvcw=Z2`}BTE3gzQZKeQW^twUTsdOm4SS*WdqeRB3M}`A;@0B?`1-K$ zJ%NWu)igzd%%@kT9)rN&VX3o=&i+=itLxa+HI9s~k6BfkUM5M}e?O|llpX&1zdw zz~$Gp<=fb8#axb!+nVL@>EN?&XJtqGXzH4RZv^TiPxA=)cHDTyZk@a@ez&l!aRTAN z=0Vq{*N%+c@Bbn7$6ZAxKAO;3IlJE=G_sDdMeCQx)^@gKToavi=JA??r@{62-Mcu`{6mI0PsRYCr#Rm@ie3QWmOpTgvwKzO`_4^Rsi2-$3AnqR4K^c_ob0 z2Y1SczMs^`38pBpb+1W)8qJ{`CTvb5_jKjZLuqfAk__s?GVfMvI`SK^c zig!-;Ci{hjxBuCf)x0ip-G%DNo3G1RA^F7k)0vE?0cFahM?vwmU1!BTE)uM=)hdS% zX`J9MpL?RnH!$uNJ~Fqr_4lZ;*ODfMji`XfTchJnz7s)R+pyjNGwN-76825bY*d_b zCa`!MT9Ui%SpTq#=_4bRhr$ diff --git a/src/files/message_0abd5c3a-679c-4aa6-8d65-dccf052e002e.ser b/src/files/message_0abd5c3a-679c-4aa6-8d65-dccf052e002e.ser new file mode 100644 index 0000000000000000000000000000000000000000..0e1ca06f10157d6522e770d50ed0500d507503a3 GIT binary patch literal 364 zcmYLEJxc>Y5S_ckNKhnbt*wP}2UdcO5epM8HX*faa?81z`*3$oFBYPxXklTYVk7}A zLC8$#jGjDkF-h23j0l{HxjcgLlM^@FcoRgZt1O|H_<=B$Wl~D z0hL4 zy;RCA#`qx801Lv}fE`FkyUImbd2UJN-x(ntw$7twr}x^3LyY_pn zVYo_(z#_927>Ya$+3w#Kc#pH;WM+Eo>wV?rbbWql24N!FKMrpi(N#OVKZ_1J(cNx% P+l`v-@cO9tbQ1gkMsb6^ literal 0 HcmV?d00001 diff --git a/src/files/message_0af3e050-90fc-4bee-8752-1636bd87ddda.ser b/src/files/message_0af3e050-90fc-4bee-8752-1636bd87ddda.ser new file mode 100644 index 0000000000000000000000000000000000000000..caaf649da97b15859f0123dc395c79ad6c0d63ea GIT binary patch literal 859 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG z7}(2MKqOF;c5;5MUU5NDW?qS2Zf0?DW`3StN@j6#eoAU)iC$`6NoGlodqr6!i7rZ|>(GH~V=r~8%WCZ!eu#Y+oPAmTm@Y>A~M8Tmye3_?C2 zx9R63=B4WgmjEqGxAtLR%1kL?5P-;lT&*7(>gfU$XD>;uDDf>$FJ!1=UeKU8<>jmwvHuV&P>}P`5SUwGCJCwam z4kW<_mS&&P`K0+9-)^H*`$gh6Sv&tPVX%3a}>t|_nL)t?3~k$ zrT-buxp0F5W5SGAn-;uT-hgbtH8!9Dz<34)-!(QQ1EvUW{34(B>({lf_oDX5J8lK} zdTPt-?hc@%kqx+Y4`=`@#DH7(kPMicu%1<;>f63=a}7eQOk8K+3bvP^U<0}W=mHL* zJR}1qSNJLCtXLD`8-JJz>G?$?Gcs6MHnF literal 0 HcmV?d00001 diff --git a/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java b/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java index f717c73f..17e349e8 100644 --- a/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java +++ b/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java @@ -14,7 +14,6 @@ public class FileJavaApplication { public static final FileUserService fuserService = new FileUserService(); - public static final FileMessageService fmessageService = new FileMessageService(); public static final FileChannelService fchannelService = new FileChannelService(); public static final Scanner scanner = new Scanner(System.in); diff --git a/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java b/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java index 4c72c2cb..f83983e5 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java @@ -22,7 +22,7 @@ public static Channel joinChannel(User nowUser){ // 채널입장시 Channel 신 System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); String chanDesc = scanner.nextLine(); - Channel newChannel = channelService.addChannel(chanName,chanDesc,nowUser.getName()); + Channel newChannel = channelService.createChannel(chanName,chanDesc,nowUser.getName()); System.out.println(" ▶ [" + newChannel.getChannelName() + "] 채널에 접속합니다." + " 채널 ID: " + newChannel.getId()); return newChannel; @@ -53,7 +53,7 @@ public static void menuChannelMng(User currentUser){ // 2. 채널 관리 if (channel == null) { System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); String chanDesc = scanner.nextLine(); - Channel newChan = channelService.addChannel(chanName, chanDesc, currentUser.getName()); + Channel newChan = channelService.createChannel(chanName, chanDesc, currentUser.getName()); System.out.println("\n ▶ "+newChan.getChannelName()+" 채널 생성에 성공하였습니다."); diff --git a/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java b/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java index 56c2a992..a1f52b74 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java @@ -22,7 +22,7 @@ public static Channel joinChannel(User nowUser){ // 채널입장시 Channel 신 System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); String chanDesc = scanner.nextLine(); - Channel newChannel = fchannelService.addChannel(chanName,chanDesc,nowUser.getName()); + Channel newChannel = fchannelService.createChannel(chanName,chanDesc,nowUser.getName()); System.out.println(" ▶ [" + newChannel.getChannelName() + "] 채널에 접속합니다." + " 채널 ID: " + newChannel.getId()); return newChannel; @@ -53,7 +53,7 @@ public static void menuChannelMng(User currentUser){ // 2. 채널 관리 if (channel == null) { System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); String chanDesc = scanner.nextLine(); - Channel newChan = fchannelService.addChannel(chanName, chanDesc, currentUser.getName()); + Channel newChan = fchannelService.createChannel(chanName, chanDesc, currentUser.getName()); System.out.println("\n ▶ "+newChan.getChannelName()+" 채널 생성에 성공하였습니다."); diff --git a/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java b/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java index edc0e7cc..2cd3cb9a 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java @@ -4,11 +4,13 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.file.FileMessageService; import java.util.List; import java.util.UUID; public class FileMessageControl extends FileJavaApplication { + public static final FileMessageService messageService = new FileMessageService(); public static User menuMessageMng(User currentUser, Channel currentChannel){ // 1 메세지 관리 메서드 while (true) { @@ -28,29 +30,21 @@ public static User menuMessageMng(User currentUser, Channel currentChannel){ int inputMsgNum; Message currentMsg; UUID channelId = currentChannel.getId(); - List messages = fmessageService.getMessagesList(channelId); - System.out.println(messages.size()); + List messages = messageService.getMessagesList(channelId); + System.out.println(messages); switch (choice) { case 1: // 1_1 메세지 작성 System.out.print(" ▶ 새로운 대화를 시작합니다. 대화를 종료하려면 빈 값을 입력해주세요.\n"); while (true){ //대화메세지를 연속으로 입력받도록 루프 - int msgDisplaySize; - if((messages.size()) < 5){ - msgDisplaySize=0; - } else { - msgDisplaySize = messages.size() - 5 - ; - } - System.out.println("번호 | 사용자명 : 메세지(생성일/수정일)"); - for (int i = msgDisplaySize ; i < messages.size(); i++) { - fmessageService.printOneMessage(channelId,i+1); - } + + int msgDisplaySize = 5; // 메세지 입력시 상단에 표시될 최근 메세지 수 (1 이상으로 할 것) + displayLatestMessages(msgDisplaySize, messages); System.out.print(" >> "); String txtMsg = scanner.nextLine(); if (!txtMsg.isEmpty()) { - fmessageService.uploadMsg(channelId, currentUser.getName(), txtMsg); + messageService.createMsg(channelId, currentUser.getName(), txtMsg); } else { System.out.println(" ▶ 메세지 입력을 종료합니다"); break; @@ -60,7 +54,7 @@ public static User menuMessageMng(User currentUser, Channel currentChannel){ case 2: //1_2 전체 메세지 조회 System.out.println(" ▶ 채널에 등록된 모든 메세지를 조회합니다.\n "); - fmessageService.printAllMessages(channelId); + messageService.printAllMessages(channelId); break; case 3: //1_3 단건 메세지 조회 System.out.println(" ▶ 조회할 메세지의 번호를 입력해 주세요"); @@ -68,7 +62,7 @@ public static User menuMessageMng(User currentUser, Channel currentChannel){ if(inputMsgNum <= messages.size()) { System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); System.out.println("번호 | 사용자 : 메세지 ( 생성시각 / 수정시각 )"); - fmessageService.printOneMessage(channelId,inputMsgNum); + messageService.printOneMessage(channelId,inputMsgNum); break; } System.out.println(" ▶ 잘못된 입력입니다. 상위메뉴로 돌아갑니다."); @@ -76,17 +70,17 @@ public static User menuMessageMng(User currentUser, Channel currentChannel){ break; case 4: // 1_4 메세지 수정 System.out.println(" ▶ 현재 등록된 메세지는 아래와 같습니다."); - fmessageService.printAllMessages(channelId); + messageService.printAllMessages(channelId); System.out.println(" ▶ 수정할 메세지의 번호를 입력해 주세요"); inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 if(inputMsgNum <= messages.size()) { - currentMsg = fmessageService.findMessageByNum(channelId,inputMsgNum); + currentMsg = messageService.findMessageByNum(channelId,inputMsgNum); System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); System.out.println(currentMsg.getTextMsg()); System.out.print("수정할 새로운 메세지를 입력해 주세요.\n >> "); String newMessage = scanner.nextLine(); - fmessageService.updateMsg(currentUser.getName(),currentMsg, newMessage); + messageService.updateMsg(currentChannel.getId(),currentUser.getName(),currentMsg, newMessage); System.out.println("기존 내용을 [" + currentMsg.getTextMsg() + "] 로 수정하였습니다."); break; } @@ -94,10 +88,10 @@ public static User menuMessageMng(User currentUser, Channel currentChannel){ break; case 5: // 1_5 메세지 삭제 System.out.println(" ▶ 현재 등록된 메세지는 아래와 같습니다."); - fmessageService.printAllMessages(channelId); + messageService.printAllMessages(channelId); System.out.println(" ▶ 삭제할 메세지의 번호를 입력해 주세요"); inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 - currentMsg = fmessageService.findMessageByNum(channelId,inputMsgNum); + currentMsg = messageService.findMessageByNum(channelId,inputMsgNum); System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); System.out.println(currentMsg.getTextMsg()); @@ -107,7 +101,7 @@ public static User menuMessageMng(User currentUser, Channel currentChannel){ System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); break; } else if (deleteConfirm.equals("삭제")) { - fmessageService.deleteMessage(currentUser.getName(),currentMsg); + messageService.deleteMessage(currentChannel.getId(), currentUser.getName(), currentMsg); System.out.println("메세지가 삭제되었습니다."); } else { System.out.println(" ▶ 잘못된 입력입니다. 사용자 삭제를 취소합니다."); @@ -140,4 +134,18 @@ public static User menuMessageMng(User currentUser, Channel currentChannel){ } return currentUser; } // 1 메세지 관리 메서드 + private static void displayLatestMessages(int num, List messages){ + int msgDisplaySize; + if((messages.size()) < 5){ + msgDisplaySize=0; + } else { + msgDisplaySize = messages.size() - 5 + ; + } + System.out.println("번호 | 사용자명 : 메세지(생성일/수정일)"); + for (int i = msgDisplaySize ; i < messages.size(); i++) { + System.out.println(messages.get(i)); + } + } } + diff --git a/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java b/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java index 6cb19fe8..295f1efc 100644 --- a/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java +++ b/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java @@ -50,7 +50,7 @@ public static User menuMessageMng(User currentUser, Channel currentChannel){ String txtMsg = scanner.nextLine(); if (!txtMsg.isEmpty()) { - messageService.uploadMsg(channelId, currentUser.getName(), txtMsg); + messageService.createMsg(channelId, currentUser.getName(), txtMsg); } else { System.out.println(" ▶ 메세지 입력을 종료합니다"); break; @@ -86,7 +86,7 @@ public static User menuMessageMng(User currentUser, Channel currentChannel){ System.out.print("수정할 새로운 메세지를 입력해 주세요.\n >> "); String newMessage = scanner.nextLine(); - messageService.updateMsg(currentUser.getName(),currentMsg, newMessage); + messageService.updateMsg(currentChannel.getId(),currentUser.getName(),currentMsg, newMessage); System.out.println("기존 내용을 [" + currentMsg.getTextMsg() + "] 로 수정하였습니다."); break; } @@ -107,7 +107,7 @@ public static User menuMessageMng(User currentUser, Channel currentChannel){ System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); break; } else if (deleteConfirm.equals("삭제")) { - messageService.deleteMessage(currentUser.getName(),currentMsg); + messageService.deleteMessage(currentChannel.getId(),currentUser.getName(),currentMsg); System.out.println("메세지가 삭제되었습니다."); } else { System.out.println(" ▶ 잘못된 입력입니다. 사용자 삭제를 취소합니다."); diff --git a/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/src/main/java/com/sprint/mission/discodeit/entity/Channel.java index 87b2b187..166d3a43 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/Channel.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -24,9 +24,6 @@ public Channel(String channelName, String channelDescription, String channelCrea this.channelCreater = channelCreater; this.createdAt = createdAt; this.updatedAt = updatedAt; - - JCFMessageService.setDefaultBoard(this); - FileMessageService.setDefaultBoard(this); } public UUID getId() { diff --git a/src/main/java/com/sprint/mission/discodeit/entity/User.java b/src/main/java/com/sprint/mission/discodeit/entity/User.java index 23795dc2..0fd59b38 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -1,13 +1,15 @@ package com.sprint.mission.discodeit.entity; +import java.io.Serial; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.UUID; public class User implements Serializable { + @Serial private static final long serialVersionUID = 1L; private final UUID id = UUID.randomUUID(); - private long createdAt = System.currentTimeMillis(); + private final long createdAt; private long updatedAt; private String name; @@ -28,12 +30,10 @@ public void setName(String name) { } public String getCreatedAt() { - String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(createdAt); - return formatedTime; + return new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(createdAt); } public String getUpdatedAt() { - String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(updatedAt); - return formatedTime; + return new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(updatedAt); } public void setUpdatedAt(long updatedAt) { this.updatedAt = updatedAt; diff --git a/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java index 293de39c..c509d169 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java @@ -1,4 +1,11 @@ package com.sprint.mission.discodeit.repository; +import com.sprint.mission.discodeit.entity.Channel; + +import java.util.List; + + public interface ChannelRepository { + List getChannelsList(); + void fileSaveChannels(); } diff --git a/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java index f0ba4a20..89acf54e 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java @@ -1,4 +1,11 @@ package com.sprint.mission.discodeit.repository; +import com.sprint.mission.discodeit.entity.Message; + +import java.util.List; +import java.util.UUID; + public interface MessageRepository { + List getMessages(UUID channelId); + void saveMessages(UUID channelId, List messages); } diff --git a/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java index 0ab7c94f..cf7a1a9b 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -1,4 +1,10 @@ package com.sprint.mission.discodeit.repository; +import com.sprint.mission.discodeit.entity.User; + +import java.util.List; + public interface UserRepository { + List getUserslist(); + void saveUsersList(); } 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 index 44eb8b3a..caa7e110 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -1,4 +1,52 @@ package com.sprint.mission.discodeit.repository.file; -public interface FileChannelRepository { +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.repository.ChannelRepository; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class FileChannelRepository implements ChannelRepository { + // 초기 채널 입력 + private final List channels; + private static final String CHANNEL_FILE_NAME = "src/files/channel.ser"; + + public FileChannelRepository(){ + this.channels = fileLoadChannels(); + if(channels.isEmpty()){ + channels.add(new Channel("ch01","default Channel","관리자",1744036548250L,1744036548250L)); + fileSaveChannels(); + } + } + + // 파일 로드 메서드 + @SuppressWarnings("unchecked") + private List fileLoadChannels(){ + File file = new File(CHANNEL_FILE_NAME); + if (!file.exists() || file.length() == 0) { + return new ArrayList<>(); + } + try (FileInputStream fis = new FileInputStream(CHANNEL_FILE_NAME); + ObjectInputStream ois = new ObjectInputStream(fis)){ + return (List)ois.readObject(); + } catch (IOException | ClassNotFoundException e){ + return new ArrayList<>(); + } + } + // 파일 세이브 메서드 + public void fileSaveChannels(){ + try(FileOutputStream fos = new FileOutputStream(CHANNEL_FILE_NAME); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(channels); + System.out.println("파일생성 성공. ///channel.ser"); + } catch (IOException e){ + System.out.println("파일생성에실패하였습니다. ///channel.ser"); + } + } + + public List getChannelsList(){ + return channels; + } + } 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 index e93cfd55..e942becb 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -1,4 +1,60 @@ package com.sprint.mission.discodeit.repository.file; -public interface FileMessageRepository { +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.repository.MessageRepository; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class FileMessageRepository implements MessageRepository { + private static Map> channelMsgBoard = new ConcurrentHashMap<>(); + private static final String MESSAGE_FILE_PATH = "src/files/"; + private static final String MESSAGE_FILE_PRIMER = "message_"; + private static final String MESSAGE_FILE_TAIL = ".ser"; + + public FileMessageRepository() { + } + // 파일 로드 메서드 + @Override + public List getMessages(UUID channelId) { + if (!channelMsgBoard.containsKey(channelId)) { + channelMsgBoard.put(channelId, fileLoadMessages(channelId)); + } + return channelMsgBoard.get(channelId); + } + + @Override + public void saveMessages(UUID channelId, List messages) { + channelMsgBoard.put(channelId, messages); + String filePath = getFilePath(channelId); + try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath))) { + oos.writeObject(messages); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @SuppressWarnings("unchecked") + private List fileLoadMessages (UUID channelId) { + String filePath = getFilePath(channelId); + File file = new File(filePath); + if (!file.exists() || file.length() == 0) { + return new ArrayList<>(); + } + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) { + return (List) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + e.printStackTrace(); + return new ArrayList<>(); + } + } + + private String getFilePath(UUID channelId) { + String filePath = MESSAGE_FILE_PATH + MESSAGE_FILE_PRIMER + channelId.toString() + MESSAGE_FILE_TAIL; + return filePath; + } } 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 index 42ea9be2..fb144aab 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -1,4 +1,39 @@ package com.sprint.mission.discodeit.repository.file; -public interface FileUserRepository { +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.repository.UserRepository; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class FileUserRepository implements UserRepository { + private final List users; + private static final String USER_FILE_PATH = "src/files/user.ser"; + + public FileUserRepository() { + this.users = fileLoadUsers(); + } + // 파일 로드 메서드 + @SuppressWarnings("unchecked") + public List fileLoadUsers(){ + try (FileInputStream fis = new FileInputStream(USER_FILE_PATH); + ObjectInputStream ois = new ObjectInputStream(fis)){ + return (List)ois.readObject(); + } catch (IOException | ClassNotFoundException e){ + return new ArrayList<>(); + } + } + // 파일 세이브 메서드 + public void saveUsersList(){ + try(FileOutputStream fos = new FileOutputStream(USER_FILE_PATH); + ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(users); + } catch (IOException e){ + System.out.println("파일생성에실패하였습니다 ///user.ser"); + } + } + public List getUserslist() { + return users; + } } 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 index d0272c3f..f9aa33f5 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java @@ -1,4 +1,21 @@ package com.sprint.mission.discodeit.repository.jcf; -public interface JCFChannelRepository { +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.repository.ChannelRepository; + +import java.util.ArrayList; +import java.util.List; + +public class JCFChannelRepository implements ChannelRepository { + private final List channels = new ArrayList<>(); + // 초기 채널 입력 + public JCFChannelRepository(){ + channels.add(new Channel("ch01","default Channel","관리자",1744036548250L,1744036548250L)); + } + // 채널 목록 반환 + public List getChannelsList() { + return channels; + } + public void fileSaveChannels(){ + } } 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 index 46887b7d..ba5938db 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java @@ -1,4 +1,29 @@ package com.sprint.mission.discodeit.repository.jcf; -public interface JCFMessageRepository { +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.repository.MessageRepository; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class JCFMessageRepository implements MessageRepository { + private static final Map> channelMsgBoard = new ConcurrentHashMap<>(); + + @Override + public List getMessages(UUID channelId) { + List messages = channelMsgBoard.get(channelId); + if (messages == null) { + messages = new ArrayList(); + channelMsgBoard.put(channelId, messages); + } + return messages; + } + + @Override + public void saveMessages(UUID channelId, List messages) { + channelMsgBoard.put(channelId, messages); + } } 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 index 1e7d191f..a7405eb5 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java @@ -1,4 +1,23 @@ package com.sprint.mission.discodeit.repository.jcf; -public interface JCFUserRepository { -} +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.repository.UserRepository; + +import java.util.ArrayList; +import java.util.List; + +public class JCFUserRepository implements UserRepository { + private final List users = new ArrayList<>(); + // 테스트용 초기 더미 데이터 입력 + public JCFUserRepository() { + users.add(new User("희동이" , 1744036538250L , 1744036538250L)); + users.add(new User("고길동" , 1744036738250L , 1744071238250L)); + users.add(new User("도우너" , 1744036938250L , 1744036538250L)); + } + // 유저 목록 반환 + public List getUserslist() { + return users; + } + + public void saveUsersList(){} +} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index b7da376a..9c704dbe 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -3,11 +3,13 @@ import com.sprint.mission.discodeit.entity.Channel; public interface ChannelService { - Channel addChannel(String channelName, String channelDesc, String createrName); - void UpdateChannel(Channel channel, String channelName, String channelDescription); - void deleteChannel(Channel channel); - void printAllChannels(); + Channel createChannel(String channelName, String channelDesc, String createrName); // Create 새로운 채널 생성 - Channel findChannelByName(String name); + void printAllChannels(); // Read 전체 채널 리스트 읽기 + Channel findChannelByName(String name); // Read 이름으로 단일채널 읽기 + + void UpdateChannel(Channel channel, String channelName, String channelDescription); // Update 채널 정보 수정 + + void deleteChannel(Channel channel); // Delete 채널 삭제 } diff --git a/src/main/java/com/sprint/mission/discodeit/service/MessageService.java b/src/main/java/com/sprint/mission/discodeit/service/MessageService.java index 8ba05d47..4062691f 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/MessageService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/MessageService.java @@ -5,12 +5,15 @@ import java.util.*; public interface MessageService{ - void uploadMsg(UUID channelId, String uploaderName,String txtMsg); - void updateMsg(String editerName, Message message, String Msg); - Message findMessageByNum(UUID channelId,int num); + void createMsg(UUID channelId, String uploaderName, String txtMsg); // Create 새 메세지 생성 - void deleteMessage(String deleterName, Message message); - void printAllMessages(UUID channelId); - void printOneMessage(UUID channelId,int msgNum); - List getMessagesList(UUID channelId); // 사용자 전체 조회 + Message findMessageByNum(UUID channelId,int num); // Read 채널 내 단일 메세지 조회 + List getMessagesList(UUID channelId); // Read 채널 내 전체 메세지 조회 + + void updateMsg(UUID channelId, String editerName, Message message, String Msg); // Update 메세지 수정 + + void deleteMessage(UUID channelId, String deleterName, Message message); // Delete 단일 메세지 삭제 + + void printAllMessages(UUID channelId); // Read 채널 내 전체 메세지 포맷 출력 + void printOneMessage(UUID channelId,int msgNum); // Read 채널 내 단일 메세지 포맷 출력 } diff --git a/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/src/main/java/com/sprint/mission/discodeit/service/UserService.java index b850d938..583aacbc 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -6,14 +6,14 @@ public interface UserService { - User createUser(String name); // 새로운 유저 생성 - void updateUserName(User user,String name); // 기존 유저 수정 - void showAllUsers(); - List getUserslist(); // 유저 리스트 반환 + User createUser(String name); // Create 새로운 유저 생성 - User findUserByName(String name); // 이름으로 단일유저 찾기 - boolean deleteUser(String name); // 이름으로 유저 삭제 + void showAllUsers(); // Read 전체 유저리스트 읽기 + User findUserByName(String name); // Read 이름으로 단일유저 찾기 + void updateUserName(User user,String name); // Update 기존 유저 수정 -// User generateUser(String name); // 새로운 유저 생성 + void deleteUser(String name); // Delete 이름으로 유저 삭제 + + List getUserslist(); // 유저 리스트 반환 } 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 00000000..534d789e --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -0,0 +1,7 @@ +//package com.sprint.mission.discodeit.service.basic; +// +//import com.sprint.mission.discodeit.service.ChannelService; +// +//public class BasicChannelService implements ChannelService { +// +//} 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 00000000..54c800af --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -0,0 +1,35 @@ +//package com.sprint.mission.discodeit.service.basic; +// +//import com.sprint.mission.discodeit.entity.Message; +//import com.sprint.mission.discodeit.repository.MessageRepository; +//import com.sprint.mission.discodeit.repository.file.FileMessageRepository; +//import com.sprint.mission.discodeit.service.MessageService; +// +//import java.util.List; +//import java.util.Map; +//import java.util.UUID; +//import java.util.concurrent.ConcurrentHashMap; +// +//public class BasicMessageService implements MessageService { +// private Map> channelMsgBoard = new ConcurrentHashMap<>(); +// private final MessageRepository messageRepository; +// +// public BasicMessageService(MessageRepository messageRepository){ +// this.messageRepository = messageRepository; +// this.channelMsgBoard = messageRepository.loadMessageBoard(); +// } +// public BasicMessageService() { +// this.messageRepository = new FileMessageRepository(); +// this.channelMsgBoard = messageRepository.loadMessageBoard(); +// messageRepository.saveMessageBoard(channelMsgBoard); +// } +// public void saveMessageBoard(){ +// messageRepository.saveMessageBoard(channelMsgBoard); +// } +// public Map> getChannelMsgBoard() { +// return channelMsgBoard; +// } +// public void setChannelMsgBoard(Map> channelMsgBoard) { +// this.channelMsgBoard = channelMsgBoard; +// } +//} 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 00000000..48439d9e --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -0,0 +1,6 @@ +//package com.sprint.mission.discodeit.service.basic; +// +//import com.sprint.mission.discodeit.service.UserService; +// +//public class BasicUserService implements UserService { +//} 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 index 94ac1882..e3f31b5f 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java @@ -1,60 +1,23 @@ package com.sprint.mission.discodeit.service.file; import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.repository.ChannelRepository; +import com.sprint.mission.discodeit.repository.file.FileChannelRepository; import com.sprint.mission.discodeit.service.ChannelService; -import java.io.*; -import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; public class FileChannelService implements ChannelService { - // 초기 채널 입력 - private final List channels; - private static final String channelFileName = "src/files/channel.ser"; - - public FileChannelService(){ - this.channels = fileLoadChannels(); - if(channels.isEmpty()){ - channels.add(new Channel("ch01","default Channel","관리자",1744036548250L,1744036548250L)); - fileSaveChannels(); - } - - } - - // 파일 로드 메서드 - private List fileLoadChannels(){ - File file = new File(channelFileName); - if (!file.exists() || file.length() == 0) { - return new ArrayList<>(); - } - try (FileInputStream fis = new FileInputStream(channelFileName); - ObjectInputStream ois = new ObjectInputStream(fis)){ - return (List)ois.readObject(); - } catch (IOException | ClassNotFoundException e){ - e.printStackTrace(); - return new ArrayList<>(); - } - } - // 파일 세이브 메서드 - private void fileSaveChannels(){ - try(FileOutputStream fos = new FileOutputStream(channelFileName); - ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(channels); - System.out.println("파일생성 성공. ///channel.ser"); - } catch (IOException e){ - e.printStackTrace(); - System.out.println("파일생성에실패하였습니다. ///channel.ser"); - } - } + ChannelRepository channelRepository = new FileChannelRepository(); + private final List channels = channelRepository.getChannelsList(); // 채널 생성 메서드 @Override - public Channel addChannel(String channelName, String channelDesc, String createrName) { + public Channel createChannel(String channelName, String channelDesc, String createrName) { long now = System.currentTimeMillis(); Channel channel = new Channel(channelName,channelDesc,createrName,now,now); channels.add(channel); - fileSaveChannels(); + channelRepository.fileSaveChannels(); System.out.print("\n ▶ [새로운 채널 생성완료]"); System.out.println(" ▶ 채널명 : " + channel.getChannelName() + " ▶ 생성시간 : " + channel.getCreatedAt()); return channel; @@ -66,7 +29,7 @@ public void UpdateChannel(Channel channel, String channelName, String channelDes channel.setChannelName(channelName); channel.setChannelDescription(channelDescription); channel.setUpdatedAt(now); - fileSaveChannels(); + channelRepository.fileSaveChannels(); System.out.print("\n ▶ [채널 정보 수정 완료]"); System.out.println(channel); } @@ -74,7 +37,7 @@ public void UpdateChannel(Channel channel, String channelName, String channelDes @Override public void deleteChannel(Channel channel){ channels.remove(channel); - fileSaveChannels(); + channelRepository.fileSaveChannels(); } // 전체채널목록 출력 메서드 @Override 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 index 18f9d2b2..2fae52a7 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java @@ -1,108 +1,65 @@ package com.sprint.mission.discodeit.service.file; -import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.repository.MessageRepository; +import com.sprint.mission.discodeit.repository.file.FileMessageRepository; import com.sprint.mission.discodeit.service.MessageService; -import java.io.*; -import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; public class FileMessageService implements MessageService { - private static Map> channelMsgBoard = new ConcurrentHashMap<>(); - private static final String messageFileName = "src/files/message.ser"; - - public static void setDefaultBoard(Channel channel){ - channelMsgBoard.computeIfAbsent(channel.getId(), id -> { - List list = new ArrayList<>(); - list.add(new Message(1, "defaultUser", "defaultMessage", 1744036548250L, 1744036548250L)); - - try(FileOutputStream fos = new FileOutputStream(messageFileName); - ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(channelMsgBoard); - } catch (IOException e){ - e.printStackTrace(); - System.out.println("파일 생성에 실패하였습니다. ///message.ser"); - } - - return list; - }); - } - public FileMessageService() { - this.channelMsgBoard = fileLoadMessages(); - fileSaveMessages(); - } - // 파일 로드 메서드 - private Map> fileLoadMessages(){ - File file = new File(messageFileName); - if (!file.exists() || file.length() == 0) { - return new ConcurrentHashMap<>(); - } - try (FileInputStream fis = new FileInputStream(messageFileName); - ObjectInputStream ois = new ObjectInputStream(fis)){ - return (Map>)ois.readObject(); - } catch (IOException | ClassNotFoundException e){ - e.printStackTrace(); - - return new ConcurrentHashMap<>(); - } - } - // 파일 세이브 메서드 - private Map> fileSaveMessages(){ - try(FileOutputStream fos = new FileOutputStream(messageFileName); - ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(channelMsgBoard); - } catch (IOException e){ - e.printStackTrace(); - System.out.println("파일 생성에 실패하였습니다. ///message.ser"); - } - return channelMsgBoard; - } + MessageRepository messageRepository = new FileMessageRepository(); @Override - public void uploadMsg(UUID channelId,String uploaderName,String txtMsg){ - channelMsgBoard.putIfAbsent(channelId,new ArrayList<>()); - int msgNumber = channelMsgBoard.get(channelId).size() +1; + public void createMsg(UUID channelId, String uploaderName, String txtMsg){ + List messages = messageRepository.getMessages(channelId); long now = System.currentTimeMillis(); - Message message = new Message(msgNumber,uploaderName,txtMsg,now,now); - channelMsgBoard.get(channelId).add(message); - fileSaveMessages(); + int msgNumber = messages.size() + 1; + Message newMsg = new Message(msgNumber, uploaderName, txtMsg, now, now); + messages.add(newMsg); + messageRepository.saveMessages(channelId, messages); } @Override - public void updateMsg(String editerName, Message message,String newMsg) { + public List getMessagesList(UUID channelId){ + return messageRepository.getMessages(channelId); + } + + public void updateMsg(UUID channelId, String editerName, Message message,String newMsg) { String resetColor = "\u001B[0m"; String setColorYellow = "\u001B[33m"; message.setUpdatedAt(System.currentTimeMillis()); message.setTextMsg(newMsg + setColorYellow + " *** [" + editerName + "] 에 의해 수정됨" + resetColor); - fileSaveMessages(); + messageRepository.saveMessages(channelId, messageRepository.getMessages(channelId)); } - public void deleteMessage(String deleterName, Message message){ + @Override + public void deleteMessage(UUID channelId, String deleterName, Message message) { String resetColor = "\u001B[0m"; String setColorRed = "\u001B[31m"; message.setUpdatedAt(System.currentTimeMillis()); - message.setTextMsg(setColorRed + " - ////// " + deleterName + " 사용자에 의해 삭제됨 ////// -" +message.getUpdatedAt() + resetColor); - fileSaveMessages(); + message.setTextMsg(setColorRed + " - ////// " + deleterName + " 사용자에 의해 삭제됨 ////// - " + message.getUpdatedAt() + resetColor); + messageRepository.saveMessages(channelId, messageRepository.getMessages(channelId)); } - public Message findMessageByNum(UUID channelId,int num){ - for (Message message : channelMsgBoard.get(channelId)) { - if (message.getMsgNumber() == num) { - return message; // 일치하는 메세지 번호 발견시 message 리턴 - } - }return null; + + @Override + public Message findMessageByNum(UUID channelId, int msgNum){ + List messages = messageRepository.getMessages(channelId); + for (Message msg : messages) { + if (msg.getMsgNumber() == msgNum) return msg; + } + return null; } public void printAllMessages(UUID channelId) { - if(channelMsgBoard.get(channelId)!=null) { + List messages = messageRepository.getMessages(channelId); + if(messages!=null) { System.out.println("<< 입력된 전체 메세지 >>"); System.out.println("번호 | 사용자 : 메세지"); - channelMsgBoard.get(channelId).forEach(m -> System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", m.getMsgNumber(), m.getAuthor(), m.getTextMsg(), m.getCreatedAt(), m.getUpdatedAt(), m.getId())); + messages.forEach(m -> System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", m.getMsgNumber(), m.getAuthor(), m.getTextMsg(), m.getCreatedAt(), m.getUpdatedAt(), m.getId())); System.out.println(); } else { System.out.println("<<선택된 채널에 입력된 메세지 없음>>"); @@ -113,8 +70,4 @@ public void printOneMessage(UUID channelId,int msgNum){ Message message = findMessageByNum(channelId,msgNum); System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", message.getMsgNumber(),message.getAuthor(),message.getTextMsg(),message.getCreatedAt(),message.getUpdatedAt(),message.getId() ); } - public List getMessagesList(UUID channelId) { - return channelMsgBoard.get(channelId); - } - } 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 index 4ec3b64c..fe6d8820 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java @@ -1,44 +1,22 @@ package com.sprint.mission.discodeit.service.file; import com.sprint.mission.discodeit.entity.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.io.*; import java.util.*; public class FileUserService implements UserService { - private final List users; - private static final String userFileName = "src/files/user.ser"; + UserRepository userRepository = new FileUserRepository(); + private final List users = userRepository.getUserslist(); - public FileUserService() { - this.users = fileLoadUsers(); - } - // 파일 로드 메서드 - private List fileLoadUsers(){ - try (FileInputStream fis = new FileInputStream(userFileName); - ObjectInputStream ois = new ObjectInputStream(fis)){ - return (List)ois.readObject(); - } catch (IOException | ClassNotFoundException e){ - e.printStackTrace(); - return new ArrayList<>(); - } - } - // 파일 세이브 메서드 - private void fileSaveUsers(){ - try(FileOutputStream fos = new FileOutputStream(userFileName); - ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(users); - } catch (IOException e){ - e.printStackTrace(); - System.out.println("파일생성에실패하였습니다 ///user.ser"); - } - } @Override // 유저 생성 메서드 createUser() public User createUser(String name) { long now = System.currentTimeMillis(); User user = new User(name, now, now); users.add(user); - fileSaveUsers(); + userRepository.saveUsersList(); System.out.println("사용자의 이름을 [" + user.getName() + "] 으로 생성하였습니다. | " + user.getCreatedAt()); return user; } @@ -48,19 +26,14 @@ public void updateUserName(User user, String newName) { String oldName = user.getName(); user.setName(newName); user.setUpdatedAt(System.currentTimeMillis()); - fileSaveUsers(); + userRepository.saveUsersList(); System.out.println("[" + oldName + "] 사용자의 이름을 [" + user.getName() + "] 으로 변경하였습니다. | " + user.getUpdatedAt()); } @Override - public boolean deleteUser(String name) { + public void deleteUser(String name) { users.remove(findUserByName(name)); - fileSaveUsers(); - if(findUserByName(name)==null){ - return true; - } else{ - return false; - } + userRepository.saveUsersList(); } @Override diff --git a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java index 760ab592..3591f04c 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java @@ -1,21 +1,21 @@ package com.sprint.mission.discodeit.service.jcf; import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.repository.ChannelRepository; +import com.sprint.mission.discodeit.repository.jcf.JCFChannelRepository; import com.sprint.mission.discodeit.service.ChannelService; -import java.util.ArrayList; + import java.util.List; public class JCFChannelService implements ChannelService { + ChannelRepository channelRepository = new JCFChannelRepository(); // 초기 채널 입력 - private final List channels = new ArrayList<>(); - public JCFChannelService(){ - channels.add(new Channel("ch01","default Channel","관리자",1744036548250L,1744036548250L)); - } + private final List channels = channelRepository.getChannelsList(); // 채널 생성 메서드 @Override - public Channel addChannel(String channelName, String channelDesc, String createrName) { + public Channel createChannel(String channelName, String channelDesc, String createrName) { long now = System.currentTimeMillis(); Channel channel = new Channel(channelName,channelDesc,createrName,now,now); channels.add(channel); @@ -46,8 +46,6 @@ public void printAllChannels(){ channels.forEach(chan -> System.out.println(chan.getChannelName()+" | "+chan.getChannelCreater()+" | "+chan.getChannelDescription()+" ("+chan.getCreatedAt() + ")")); System.out.println(); } - - @Override // 이름으로 채널 검색 메서드. 채널객체를 return public Channel findChannelByName(String name){ for (Channel channel : channels) { diff --git a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java index d82b335c..5f5f49e6 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java @@ -1,77 +1,75 @@ package com.sprint.mission.discodeit.service.jcf; -import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.repository.MessageRepository; +import com.sprint.mission.discodeit.repository.jcf.JCFMessageRepository; import com.sprint.mission.discodeit.service.MessageService; -import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; public class JCFMessageService implements MessageService { - private static final Map> channelMsgBoard = new ConcurrentHashMap<>(); - - - public static void setDefaultBoard(Channel channel){ - channelMsgBoard.computeIfAbsent(channel.getId(), id -> { - List list = new ArrayList<>(); - list.add(new Message(1, "defaultUser", "defaultMessage", 1744036548250L, 1744036548250L)); - return list; - }); - } + static MessageRepository messageRepository = new JCFMessageRepository(); @Override - public void uploadMsg(UUID channelId,String uploaderName,String txtMsg){ - channelMsgBoard.putIfAbsent(channelId,new ArrayList<>()); - int msgNumber = channelMsgBoard.get(channelId).size() +1; + public void createMsg(UUID channelId, String uploaderName, String txtMsg){ + List messages = messageRepository.getMessages(channelId); + int msgCount = messages.size() + 1; long now = System.currentTimeMillis(); - Message message = new Message(msgNumber,uploaderName,txtMsg,now,now); - channelMsgBoard.get(channelId).add(message); + Message message = new Message(msgCount,uploaderName,txtMsg,now,now); + messages.add(message); + messageRepository.saveMessages(channelId, messages); } @Override - public void updateMsg(String editerName, Message message,String newMsg) { + public void updateMsg(UUID channelId, String editerName, Message message,String newMsg) { String resetColor = "\u001B[0m"; String setColorYellow = "\u001B[33m"; message.setUpdatedAt(System.currentTimeMillis()); message.setTextMsg(newMsg + setColorYellow + " *** [" + editerName + "] 에 의해 수정됨" + resetColor); } - public void deleteMessage(String deleterName, Message message){ + @Override + public void deleteMessage(UUID channelId, String deleterName, Message message) { String resetColor = "\u001B[0m"; String setColorRed = "\u001B[31m"; message.setUpdatedAt(System.currentTimeMillis()); message.setTextMsg(setColorRed + " - ////// " + deleterName + " 사용자에 의해 삭제됨 ////// -" +message.getUpdatedAt() + resetColor); } + + @Override public Message findMessageByNum(UUID channelId,int num){ - for (Message message : channelMsgBoard.get(channelId)) { + List messages = messageRepository.getMessages(channelId); + for (Message message : messages) { if (message.getMsgNumber() == num) { return message; // 일치하는 메세지 번호 발견시 message 리턴 } }return null; } - - + @Override public void printAllMessages(UUID channelId) { - if(channelMsgBoard.get(channelId)!=null) { + List messages = messageRepository.getMessages(channelId); + if(messages!=null) { System.out.println("<< 입력된 전체 메세지 >>"); System.out.println("번호 | 사용자 : 메세지"); - channelMsgBoard.get(channelId).forEach(m -> System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", m.getMsgNumber(), m.getAuthor(), m.getTextMsg(), m.getCreatedAt(), m.getUpdatedAt(), m.getId())); + messages.forEach(m -> System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", m.getMsgNumber(), m.getAuthor(), m.getTextMsg(), m.getCreatedAt(), m.getUpdatedAt(), m.getId())); System.out.println(); } else { System.out.println("<<선택된 채널에 입력된 메세지 없음>>"); } } + + @Override public void printOneMessage(UUID channelId,int msgNum){ Message message = findMessageByNum(channelId,msgNum); System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", message.getMsgNumber(),message.getAuthor(),message.getTextMsg(),message.getCreatedAt(),message.getUpdatedAt(),message.getId() ); } + + @Override public List getMessagesList(UUID channelId) { - return channelMsgBoard.get(channelId); + return messageRepository.getMessages(channelId); } } diff --git a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java index 9935bffb..d2b68574 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java @@ -1,18 +1,15 @@ package com.sprint.mission.discodeit.service.jcf; import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.repository.UserRepository; +import com.sprint.mission.discodeit.repository.jcf.JCFUserRepository; import com.sprint.mission.discodeit.service.UserService; import java.util.*; public class JCFUserService implements UserService { - private final List users = new ArrayList<>(); - // 테스트용 초기 더미 데이터 입력 - public JCFUserService() { - users.add(new User("희동이" , 1744036538250L , 1744036538250L)); - users.add(new User("고길동" , 1744036738250L , 1744071238250L)); - users.add(new User("도우너" , 1744036938250L , 1744036538250L)); - } + private final UserRepository userRepository = new JCFUserRepository(); + private final List users = userRepository.getUserslist(); @Override // 유저 생성 메서드 createUser() public User createUser(String name) { @@ -32,8 +29,8 @@ public void updateUserName(User user, String newName) { } @Override - public boolean deleteUser(String name) { - return users.removeIf(user -> user.getName().equals(name)); + public void deleteUser(String name) { + users.removeIf(user -> user.getName().equals(name)); } @Override From cb0ee2d4e032656e62185fd8277da4e82f97a1cc Mon Sep 17 00:00:00 2001 From: Leichtstar Date: Mon, 28 Apr 2025 18:47:20 +0900 Subject: [PATCH 06/10] =?UTF-8?q?-=20mission2=20=EB=AA=A8=EB=B2=94?= =?UTF-8?q?=EB=8B=B5=EC=95=88=20=ED=99=9C=EC=9A=A9=20-=20SpringBoot=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=ED=95=A8=20-=20@SpringBootApplicatin=20/=20@?= =?UTF-8?q?Service=20/=20@Repository=20=EC=96=B4=EB=85=B8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EC=9E=91=EC=84=B1=ED=95=A8=20-=20=20Confi?= =?UTF-8?q?gurableApplicationContext=20getBean=20=ED=99=9C=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EA=B0=81=20=EC=84=9C=EB=B9=84=EC=8A=A4=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=A0=81=EC=9A=A9=ED=95=A8=20-?= =?UTF-8?q?=20=EC=85=8B=EC=97=85,=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9D=B4=EC=9A=A9=ED=95=98=EC=97=AC=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 33 +++- .../0918aeb1-a422-48ca-bad1-fa46b1879405.ser | Bin 0 -> 534 bytes .../629a67c4-e92c-4e1c-bc92-fd33b3b760aa.ser | Bin 0 -> 542 bytes .../1d6f1678-81f2-4145-b14a-8438ee0b3d72.ser | Bin 0 -> 418 bytes .../237a2644-6507-4b85-b6a5-15d95bcccfde.ser | Bin 0 -> 418 bytes .../2e8aee6c-514f-4112-8892-dd5bafead43a.ser | Bin 0 -> 421 bytes .../24e56b17-af88-46db-946a-b162a6c56fa5.ser | Bin 0 -> 388 bytes .../2b5d7500-0bd9-41c1-8715-d2769b723104.ser | Bin 0 -> 387 bytes .../8d98ac08-cf67-4f4e-bb33-7ebc91c1f729.ser | Bin 0 -> 385 bytes settings.gradle | 3 +- src/files/channel.ser | Bin 675 -> 0 bytes ...e_0abd5c3a-679c-4aa6-8d65-dccf052e002e.ser | Bin 364 -> 0 bytes ...e_0af3e050-90fc-4bee-8752-1636bd87ddda.ser | Bin 859 -> 0 bytes src/files/user.ser | Bin 407 -> 0 bytes .../discodeit/DiscodeitApplication.java | 47 +++++ .../discodeit/FileJavaApplication.java | 124 ------------- .../mission/discodeit/JavaApplication.java | 123 ------------- .../discodeit/control/ChannelControl.java | 173 ------------------ .../discodeit/control/FileChannelControl.java | 173 ------------------ .../discodeit/control/FileMessageControl.java | 151 --------------- .../discodeit/control/FileUserControl.java | 142 -------------- .../discodeit/control/MessageControl.java | 143 --------------- .../discodeit/control/UserControl.java | 143 --------------- .../mission/discodeit/entity/Channel.java | 98 +++++----- .../mission/discodeit/entity/ChannelType.java | 6 + .../mission/discodeit/entity/Message.java | 95 +++++----- .../mission/discodeit/entity/ReadStatus.java | 12 ++ .../sprint/mission/discodeit/entity/User.java | 90 ++++++--- .../mission/discodeit/entity/UserStatus.java | 40 ++++ .../repository/ChannelRepository.java | 12 +- .../repository/MessageRepository.java | 10 +- .../discodeit/repository/UserRepository.java | 11 +- .../file/FileChannelRepository.java | 112 ++++++++---- .../file/FileMessageRepository.java | 110 +++++++---- .../repository/file/FileUserRepository.java | 105 ++++++++--- .../repository/jcf/JCFChannelRepository.java | 41 ++++- .../repository/jcf/JCFMessageRepository.java | 43 +++-- .../repository/jcf/JCFUserRepository.java | 43 +++-- .../discodeit/service/ChannelService.java | 17 +- .../discodeit/service/MessageService.java | 20 +- .../discodeit/service/UserService.java | 18 +- .../service/basic/BasicChannelService.java | 61 +++++- .../service/basic/BasicMessageService.java | 103 +++++++---- .../service/basic/BasicUserService.java | 60 +++++- .../service/file/FileChannelService.java | 61 ------ .../service/file/FileMessageService.java | 73 -------- .../service/file/FileUserService.java | 58 ------ .../service/jcf/JCFChannelService.java | 58 ------ .../service/jcf/JCFMessageService.java | 75 -------- .../discodeit/service/jcf/JCFUserService.java | 55 ------ src/main/resources/application.yaml | 0 .../discodeit/DiscodeitApplicationTests.java | 13 ++ 52 files changed, 864 insertions(+), 1891 deletions(-) create mode 100644 file-data-map/Channel/0918aeb1-a422-48ca-bad1-fa46b1879405.ser create mode 100644 file-data-map/Channel/629a67c4-e92c-4e1c-bc92-fd33b3b760aa.ser create mode 100644 file-data-map/Message/1d6f1678-81f2-4145-b14a-8438ee0b3d72.ser create mode 100644 file-data-map/Message/237a2644-6507-4b85-b6a5-15d95bcccfde.ser create mode 100644 file-data-map/Message/2e8aee6c-514f-4112-8892-dd5bafead43a.ser create mode 100644 file-data-map/User/24e56b17-af88-46db-946a-b162a6c56fa5.ser create mode 100644 file-data-map/User/2b5d7500-0bd9-41c1-8715-d2769b723104.ser create mode 100644 file-data-map/User/8d98ac08-cf67-4f4e-bb33-7ebc91c1f729.ser delete mode 100644 src/files/channel.ser delete mode 100644 src/files/message_0abd5c3a-679c-4aa6-8d65-dccf052e002e.ser delete mode 100644 src/files/message_0af3e050-90fc-4bee-8752-1636bd87ddda.ser delete mode 100644 src/files/user.ser create mode 100644 src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/JavaApplication.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/control/FileUserControl.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/control/MessageControl.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/control/UserControl.java create mode 100644 src/main/java/com/sprint/mission/discodeit/entity/ChannelType.java create mode 100644 src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java create mode 100644 src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java delete mode 100644 src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java create mode 100644 src/main/resources/application.yaml create mode 100644 src/test/java/com/sprint/mission/discodeit/DiscodeitApplicationTests.java diff --git a/build.gradle b/build.gradle index 668101a2..1c8b5c58 100644 --- a/build.gradle +++ b/build.gradle @@ -1,19 +1,36 @@ plugins { - id 'java' + id 'java' + id 'org.springframework.boot' version '3.4.4' + id 'io.spring.dependency-management' version '1.1.7' } group = 'com.sprint.mission' -version = '1.0-SNAPSHOT' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} repositories { - mavenCentral() + mavenCentral() } dependencies { - testImplementation platform('org.junit:junit-bom:5.10.0') - testImplementation 'org.junit.jupiter:junit-jupiter' + implementation 'org.springframework.boot:spring-boot-starter-web' + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } -test { - useJUnitPlatform() -} \ No newline at end of file +tasks.named('test') { + useJUnitPlatform() +} diff --git a/file-data-map/Channel/0918aeb1-a422-48ca-bad1-fa46b1879405.ser b/file-data-map/Channel/0918aeb1-a422-48ca-bad1-fa46b1879405.ser new file mode 100644 index 0000000000000000000000000000000000000000..053905d6469ebff6d9f4167f9e2fc1eebeb4aa00 GIT binary patch literal 534 zcmb7>yGjE=6o!wh351A>jW&vCDa@djRvHxziwH3fux5uivO7EOo|U8#3vZCZ6cMzs z3fKf8hzQ~nh>cI6g@u?{3#puOL)6k!&79l+{WG->hy^}O<~)}K(&qw+%Y%S>g4jIB zc{bxnm_Uw2lG?O{U{2+2rZs&#+GjxAghb9~7BYJd5eCdHYsaFFCGyntM1IzUq|Jhy z&n2pb2!p>GGN{CKi^1*AXo%dQ+3d=K%J&G%W!ta|hB{+WGK48pVbTbbwlQf3lSY`d zjk&Hy)S5&n?Fdls>MBU(woh{s%}KsFORwd}lZj^oy3!Eav7C?Hs?S`FO|<{#Eh zN0OD7k^xYVpklM%>_HfMzrJZ+?u|9;`;Gl_^WvaUI&PGzq@$xv5pC-Jy!-RaJ)i~{ zY3OyB6<~(v=Q##xNV;C4K$GeiRM>y4 TFN)BON>NcNm9^}=xssA!M1{L> literal 0 HcmV?d00001 diff --git a/file-data-map/Channel/629a67c4-e92c-4e1c-bc92-fd33b3b760aa.ser b/file-data-map/Channel/629a67c4-e92c-4e1c-bc92-fd33b3b760aa.ser new file mode 100644 index 0000000000000000000000000000000000000000..11847f50e553fdb13b9dd4d861d64c676e8f8bd1 GIT binary patch literal 542 zcmb7>ze~eF6vtnq7Nn&W=j!69MRDh+3TmLGaF$sH1PXyZ3$H`+V=t-(X1iFj;XOU3fm@s5?vu=5pO)qT*VV zp-wq6tm}(4lXGexJmo)Ty5kuQk_HS{d}<=K<`H4U*fh6IVw=2543}4D4Mn-1NA2554Pb&n!U8xoU5n52(MVoVZYl0N2| z9FaD|foDa4$}16iGHph2>WWkU=4?H*Z}%qdG)NR+Xxp>{8u~EuBPs^Y2K9H(564mm z_bm+|^gvcEn|nk^zg%7PI#;jF)85%mY_5{%D#`Wn!26N2Lp0C|khZBQu*9kh3`GG_ zjvMbn?|T0;-|4QOZJbnZo~MerAM49zui0++K>qPdD!zhLH7be!q+aHM6SbnIhmc$? RFBmI}LcLN_^=jEU`wL$by&C`k literal 0 HcmV?d00001 diff --git a/file-data-map/Message/1d6f1678-81f2-4145-b14a-8438ee0b3d72.ser b/file-data-map/Message/1d6f1678-81f2-4145-b14a-8438ee0b3d72.ser new file mode 100644 index 0000000000000000000000000000000000000000..d9136817707ccaf901617311181f57c5a5f9ca90 GIT binary patch literal 418 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ#~en=BzabwSF)$u=y}>B$k$BX(*e=IDopdb(KqFmNVkB>01EUuMYguAWX=+6gg8vh5NkJjwOG94wk?v)7prLepF literal 0 HcmV?d00001 diff --git a/file-data-map/Message/237a2644-6507-4b85-b6a5-15d95bcccfde.ser b/file-data-map/Message/237a2644-6507-4b85-b6a5-15d95bcccfde.ser new file mode 100644 index 0000000000000000000000000000000000000000..e5db5d2b6308f96865b215c961716292a92e37b3 GIT binary patch literal 418 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ#~en=BzabwSF)$u=y}>B$k$BX(*e=IDopdb(KqFmNVkBzuZ%>01EUuMYguAWX=+6gg8NOAl7bMDta^e%=vrDRcbD&?B1;f0Q3@<(EtDd literal 0 HcmV?d00001 diff --git a/file-data-map/Message/2e8aee6c-514f-4112-8892-dd5bafead43a.ser b/file-data-map/Message/2e8aee6c-514f-4112-8892-dd5bafead43a.ser new file mode 100644 index 0000000000000000000000000000000000000000..a1f809d64d67479be0ecdb3a357a244dd6aeaf48 GIT binary patch literal 421 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ#~en=BzabwSF)$u=y}>B$k$BX(*e=IDopdb(KqFmNVkBmujt7fDX0q;?^w)Uv_JmbQv(k^e)bW!kVGw?^ zY{ILJ8{W*?qVQ(!mN!%PyxOq=ZZF84dSG{UKbdf*U->>01EUuMYguAWX=+6gg8fU?b_Valie1c~*%r~UKMrj^fEVwaT#+Y)`kd$$YS!}uO z;+kQ4^G=*!-4+>w(GW@v&4^`m&0460Ez%}_MB=6&%DA}_g2x2mk%g&$qpEd`Y=}4= zUP>&F{90{$!}Z4$F{UFm-G>7}j*%$(!^j#17f75&Oa#jVsdDxc85(D3oTGd1r_U#| zuLueOcx@6TEY(o?3+*JL&h*jXY^L0Q>mh(tfjhgCVbM8tq@>-|-__l}3;~%Y&NLq{ zN4_q^p^pFsFdi{tY?U|HxitZlg&bC?>bD;1H&607#tufK+pgI zf<=@B2Lgjf;ZPt@{AetDB`HkC%*>nl-t@j8XEaRtkswBCE|Cas438uUxbdTaaU@J4 z$8FLyOfO!GI^fh{BxKZJgSX~6nmQCkG^i4_KmOD{)0OP>N({y4+535yKO{X5l+Wn@Rh zg7H&gSmgNr&ZgZLB+>dPR>2{h0J4lk1|vqc$XP*RV+g|OP>@QSekMcX42_5A=GW!h z#li=IoD2B|i4vMBDF2D73E!jYtlOF|U4J$aKq|r3{_OUTfnr3d@2&|f#?DzjoaO7? zP7K=o)Ioq;n2spXrpCezX0!_>9*?I~zEnodqr6!i7rZ|=W*`)<35Vj8kUou3oGg!K)gh9v$DE3BLQqvMsl~}fnFS?4YYQ3b7?^z+xS=wBiMgpzA*Rff5(WW?F(B{hhlYB(Sc5#m zI4wju?hK4BVc>kVrQ!9mHE-rkC}EI-v)@dgpzvnyjJH#_D7&!}$?C4w#UM8`fnB6#G#N$%UG{pz)HiKCZ{{p1VNib4wC44^iEpRQ zc-=Kc;mxcKKqtT2(C}vAMxZMdAZ`NcfJnSqJ`rptXM2#C+1~cMx41q(2$=B4`yIlj zME$sAkWC;OYSY{uueQ$tvLCm$LlDTk<_@TTL2l%1-c(xfh~r7&60`m5e;fN>M3|Sv z*jEZNFNtHJ8>)FiZ{|&W-9HoJ@>g5eyl$ES49nNuOI|O9g(cYR-qbtiS@jt7xc0_a KrO)wNRsjGXk`@2} diff --git a/src/files/message_0abd5c3a-679c-4aa6-8d65-dccf052e002e.ser b/src/files/message_0abd5c3a-679c-4aa6-8d65-dccf052e002e.ser deleted file mode 100644 index 0e1ca06f10157d6522e770d50ed0500d507503a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmYLEJxc>Y5S_ckNKhnbt*wP}2UdcO5epM8HX*faa?81z`*3$oFBYPxXklTYVk7}A zLC8$#jGjDkF-h23j0l{HxjcgLlM^@FcoRgZt1O|H_<=B$Wl~D z0hL4 zy;RCA#`qx801Lv}fE`FkyUImbd2UJN-x(ntw$7twr}x^3LyY_pn zVYo_(z#_927>Ya$+3w#Kc#pH;WM+Eo>wV?rbbWql24N!FKMrpi(N#OVKZ_1J(cNx% P+l`v-@cO9tbQ1gkMsb6^ diff --git a/src/files/message_0af3e050-90fc-4bee-8752-1636bd87ddda.ser b/src/files/message_0af3e050-90fc-4bee-8752-1636bd87ddda.ser deleted file mode 100644 index caaf649da97b15859f0123dc395c79ad6c0d63ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 859 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG z7}(2MKqOF;c5;5MUU5NDW?qS2Zf0?DW`3StN@j6#eoAU)iC$`6NoGlodqr6!i7rZ|>(GH~V=r~8%WCZ!eu#Y+oPAmTm@Y>A~M8Tmye3_?C2 zx9R63=B4WgmjEqGxAtLR%1kL?5P-;lT&*7(>gfU$XD>;uDDf>$FJ!1=UeKU8<>jmwvHuV&P>}P`5SUwGCJCwam z4kW<_mS&&P`K0+9-)^H*`$gh6Sv&tPVX%3a}>t|_nL)t?3~k$ zrT-buxp0F5W5SGAn-;uT-hgbtH8!9Dz<34)-!(QQ1EvUW{34(B>({lf_oDX5J8lK} zdTPt-?hc@%kqx+Y4`=`@#DH7(kPMicu%1<;>f63=a}7eQOk8K+3bvP^U<0}W=mHL* zJR}1qSNJLCtXLD`8-JJz>G?$?Gcs6MHnF diff --git a/src/files/user.ser b/src/files/user.ser deleted file mode 100644 index 938789bcca760e4f97ff3448342aead723e39c0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG z7?{ghKqOF;Msj|xUU5NDW?qS2Zf0?DW`3StN@j6#eoAU)iC$`6NoGlG*CK4RjPA!Y3dD_RM7dJ|nkPpNWCVi-9L6HL+S2fP*_t==CKMMk)G;uD zZBf}d8%Bdg**04T-u!(_l{2Sx<%Ew1yfcCNUT>KCX6}wx+vgzZQ{|ov)(4~^`Wi0& b@YlQ;>^j-9d~)?GH(RK_ww^b0mQ(-$@UoBZ diff --git a/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java b/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java new file mode 100644 index 00000000..f924a928 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java @@ -0,0 +1,47 @@ +package com.sprint.mission.discodeit; + +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.ChannelType; +import com.sprint.mission.discodeit.entity.Message; +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.ChannelService; +import com.sprint.mission.discodeit.service.MessageService; +import com.sprint.mission.discodeit.service.UserService; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; + +@SpringBootApplication +public class DiscodeitApplication { + static User setupUser(UserService userService) { + User user = userService.create("woody", "woody@codeit.com", "woody1234"); + return user; + } + + static Channel setupChannel(ChannelService channelService) { + Channel channel = channelService.create(ChannelType.PUBLIC, "공지", "공지 채널입니다."); + return channel; + } + + static void messageCreateTest(MessageService messageService, Channel channel, User author) { + Message message = messageService.create("안녕하세요.", channel.getId(), author.getId()); + System.out.println("메시지 생성: " + message.getId()); + } + + public static void main(String[] args) { + ConfigurableApplicationContext context = SpringApplication.run(DiscodeitApplication.class, args); + + // 서비스 초기화 + UserService userService = context.getBean(UserService.class); + ChannelService channelService = context.getBean(ChannelService.class); + MessageService messageService = context.getBean(MessageService.class); + // 셋업 + User user = setupUser(userService); + Channel channel = setupChannel(channelService); + // 테스트 + System.out.println("user = " + user); + System.out.println("channel = " + channel); + messageCreateTest(messageService, channel, user); + + } +} diff --git a/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java b/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java deleted file mode 100644 index 17e349e8..00000000 --- a/src/main/java/com/sprint/mission/discodeit/FileJavaApplication.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.sprint.mission.discodeit; - -import com.sprint.mission.discodeit.control.FileChannelControl; -import com.sprint.mission.discodeit.control.FileUserControl; -import com.sprint.mission.discodeit.control.FileMessageControl; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.file.FileChannelService; -import com.sprint.mission.discodeit.service.file.FileMessageService; -import com.sprint.mission.discodeit.service.file.FileUserService; - -import java.util.InputMismatchException; -import java.util.Scanner; - -public class FileJavaApplication { - public static final FileUserService fuserService = new FileUserService(); - public static final FileChannelService fchannelService = new FileChannelService(); - - public static final Scanner scanner = new Scanner(System.in); - - public static void main(String[] args) { - User currentUser; - // 0. intro 메세지 - System.out.println(" ▶ discodeit 메세지 서비스에 연결되었습니다."); - // 0_1. 초기 사용자 인증 - currentUser = FileUserControl.verifyUser(); - // 1. mainmenu 호출. - menuMain(currentUser); - - //// <<메뉴 트리>> - //// 메인메뉴 ┬ 1. 채널입장 (채널상 메세지 관리) || 메서드 : control.menuMessageMng() - //// │ ├ 1_1 메세지 작성 ok - //// │ ├ 1_2 전체 메세지 조회 ok - //// │ ├ 1_3 단건 메세지 조회 ok - //// │ ├ 1_4 메세지 수정 ok - //// │ ├ 1_5 메세지 삭제 ok - //// │ └ 1_6 다른 채널에 접속 ok - //// │ └ 1_7 현재 사용자 변경 ok - //// │ └ 1_8 상위메뉴로 ok - //// ├ 2. 채널 관리(신규,수정,삭제) || 메서드 : control.menuChannelMng() - //// │ ├ 2_1 신규 채널 개설 ok - //// │ ├ 2_2 개별 채널 정보 상세조회 ok - //// │ ├ 2_3 개별 채널 이름,설명 변경 ok - //// │ └ 2_4 개별 채널 삭제 ok - //// │ └ 2_5 전체 채널 정보 상세조회 ok - //// │ └ 2_6 상위메뉴로 ok - //// ├ 3. 사용자 관리(신규,수정,삭제) || 메서드 : control.menuUserMng() - //// │ ├ 3_1 신규 사용자 추가 ok - //// │ ├ 3_2 현재 사용자 변경 ok - //// │ ├ 3_3 사용자 삭제 ok - //// │ └ 3_4 단일 사용자 상세 조회 ok - //// │ └ 3_5 전체 사용자 목록 조회 ok - //// │ └ 3_6 현재 사용자 변경 ok - //// │ └ 3_7 상위메뉴로 ok - //// └ 4. 프로그램 종료 - } - - // ▽▽▽main메서드에서 사용되는 내부 메서드 - public static int scanInt(){ // 메뉴 선택시 int값 입력 필터링 메서드 - int inputNum = -1; - while (inputNum < 0 ){ - System.out.print(" >> "); - try { - inputNum = scanner.nextInt(); - scanner.nextLine(); // scanner 내부 개행문자 제거 - } catch (InputMismatchException e){ - System.out.println("숫자만 입력해 주세요"); - scanner.nextLine(); // scanner 내부 개행문자 제거 - } - } - return inputNum; -} - - public static User verifyUser(){ // 사용자명 입력 >> 없는 사용자 : 사용자 생성 / 있는 사용자 : 이름으로 확인, ID연결 - System.out.print(" ▶ 사용자명을 입력해 주세요 : "); - String username = scanner.nextLine(); - User user = fuserService.findUserByName(username); - if (user != null) { - System.out.println("[" + user.getName() + "] 님 환영합니다." + ", ID: " + user.getId()); - return user; - } else { - System.out.println("\n ▶ 존재하지 않는 사용자입니다. 신규 사용자로 등록합니다."); - User newUser = fuserService.createUser(username); - System.out.println("\n ▶ 환영합니다 [" + newUser.getName() + "] 님, 새로운 ID가 발급되였습니다. 신규 사용자 UUID : " + newUser.getId()); - return newUser; - } - } - - - public static void menuMain(User nowUser){ // 메인 메뉴 call 메서드. 각 세부 메뉴로 접근하기 위함. - Channel nowChannel = null; - while (true) { - System.out.println(" ▶ 원하는 메뉴를 선택해 주세요."); - System.out.println("**********************************************\n" - + "[1] 채널 입장 및 메세지 관리\n" - + "[2] 채널 관리 (신규, 수정, 삭제, 조회)\n" - + "[3] 사용자 관리 (신규, 수정, 삭제, 조회)\n" - + "[4] 종료\n" - + "**********************************************\n"); - int choice = scanInt(); // 숫자 입력 메서드 호출 - - switch (choice) { - case 1: // 채널 입장 : 메세지 관리 메서드 호출 - nowChannel = FileChannelControl.joinChannel(nowUser); - nowUser = FileMessageControl.menuMessageMng(nowUser,nowChannel); - break; - case 2: - FileChannelControl.menuChannelMng(nowUser); - break; - case 3: // 사용자 관리 : 사용자 관리 메서드 호출 - nowUser = FileUserControl.menuUserMng(nowUser); - break; - case 4: - System.out.println(" ▶ 프로그램을 종료합니다."); - break; - default: - System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); - } - if (choice == 4) { - break; - } - } - } -} diff --git a/src/main/java/com/sprint/mission/discodeit/JavaApplication.java b/src/main/java/com/sprint/mission/discodeit/JavaApplication.java deleted file mode 100644 index 10b7923c..00000000 --- a/src/main/java/com/sprint/mission/discodeit/JavaApplication.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.sprint.mission.discodeit; - -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.jcf.JCFChannelService; -import com.sprint.mission.discodeit.service.jcf.JCFMessageService; -import com.sprint.mission.discodeit.service.jcf.JCFUserService; -import com.sprint.mission.discodeit.control.ChannelControl; -import com.sprint.mission.discodeit.control.MessageControl; -import com.sprint.mission.discodeit.control.UserControl; - -import java.util.InputMismatchException; -import java.util.Scanner; - -public class JavaApplication { - public static final JCFUserService userService = new JCFUserService(); - public static final JCFMessageService messageService = new JCFMessageService(); - public static final JCFChannelService channelService = new JCFChannelService(); - - public static final Scanner scanner = new Scanner(System.in); - - public static void main(String[] args) { - User currentUser; - // 0. intro 메세지 - System.out.println(" ▶ discodeit 메세지 서비스에 연결되었습니다."); - // 0_1. 초기 사용자 인증 - currentUser = UserControl.verifyUser(); - // 1. mainmenu 호출. - menuMain(currentUser); - - //// <<메뉴 트리>> - //// 메인메뉴 ┬ 1. 채널입장 (채널상 메세지 관리) || 메서드 : control.menuMessageMng() - //// │ ├ 1_1 메세지 작성 ok - //// │ ├ 1_2 전체 메세지 조회 ok - //// │ ├ 1_3 단건 메세지 조회 ok - //// │ ├ 1_4 메세지 수정 ok - //// │ ├ 1_5 메세지 삭제 ok - //// │ └ 1_6 다른 채널에 접속 ok - //// │ └ 1_7 현재 사용자 변경 ok - //// │ └ 1_8 상위메뉴로 ok - //// ├ 2. 채널 관리(신규,수정,삭제) || 메서드 : control.menuChannelMng() - //// │ ├ 2_1 신규 채널 개설 ok - //// │ ├ 2_2 개별 채널 정보 상세조회 ok - //// │ ├ 2_3 개별 채널 이름,설명 변경 ok - //// │ └ 2_4 개별 채널 삭제 ok - //// │ └ 2_5 전체 채널 정보 상세조회 ok - //// │ └ 2_6 상위메뉴로 ok - //// ├ 3. 사용자 관리(신규,수정,삭제) || 메서드 : control.menuUserMng() - //// │ ├ 3_1 신규 사용자 추가 ok - //// │ ├ 3_2 현재 사용자 변경 ok - //// │ ├ 3_3 사용자 삭제 ok - //// │ └ 3_4 단일 사용자 상세 조회 ok - //// │ └ 3_5 전체 사용자 목록 조회 ok - //// │ └ 3_6 현재 사용자 변경 ok - //// │ └ 3_7 상위메뉴로 ok - //// └ 4. 프로그램 종료 - } - - // ▽▽▽main메서드에서 사용되는 내부 메서드 - public static int scanInt(){ // 메뉴 선택시 int값 입력 필터링 메서드 - System.out.print(" >> "); - int inputNum = -1; - try { - inputNum = scanner.nextInt(); - scanner.nextLine(); // scanner 내부 개행문자 제거 - } catch (InputMismatchException e){ - System.out.println("숫자만 입력해 주세요"); - scanner.nextLine(); // scanner 내부 개행문자 제거 - } - return inputNum; -} - - public static User verifyUser(){ // 사용자명 입력 >> 없는 사용자 : 사용자 생성 / 있는 사용자 : 이름으로 확인, ID연결 - System.out.print(" ▶ 사용자명을 입력해 주세요 : "); - String username = scanner.nextLine(); - User user = userService.findUserByName(username); - if (user != null) { - System.out.println("[" + user.getName() + "] 님 환영합니다." + ", ID: " + user.getId()); - return user; - } else { - System.out.println("\n ▶ 존재하지 않는 사용자입니다. 신규 사용자로 등록합니다."); - User newUser = userService.createUser(username); - System.out.println("\n ▶ 환영합니다 [" + newUser.getName() + "] 님, 새로운 ID가 발급되였습니다. 신규 사용자 UUID : " + newUser.getId()); - return newUser; - } - } - - - public static void menuMain(User nowUser){ // 메인 메뉴 call 메서드. 각 세부 메뉴로 접근하기 위함. - Channel nowChannel = null; - while (true) { - System.out.println(" ▶ 원하는 메뉴를 선택해 주세요."); - System.out.println("**********************************************\n" - + "[1] 채널 입장 및 메세지 관리\n" - + "[2] 채널 관리 (신규, 수정, 삭제, 조회)\n" - + "[3] 사용자 관리 (신규, 수정, 삭제, 조회)\n" - + "[4] 종료\n" - + "**********************************************\n"); - int choice = scanInt(); // 숫자 입력 메서드 호출 - - switch (choice) { - case 1: // 채널 입장 : 메세지 관리 메서드 호출 - nowChannel = ChannelControl.joinChannel(nowUser); - nowUser = MessageControl.menuMessageMng(nowUser,nowChannel); - break; - case 2: - ChannelControl.menuChannelMng(nowUser); - break; - case 3: // 사용자 관리 : 사용자 관리 메서드 호출 - nowUser = UserControl.menuUserMng(nowUser); - break; - case 4: - System.out.println(" ▶ 프로그램을 종료합니다."); - break; - default: - System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); - } - if (choice == 4) { - break; - } - } - } -} diff --git a/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java b/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java deleted file mode 100644 index f83983e5..00000000 --- a/src/main/java/com/sprint/mission/discodeit/control/ChannelControl.java +++ /dev/null @@ -1,173 +0,0 @@ -package com.sprint.mission.discodeit.control; - -import com.sprint.mission.discodeit.JavaApplication; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.User; - -public class ChannelControl extends JavaApplication { - - public static Channel joinChannel(User nowUser){ // 채널입장시 Channel 신규개설 판별 메서드. 있으면 있는 채널에 참가 / 없으면 없는채널 생성 - - System.out.print(" ▶ 채널명을 입력해 주세요 : "); - String chanName = scanner.nextLine(); - Channel channel = channelService.findChannelByName(chanName); - - - if (channel != null) { - System.out.println("[" + channel.getChannelName() + "] 에 접속합니다." + ", 채널 ID: " + channel.getId()); - - return channel; - } else { - System.out.println("\n ▶ 존재하지 않는 채널입니다. 새로운 채널을 개설합니다."); - System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); - String chanDesc = scanner.nextLine(); - - Channel newChannel = channelService.createChannel(chanName,chanDesc,nowUser.getName()); - System.out.println(" ▶ [" + newChannel.getChannelName() + "] 채널에 접속합니다." + " 채널 ID: " + newChannel.getId()); - - return newChannel; - } - } - public static void menuChannelMng(User currentUser){ // 2. 채널 관리 메서드 - while (true) { - System.out.println(" *******************************************************\n" - + " || 채널 관리 메뉴입니다. 원하는 기능을 선택하세요. ||\n" - + " || 1 > 신규 채널 생성 ||\n" - + " || 2 > 개별 채널 정보 상세조회 ||\n" - + " || 3 > 개별 채널 이름,설명 변경 ||\n" - + " || 4 > 개별 채널 삭제 ||\n" - + " || 5 > 전체 채널 정보 상세조회 ||\n" - + " || 6 > 상위 메뉴로 돌아가기 ||\n" - + " *******************************************************\n"); - int choice = scanInt(); // 숫자 입력 필터링 메서드 호출 - - switch (choice) { - case 1: // 2_1 신규 채널 생성, 채널설명 추가 - System.out.println(" ▶ 새로운 채널을 개설합니다."); - - while(true) { - System.out.print(" ▶ 채널명을 입력해 주세요 : "); - String chanName = scanner.nextLine(); - Channel channel = channelService.findChannelByName(chanName); - - if (channel == null) { - System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); - String chanDesc = scanner.nextLine(); - Channel newChan = channelService.createChannel(chanName, chanDesc, currentUser.getName()); - - System.out.println("\n ▶ "+newChan.getChannelName()+" 채널 생성에 성공하였습니다."); - - break; - } else { - System.out.println("\n ▶ 이미 존재하는 채널입니다. 다른 이름을 입력해주세요."); - } - } - break; - case 2: // 2_2 채널 이름으로 검색하여 개별 채널 조회 - System.out.print(" ▶ 조회할 채널의 이름을 입력해 주세요.\n >> "); - String chnName = scanner.nextLine(); - Channel toPrintChannel = channelService.findChannelByName(chnName); - - if (toPrintChannel != null) { - System.out.println(toPrintChannel); - break; - }else{ - System.out.println("존재하지 않는 채널명입니다. 다시 입력해 주세요"); - } - break; - case 3: // 2_3 채널 이름으로 검색하여 해당 채널 이름,설명 변경 - System.out.println("\n ▶ 채널 이름을 변경합니다. 현재 개설된 채널은 아래와 같습니다. \n"); - channelService.printAllChannels(); - - while(true) { - String newName; - String newDesc; - - System.out.print(" ▶ 변경할 채널의 이름을 선택해 주세요.\n >> "); - String fndChnName = scanner.nextLine(); - Channel toRenameChannel = channelService.findChannelByName(fndChnName); - - if (toRenameChannel != null) { - System.out.println(" ▶ 선택하신 채널은 ["+toRenameChannel.getChannelName()+"] 입니다"); - System.out.println(" ▶ 변경할 이름을 입력해 주세요."); - - while(true) { - System.out.print(" >> "); - newName = scanner.nextLine(); - - if(channelService.findChannelByName(newName) == null){ - if (!newName.isEmpty()) { - toRenameChannel.setChannelName(newName); - - break; - } else { - System.out.println(" ▶ 잘못된 입력입니다. 다시 입력해 주세요."); - } - } else { - System.out.println(" ▶ 이미 존재하는 채널명입니다. 다시 입력해 주세요."); - } - } - - System.out.print(" ▶ 변경할 채널의 설명을 입력해 주세요.\n >> "); - newDesc = scanner.nextLine(); - - if (newDesc.isEmpty()) { - channelService.UpdateChannel(toRenameChannel,newName,"-"); - System.out.println(" ▶ 채널 설명을 공백으로 설정했습니다."); - break; - }else{ - channelService.UpdateChannel(toRenameChannel,newName,newDesc); - System.out.println(" ▶ 채널정보 수정에 성공했습니다."); - break; - } - }else{ - System.out.println("존재하지 않는 채널명입니다. 다시 입력해 주세요"); - } - } - break; - case 4: // 2_4 개별 채널 삭제 - System.out.println(" ▶ 현재 개설된 채널은 아래와 같습니다."); - channelService.printAllChannels(); - - System.out.println(" ▶ 삭제할 채널의 이름을 입력해 주세요.\n >> "); - String fndChnName = scanner.nextLine(); - Channel toDeleteChannel = channelService.findChannelByName(fndChnName); - - if (toDeleteChannel != null) { - System.out.println(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); - String deleteConfirm = scanner.nextLine(); - - if (deleteConfirm.isEmpty()) { - System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); - break; - - }else if(deleteConfirm.equals("삭제")) { - channelService.deleteChannel(toDeleteChannel); - - System.out.println(" ▶ [" + fndChnName+ "]채널이 삭제되었습니다."); - }else{ - System.out.println(" ▶ 잘못된 입력입니다. 채널 삭제를 취소합니다."); - } - } else { - System.out.println(" ▶ 잘못된 입력입니다. 채널 삭제를 취소합니다."); - } - - - break; - case 5: // 2_5 개별 채널 정보 상세조회 - channelService.printAllChannels(); - break; - case 6: // 2_6 상위메뉴 복귀 - break; - default: // 세부메뉴 입력예외처리 - System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); - } - if (choice == 6) { - break; - } - } - - - } // 2. 채널 관리 메서드 - -} diff --git a/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java b/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java deleted file mode 100644 index a1f52b74..00000000 --- a/src/main/java/com/sprint/mission/discodeit/control/FileChannelControl.java +++ /dev/null @@ -1,173 +0,0 @@ -package com.sprint.mission.discodeit.control; - -import com.sprint.mission.discodeit.FileJavaApplication; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.User; - -public class FileChannelControl extends FileJavaApplication { - - public static Channel joinChannel(User nowUser){ // 채널입장시 Channel 신규개설 판별 메서드. 있으면 있는 채널에 참가 / 없으면 없는채널 생성 - - System.out.print(" ▶ 채널명을 입력해 주세요 : "); - String chanName = scanner.nextLine(); - Channel channel = fchannelService.findChannelByName(chanName); - - - if (channel != null) { - System.out.println("[" + channel.getChannelName() + "] 에 접속합니다." + ", 채널 ID: " + channel.getId()); - - return channel; - } else { - System.out.println("\n ▶ 존재하지 않는 채널입니다. 새로운 채널을 개설합니다."); - System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); - String chanDesc = scanner.nextLine(); - - Channel newChannel = fchannelService.createChannel(chanName,chanDesc,nowUser.getName()); - System.out.println(" ▶ [" + newChannel.getChannelName() + "] 채널에 접속합니다." + " 채널 ID: " + newChannel.getId()); - - return newChannel; - } - } - public static void menuChannelMng(User currentUser){ // 2. 채널 관리 메서드 - while (true) { - System.out.println(" *******************************************************\n" - + " || 채널 관리 메뉴입니다. 원하는 기능을 선택하세요. ||\n" - + " || 1 > 신규 채널 생성 ||\n" - + " || 2 > 개별 채널 정보 상세조회 ||\n" - + " || 3 > 개별 채널 이름,설명 변경 ||\n" - + " || 4 > 개별 채널 삭제 ||\n" - + " || 5 > 전체 채널 정보 상세조회 ||\n" - + " || 6 > 상위 메뉴로 돌아가기 ||\n" - + " *******************************************************\n"); - int choice = scanInt(); // 숫자 입력 필터링 메서드 호출 - - switch (choice) { - case 1: // 2_1 신규 채널 생성, 채널설명 추가 - System.out.println(" ▶ 새로운 채널을 개설합니다."); - - while(true) { - System.out.print(" ▶ 채널명을 입력해 주세요 : "); - String chanName = scanner.nextLine(); - Channel channel = fchannelService.findChannelByName(chanName); - - if (channel == null) { - System.out.println("\n ▶ 새로운 채널의 설명을 입력해주세요."); - String chanDesc = scanner.nextLine(); - Channel newChan = fchannelService.createChannel(chanName, chanDesc, currentUser.getName()); - - System.out.println("\n ▶ "+newChan.getChannelName()+" 채널 생성에 성공하였습니다."); - - break; - } else { - System.out.println("\n ▶ 이미 존재하는 채널입니다. 다른 이름을 입력해주세요."); - } - } - break; - case 2: // 2_2 채널 이름으로 검색하여 개별 채널 조회 - System.out.print(" ▶ 조회할 채널의 이름을 입력해 주세요.\n >> "); - String chnName = scanner.nextLine(); - Channel toPrintChannel = fchannelService.findChannelByName(chnName); - - if (toPrintChannel != null) { - System.out.println(toPrintChannel); - break; - }else{ - System.out.println("존재하지 않는 채널명입니다. 다시 입력해 주세요"); - } - break; - case 3: // 2_3 채널 이름으로 검색하여 해당 채널 이름,설명 변경 - System.out.println("\n ▶ 채널 이름을 변경합니다. 현재 개설된 채널은 아래와 같습니다. \n"); - fchannelService.printAllChannels(); - - while(true) { - String newName; - String newDesc; - - System.out.print(" ▶ 변경할 채널의 이름을 선택해 주세요.\n >> "); - String fndChnName = scanner.nextLine(); - Channel toRenameChannel = fchannelService.findChannelByName(fndChnName); - - if (toRenameChannel != null) { - System.out.println(" ▶ 선택하신 채널은 ["+toRenameChannel.getChannelName()+"] 입니다"); - System.out.println(" ▶ 변경할 이름을 입력해 주세요."); - - while(true) { - System.out.print(" >> "); - newName = scanner.nextLine(); - - if(fchannelService.findChannelByName(newName) == null){ - if (!newName.isEmpty()) { - toRenameChannel.setChannelName(newName); - - break; - } else { - System.out.println(" ▶ 잘못된 입력입니다. 다시 입력해 주세요."); - } - } else { - System.out.println(" ▶ 이미 존재하는 채널명입니다. 다시 입력해 주세요."); - } - } - - System.out.print(" ▶ 변경할 채널의 설명을 입력해 주세요.\n >> "); - newDesc = scanner.nextLine(); - - if (newDesc.isEmpty()) { - fchannelService.UpdateChannel(toRenameChannel,newName,"-"); - System.out.println(" ▶ 채널 설명을 공백으로 설정했습니다."); - break; - }else{ - fchannelService.UpdateChannel(toRenameChannel,newName,newDesc); - System.out.println(" ▶ 채널정보 수정에 성공했습니다."); - break; - } - }else{ - System.out.println("존재하지 않는 채널명입니다. 다시 입력해 주세요"); - } - } - break; - case 4: // 2_4 개별 채널 삭제 - System.out.println(" ▶ 현재 개설된 채널은 아래와 같습니다."); - fchannelService.printAllChannels(); - - System.out.print(" ▶ 삭제할 채널의 이름을 입력해 주세요.\n >> "); - String fndChnName = scanner.nextLine(); - Channel toDeleteChannel = fchannelService.findChannelByName(fndChnName); - - if (toDeleteChannel != null) { - System.out.print(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); - String deleteConfirm = scanner.nextLine(); - - if (deleteConfirm.isEmpty()) { - System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); - break; - - }else if(deleteConfirm.equals("삭제")) { - fchannelService.deleteChannel(toDeleteChannel); - - System.out.println(" ▶ [" + fndChnName+ "]채널이 삭제되었습니다."); - }else{ - System.out.println(" ▶ 잘못된 입력입니다. 채널 삭제를 취소합니다."); - } - } else { - System.out.println(" ▶ 잘못된 입력입니다. 채널 삭제를 취소합니다."); - } - - - break; - case 5: // 2_5 개별 채널 정보 상세조회 - fchannelService.printAllChannels(); - break; - case 6: // 2_6 상위메뉴 복귀 - break; - default: // 세부메뉴 입력예외처리 - System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); - } - if (choice == 6) { - break; - } - } - - - } // 2. 채널 관리 메서드 - -} diff --git a/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java b/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java deleted file mode 100644 index 2cd3cb9a..00000000 --- a/src/main/java/com/sprint/mission/discodeit/control/FileMessageControl.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.sprint.mission.discodeit.control; - -import com.sprint.mission.discodeit.FileJavaApplication; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.Message; -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.service.file.FileMessageService; - -import java.util.List; -import java.util.UUID; - -public class FileMessageControl extends FileJavaApplication { - public static final FileMessageService messageService = new FileMessageService(); - public static User menuMessageMng(User currentUser, Channel currentChannel){ // 1 메세지 관리 메서드 - - while (true) { - System.out.println(" *******************************************************\n" - + " || ["+currentChannel.getChannelName()+"] 채널에 입장했습니다.\n" - + " || 원하는 기능을 선택하세요. ||\n" - + " || 1 > 신규 메세지 작성 ||\n" - + " || 2 > 전체 메세지 조회 ||\n" - + " || 3 > 단건 메세지 조회 ||\n" - + " || 4 > 메세지 수정 ||\n" - + " || 5 > 메세지 삭제 ||\n" - + " || 6 > 다른 채널에 접속 ||\n" - + " || 7 > 현재 사용자 변경 ||\n" - + " || 8 > 상위 메뉴로 돌아가기 ||\n" - + " *******************************************************\n"); - int choice = scanInt(); // 숫자 입력 필터링 메서드 호출 - int inputMsgNum; - Message currentMsg; - UUID channelId = currentChannel.getId(); - List messages = messageService.getMessagesList(channelId); - System.out.println(messages); - switch (choice) { - case 1: // 1_1 메세지 작성 - System.out.print(" ▶ 새로운 대화를 시작합니다. 대화를 종료하려면 빈 값을 입력해주세요.\n"); - while (true){ //대화메세지를 연속으로 입력받도록 루프 - - int msgDisplaySize = 5; // 메세지 입력시 상단에 표시될 최근 메세지 수 (1 이상으로 할 것) - displayLatestMessages(msgDisplaySize, messages); - - System.out.print(" >> "); - String txtMsg = scanner.nextLine(); - if (!txtMsg.isEmpty()) { - - messageService.createMsg(channelId, currentUser.getName(), txtMsg); - } else { - System.out.println(" ▶ 메세지 입력을 종료합니다"); - break; - } - } - break; - - case 2: //1_2 전체 메세지 조회 - System.out.println(" ▶ 채널에 등록된 모든 메세지를 조회합니다.\n "); - messageService.printAllMessages(channelId); - break; - case 3: //1_3 단건 메세지 조회 - System.out.println(" ▶ 조회할 메세지의 번호를 입력해 주세요"); - inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 - if(inputMsgNum <= messages.size()) { - System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); - System.out.println("번호 | 사용자 : 메세지 ( 생성시각 / 수정시각 )"); - messageService.printOneMessage(channelId,inputMsgNum); - break; - } - System.out.println(" ▶ 잘못된 입력입니다. 상위메뉴로 돌아갑니다."); - - break; - case 4: // 1_4 메세지 수정 - System.out.println(" ▶ 현재 등록된 메세지는 아래와 같습니다."); - messageService.printAllMessages(channelId); - System.out.println(" ▶ 수정할 메세지의 번호를 입력해 주세요"); - inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 - if(inputMsgNum <= messages.size()) { - currentMsg = messageService.findMessageByNum(channelId,inputMsgNum); - System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); - System.out.println(currentMsg.getTextMsg()); - - System.out.print("수정할 새로운 메세지를 입력해 주세요.\n >> "); - String newMessage = scanner.nextLine(); - messageService.updateMsg(currentChannel.getId(),currentUser.getName(),currentMsg, newMessage); - System.out.println("기존 내용을 [" + currentMsg.getTextMsg() + "] 로 수정하였습니다."); - break; - } - System.out.println(" ▶ 잘못된 입력입니다. 상위메뉴로 돌아갑니다."); - break; - case 5: // 1_5 메세지 삭제 - System.out.println(" ▶ 현재 등록된 메세지는 아래와 같습니다."); - messageService.printAllMessages(channelId); - System.out.println(" ▶ 삭제할 메세지의 번호를 입력해 주세요"); - inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 - currentMsg = messageService.findMessageByNum(channelId,inputMsgNum); - System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); - System.out.println(currentMsg.getTextMsg()); - - System.out.print(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); - String deleteConfirm = scanner.nextLine(); - if (deleteConfirm.isEmpty()) { - System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); - break; - } else if (deleteConfirm.equals("삭제")) { - messageService.deleteMessage(currentChannel.getId(), currentUser.getName(), currentMsg); - System.out.println("메세지가 삭제되었습니다."); - } else { - System.out.println(" ▶ 잘못된 입력입니다. 사용자 삭제를 취소합니다."); - } - break; - case 6: // 1_6 현재 채널 변경 - currentChannel = ChannelControl.joinChannel(currentUser); - break; - case 7: // 1_7 현재 사용자 변경 - System.out.print(" ▶ 어떤 사용자로 로그인할까요?"); - String username = scanner.nextLine(); - User user = fuserService.findUserByName(username); - if (user != null) { - System.out.println("[" + user.getName() + "] 사용자로 진행합니다." + ", ID: " + user.getId()); - currentUser = user; - } else { - System.out.println("\n ▶ 존재하지 않는 사용자입니다. 기존 사용자[" + currentUser.getName() + "]로 진행합니다.\n 현재 사용가능한 사용자는 아래와 같습니다."); - fuserService.getUserslist().forEach(u -> System.out.print(u.getName()+ " , ")); - System.out.println(); - } - break; - case 8: // 1_8 상위메뉴로 이동 - break; - default: // 세부메뉴 입력예외처리 - System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); - } - if (choice == 8) { - break; - } - } - return currentUser; - } // 1 메세지 관리 메서드 - private static void displayLatestMessages(int num, List messages){ - int msgDisplaySize; - if((messages.size()) < 5){ - msgDisplaySize=0; - } else { - msgDisplaySize = messages.size() - 5 - ; - } - System.out.println("번호 | 사용자명 : 메세지(생성일/수정일)"); - for (int i = msgDisplaySize ; i < messages.size(); i++) { - System.out.println(messages.get(i)); - } - } -} - diff --git a/src/main/java/com/sprint/mission/discodeit/control/FileUserControl.java b/src/main/java/com/sprint/mission/discodeit/control/FileUserControl.java deleted file mode 100644 index 1175f56b..00000000 --- a/src/main/java/com/sprint/mission/discodeit/control/FileUserControl.java +++ /dev/null @@ -1,142 +0,0 @@ -package com.sprint.mission.discodeit.control; - -import com.sprint.mission.discodeit.FileJavaApplication; -import com.sprint.mission.discodeit.entity.User; - -public class FileUserControl extends FileJavaApplication { - - // 어플리케이션 최초 실행시 User 신규여부 판별 메서드. 있으면 있는 유저로 로그인 / 없으면 새 유저 생성 -// 1_3 사용자 관리 세부메뉴 메서드 - public static User menuUserMng(User currentUser){ // 1_4 사용자 관리 내부메뉴 메서드 - while (true) { - System.out.println(" *******************************************************\n" - + " || 사용자 관리 메뉴입니다. 원하는 기능을 선택하세요. ||\n" - + " || 1 > 신규 사용자 생성 ||\n" - + " || 2 > 현재 사용자 이름 변경 ||\n" - + " || 3 > 사용자 삭제 ||\n" - + " || 4 > 단일 사용자 상세조회 ||\n" - + " || 5 > 전체 사용자 상세조회 ||\n" - + " || 6 > 다른 사용자로 진행 ||\n" - + " || 7 > 상위 메뉴로 돌아가기 ||\n" - + " *******************************************************\n"); - int choice = scanInt(); - - switch (choice) { - case 1: // 1_4_1 신규 사용자 생성 메뉴 - System.out.println(" ▶ 새로운 사용자를 생성합니다."); - while (true) { - System.out.print(" ▶ 원하는 사용자명을 입력해 주세요 : "); - String username = scanner.nextLine(); - if (username.isEmpty()) { // 입력값이 없는경우 상위 메뉴로 이동 - System.out.println(" ▶ 입력값이 없습니다. 사용자 생성을 취소합니다.\n"); - break; - } - User user = fuserService.findUserByName(username); - if (user == null) { // 중복 유저명 체크하여 중복유저가 없는경우 사용자 생성 - User newUser = fuserService.createUser(username); - System.out.println(" ▶ 사용자 생성에 성공했습니다."); - System.out.println(" ▶ 사용자명 : " + newUser.getName() + " SSID : " + newUser.getId() + "\n"); - - // 새로 생성한 사용자로 currentUser 변경여부 체크 - System.out.println(" ▶ 새로운 사용자로 로그인하시겠습니까? Y/N"); - String newUserChange = scanner.nextLine(); - if (newUserChange.equals("y") || newUserChange.equals("Y")) { - currentUser = newUser; - System.out.println("\n ▶ [" + currentUser.getName() + "] 사용자로 로그인 했습니다."); - } - - System.out.println(" ▶ 기존 사용자 [" + currentUser.getName() + "]로 계속합니다."); - break; - } else { // user.name 중복값 확인시 while문 재시작 - System.out.println(" ▶ 이미 존재하는 사용자명입니다. 다른 이름을 입력해 주세요.\n"); - } - } - break; - - case 2: - while (true){ // 1_4_2 사용자 이름 변경 메뉴 - System.out.println("\n ▶ 사용자 이름을 변경합니다. * 현재 사용자 이름 : [" + currentUser.getName() + "]"); - System.out.print(" ▶ 변경할 사용자 이름을 입력해 주세요 \n >> "); - String newName = scanner.nextLine(); - if(newName.isEmpty()) {// 사용자 이름 입력값이 없는경우 상위메뉴로 이동 - System.out.println(" ▶ 새 이름을 입력하지 않았습니다. 사용자 이름 변경을 취소합니다."); - break; - } - User user = fuserService.findUserByName(newName); - if(user != null){ // 중복값 존재시 재입력 - System.out.print(" ▶ 이미 존재하는 이름입니다. 다시 입력해 주세요.\n >> "); - } else { // 중복값 미확인시 유저명 변경 - fuserService.updateUserName(currentUser, newName); - break; - } - } - break; - case 3: // 1_4_3 사용자 삭제 메뉴 - System.out.println(" ▶ 삭제할 사용자의 이름을 입력해 주세요"); - System.out.println(" ▶ 현재 등록된 사용자는 아래와 같습니다."); - fuserService.showAllUsers(); - System.out.print(" >> "); - String deleteUser = scanner.nextLine(); - if ((deleteUser.isEmpty()) || (fuserService.findUserByName(deleteUser) == null)) { - System.out.println(" ▶ 존재하지 않는 사용자이거나 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); - } else if (deleteUser.equals(currentUser.getName())){ - System.out.println(" ▶ 현재 로그인된 사용자는 삭제할 수 없습니다! 이전 메뉴로 돌아갑니다."); - break; - } else { - System.out.println(" ▶ 입력하신 사용자는 아래와 같습니다."); - User userToDel = fuserService.findUserByName(deleteUser); - System.out.println(userToDel); - System.out.println(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); - String deleteConfirm = scanner.nextLine(); - if (deleteConfirm.isEmpty()) { - System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); - break; - } else if (deleteConfirm.equals("삭제")) { - fuserService.deleteUser(deleteUser); - System.out.println("[" + deleteUser + "] 사용자가 삭제되었습니다."); - } else { - System.out.println(" ▶ 잘못된 입력입니다. 사용자 삭제를 취소합니다."); - } - } - break; - case 4: // 1_4_4 단일 사용자 정보 출력 메뉴 - System.out.print(" ▶ 조회할 사용자의 이름을 입력해 주세요.\n >> "); - String oneUser = scanner.nextLine(); - if ((oneUser.isEmpty()) || (fuserService.findUserByName(oneUser) == null)) { - System.out.println(" ▶ 존재하지 않는 사용자이거나 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); - } else { - System.out.println(" ▶ 입력하신 사용자는 아래와 같습니다."); - User userToRead = fuserService.findUserByName(oneUser); - System.out.println(userToRead); - } - break; - case 5: // 1_4_5 모든 사용자 정보 출력 메뉴 - System.out.println(" ▶ 모든 사용자 정보를 출력합니다."); - fuserService.showAllUsers(); - break; - case 6: // 1_4_6 다른 사용자로 진행 - System.out.print(" ▶ 어떤 사용자로 로그인할까요?"); - String username = scanner.nextLine(); - User user = fuserService.findUserByName(username); - if (user != null) { - System.out.println("[" + user.getName() + "] 사용자로 진행합니다." + ", ID: " + user.getId()); - currentUser = user; - } else { - System.out.println("\n ▶ 존재하지 않는 사용자입니다. 기존 사용자[" + currentUser.getName() + "]로 진행합니다.\n 현재 사용가능한 사용자는 아래와 같습니다."); - fuserService.getUserslist().forEach(u -> System.out.print(u.getName()+ " , ")); - System.out.println(); - } - break; - case 7: // 1_4_7 상위메뉴 복귀 - break; - default: // 1_4 세부메뉴 입력예외처리 - System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); - } - if (choice == 7) { - break; - } - } - - return currentUser; - } // 1_3 사용자 관리 세부메뉴 메서드 -} diff --git a/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java b/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java deleted file mode 100644 index 295f1efc..00000000 --- a/src/main/java/com/sprint/mission/discodeit/control/MessageControl.java +++ /dev/null @@ -1,143 +0,0 @@ -package com.sprint.mission.discodeit.control; - -import com.sprint.mission.discodeit.JavaApplication; -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.entity.Message; -import com.sprint.mission.discodeit.entity.User; - -import java.util.List; -import java.util.UUID; - -public class MessageControl extends JavaApplication { - public static User menuMessageMng(User currentUser, Channel currentChannel){ // 1 메세지 관리 메서드 - - while (true) { - System.out.println(" *******************************************************\n" - + " || ["+currentChannel.getChannelName()+"] 채널에 입장했습니다.\n" - + " || 원하는 기능을 선택하세요. ||\n" - + " || 1 > 신규 메세지 작성 ||\n" - + " || 2 > 전체 메세지 조회 ||\n" - + " || 3 > 단건 메세지 조회 ||\n" - + " || 4 > 메세지 수정 ||\n" - + " || 5 > 메세지 삭제 ||\n" - + " || 6 > 다른 채널에 접속 ||\n" - + " || 7 > 현재 사용자 변경 ||\n" - + " || 8 > 상위 메뉴로 돌아가기 ||\n" - + " *******************************************************\n"); - int choice = scanInt(); // 숫자 입력 필터링 메서드 호출 - int inputMsgNum; - Message currentMsg; - UUID channelId = currentChannel.getId(); - List messages = messageService.getMessagesList(channelId); - System.out.println(messages.size()); - switch (choice) { - case 1: // 1_1 메세지 작성 - System.out.print(" ▶ 새로운 대화를 시작합니다. 대화를 종료하려면 빈 값을 입력해주세요.\n"); - while (true){ //대화메세지를 연속으로 입력받도록 루프 - int msgDisplaySize; - if((messages.size()) < 5){ - msgDisplaySize=0; - } else { - msgDisplaySize = messages.size() - 5 - ; - } - System.out.println("번호 | 사용자명 : 메세지(생성일/수정일)"); - for (int i = msgDisplaySize ; i < messages.size(); i++) { - messageService.printOneMessage(channelId,i+1); - } - - System.out.print(" >> "); - String txtMsg = scanner.nextLine(); - if (!txtMsg.isEmpty()) { - - messageService.createMsg(channelId, currentUser.getName(), txtMsg); - } else { - System.out.println(" ▶ 메세지 입력을 종료합니다"); - break; - } - } - break; - - case 2: //1_2 전체 메세지 조회 - System.out.println(" ▶ 채널에 등록된 모든 메세지를 조회합니다.\n "); - messageService.printAllMessages(channelId); - break; - case 3: //1_3 단건 메세지 조회 - System.out.println(" ▶ 조회할 메세지의 번호를 입력해 주세요"); - inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 - if(inputMsgNum <= messages.size()) { - System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); - System.out.println("번호 | 사용자 : 메세지 ( 생성시각 / 수정시각 )"); - messageService.printOneMessage(channelId,inputMsgNum); - break; - } - System.out.println(" ▶ 잘못된 입력입니다. 상위메뉴로 돌아갑니다."); - - break; - case 4: // 1_4 메세지 수정 - System.out.println(" ▶ 현재 등록된 메세지는 아래와 같습니다."); - messageService.printAllMessages(channelId); - System.out.println(" ▶ 수정할 메세지의 번호를 입력해 주세요"); - inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 - if(inputMsgNum <= messages.size()) { - currentMsg = messageService.findMessageByNum(channelId,inputMsgNum); - System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); - System.out.println(currentMsg.getTextMsg()); - - System.out.print("수정할 새로운 메세지를 입력해 주세요.\n >> "); - String newMessage = scanner.nextLine(); - messageService.updateMsg(currentChannel.getId(),currentUser.getName(),currentMsg, newMessage); - System.out.println("기존 내용을 [" + currentMsg.getTextMsg() + "] 로 수정하였습니다."); - break; - } - System.out.println(" ▶ 잘못된 입력입니다. 상위메뉴로 돌아갑니다."); - break; - case 5: // 1_5 메세지 삭제 - System.out.println(" ▶ 현재 등록된 메세지는 아래와 같습니다."); - messageService.printAllMessages(channelId); - System.out.println(" ▶ 삭제할 메세지의 번호를 입력해 주세요"); - inputMsgNum = scanInt(); // 숫자 입력 메서드 호출 - currentMsg = messageService.findMessageByNum(channelId,inputMsgNum); - System.out.println(" ▶ [" + inputMsgNum + "]번 메세지는 아래와 같습니다."); - System.out.println(currentMsg.getTextMsg()); - - System.out.print(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); - String deleteConfirm = scanner.nextLine(); - if (deleteConfirm.isEmpty()) { - System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); - break; - } else if (deleteConfirm.equals("삭제")) { - messageService.deleteMessage(currentChannel.getId(),currentUser.getName(),currentMsg); - System.out.println("메세지가 삭제되었습니다."); - } else { - System.out.println(" ▶ 잘못된 입력입니다. 사용자 삭제를 취소합니다."); - } - break; - case 6: // 1_6 현재 채널 변경 - currentChannel = ChannelControl.joinChannel(currentUser); - break; - case 7: // 1_7 현재 사용자 변경 - System.out.print(" ▶ 어떤 사용자로 로그인할까요?"); - String username = scanner.nextLine(); - User user = userService.findUserByName(username); - if (user != null) { - System.out.println("[" + user.getName() + "] 사용자로 진행합니다." + ", ID: " + user.getId()); - currentUser = user; - } else { - System.out.println("\n ▶ 존재하지 않는 사용자입니다. 기존 사용자[" + currentUser.getName() + "]로 진행합니다.\n 현재 사용가능한 사용자는 아래와 같습니다."); - userService.getUserslist().forEach(u -> System.out.print(u.getName()+ " , ")); - System.out.println(); - } - break; - case 8: // 1_8 상위메뉴로 이동 - break; - default: // 세부메뉴 입력예외처리 - System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); - } - if (choice == 8) { - break; - } - } - return currentUser; - } // 1 메세지 관리 메서드 -} diff --git a/src/main/java/com/sprint/mission/discodeit/control/UserControl.java b/src/main/java/com/sprint/mission/discodeit/control/UserControl.java deleted file mode 100644 index 97f206f1..00000000 --- a/src/main/java/com/sprint/mission/discodeit/control/UserControl.java +++ /dev/null @@ -1,143 +0,0 @@ -package com.sprint.mission.discodeit.control; - -import com.sprint.mission.discodeit.JavaApplication; -import com.sprint.mission.discodeit.entity.User; - -public class UserControl extends JavaApplication { - - // 어플리케이션 최초 실행시 User 신규여부 판별 메서드. 있으면 있는 유저로 로그인 / 없으면 새 유저 생성 -// 1_3 사용자 관리 세부메뉴 메서드 - public static User menuUserMng(User currentUser){ // 1_4 사용자 관리 내부메뉴 메서드 - while (true) { - System.out.println(" *******************************************************\n" - + " || 사용자 관리 메뉴입니다. 원하는 기능을 선택하세요. ||\n" - + " || 1 > 신규 사용자 생성 ||\n" - + " || 2 > 현재 사용자 이름 변경 ||\n" - + " || 3 > 사용자 삭제 ||\n" - + " || 4 > 단일 사용자 상세조회 ||\n" - + " || 5 > 전체 사용자 상세조회 ||\n" - + " || 6 > 다른 사용자로 진행 ||\n" - + " || 7 > 상위 메뉴로 돌아가기 ||\n" - + " *******************************************************\n"); - System.out.print(" >> "); - int choice = scanInt(); - - switch (choice) { - case 1: // 1_4_1 신규 사용자 생성 메뉴 - System.out.println(" ▶ 새로운 사용자를 생성합니다."); - while (true) { - System.out.print(" ▶ 원하는 사용자명을 입력해 주세요 : "); - String username = scanner.nextLine(); - if (username.isEmpty()) { // 입력값이 없는경우 상위 메뉴로 이동 - System.out.println(" ▶ 입력값이 없습니다. 사용자 생성을 취소합니다.\n"); - break; - } - User user = userService.findUserByName(username); - if (user == null) { // 중복 유저명 체크하여 중복유저가 없는경우 사용자 생성 - User newUser = userService.createUser(username); - System.out.println(" ▶ 사용자 생성에 성공했습니다."); - System.out.println(" ▶ 사용자명 : " + newUser.getName() + " SSID : " + newUser.getId() + "\n"); - - // 새로 생성한 사용자로 currentUser 변경여부 체크 - System.out.println(" ▶ 새로운 사용자로 로그인하시겠습니까? Y/N"); - String newUserChange = scanner.nextLine(); - if (newUserChange.equals("y") || newUserChange.equals("Y")) { - currentUser = newUser; - System.out.println("\n ▶ [" + currentUser.getName() + "] 사용자로 로그인 했습니다."); - } - - System.out.println(" ▶ 기존 사용자 [" + currentUser.getName() + "]로 계속합니다."); - break; - } else { // user.name 중복값 확인시 while문 재시작 - System.out.println(" ▶ 이미 존재하는 사용자명입니다. 다른 이름을 입력해 주세요.\n"); - } - } - break; - - case 2: - while (true){ // 1_4_2 사용자 이름 변경 메뉴 - System.out.println("\n ▶ 사용자 이름을 변경합니다. * 현재 사용자 이름 : [" + currentUser.getName() + "]"); - System.out.print(" ▶ 변경할 사용자 이름을 입력해 주세요 \n >> "); - String newName = scanner.nextLine(); - if(newName.isEmpty()) {// 사용자 이름 입력값이 없는경우 상위메뉴로 이동 - System.out.println(" ▶ 새 이름을 입력하지 않았습니다. 사용자 이름 변경을 취소합니다."); - break; - } - User user = userService.findUserByName(newName); - if(user != null){ // 중복값 존재시 재입력 - System.out.print(" ▶ 이미 존재하는 이름입니다. 다시 입력해 주세요.\n >> "); - } else { // 중복값 미확인시 유저명 변경 - userService.updateUserName(currentUser, newName); - break; - } - } - break; - case 3: // 1_4_3 사용자 삭제 메뉴 - System.out.println(" ▶ 삭제할 사용자의 이름을 입력해 주세요"); - System.out.println(" ▶ 현재 등록된 사용자는 아래와 같습니다."); - userService.showAllUsers(); - System.out.print(" >> "); - String deleteUser = scanner.nextLine(); - if ((deleteUser.isEmpty()) || (userService.findUserByName(deleteUser) == null)) { - System.out.println(" ▶ 존재하지 않는 사용자이거나 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); - } else if (deleteUser.equals(currentUser.getName())){ - System.out.println(" ▶ 현재 로그인된 사용자는 삭제할 수 없습니다! 이전 메뉴로 돌아갑니다."); - break; - } else { - System.out.println(" ▶ 입력하신 사용자는 아래와 같습니다."); - User userToDel = userService.findUserByName(deleteUser); - System.out.println(userToDel); - System.out.println(" ▶ 정말로 삭제할까요? 삭제를 원하시면 [삭제]라고 입력해 주세요.\n >> "); - String deleteConfirm = scanner.nextLine(); - if (deleteConfirm.isEmpty()) { - System.out.println(" ▶ 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); - break; - } else if (deleteConfirm.equals("삭제")) { - userService.deleteUser(deleteUser); - System.out.println("[" + deleteUser + "] 사용자가 삭제되었습니다."); - } else { - System.out.println(" ▶ 잘못된 입력입니다. 사용자 삭제를 취소합니다."); - } - } - break; - case 4: // 1_4_4 단일 사용자 정보 출력 메뉴 - System.out.print(" ▶ 조회할 사용자의 이름을 입력해 주세요.\n >> "); - String oneUser = scanner.nextLine(); - if ((oneUser.isEmpty()) || (userService.findUserByName(oneUser) == null)) { - System.out.println(" ▶ 존재하지 않는 사용자이거나 잘못된 입력입니다. 이전 메뉴로 돌아갑니다."); - } else { - System.out.println(" ▶ 입력하신 사용자는 아래와 같습니다."); - User userToRead = userService.findUserByName(oneUser); - System.out.println(userToRead); - } - break; - case 5: // 1_4_5 모든 사용자 정보 출력 메뉴 - System.out.println(" ▶ 모든 사용자 정보를 출력합니다."); - userService.showAllUsers(); - break; - case 6: // 1_4_6 다른 사용자로 진행 - System.out.print(" ▶ 어떤 사용자로 로그인할까요?"); - String username = scanner.nextLine(); - User user = userService.findUserByName(username); - if (user != null) { - System.out.println("[" + user.getName() + "] 사용자로 진행합니다." + ", ID: " + user.getId()); - currentUser = user; - } else { - System.out.println("\n ▶ 존재하지 않는 사용자입니다. 기존 사용자[" + currentUser.getName() + "]로 진행합니다.\n 현재 사용가능한 사용자는 아래와 같습니다."); - userService.getUserslist().forEach(u -> System.out.print(u.getName()+ " , ")); - System.out.println(); - } - break; - case 7: // 1_4_7 상위메뉴 복귀 - break; - default: // 1_4 세부메뉴 입력예외처리 - System.out.println(" ▶ 잘못된 접근입니다. 다시 입력해 주세요"); - } - if (choice == 7) { - break; - } - } - - return currentUser; - } // 1_3 사용자 관리 세부메뉴 메서드 -} diff --git a/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/src/main/java/com/sprint/mission/discodeit/entity/Channel.java index 166d3a43..fa58560e 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/Channel.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -1,73 +1,77 @@ package com.sprint.mission.discodeit.entity; -import com.sprint.mission.discodeit.service.file.FileMessageService; -import com.sprint.mission.discodeit.service.jcf.JCFMessageService; import java.io.Serializable; -import java.text.SimpleDateFormat; +import java.time.Instant; import java.util.UUID; - public class Channel implements Serializable { - private static final long serialVersionUID = 1L; - private final UUID id = UUID.randomUUID(); - private long createdAt = System.currentTimeMillis(); - private long updatedAt; - private String channelName; - private String channelDescription; - private String channelCreater; - + private static final long serialVersionUID = -7716860811813642738L; + private UUID id; + private Long createdAt; + private Long updatedAt; + // + private ChannelType type; + private String name; + private String description; - - public Channel(String channelName, String channelDescription, String channelCreater, long createdAt, long updatedAt) { - this.channelName = channelName; - this.channelDescription = channelDescription; - this.channelCreater = channelCreater; - this.createdAt = createdAt; - this.updatedAt = updatedAt; + public Channel(ChannelType type, String name, String description) { + this.id = UUID.randomUUID(); + this.createdAt = Instant.now().getEpochSecond(); + // + this.type = type; + this.name = name; + this.description = description; } public UUID getId() { return id; } - public String getCreatedAt() { - String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(createdAt); - return formatedTime; - } - public String getUpdatedAt() { - String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(updatedAt); - return formatedTime; - } - public void setUpdatedAt(long updatedAt) { - this.updatedAt = updatedAt; + public Long getCreatedAt() { + return createdAt; } - public String getChannelName() { - return channelName; + public Long getUpdatedAt() { + return updatedAt; } - public void setChannelName(String channelName) { - this.channelName = channelName; + + public ChannelType getType() { + return type; } - public String getChannelDescription() { - return channelDescription; + public String getName() { + return name; } - public void setChannelDescription(String channelDescription) { - this.channelDescription = channelDescription; + + public String getDescription() { + return description; } - public String getChannelCreater() { - return channelCreater; + public void update(String newName, String newDescription) { + boolean anyValueUpdated = false; + if (newName != null && !newName.equals(this.name)) { + this.name = newName; + anyValueUpdated = true; + } + if (newDescription != null && !newDescription.equals(this.description)) { + this.description = newDescription; + anyValueUpdated = true; + } + + if (anyValueUpdated) { + this.updatedAt = Instant.now().getEpochSecond(); + } } + @Override public String toString() { - String result; - if(getCreatedAt().equals(getUpdatedAt())){ - result = "채널명 : " + channelName + " 개설자 : " + channelCreater + " 채널설명 : " + channelDescription + " 개설일자 : " + getCreatedAt() + " UUID : " + getId(); - } else { - result = "채널명 : " + channelName + " 개설자 : " + channelCreater + " 채널설명 : " + channelDescription + " 개설일자 : " + getCreatedAt() + " 수정일자 : " + getUpdatedAt() + " UUID : " + getId(); - } - return result; + return "Channel{" + + "id=" + id + + ", createdAt=" + createdAt + + ", updatedAt=" + updatedAt + + ", type=" + type + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + '}'; } } - diff --git a/src/main/java/com/sprint/mission/discodeit/entity/ChannelType.java b/src/main/java/com/sprint/mission/discodeit/entity/ChannelType.java new file mode 100644 index 00000000..9a2ff3f0 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/entity/ChannelType.java @@ -0,0 +1,6 @@ +package com.sprint.mission.discodeit.entity; + +public enum ChannelType { + PUBLIC, + PRIVATE, +} diff --git a/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/src/main/java/com/sprint/mission/discodeit/entity/Message.java index 7baeb7b4..c6c157bc 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -1,66 +1,75 @@ package com.sprint.mission.discodeit.entity; import java.io.Serializable; -import java.text.SimpleDateFormat; +import java.time.Instant; import java.util.UUID; public class Message implements Serializable { - private static final long serialVersionUID = 1L; - private final UUID id = UUID.randomUUID(); - private long createdAt = System.currentTimeMillis(); - private long updatedAt; + private static final long serialVersionUID = -6322726657551422728L; - private int msgNumber; - private String author; - private String textMsg; + private UUID id; + private Long createdAt; + private Long updatedAt; + // + private String content; + // + private UUID channelId; + private UUID authorId; - - public Message(int msgNumber, String author, String textMsg,long createdAt, long updatedAt) { - this.msgNumber = msgNumber; - this.author = author; - this.textMsg = textMsg; - this.createdAt = createdAt; - this.updatedAt = updatedAt; + public Message(String content, UUID channelId, UUID authorId) { + this.id = UUID.randomUUID(); + this.createdAt = Instant.now().getEpochSecond(); + // + this.content = content; + this.channelId = channelId; + this.authorId = authorId; } + public UUID getId() { return id; } - public int getMsgNumber() { - return msgNumber; - } - public String getAuthor() { - return author; - } - public void setAuthor(String newAuthor) { - this.author = newAuthor; + + public Long getCreatedAt() { + return createdAt; } - public void setTextMsg(String textMsg) { - this.textMsg = textMsg; + + public Long getUpdatedAt() { + return updatedAt; } - public String getTextMsg() { - return textMsg; + + public String getContent() { + return content; } - public String getCreatedAt() { - String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(createdAt); - return formatedTime; + public UUID getChannelId() { + return channelId; } - public String getUpdatedAt() { - String formatedTime = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(updatedAt); - return formatedTime; + + public UUID getAuthorId() { + return authorId; } - public void setUpdatedAt(long updatedAt) { - this.updatedAt = updatedAt; + + public void update(String newContent) { + boolean anyValueUpdated = false; + if (newContent != null && !newContent.equals(this.content)) { + this.content = newContent; + anyValueUpdated = true; + } + + if (anyValueUpdated) { + this.updatedAt = Instant.now().getEpochSecond(); + } } + @Override public String toString() { - String result; - if(getCreatedAt().equals(getUpdatedAt())){ - result = msgNumber + " | " + author + " : " + textMsg + " (" + getCreatedAt() + ") : " + getId(); - } else { - result = msgNumber + " | " + author + " : " + textMsg + " (" + getCreatedAt() + " / " + getUpdatedAt() + ") : " + getId(); - } - return result; + return "Message{" + + "id=" + id + + ", createdAt=" + createdAt + + ", updatedAt=" + updatedAt + + ", content='" + content + '\'' + + ", channelId=" + channelId + + ", authorId=" + authorId + + '}'; } } - diff --git a/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java b/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java new file mode 100644 index 00000000..a8e36e77 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java @@ -0,0 +1,12 @@ +package com.sprint.mission.discodeit.entity; + +import java.time.Instant; +import java.util.UUID; + +public class ReadStatus { + UUID id; + UUID userId; + UUID channelId; + Instant createdAt; + Instant updatedAt; +} diff --git a/src/main/java/com/sprint/mission/discodeit/entity/User.java b/src/main/java/com/sprint/mission/discodeit/entity/User.java index 0fd59b38..a439e848 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -1,52 +1,82 @@ package com.sprint.mission.discodeit.entity; -import java.io.Serial; import java.io.Serializable; -import java.text.SimpleDateFormat; +import java.time.Instant; import java.util.UUID; public class User implements Serializable { - @Serial - private static final long serialVersionUID = 1L; - private final UUID id = UUID.randomUUID(); - private final long createdAt; - private long updatedAt; - private String name; + private static final long serialVersionUID = 5020789657574048869L; - public User(String name, long createdAt, long updatedAt) { - this.name = name; - this.createdAt = createdAt; - this.updatedAt = updatedAt; + private UUID id; + private Long createdAt; + private Long updatedAt; + // + private String username; + private String email; + private String password; + + public User(String username, String email, String password) { + this.id = UUID.randomUUID(); + this.createdAt = Instant.now().getEpochSecond(); + // + this.username = username; + this.email = email; + this.password = password; } public UUID getId() { return id; } - public String getName() { - return name; + + public Long getCreatedAt() { + return createdAt; } - public void setName(String name) { - this.name = name; + + public Long getUpdatedAt() { + return updatedAt; } - public String getCreatedAt() { - return new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(createdAt); + public String getUsername() { + return username; } - public String getUpdatedAt() { - return new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(updatedAt); + + public String getEmail() { + return email; } - public void setUpdatedAt(long updatedAt) { - this.updatedAt = updatedAt; + + public String getPassword() { + return password; } - @Override - public String toString() { - String result; - if(getCreatedAt().equals(getUpdatedAt())){ - result = "\n 사용자 이름 : " + name + "\n 생성일 : " + getCreatedAt() + "\n 사용자 UUID : " + id + "\n"; - } else { - result = "\n 사용자 이름 : " + name + "\n 생성일 : " + getCreatedAt() + "\n 수정일 : " + getUpdatedAt() + "\n 사용자 UUID : " + id + "\n"; + public void update(String newUsername, String newEmail, String newPassword) { + boolean anyValueUpdated = false; + if (newUsername != null && !newUsername.equals(this.username)) { + this.username = newUsername; + anyValueUpdated = true; + } + if (newEmail != null && !newEmail.equals(this.email)) { + this.email = newEmail; + anyValueUpdated = true; } - return result; + if (newPassword != null && !newPassword.equals(this.password)) { + this.password = newPassword; + anyValueUpdated = true; } + + if (anyValueUpdated) { + this.updatedAt = Instant.now().getEpochSecond(); + } + } + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", createdAt=" + createdAt + + ", updatedAt=" + updatedAt + + ", username='" + username + '\'' + + ", email='" + email + '\'' + + ", password='" + password + '\'' + + '}'; + } } diff --git a/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java b/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java new file mode 100644 index 00000000..26db1d2e --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java @@ -0,0 +1,40 @@ +package com.sprint.mission.discodeit.entity; + +import java.time.Instant; +import java.util.UUID; + +public class UserStatus { + private static final long serialVersionUID = 6919471281193075220L; + UUID id; + UUID userId; + Instant createdAt; + Instant updatedAt; + public UserStatus(UUID userId) { + this.id = UUID.randomUUID(); + this.userId = userId; + this.createdAt = Instant.now(); + } + + public UUID getId() { + return id; + } + public UUID getUserId() { + return userId; + } + public Instant getCreatedAt() { + return createdAt; + } + public Instant getUpdatedAt() { + return updatedAt; + } + + @Override + public String toString() { + return "UserStatus{" + + "id=" + id + + ", userId=" + userId + + ", createdAt=" + createdAt + + ", updatedAt=" + updatedAt + + '}'; + } +} diff --git a/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java index c509d169..c6b3bd29 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/ChannelRepository.java @@ -1,11 +1,17 @@ package com.sprint.mission.discodeit.repository; import com.sprint.mission.discodeit.entity.Channel; +import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; +import java.util.UUID; - +@Repository public interface ChannelRepository { - List getChannelsList(); - void fileSaveChannels(); + Channel save(Channel channel); + Optional findById(UUID id); + List findAll(); + boolean existsById(UUID id); + void deleteById(UUID id); } diff --git a/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java index 89acf54e..48e90da2 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/MessageRepository.java @@ -1,11 +1,17 @@ package com.sprint.mission.discodeit.repository; import com.sprint.mission.discodeit.entity.Message; +import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; import java.util.UUID; +@Repository public interface MessageRepository { - List getMessages(UUID channelId); - void saveMessages(UUID channelId, List messages); + Message save(Message message); + Optional findById(UUID id); + List findAll(); + boolean existsById(UUID id); + void deleteById(UUID id); } diff --git a/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java index cf7a1a9b..2c3bcc95 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -1,10 +1,17 @@ package com.sprint.mission.discodeit.repository; import com.sprint.mission.discodeit.entity.User; +import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; +import java.util.UUID; +@Repository public interface UserRepository { - List getUserslist(); - void saveUsersList(); + User save(User user); + Optional findById(UUID id); + List findAll(); + boolean existsById(UUID id); + void deleteById(UUID id); } 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 index caa7e110..48b7de34 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileChannelRepository.java @@ -2,51 +2,101 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.repository.ChannelRepository; +import org.springframework.stereotype.Repository; import java.io.*; -import java.util.ArrayList; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; +import java.util.Optional; +import java.util.UUID; +@Repository public class FileChannelRepository implements ChannelRepository { - // 초기 채널 입력 - private final List channels; - private static final String CHANNEL_FILE_NAME = "src/files/channel.ser"; - - public FileChannelRepository(){ - this.channels = fileLoadChannels(); - if(channels.isEmpty()){ - channels.add(new Channel("ch01","default Channel","관리자",1744036548250L,1744036548250L)); - fileSaveChannels(); + private final Path DIRECTORY; + private final String EXTENSION = ".ser"; + + public FileChannelRepository() { + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", Channel.class.getSimpleName()); + if (Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } catch (IOException e) { + throw new RuntimeException(e); + } } } - // 파일 로드 메서드 - @SuppressWarnings("unchecked") - private List fileLoadChannels(){ - File file = new File(CHANNEL_FILE_NAME); - if (!file.exists() || file.length() == 0) { - return new ArrayList<>(); + private Path resolvePath(UUID id) { + return DIRECTORY.resolve(id + EXTENSION); + } + + @Override + public Channel save(Channel channel) { + Path path = resolvePath(channel.getId()); + try ( + FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos) + ) { + oos.writeObject(channel); + } catch (IOException e) { + throw new RuntimeException(e); } - try (FileInputStream fis = new FileInputStream(CHANNEL_FILE_NAME); - ObjectInputStream ois = new ObjectInputStream(fis)){ - return (List)ois.readObject(); - } catch (IOException | ClassNotFoundException e){ - return new ArrayList<>(); + return channel; + } + + @Override + public Optional findById(UUID id) { + Channel channelNullable = null; + Path path = resolvePath(id); + if (Files.exists(path)) { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + channelNullable = (Channel) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } } + return Optional.ofNullable(channelNullable); } - // 파일 세이브 메서드 - public void fileSaveChannels(){ - try(FileOutputStream fos = new FileOutputStream(CHANNEL_FILE_NAME); - ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(channels); - System.out.println("파일생성 성공. ///channel.ser"); - } catch (IOException e){ - System.out.println("파일생성에실패하였습니다. ///channel.ser"); + + @Override + public List findAll() { + try { + return Files.list(DIRECTORY) + .filter(path -> path.toString().endsWith(EXTENSION)) + .map(path -> { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (Channel) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }) + .toList(); + } catch (IOException e) { + throw new RuntimeException(e); } } - public List getChannelsList(){ - return channels; + @Override + public boolean existsById(UUID id) { + Path path = resolvePath(id); + return Files.exists(path); } + @Override + public void deleteById(UUID id) { + Path path = resolvePath(id); + try { + Files.delete(path); + } catch (IOException e) { + throw new RuntimeException(e); + } + } } 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 index e942becb..bf71910f 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileMessageRepository.java @@ -2,59 +2,101 @@ import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.repository.MessageRepository; +import org.springframework.stereotype.Repository; import java.io.*; -import java.util.ArrayList; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; -import java.util.Map; +import java.util.Optional; import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; +@Repository public class FileMessageRepository implements MessageRepository { - private static Map> channelMsgBoard = new ConcurrentHashMap<>(); - private static final String MESSAGE_FILE_PATH = "src/files/"; - private static final String MESSAGE_FILE_PRIMER = "message_"; - private static final String MESSAGE_FILE_TAIL = ".ser"; + private final Path DIRECTORY; + private final String EXTENSION = ".ser"; public FileMessageRepository() { - } - // 파일 로드 메서드 - @Override - public List getMessages(UUID channelId) { - if (!channelMsgBoard.containsKey(channelId)) { - channelMsgBoard.put(channelId, fileLoadMessages(channelId)); + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", Message.class.getSimpleName()); + if (Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } catch (IOException e) { + throw new RuntimeException(e); + } } - return channelMsgBoard.get(channelId); + } + + private Path resolvePath(UUID id) { + return DIRECTORY.resolve(id + EXTENSION); } @Override - public void saveMessages(UUID channelId, List messages) { - channelMsgBoard.put(channelId, messages); - String filePath = getFilePath(channelId); - try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath))) { - oos.writeObject(messages); + public Message save(Message message) { + Path path = resolvePath(message.getId()); + try ( + FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos) + ) { + oos.writeObject(message); } catch (IOException e) { - e.printStackTrace(); + throw new RuntimeException(e); } + return message; } - @SuppressWarnings("unchecked") - private List fileLoadMessages (UUID channelId) { - String filePath = getFilePath(channelId); - File file = new File(filePath); - if (!file.exists() || file.length() == 0) { - return new ArrayList<>(); + @Override + public Optional findById(UUID id) { + Message messageNullable = null; + Path path = resolvePath(id); + if (Files.exists(path)) { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + messageNullable = (Message) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } } - try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) { - return (List) ois.readObject(); - } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); - return new ArrayList<>(); + return Optional.ofNullable(messageNullable); + } + + @Override + public List findAll() { + try { + return Files.list(DIRECTORY) + .filter(path -> path.toString().endsWith(EXTENSION)) + .map(path -> { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (Message) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }) + .toList(); + } catch (IOException e) { + throw new RuntimeException(e); } } - private String getFilePath(UUID channelId) { - String filePath = MESSAGE_FILE_PATH + MESSAGE_FILE_PRIMER + channelId.toString() + MESSAGE_FILE_TAIL; - return filePath; + @Override + public boolean existsById(UUID id) { + Path path = resolvePath(id); + return Files.exists(path); + } + + @Override + public void deleteById(UUID id) { + Path path = resolvePath(id); + try { + Files.delete(path); + } catch (IOException e) { + throw new RuntimeException(e); + } } } 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 index fb144aab..51eb115c 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -2,38 +2,101 @@ import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.repository.UserRepository; +import org.springframework.stereotype.Repository; import java.io.*; -import java.util.ArrayList; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; +import java.util.Optional; +import java.util.UUID; +@Repository public class FileUserRepository implements UserRepository { - private final List users; - private static final String USER_FILE_PATH = "src/files/user.ser"; + private final Path DIRECTORY; + private final String EXTENSION = ".ser"; public FileUserRepository() { - this.users = fileLoadUsers(); + this.DIRECTORY = Paths.get(System.getProperty("user.dir"), "file-data-map", User.class.getSimpleName()); + if (Files.notExists(DIRECTORY)) { + try { + Files.createDirectories(DIRECTORY); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + private Path resolvePath(UUID id) { + return DIRECTORY.resolve(id + EXTENSION); + } + + @Override + public User save(User user) { + Path path = resolvePath(user.getId()); + try ( + FileOutputStream fos = new FileOutputStream(path.toFile()); + ObjectOutputStream oos = new ObjectOutputStream(fos) + ) { + oos.writeObject(user); + } catch (IOException e) { + throw new RuntimeException(e); + } + return user; } - // 파일 로드 메서드 - @SuppressWarnings("unchecked") - public List fileLoadUsers(){ - try (FileInputStream fis = new FileInputStream(USER_FILE_PATH); - ObjectInputStream ois = new ObjectInputStream(fis)){ - return (List)ois.readObject(); - } catch (IOException | ClassNotFoundException e){ - return new ArrayList<>(); + + @Override + public Optional findById(UUID id) { + User userNullable = null; + Path path = resolvePath(id); + if (Files.exists(path)) { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + userNullable = (User) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } } + return Optional.ofNullable(userNullable); } - // 파일 세이브 메서드 - public void saveUsersList(){ - try(FileOutputStream fos = new FileOutputStream(USER_FILE_PATH); - ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(users); - } catch (IOException e){ - System.out.println("파일생성에실패하였습니다 ///user.ser"); + + @Override + public List findAll() { + try { + return Files.list(DIRECTORY) + .filter(path -> path.toString().endsWith(EXTENSION)) + .map(path -> { + try ( + FileInputStream fis = new FileInputStream(path.toFile()); + ObjectInputStream ois = new ObjectInputStream(fis) + ) { + return (User) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + }) + .toList(); + } catch (IOException e) { + throw new RuntimeException(e); } } - public List getUserslist() { - return users; + + @Override + public boolean existsById(UUID id) { + Path path = resolvePath(id); + return Files.exists(path); + } + + @Override + public void deleteById(UUID id) { + Path path = resolvePath(id); + try { + Files.delete(path); + } catch (IOException e) { + throw new RuntimeException(e); + } } } 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 index f9aa33f5..11511f91 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFChannelRepository.java @@ -2,20 +2,41 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.repository.ChannelRepository; +import org.springframework.stereotype.Repository; -import java.util.ArrayList; -import java.util.List; +import java.util.*; +//@Repository public class JCFChannelRepository implements ChannelRepository { - private final List channels = new ArrayList<>(); - // 초기 채널 입력 - public JCFChannelRepository(){ - channels.add(new Channel("ch01","default Channel","관리자",1744036548250L,1744036548250L)); + private final Map data; + + public JCFChannelRepository() { + this.data = new HashMap<>(); } - // 채널 목록 반환 - public List getChannelsList() { - return channels; + + @Override + public Channel save(Channel channel) { + this.data.put(channel.getId(), channel); + return channel; } - public void fileSaveChannels(){ + + @Override + public Optional findById(UUID id) { + return Optional.ofNullable(this.data.get(id)); + } + + @Override + public List findAll() { + return this.data.values().stream().toList(); + } + + @Override + public boolean existsById(UUID id) { + return this.data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + this.data.remove(id); } } 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 index ba5938db..10ea241e 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFMessageRepository.java @@ -2,28 +2,41 @@ import com.sprint.mission.discodeit.entity.Message; import com.sprint.mission.discodeit.repository.MessageRepository; +import org.springframework.stereotype.Repository; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; +import java.util.*; +//@Repository public class JCFMessageRepository implements MessageRepository { - private static final Map> channelMsgBoard = new ConcurrentHashMap<>(); + private final Map data; + + public JCFMessageRepository() { + this.data = new HashMap<>(); + } + + @Override + public Message save(Message message) { + this.data.put(message.getId(), message); + return message; + } + + @Override + public Optional findById(UUID id) { + return Optional.ofNullable(this.data.get(id)); + } + + @Override + public List findAll() { + return this.data.values().stream().toList(); + } @Override - public List getMessages(UUID channelId) { - List messages = channelMsgBoard.get(channelId); - if (messages == null) { - messages = new ArrayList(); - channelMsgBoard.put(channelId, messages); - } - return messages; + public boolean existsById(UUID id) { + return this.data.containsKey(id); } @Override - public void saveMessages(UUID channelId, List messages) { - channelMsgBoard.put(channelId, messages); + public void deleteById(UUID id) { + this.data.remove(id); } } 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 index a7405eb5..7616d3c3 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java @@ -2,22 +2,41 @@ import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.repository.UserRepository; +import org.springframework.stereotype.Repository; -import java.util.ArrayList; -import java.util.List; +import java.util.*; +//@Repository public class JCFUserRepository implements UserRepository { - private final List users = new ArrayList<>(); - // 테스트용 초기 더미 데이터 입력 + private final Map data; + public JCFUserRepository() { - users.add(new User("희동이" , 1744036538250L , 1744036538250L)); - users.add(new User("고길동" , 1744036738250L , 1744071238250L)); - users.add(new User("도우너" , 1744036938250L , 1744036538250L)); + this.data = new HashMap<>(); } - // 유저 목록 반환 - public List getUserslist() { - return users; + + @Override + public User save(User user) { + this.data.put(user.getId(), user); + return user; } - public void saveUsersList(){} -} \ No newline at end of file + @Override + public Optional findById(UUID id) { + return Optional.ofNullable(this.data.get(id)); + } + + @Override + public List findAll() { + return this.data.values().stream().toList(); + } + + @Override + public boolean existsById(UUID id) { + return this.data.containsKey(id); + } + + @Override + public void deleteById(UUID id) { + this.data.remove(id); + } +} diff --git a/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index 9c704dbe..f4e5ef05 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -1,15 +1,16 @@ package com.sprint.mission.discodeit.service; import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.ChannelType; -public interface ChannelService { - - Channel createChannel(String channelName, String channelDesc, String createrName); // Create 새로운 채널 생성 +import java.util.List; +import java.util.UUID; - void printAllChannels(); // Read 전체 채널 리스트 읽기 - Channel findChannelByName(String name); // Read 이름으로 단일채널 읽기 - void UpdateChannel(Channel channel, String channelName, String channelDescription); // Update 채널 정보 수정 - - void deleteChannel(Channel channel); // Delete 채널 삭제 +public interface ChannelService { + Channel create(ChannelType type, String name, String description); + Channel find(UUID channelId); + List findAll(); + Channel update(UUID channelId, String newName, String newDescription); + void delete(UUID channelId); } diff --git a/src/main/java/com/sprint/mission/discodeit/service/MessageService.java b/src/main/java/com/sprint/mission/discodeit/service/MessageService.java index 4062691f..86aedaa7 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/MessageService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/MessageService.java @@ -2,18 +2,14 @@ import com.sprint.mission.discodeit.entity.Message; -import java.util.*; +import java.util.List; +import java.util.UUID; -public interface MessageService{ - void createMsg(UUID channelId, String uploaderName, String txtMsg); // Create 새 메세지 생성 - Message findMessageByNum(UUID channelId,int num); // Read 채널 내 단일 메세지 조회 - List getMessagesList(UUID channelId); // Read 채널 내 전체 메세지 조회 - - void updateMsg(UUID channelId, String editerName, Message message, String Msg); // Update 메세지 수정 - - void deleteMessage(UUID channelId, String deleterName, Message message); // Delete 단일 메세지 삭제 - - void printAllMessages(UUID channelId); // Read 채널 내 전체 메세지 포맷 출력 - void printOneMessage(UUID channelId,int msgNum); // Read 채널 내 단일 메세지 포맷 출력 +public interface MessageService { + Message create(String content, UUID channelId, UUID authorId); + Message find(UUID messageId); + List findAll(); + Message update(UUID messageId, String newContent); + void delete(UUID messageId); } diff --git a/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/src/main/java/com/sprint/mission/discodeit/service/UserService.java index 583aacbc..bf366876 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -3,17 +3,13 @@ import com.sprint.mission.discodeit.entity.User; import java.util.List; +import java.util.UUID; -public interface UserService { - - User createUser(String name); // Create 새로운 유저 생성 - - void showAllUsers(); // Read 전체 유저리스트 읽기 - User findUserByName(String name); // Read 이름으로 단일유저 찾기 - void updateUserName(User user,String name); // Update 기존 유저 수정 - - void deleteUser(String name); // Delete 이름으로 유저 삭제 - - List getUserslist(); // 유저 리스트 반환 +public interface UserService { + User create(String username, String email, String password); + User find(UUID userId); + List findAll(); + User update(UUID userId, String newUsername, String newEmail, String newPassword); + void delete(UUID userId); } 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 index 534d789e..1a20927b 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -1,7 +1,54 @@ -//package com.sprint.mission.discodeit.service.basic; -// -//import com.sprint.mission.discodeit.service.ChannelService; -// -//public class BasicChannelService implements ChannelService { -// -//} +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.entity.Channel; +import com.sprint.mission.discodeit.entity.ChannelType; +import com.sprint.mission.discodeit.repository.ChannelRepository; +import com.sprint.mission.discodeit.service.ChannelService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.NoSuchElementException; +import java.util.UUID; +@Service +public class BasicChannelService implements ChannelService { + private final ChannelRepository channelRepository; + + @Autowired + public BasicChannelService(ChannelRepository channelRepository) { + this.channelRepository = channelRepository; + } + + @Override + public Channel create(ChannelType type, String name, String description) { + Channel channel = new Channel(type, name, description); + return channelRepository.save(channel); + } + + @Override + public Channel find(UUID channelId) { + return channelRepository.findById(channelId) + .orElseThrow(() -> new NoSuchElementException("Channel with id " + channelId + " not found")); + } + + @Override + public List findAll() { + return channelRepository.findAll(); + } + + @Override + public Channel update(UUID channelId, String newName, String newDescription) { + Channel channel = channelRepository.findById(channelId) + .orElseThrow(() -> new NoSuchElementException("Channel with id " + channelId + " not found")); + channel.update(newName, newDescription); + return channelRepository.save(channel); + } + + @Override + public void delete(UUID channelId) { + if (!channelRepository.existsById(channelId)) { + throw new NoSuchElementException("Channel with id " + channelId + " not found"); + } + channelRepository.deleteById(channelId); + } +} 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 index 54c800af..2b8813f4 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -1,35 +1,68 @@ -//package com.sprint.mission.discodeit.service.basic; -// -//import com.sprint.mission.discodeit.entity.Message; -//import com.sprint.mission.discodeit.repository.MessageRepository; -//import com.sprint.mission.discodeit.repository.file.FileMessageRepository; -//import com.sprint.mission.discodeit.service.MessageService; -// -//import java.util.List; -//import java.util.Map; -//import java.util.UUID; -//import java.util.concurrent.ConcurrentHashMap; -// -//public class BasicMessageService implements MessageService { -// private Map> channelMsgBoard = new ConcurrentHashMap<>(); -// private final MessageRepository messageRepository; -// -// public BasicMessageService(MessageRepository messageRepository){ -// this.messageRepository = messageRepository; -// this.channelMsgBoard = messageRepository.loadMessageBoard(); -// } -// public BasicMessageService() { -// this.messageRepository = new FileMessageRepository(); -// this.channelMsgBoard = messageRepository.loadMessageBoard(); -// messageRepository.saveMessageBoard(channelMsgBoard); -// } -// public void saveMessageBoard(){ -// messageRepository.saveMessageBoard(channelMsgBoard); -// } -// public Map> getChannelMsgBoard() { -// return channelMsgBoard; -// } -// public void setChannelMsgBoard(Map> channelMsgBoard) { -// this.channelMsgBoard = channelMsgBoard; -// } -//} +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.entity.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.service.MessageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.UUID; +@Service +public class BasicMessageService implements MessageService { + private final MessageRepository messageRepository; + // + private final ChannelRepository channelRepository; + private final UserRepository userRepository; + + @Autowired + public BasicMessageService(MessageRepository messageRepository, ChannelRepository channelRepository, UserRepository userRepository) { + this.messageRepository = messageRepository; + this.channelRepository = channelRepository; + this.userRepository = userRepository; + } + + @Override + public Message create(String content, UUID channelId, UUID authorId) { + if (!channelRepository.existsById(channelId)) { + throw new NoSuchElementException("Channel not found with id " + channelId); + } + if (!userRepository.existsById(authorId)) { + throw new NoSuchElementException("Author not found with id " + authorId); + } + + Message message = new Message(content, channelId, authorId); + return messageRepository.save(message); + } + + @Override + public Message find(UUID messageId) { + return messageRepository.findById(messageId) + .orElseThrow(() -> new NoSuchElementException("Message with id " + messageId + " not found")); + } + + @Override + public List findAll() { + return messageRepository.findAll(); + } + + @Override + public Message update(UUID messageId, String newContent) { + Message message = messageRepository.findById(messageId) + .orElseThrow(() -> new NoSuchElementException("Message with id " + messageId + " not found")); + message.update(newContent); + return messageRepository.save(message); + } + + @Override + public void delete(UUID messageId) { + if (!messageRepository.existsById(messageId)) { + throw new NoSuchElementException("Message with id " + messageId + " not found"); + } + messageRepository.deleteById(messageId); + } +} 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 index 48439d9e..fd572c6c 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -1,6 +1,54 @@ -//package com.sprint.mission.discodeit.service.basic; -// -//import com.sprint.mission.discodeit.service.UserService; -// -//public class BasicUserService implements UserService { -//} +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.repository.UserRepository; +import com.sprint.mission.discodeit.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.NoSuchElementException; +import java.util.UUID; + +@Service +public class BasicUserService implements UserService { + private final UserRepository userRepository; + + @Autowired + public BasicUserService(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @Override + public User create(String username, String email, String password) { + User user = new User(username, email, password); + return userRepository.save(user); + } + + @Override + public User find(UUID userId) { + return userRepository.findById(userId) + .orElseThrow(() -> new NoSuchElementException("User with id " + userId + " not found")); + } + + @Override + public List findAll() { + return userRepository.findAll(); + } + + @Override + public User update(UUID userId, String newUsername, String newEmail, String newPassword) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new NoSuchElementException("User with id " + userId + " not found")); + user.update(newUsername, newEmail, newPassword); + return userRepository.save(user); + } + + @Override + public void delete(UUID userId) { + if (!userRepository.existsById(userId)) { + throw new NoSuchElementException("User with id " + userId + " not found"); + } + userRepository.deleteById(userId); + } +} 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 deleted file mode 100644 index e3f31b5f..00000000 --- a/src/main/java/com/sprint/mission/discodeit/service/file/FileChannelService.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.sprint.mission.discodeit.service.file; - -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.repository.ChannelRepository; -import com.sprint.mission.discodeit.repository.file.FileChannelRepository; -import com.sprint.mission.discodeit.service.ChannelService; - -import java.util.List; - -public class FileChannelService implements ChannelService { - ChannelRepository channelRepository = new FileChannelRepository(); - private final List channels = channelRepository.getChannelsList(); - - // 채널 생성 메서드 - @Override - public Channel createChannel(String channelName, String channelDesc, String createrName) { - long now = System.currentTimeMillis(); - Channel channel = new Channel(channelName,channelDesc,createrName,now,now); - channels.add(channel); - channelRepository.fileSaveChannels(); - System.out.print("\n ▶ [새로운 채널 생성완료]"); - System.out.println(" ▶ 채널명 : " + channel.getChannelName() + " ▶ 생성시간 : " + channel.getCreatedAt()); - return channel; - } - // 채널 수정 메서드 - @Override - public void UpdateChannel(Channel channel, String channelName, String channelDescription){ - long now = System.currentTimeMillis(); - channel.setChannelName(channelName); - channel.setChannelDescription(channelDescription); - channel.setUpdatedAt(now); - channelRepository.fileSaveChannels(); - System.out.print("\n ▶ [채널 정보 수정 완료]"); - System.out.println(channel); - } - // 채널 삭제 메서드 - @Override - public void deleteChannel(Channel channel){ - channels.remove(channel); - channelRepository.fileSaveChannels(); - } - // 전체채널목록 출력 메서드 - @Override - public void printAllChannels(){ - System.out.println("<< 생성된 전체 채널 >>"); - System.out.println("채널명 | 개설자 | 채널설명(개설시간)"); - channels.forEach(chan -> System.out.println(chan.getChannelName()+" | "+chan.getChannelCreater()+" | "+chan.getChannelDescription()+" ("+chan.getCreatedAt() + ")")); - System.out.println(); - } - - - @Override // 이름으로 채널 검색 메서드. 채널객체를 return - public Channel findChannelByName(String name){ - for (Channel channel : channels) { - if (channel.getChannelName().equals(name)) { - return channel; // 일치하는 name 발견시 channel 객체를 리턴 - } - } - return null; // 없으면 null - } -} 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 deleted file mode 100644 index 2fae52a7..00000000 --- a/src/main/java/com/sprint/mission/discodeit/service/file/FileMessageService.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.sprint.mission.discodeit.service.file; - -import com.sprint.mission.discodeit.entity.Message; -import com.sprint.mission.discodeit.repository.MessageRepository; -import com.sprint.mission.discodeit.repository.file.FileMessageRepository; -import com.sprint.mission.discodeit.service.MessageService; - -import java.util.List; -import java.util.UUID; - -public class FileMessageService implements MessageService { - MessageRepository messageRepository = new FileMessageRepository(); - - @Override - public void createMsg(UUID channelId, String uploaderName, String txtMsg){ - List messages = messageRepository.getMessages(channelId); - long now = System.currentTimeMillis(); - int msgNumber = messages.size() + 1; - Message newMsg = new Message(msgNumber, uploaderName, txtMsg, now, now); - messages.add(newMsg); - messageRepository.saveMessages(channelId, messages); - } - - @Override - public List getMessagesList(UUID channelId){ - return messageRepository.getMessages(channelId); - } - - public void updateMsg(UUID channelId, String editerName, Message message,String newMsg) { - String resetColor = "\u001B[0m"; - String setColorYellow = "\u001B[33m"; - message.setUpdatedAt(System.currentTimeMillis()); - message.setTextMsg(newMsg + setColorYellow + " *** [" + editerName + "] 에 의해 수정됨" + resetColor); - messageRepository.saveMessages(channelId, messageRepository.getMessages(channelId)); - } - - @Override - public void deleteMessage(UUID channelId, String deleterName, Message message) { - String resetColor = "\u001B[0m"; - String setColorRed = "\u001B[31m"; - message.setUpdatedAt(System.currentTimeMillis()); - message.setTextMsg(setColorRed + " - ////// " + deleterName + " 사용자에 의해 삭제됨 ////// - " + message.getUpdatedAt() + resetColor); - messageRepository.saveMessages(channelId, messageRepository.getMessages(channelId)); - } - - @Override - public Message findMessageByNum(UUID channelId, int msgNum){ - List messages = messageRepository.getMessages(channelId); - for (Message msg : messages) { - if (msg.getMsgNumber() == msgNum) return msg; - } - return null; - } - - - - public void printAllMessages(UUID channelId) { - List messages = messageRepository.getMessages(channelId); - if(messages!=null) { - System.out.println("<< 입력된 전체 메세지 >>"); - System.out.println("번호 | 사용자 : 메세지"); - messages.forEach(m -> System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", m.getMsgNumber(), m.getAuthor(), m.getTextMsg(), m.getCreatedAt(), m.getUpdatedAt(), m.getId())); - System.out.println(); - } else { - System.out.println("<<선택된 채널에 입력된 메세지 없음>>"); - } - - } - public void printOneMessage(UUID channelId,int msgNum){ - Message message = findMessageByNum(channelId,msgNum); - System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", message.getMsgNumber(),message.getAuthor(),message.getTextMsg(),message.getCreatedAt(),message.getUpdatedAt(),message.getId() ); - } -} 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 deleted file mode 100644 index fe6d8820..00000000 --- a/src/main/java/com/sprint/mission/discodeit/service/file/FileUserService.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.sprint.mission.discodeit.service.file; - -import com.sprint.mission.discodeit.entity.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.util.*; - -public class FileUserService implements UserService { - UserRepository userRepository = new FileUserRepository(); - private final List users = userRepository.getUserslist(); - - @Override // 유저 생성 메서드 createUser() - public User createUser(String name) { - long now = System.currentTimeMillis(); - User user = new User(name, now, now); - users.add(user); - userRepository.saveUsersList(); - System.out.println("사용자의 이름을 [" + user.getName() + "] 으로 생성하였습니다. | " + user.getCreatedAt()); - return user; - } - - @Override //유저 이름 변경 메서드 updateUserName() - public void updateUserName(User user, String newName) { - String oldName = user.getName(); - user.setName(newName); - user.setUpdatedAt(System.currentTimeMillis()); - userRepository.saveUsersList(); - System.out.println("[" + oldName + "] 사용자의 이름을 [" + user.getName() + "] 으로 변경하였습니다. | " + user.getUpdatedAt()); - } - - @Override - public void deleteUser(String name) { - users.remove(findUserByName(name)); - userRepository.saveUsersList(); - } - - @Override - public User findUserByName(String name) { - for (User user : users) { - if (user.getName().equals(name)) { - return user; // 일치하는 name 발견시 user 리턴 - } - } - return null; // 없으면 null 리턴 - } - - // 모든 사용자 출력 - public void showAllUsers(){ - System.out.println(" □ □ □ 전체 사용자 목록 □ □ □ \n 사용자이름 | 사용자생성시간 | 사용자정보 수정시간 | 사용자UUID"); - users.forEach(u -> System.out.println(" " + u.getName() + " | " + u.getCreatedAt() + " | " + u.getUpdatedAt() + " | " + u.getId())); - System.out.println(); - } - public List getUserslist() { - return users; - } -} \ No newline at end of file diff --git a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java deleted file mode 100644 index 3591f04c..00000000 --- a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.sprint.mission.discodeit.service.jcf; - -import com.sprint.mission.discodeit.entity.Channel; -import com.sprint.mission.discodeit.repository.ChannelRepository; -import com.sprint.mission.discodeit.repository.jcf.JCFChannelRepository; -import com.sprint.mission.discodeit.service.ChannelService; - - -import java.util.List; - -public class JCFChannelService implements ChannelService { - ChannelRepository channelRepository = new JCFChannelRepository(); - // 초기 채널 입력 - private final List channels = channelRepository.getChannelsList(); - - // 채널 생성 메서드 - @Override - public Channel createChannel(String channelName, String channelDesc, String createrName) { - long now = System.currentTimeMillis(); - Channel channel = new Channel(channelName,channelDesc,createrName,now,now); - channels.add(channel); - System.out.print("\n ▶ [새로운 채널 생성완료]"); - System.out.println(" ▶ 채널명 : " + channel.getChannelName() + " ▶ 생성시간 : " + channel.getCreatedAt()); - return channel; - } - // 채널 수정 메서드 - @Override - public void UpdateChannel(Channel channel, String channelName, String channelDescription){ - long now = System.currentTimeMillis(); - channel.setChannelName(channelName); - channel.setChannelDescription(channelDescription); - channel.setUpdatedAt(now); - System.out.print("\n ▶ [채널 정보 수정 완료]"); - System.out.println(channel); - } - // 채널 삭제 메서드 - @Override - public void deleteChannel(Channel channel){ - channels.remove(channel); - } - // 전체채널목록 출력 메서드 - @Override - public void printAllChannels(){ - System.out.println("<< 생성된 전체 채널 >>"); - System.out.println("채널명 | 개설자 | 채널설명(개설시간)"); - channels.forEach(chan -> System.out.println(chan.getChannelName()+" | "+chan.getChannelCreater()+" | "+chan.getChannelDescription()+" ("+chan.getCreatedAt() + ")")); - System.out.println(); - } - @Override // 이름으로 채널 검색 메서드. 채널객체를 return - public Channel findChannelByName(String name){ - for (Channel channel : channels) { - if (channel.getChannelName().equals(name)) { - return channel; // 일치하는 name 발견시 channel 객체를 리턴 - } - } - return null; // 없으면 null - } -} diff --git a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java deleted file mode 100644 index 5f5f49e6..00000000 --- a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.sprint.mission.discodeit.service.jcf; - -import com.sprint.mission.discodeit.entity.Message; -import com.sprint.mission.discodeit.repository.MessageRepository; -import com.sprint.mission.discodeit.repository.jcf.JCFMessageRepository; -import com.sprint.mission.discodeit.service.MessageService; - -import java.util.List; -import java.util.UUID; - -public class JCFMessageService implements MessageService { - - static MessageRepository messageRepository = new JCFMessageRepository(); - - @Override - public void createMsg(UUID channelId, String uploaderName, String txtMsg){ - List messages = messageRepository.getMessages(channelId); - int msgCount = messages.size() + 1; - long now = System.currentTimeMillis(); - Message message = new Message(msgCount,uploaderName,txtMsg,now,now); - messages.add(message); - messageRepository.saveMessages(channelId, messages); - } - - @Override - public void updateMsg(UUID channelId, String editerName, Message message,String newMsg) { - String resetColor = "\u001B[0m"; - String setColorYellow = "\u001B[33m"; - message.setUpdatedAt(System.currentTimeMillis()); - message.setTextMsg(newMsg + setColorYellow + " *** [" + editerName + "] 에 의해 수정됨" + resetColor); - } - - @Override - public void deleteMessage(UUID channelId, String deleterName, Message message) { - String resetColor = "\u001B[0m"; - String setColorRed = "\u001B[31m"; - message.setUpdatedAt(System.currentTimeMillis()); - message.setTextMsg(setColorRed + " - ////// " + deleterName + " 사용자에 의해 삭제됨 ////// -" +message.getUpdatedAt() + resetColor); - } - - @Override - public Message findMessageByNum(UUID channelId,int num){ - List messages = messageRepository.getMessages(channelId); - for (Message message : messages) { - if (message.getMsgNumber() == num) { - return message; // 일치하는 메세지 번호 발견시 message 리턴 - } - }return null; - } - - @Override - public void printAllMessages(UUID channelId) { - List messages = messageRepository.getMessages(channelId); - if(messages!=null) { - System.out.println("<< 입력된 전체 메세지 >>"); - System.out.println("번호 | 사용자 : 메세지"); - messages.forEach(m -> System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", m.getMsgNumber(), m.getAuthor(), m.getTextMsg(), m.getCreatedAt(), m.getUpdatedAt(), m.getId())); - System.out.println(); - } else { - System.out.println("<<선택된 채널에 입력된 메세지 없음>>"); - } - - } - - @Override - public void printOneMessage(UUID channelId,int msgNum){ - Message message = findMessageByNum(channelId,msgNum); - System.out.printf("%4d | %-10s: %s \n 생성일 : %s 수정일 : %s UUID : %s\n", message.getMsgNumber(),message.getAuthor(),message.getTextMsg(),message.getCreatedAt(),message.getUpdatedAt(),message.getId() ); - } - - @Override - public List getMessagesList(UUID channelId) { - return messageRepository.getMessages(channelId); - } -} diff --git a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java b/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java deleted file mode 100644 index d2b68574..00000000 --- a/src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.sprint.mission.discodeit.service.jcf; - -import com.sprint.mission.discodeit.entity.User; -import com.sprint.mission.discodeit.repository.UserRepository; -import com.sprint.mission.discodeit.repository.jcf.JCFUserRepository; -import com.sprint.mission.discodeit.service.UserService; - -import java.util.*; - -public class JCFUserService implements UserService { - private final UserRepository userRepository = new JCFUserRepository(); - private final List users = userRepository.getUserslist(); - - @Override // 유저 생성 메서드 createUser() - public User createUser(String name) { - long now = System.currentTimeMillis(); - User user = new User(name, now, now); - users.add(user); - System.out.println("사용자의 이름을 [" + user.getName() + "] 으로 생성하였습니다. | " + user.getCreatedAt()); - return user; - } - - @Override //유저 이름 변경 메서드 updateUserName() - public void updateUserName(User user, String newName) { - String oldName = user.getName(); - user.setName(newName); - user.setUpdatedAt(System.currentTimeMillis()); - System.out.println("[" + oldName + "] 사용자의 이름을 [" + user.getName() + "] 으로 변경하였습니다. | " + user.getUpdatedAt()); - } - - @Override - public void deleteUser(String name) { - users.removeIf(user -> user.getName().equals(name)); - } - - @Override - public User findUserByName(String name) { - for (User user : users) { - if (user.getName().equals(name)) { - return user; // 일치하는 name 발견시 user 리턴 - } - } - return null; // 없으면 null 리턴 - } - - // 유틸 메서드: 모든 사용자 출력 - public void showAllUsers(){ - System.out.println(" □ □ □ 전체 사용자 목록 □ □ □ \n 사용자이름 | 사용자생성시간 | 사용자정보 수정시간 | 사용자UUID"); - users.forEach(u -> System.out.println(" " + u.getName() + " | " + u.getCreatedAt() + " | " + u.getUpdatedAt() + " | " + u.getId())); - System.out.println(); - } - public List getUserslist() { - return users; - } -} \ No newline at end of file diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml new file mode 100644 index 00000000..e69de29b diff --git a/src/test/java/com/sprint/mission/discodeit/DiscodeitApplicationTests.java b/src/test/java/com/sprint/mission/discodeit/DiscodeitApplicationTests.java new file mode 100644 index 00000000..3a987a21 --- /dev/null +++ b/src/test/java/com/sprint/mission/discodeit/DiscodeitApplicationTests.java @@ -0,0 +1,13 @@ +package com.sprint.mission.discodeit; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class DiscodeitApplicationTests { + + @Test + void contextLoads() { + } + +} From b31759593a0b26a647b87391bac124a199bd3e8c Mon Sep 17 00:00:00 2001 From: Leichtstar Date: Tue, 29 Apr 2025 09:48:05 +0900 Subject: [PATCH 07/10] =?UTF-8?q?-=20Lombok=20=EC=A0=81=EC=9A=A9=20=20?= =?UTF-8?q?=E3=84=B4=20=EA=B0=81=20Entity=EC=97=90=20@Getter=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20=20=E3=84=B4=20Basic*Service=EC=97=90=20@RequidedAr?= =?UTF-8?q?gsConstructor=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 59905 -> 70076 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.10/fileHashes/fileHashes.bin | Bin 22497 -> 22647 bytes .gradle/8.10/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../discodeit/DiscodeitApplication.java | 1 + .../mission/discodeit/entity/Channel.java | 28 ++-------------- .../mission/discodeit/entity/Message.java | 30 +++--------------- .../mission/discodeit/entity/ReadStatus.java | 4 ++- .../sprint/mission/discodeit/entity/User.java | 29 ++--------------- .../mission/discodeit/entity/UserStatus.java | 29 +++++++---------- .../service/basic/BasicChannelService.java | 12 ++++--- .../service/basic/BasicMessageService.java | 14 ++++---- .../service/basic/BasicUserService.java | 10 +++--- 13 files changed, 46 insertions(+), 111 deletions(-) diff --git a/.gradle/8.10/executionHistory/executionHistory.bin b/.gradle/8.10/executionHistory/executionHistory.bin index 2de1c72593d4fcefe26ed2a421ba9d8229c5bad3..a74ce8d2103e0aa9e50038e78f319eb39ee1b866 100644 GIT binary patch delta 2090 zcmZuyc{G%JAD_p#BO%Wi%Y%@mEF)@!v?yH54J}lcaJyrS(1gLIO?Fwb^^ z&aq9FixN>O$+gQ^)6FGK^FHR@^PcxT_x|yF&T~GW?`Qd*^Lx${@)Fya$Db$;;gTed ziC{38_ACr$HwArhsvu8D@v)&QQ>5{Ql@11@T8W;bt&>6Vrs}xTTXjwCw5T#N#%z#P(yG+ z8Qlc7zeire*D9mOuTk&-2!0g{y9fSOsGyUYe||+WwlMv~2XLmMN$lg=nBq`$P|))* za|^9mwl~xX#slO*f0+<~6M+~GTAO;X2HITl9D2ks8b2 zj+F_X;sYUXs^JKOV&OyK;SDVbH`&xnTt~F72Jm_t3NsB$CsOD-U6V<;;iCC-Q~(Vh zg+2n-sI8DQ+1H)oXuS0VjAVj17H)NBWaWIwpsnms=TLelPDAZzxjlakYX5ieU*!0E z5@OjA7i6m(beAjIhxz8(?706T#@{1AOIz96|C4>rm+E6n_3?M7P_;bB{$wm%f=jv{ z65MB;VI6(Z%UxIqV*RrQ(*+~|30O}p=iGj0rSQ@Z#U;7csb&Bo9|B9j2fh%cKx@LO z{!~%?Ez`2SI~#Z>*TU*UgTEzu>rcoXxzY1^VX_$o_XGH9sMtF#W7mVX)p{x_<5{dX0A^4b@ z10$MldRF+{m7uRGNvGr=O1(O^ZS!`}$&F^%EVkoAF6TbG9~_ zQIfKc?k;X=a{tx<&k0E+Ncb6)FaKv{zp|d*Lz2`;|5#??4C&o*aCkx*$Vf`rL`vnN_Q=!4V6sWM@v5QjP5&+)*$=qslEnFAb~pCah|R2a z#);|=tmzK&xW{@}3~Yb0T6R;1`znt^K!TaX|DzSGrcrqG3ew4K{%Mm?k@23_=`XPnlo?g!k))#S zbG(sNVQ_p}mWVBl-CQv65!sj$C`s$JmY(P3g$ts2xH-EYll_6R<*o1=o21zgu+$=p zSj5$y(3}c!7H1n>A#=vy2%gy+EKqDkh-sO}Q%QlxEb7!xG)kRRu*w|SDqqcqn$5!j zV=WJY^y`lW^N%z8m)t1@!Q#HvU|i_4`j z$MbI5YFB6QxOyd!5V#X*I{-h9H4Qjnaph;W@4@qPr93iS0|>FCiE-Oc+DwZNcJFIv zIh--6>~7|@NKryt6o^WPNwVAb{oXTQesTAA@4zY6E(CNW*qqwKoC*&Nmiw%jAj9R| zphZQ%b&*93@jscJ9BS}gJYu4HW$|-1gn1Vu)F8X+Fp|hdB;mpn-ntv>qstR-sg5)1M;O-na&Pj{C%kDLA%oP62 O`y47n`62YDU-utLGVhT9 delta 34 qcmdn9n5FRw^8^t_)`_C_jDZ^ycZg3c;F&Bbp~ZA$-ey;cJr@DcsSJ7m diff --git a/.gradle/8.10/executionHistory/executionHistory.lock b/.gradle/8.10/executionHistory/executionHistory.lock index 8d4c8d3a2689763808f6dd9a6aabbe697d661ec2..90f1f1beeb22ff78fb042c34eea61b175dc60dc1 100644 GIT binary patch literal 17 VcmZRcp6c(&bW-LR0~jz`0RSjN19$)c literal 17 UcmZRcp6c(&bW-LR0|a~p04V$fG5`Po diff --git a/.gradle/8.10/fileHashes/fileHashes.bin b/.gradle/8.10/fileHashes/fileHashes.bin index 4962937f1a07b2126d4685af57a8afe6f42bb0c8..f97fdb6e8d24564ca4c8a05df6a1c46bc3c17a55 100644 GIT binary patch delta 2782 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 diff --git a/.gradle/8.10/fileHashes/fileHashes.lock b/.gradle/8.10/fileHashes/fileHashes.lock index 5d752ef669e745d9edbd08282d41c17b1104602e..caaa0688a6708d3f000fd6eb3fe097648209aeb4 100644 GIT binary patch literal 17 VcmZSXJ8E|^w(;;11~6cC0RTEj1oQv^ literal 17 VcmZSXJ8E|^w(;;11~6bg4FEdI1$h7f diff --git a/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java b/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java index f924a928..e6d28dff 100644 --- a/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java +++ b/src/main/java/com/sprint/mission/discodeit/DiscodeitApplication.java @@ -38,6 +38,7 @@ public static void main(String[] args) { // 셋업 User user = setupUser(userService); Channel channel = setupChannel(channelService); + // 테스트 System.out.println("user = " + user); System.out.println("channel = " + channel); diff --git a/src/main/java/com/sprint/mission/discodeit/entity/Channel.java b/src/main/java/com/sprint/mission/discodeit/entity/Channel.java index fa58560e..72ce1679 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/Channel.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/Channel.java @@ -1,9 +1,11 @@ package com.sprint.mission.discodeit.entity; +import lombok.Getter; + import java.io.Serializable; import java.time.Instant; import java.util.UUID; - +@Getter public class Channel implements Serializable { private static final long serialVersionUID = -7716860811813642738L; private UUID id; @@ -23,30 +25,6 @@ public Channel(ChannelType type, String name, String description) { this.description = description; } - public UUID getId() { - return id; - } - - public Long getCreatedAt() { - return createdAt; - } - - public Long getUpdatedAt() { - return updatedAt; - } - - public ChannelType getType() { - return type; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - public void update(String newName, String newDescription) { boolean anyValueUpdated = false; if (newName != null && !newName.equals(this.name)) { diff --git a/src/main/java/com/sprint/mission/discodeit/entity/Message.java b/src/main/java/com/sprint/mission/discodeit/entity/Message.java index c6c157bc..8299db25 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/Message.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/Message.java @@ -1,9 +1,11 @@ package com.sprint.mission.discodeit.entity; +import lombok.Getter; + import java.io.Serializable; import java.time.Instant; import java.util.UUID; - +@Getter public class Message implements Serializable { private static final long serialVersionUID = -6322726657551422728L; @@ -16,6 +18,7 @@ public class Message implements Serializable { private UUID channelId; private UUID authorId; + public Message(String content, UUID channelId, UUID authorId) { this.id = UUID.randomUUID(); this.createdAt = Instant.now().getEpochSecond(); @@ -24,31 +27,6 @@ public Message(String content, UUID channelId, UUID authorId) { this.channelId = channelId; this.authorId = authorId; } - - public UUID getId() { - return id; - } - - public Long getCreatedAt() { - return createdAt; - } - - public Long getUpdatedAt() { - return updatedAt; - } - - public String getContent() { - return content; - } - - public UUID getChannelId() { - return channelId; - } - - public UUID getAuthorId() { - return authorId; - } - public void update(String newContent) { boolean anyValueUpdated = false; if (newContent != null && !newContent.equals(this.content)) { diff --git a/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java b/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java index a8e36e77..1f1a0c74 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java @@ -1,8 +1,10 @@ package com.sprint.mission.discodeit.entity; +import lombok.Getter; + import java.time.Instant; import java.util.UUID; - +@Getter public class ReadStatus { UUID id; UUID userId; diff --git a/src/main/java/com/sprint/mission/discodeit/entity/User.java b/src/main/java/com/sprint/mission/discodeit/entity/User.java index a439e848..2ecafbd2 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -3,10 +3,11 @@ import java.io.Serializable; import java.time.Instant; import java.util.UUID; +import lombok.Getter; +@Getter public class User implements Serializable { private static final long serialVersionUID = 5020789657574048869L; - private UUID id; private Long createdAt; private Long updatedAt; @@ -24,31 +25,7 @@ public User(String username, String email, String password) { this.password = password; } - public UUID getId() { - return id; - } - - public Long getCreatedAt() { - return createdAt; - } - - public Long getUpdatedAt() { - return updatedAt; - } - - public String getUsername() { - return username; - } - - public String getEmail() { - return email; - } - - public String getPassword() { - return password; - } - - public void update(String newUsername, String newEmail, String newPassword) { + public void update(String newUsername, String newEmail, String newPassword) { boolean anyValueUpdated = false; if (newUsername != null && !newUsername.equals(this.username)) { this.username = newUsername; diff --git a/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java b/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java index 26db1d2e..b06111b5 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java @@ -1,31 +1,24 @@ package com.sprint.mission.discodeit.entity; +import lombok.Getter; + import java.time.Instant; import java.util.UUID; +@Getter public class UserStatus { private static final long serialVersionUID = 6919471281193075220L; - UUID id; - UUID userId; - Instant createdAt; - Instant updatedAt; + private UUID id; + private Instant createdAt; + private Instant updatedAt; + // + private UUID userId; + // public UserStatus(UUID userId) { this.id = UUID.randomUUID(); - this.userId = userId; this.createdAt = Instant.now(); - } - - public UUID getId() { - return id; - } - public UUID getUserId() { - return userId; - } - public Instant getCreatedAt() { - return createdAt; - } - public Instant getUpdatedAt() { - return updatedAt; + // + this.userId = userId; } @Override 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 index 1a20927b..75aab7be 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -4,20 +4,22 @@ import com.sprint.mission.discodeit.entity.ChannelType; import com.sprint.mission.discodeit.repository.ChannelRepository; import com.sprint.mission.discodeit.service.ChannelService; -import org.springframework.beans.factory.annotation.Autowired; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; import java.util.NoSuchElementException; import java.util.UUID; + @Service +@RequiredArgsConstructor public class BasicChannelService implements ChannelService { private final ChannelRepository channelRepository; - @Autowired - public BasicChannelService(ChannelRepository channelRepository) { - this.channelRepository = channelRepository; - } +// @Autowired +// public BasicChannelService(ChannelRepository channelRepository) { +// this.channelRepository = channelRepository; +// } @Override public Channel create(ChannelType type, String name, String description) { 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 index 2b8813f4..8b17a6f8 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicMessageService.java @@ -5,6 +5,7 @@ import com.sprint.mission.discodeit.repository.MessageRepository; import com.sprint.mission.discodeit.repository.UserRepository; import com.sprint.mission.discodeit.service.MessageService; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -13,18 +14,19 @@ import java.util.Optional; import java.util.UUID; @Service +@RequiredArgsConstructor public class BasicMessageService implements MessageService { private final MessageRepository messageRepository; // private final ChannelRepository channelRepository; private final UserRepository userRepository; - @Autowired - public BasicMessageService(MessageRepository messageRepository, ChannelRepository channelRepository, UserRepository userRepository) { - this.messageRepository = messageRepository; - this.channelRepository = channelRepository; - this.userRepository = userRepository; - } +// @Autowired +// public BasicMessageService(MessageRepository messageRepository, ChannelRepository channelRepository, UserRepository userRepository) { +// this.messageRepository = messageRepository; +// this.channelRepository = channelRepository; +// this.userRepository = userRepository; +// } @Override public Message create(String content, UUID channelId, UUID authorId) { 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 index fd572c6c..e480571c 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -3,6 +3,7 @@ import com.sprint.mission.discodeit.entity.User; import com.sprint.mission.discodeit.repository.UserRepository; import com.sprint.mission.discodeit.service.UserService; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -11,13 +12,14 @@ import java.util.UUID; @Service +@RequiredArgsConstructor public class BasicUserService implements UserService { private final UserRepository userRepository; - @Autowired - public BasicUserService(UserRepository userRepository) { - this.userRepository = userRepository; - } +// @Autowired +// public BasicUserService(UserRepository userRepository) { +// this.userRepository = userRepository; +// } @Override public User create(String username, String email, String password) { From 1fb442d010d0c677fa4be17e2ff5c59d8d92cbf5 Mon Sep 17 00:00:00 2001 From: Leichtstar Date: Wed, 7 May 2025 20:50:06 +0900 Subject: [PATCH 08/10] - --- build.gradle | 5 ++ .../629a67c4-e92c-4e1c-bc92-fd33b3b760aa.ser | Bin 542 -> 0 bytes ... 69bbb81b-58ef-4a37-86f2-8447d101b576.ser} | Bin 534 -> 534 bytes .../237a2644-6507-4b85-b6a5-15d95bcccfde.ser | Bin 418 -> 0 bytes .../2e8aee6c-514f-4112-8892-dd5bafead43a.ser | Bin 421 -> 0 bytes ... fd57c916-fde4-4a9a-a84c-001c0c250d66.ser} | Bin 418 -> 418 bytes .../24e56b17-af88-46db-946a-b162a6c56fa5.ser | Bin 388 -> 0 bytes .../2b5d7500-0bd9-41c1-8715-d2769b723104.ser | Bin 387 -> 0 bytes .../8bcf367d-2c28-45db-ab5a-b3608e6e00f9.ser | Bin 0 -> 420 bytes .../8d98ac08-cf67-4f4e-bb33-7ebc91c1f729.ser | Bin 385 -> 0 bytes .../discodeit/DiscodeitApplication.java | 4 +- .../discodeit/entity/BinaryContent.java | 18 +++++ .../mission/discodeit/entity/Channel.java | 1 + .../mission/discodeit/entity/Message.java | 3 + .../mission/discodeit/entity/ReadStatus.java | 20 +++-- .../sprint/mission/discodeit/entity/User.java | 9 ++- .../mission/discodeit/entity/UserStatus.java | 15 +++- .../repository/BinaryContentRepository.java | 16 ++++ .../repository/ReadStatusReposotory.java | 16 ++++ .../discodeit/repository/UserRepository.java | 4 + .../repository/UserStatusRepository.java | 16 ++++ .../repository/file/FileUserRepository.java | 17 ++++ .../repository/jcf/JCFUserRepository.java | 16 ++++ .../discodeit/service/AuthService.java | 8 ++ .../discodeit/service/ChannelService.java | 6 +- .../Request/BinaryContentCreateRequest.java | 7 ++ .../service/DTO/Request/LoginRequest.java | 6 ++ .../Request/PrivateChannelCreateRequest.java | 8 ++ .../Request/PublicChannelCreateRequest.java | 6 ++ .../DTO/Request/UserCreateRequest.java | 7 ++ .../service/DTO/Request/UserFindRequest.java | 11 +++ .../DTO/Request/UserUpdateRequest.java | 7 ++ .../discodeit/service/DTO/UserDTO.java | 14 ++++ .../discodeit/service/UserService.java | 13 +++- .../service/basic/BasicAuthService.java | 27 +++++++ .../service/basic/BasicChannelService.java | 29 +++++-- .../service/basic/BasicUserService.java | 73 +++++++++++++++--- 37 files changed, 346 insertions(+), 36 deletions(-) delete mode 100644 file-data-map/Channel/629a67c4-e92c-4e1c-bc92-fd33b3b760aa.ser rename file-data-map/Channel/{0918aeb1-a422-48ca-bad1-fa46b1879405.ser => 69bbb81b-58ef-4a37-86f2-8447d101b576.ser} (76%) delete mode 100644 file-data-map/Message/237a2644-6507-4b85-b6a5-15d95bcccfde.ser delete mode 100644 file-data-map/Message/2e8aee6c-514f-4112-8892-dd5bafead43a.ser rename file-data-map/Message/{1d6f1678-81f2-4145-b14a-8438ee0b3d72.ser => fd57c916-fde4-4a9a-a84c-001c0c250d66.ser} (76%) delete mode 100644 file-data-map/User/24e56b17-af88-46db-946a-b162a6c56fa5.ser delete mode 100644 file-data-map/User/2b5d7500-0bd9-41c1-8715-d2769b723104.ser create mode 100644 file-data-map/User/8bcf367d-2c28-45db-ab5a-b3608e6e00f9.ser delete mode 100644 file-data-map/User/8d98ac08-cf67-4f4e-bb33-7ebc91c1f729.ser create mode 100644 src/main/java/com/sprint/mission/discodeit/entity/BinaryContent.java create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/ReadStatusReposotory.java create mode 100644 src/main/java/com/sprint/mission/discodeit/repository/UserStatusRepository.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/AuthService.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/DTO/Request/BinaryContentCreateRequest.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/DTO/Request/LoginRequest.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/DTO/Request/PrivateChannelCreateRequest.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/DTO/Request/PublicChannelCreateRequest.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserCreateRequest.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserFindRequest.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserUpdateRequest.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/DTO/UserDTO.java create mode 100644 src/main/java/com/sprint/mission/discodeit/service/basic/BasicAuthService.java diff --git a/build.gradle b/build.gradle index 1c8b5c58..e14a30f6 100644 --- a/build.gradle +++ b/build.gradle @@ -29,6 +29,11 @@ dependencies { annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + compileOnly("org.projectlombok:lombok") + annotationProcessor("org.projectlombok:lombok") + + testCompileOnly("org.projectlombok:lombok") + testAnnotationProcessor("org.projectlombok:lombok") } tasks.named('test') { diff --git a/file-data-map/Channel/629a67c4-e92c-4e1c-bc92-fd33b3b760aa.ser b/file-data-map/Channel/629a67c4-e92c-4e1c-bc92-fd33b3b760aa.ser deleted file mode 100644 index 11847f50e553fdb13b9dd4d861d64c676e8f8bd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmb7>ze~eF6vtnq7Nn&W=j!69MRDh+3TmLGaF$sH1PXyZ3$H`+V=t-(X1iFj;XOU3fm@s5?vu=5pO)qT*VV zp-wq6tm}(4lXGexJmo)Ty5kuQk_HS{d}<=K<`H4U*fh6IVw=2543}4D4Mn-1NA2554Pb&n!U8xoU5n52(MVoVZYl0N2| z9FaD|foDa4$}16iGHph2>WWkU=4?H*Z}%qdG)NR+Xxp>{8u~EuBPs^Y2K9H(564mm z_bm+|^gvcEn|nk^zg%7PI#;jF)85%mY_5{%D#`Wn!26N2Lp0C|khZBQu*9kh3`GG_ zjvMbn?|T0;-|4QOZJbnZo~MerAM49zui0++K>qPdD!zhLH7be!q+aHM6SbnIhmc$? RFBmI}LcLN_^=jEU`wL$by&C`k diff --git a/file-data-map/Channel/0918aeb1-a422-48ca-bad1-fa46b1879405.ser b/file-data-map/Channel/69bbb81b-58ef-4a37-86f2-8447d101b576.ser similarity index 76% rename from file-data-map/Channel/0918aeb1-a422-48ca-bad1-fa46b1879405.ser rename to file-data-map/Channel/69bbb81b-58ef-4a37-86f2-8447d101b576.ser index 053905d6469ebff6d9f4167f9e2fc1eebeb4aa00..0901630990cda560e50fb58d9ece13ba7c868632 100644 GIT binary patch delta 36 scmbQnGL2<}EhDpdukd6C#xQ}lPc7~j8Ml^Y?%p9C@!rdP@-oH(0Oi*WzyJUM delta 36 ucmV+<0NekT1eOG_Jpls`Oazla0ag&Y(fUTQhm-{g7_PCTB1p=UrU7u>whdhX diff --git a/file-data-map/Message/237a2644-6507-4b85-b6a5-15d95bcccfde.ser b/file-data-map/Message/237a2644-6507-4b85-b6a5-15d95bcccfde.ser deleted file mode 100644 index e5db5d2b6308f96865b215c961716292a92e37b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ#~en=BzabwSF)$u=y}>B$k$BX(*e=IDopdb(KqFmNVkBzuZ%>01EUuMYguAWX=+6gg8NOAl7bMDta^e%=vrDRcbD&?B1;f0Q3@<(EtDd diff --git a/file-data-map/Message/2e8aee6c-514f-4112-8892-dd5bafead43a.ser b/file-data-map/Message/2e8aee6c-514f-4112-8892-dd5bafead43a.ser deleted file mode 100644 index a1f809d64d67479be0ecdb3a357a244dd6aeaf48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 421 zcmZ4UmVvdnh(S9!KUc4~peQr1L@zh9xHvOEPcJ32I5|HhHM2x7HLoPIq*Bi}wYWGj zJ#~en=BzabwSF)$u=y}>B$k$BX(*e=IDopdb(KqFmNVkBmujt7fDX0q;?^w)Uv_JmbQv(k^e)bW!kVGw?^ zY{ILJ8{W*?qVQ(!mN!%PyxOq=ZZF84dSG{UKbdf*U->>01EUuMYguAWX=+6gg8_h&zsfiXt>@kE@Y@fU?b_Valie1c~*%r~UKMrj^fEVwaT#+Y)`kd$$YS!}uO z;+kQ4^G=*!-4+>w(GW@v&4^`m&0460Ez%}_MB=6&%DA}_g2x2mk%g&$qpEd`Y=}4= zUP>&F{90{$!}Z4$F{UFm-G>7}j*%$(!^j#17f75&Oa#jVsdDxc85(D3oTGd1r_U#| zuLueOcx@6TEY(o?3+*JL&h*jXY^L0Q>mh(tfjhgCVbM8tq@>-|-__l}3;~%Y&NLq{ zN4_q^p^pFsFdi{tY?U|HxitZlg&bC?>bD;1H&607#tufK+pgI zf<=@B2Lgjf;ZPt@{AetDB`HkC%*>nl-t@j8XEaRtkswBCE|Cas438uUxbdTaaU@J4 z$8FLyOfO!GI^fh{BxKZJgSX~6nmQCkG^i4_KmOD{)0OP>N({y4+57z{L2&|EN04K*yiO<8h#yX?MeuL2yHh7SP& z6qbadu>1rPegFal7EN&M9i(*K?3;Nr^Ln3h^A!IWXcuuAv!4=C2__!P}!P>IO7yx}FT1D;{K-pgcgB92iy6dL%=K z`+ZS_JaB8ZjdlA!s;Dt-sr`L81gCDX)Tk-978CV>MWqfhOV35h|BaCFGgcqjlpz%? z)yK+~8&8svBpFGQbwAFZ&t~5o$W$QPqCv!B4TXQwW+Zl)KJH!4R literal 0 HcmV?d00001 diff --git a/file-data-map/User/8d98ac08-cf67-4f4e-bb33-7ebc91c1f729.ser b/file-data-map/User/8d98ac08-cf67-4f4e-bb33-7ebc91c1f729.ser deleted file mode 100644 index aa5565d011b6d4fdfc362bee0ec177b51d18ee47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmYk0F-rqM5QQhJk%Wi_dn+4l_Ry3zDk^v!u?Y7A*4%Qg-0rQrd+}`Sv35yKO{X5l+Wn@Rh zg7H&gSmgNr&ZgZLB+>dPR>2{h0J4lk1|vqc$XP*RV+g|OP>@QSekMcX42_5A=GW!h z#li=IoD2B|i4vMBDF2D73E!jYtlOF|U4J$aKq|r3{_OUTfnr3d@2&|f#?DzjoaO7? zP7K=o)Ioq;n2spXrpCezX0!_>9*?I~zEn contentIds; public Message(String content, UUID channelId, UUID authorId) { diff --git a/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java b/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java index 1f1a0c74..be5a51fc 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/ReadStatus.java @@ -2,13 +2,21 @@ import lombok.Getter; +import java.io.Serializable; import java.time.Instant; import java.util.UUID; @Getter -public class ReadStatus { - UUID id; - UUID userId; - UUID channelId; - Instant createdAt; - Instant updatedAt; +public class ReadStatus implements Serializable { + private static final long serialVersionUID = -8598800178736921628L; + private UUID id; + private Instant createdAt; + private Instant updatedAt; + // + private UUID userId; + private UUID channelId; + private Instant recentReadAt; + + public void refresh(Instant newRecentReadAt) { + this.recentReadAt = Instant.now(); + } } diff --git a/src/main/java/com/sprint/mission/discodeit/entity/User.java b/src/main/java/com/sprint/mission/discodeit/entity/User.java index 2ecafbd2..81735aba 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/User.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/User.java @@ -9,16 +9,17 @@ public class User implements Serializable { private static final long serialVersionUID = 5020789657574048869L; private UUID id; - private Long createdAt; - private Long updatedAt; + private Instant createdAt; + private Instant updatedAt; // private String username; private String email; private String password; + private UUID portraitId; public User(String username, String email, String password) { this.id = UUID.randomUUID(); - this.createdAt = Instant.now().getEpochSecond(); + this.createdAt = Instant.ofEpochSecond(Instant.now().getEpochSecond()); // this.username = username; this.email = email; @@ -41,7 +42,7 @@ public void update(String newUsername, String newEmail, String newPassword) { } if (anyValueUpdated) { - this.updatedAt = Instant.now().getEpochSecond(); + this.updatedAt = Instant.ofEpochSecond(Instant.now().getEpochSecond()); } } diff --git a/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java b/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java index b06111b5..d8ef2c02 100644 --- a/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java +++ b/src/main/java/com/sprint/mission/discodeit/entity/UserStatus.java @@ -2,11 +2,12 @@ import lombok.Getter; +import java.io.Serializable; import java.time.Instant; import java.util.UUID; @Getter -public class UserStatus { +public class UserStatus implements Serializable { private static final long serialVersionUID = 6919471281193075220L; private UUID id; private Instant createdAt; @@ -20,6 +21,18 @@ public UserStatus(UUID userId) { // this.userId = userId; } + public void refresh() { + this.updatedAt = Instant.now(); + } + public boolean isOnline(){ + int timeAllowed = 300; + boolean isOnline = false; + if(Instant.now().minusSeconds(timeAllowed).isBefore(this.updatedAt)) { + isOnline = true; + } + return isOnline; + } + @Override public String toString() { diff --git a/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java new file mode 100644 index 00000000..d74ce00f --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/BinaryContentRepository.java @@ -0,0 +1,16 @@ +package com.sprint.mission.discodeit.repository; + +import com.sprint.mission.discodeit.entity.BinaryContent; +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.UUID; + +@Repository +public interface BinaryContentRepository { + BinaryContent save(BinaryContent binaryContent); + Optional findById(UUID id); + boolean existsById(UUID id); + void deleteById(UUID id); + +} diff --git a/src/main/java/com/sprint/mission/discodeit/repository/ReadStatusReposotory.java b/src/main/java/com/sprint/mission/discodeit/repository/ReadStatusReposotory.java new file mode 100644 index 00000000..afcfdf01 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/ReadStatusReposotory.java @@ -0,0 +1,16 @@ +package com.sprint.mission.discodeit.repository; + +import com.sprint.mission.discodeit.entity.ReadStatus; +import org.springframework.stereotype.Repository; + +import java.time.Instant; +import java.util.UUID; + +@Repository +public interface ReadStatusReposotory { + ReadStatus save(ReadStatus readStatus); + ReadStatus findById(UUID id); + void deleteById(UUID id); + boolean existsById(UUID id); + void refresh(UUID id, Instant newRecentReadAt); +} diff --git a/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java index 2c3bcc95..ae1fc1e1 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/UserRepository.java @@ -11,7 +11,11 @@ public interface UserRepository { User save(User user); Optional findById(UUID id); + Optional findByUsername(String username); List findAll(); boolean existsById(UUID id); + boolean existsByName(String userName); + boolean existsByEmail(String email); + void deleteById(UUID id); } diff --git a/src/main/java/com/sprint/mission/discodeit/repository/UserStatusRepository.java b/src/main/java/com/sprint/mission/discodeit/repository/UserStatusRepository.java new file mode 100644 index 00000000..0eb1cfda --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/repository/UserStatusRepository.java @@ -0,0 +1,16 @@ +package com.sprint.mission.discodeit.repository; + +import com.sprint.mission.discodeit.entity.UserStatus; +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.UUID; + +@Repository +public interface UserStatusRepository { + UserStatus save(UserStatus userStatus); + Optional findById(UUID id); + boolean existsById(UUID id); + void deleteById(UUID id); + void refresh(UUID id, String newStatus); +} \ 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 index 51eb115c..61997b3d 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/file/FileUserRepository.java @@ -63,6 +63,13 @@ public Optional findById(UUID id) { return Optional.ofNullable(userNullable); } + @Override + public Optional findByUsername(String username) { + return this.findAll().stream() + .filter(user -> user.getUsername().equals(username)) + .findFirst(); + } + @Override public List findAll() { try { @@ -89,6 +96,16 @@ public boolean existsById(UUID id) { Path path = resolvePath(id); return Files.exists(path); } + @Override + public boolean existsByName(String userName) { + return this.findAll().stream() + .anyMatch(u -> u.getUsername().equals(userName)); + } + @Override + public boolean existsByEmail(String email) { + return this.findAll().stream() + .anyMatch(u -> u.getEmail().equals(email)); + } @Override public void deleteById(UUID id) { 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 index 7616d3c3..2d0484e8 100644 --- a/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java +++ b/src/main/java/com/sprint/mission/discodeit/repository/jcf/JCFUserRepository.java @@ -25,6 +25,12 @@ public Optional findById(UUID id) { return Optional.ofNullable(this.data.get(id)); } + @Override + public Optional findByUsername(String username) { + return this.findAll().stream() + .filter(user -> user.getUsername().equals(username)) + .findFirst(); + } @Override public List findAll() { return this.data.values().stream().toList(); @@ -39,4 +45,14 @@ public boolean existsById(UUID id) { public void deleteById(UUID id) { this.data.remove(id); } + + @Override + public boolean existsByEmail(String email) { + return this.findAll().stream().anyMatch(user -> user.getEmail().equals(email)); + } + + @Override + public boolean existsByName(String username) { + return this.findAll().stream().anyMatch(user -> user.getUsername().equals(username)); + } } diff --git a/src/main/java/com/sprint/mission/discodeit/service/AuthService.java b/src/main/java/com/sprint/mission/discodeit/service/AuthService.java new file mode 100644 index 00000000..90c20c2c --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/AuthService.java @@ -0,0 +1,8 @@ +package com.sprint.mission.discodeit.service; + +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.DTO.Request.LoginRequest; + +public interface AuthService { + User Login(LoginRequest loginRequest); +} diff --git a/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java b/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java index f4e5ef05..db825cf5 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/ChannelService.java @@ -2,13 +2,17 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.ChannelType; +import com.sprint.mission.discodeit.service.DTO.Request.PrivateChannelCreateRequest; +import com.sprint.mission.discodeit.service.DTO.Request.PublicChannelCreateRequest; import java.util.List; import java.util.UUID; public interface ChannelService { - Channel create(ChannelType type, String name, String description); +// Channel create(ChannelType type, String name, String description); + Channel create(PublicChannelCreateRequest publicChannelCreateRequest); + Channel create(PrivateChannelCreateRequest privateChannelCreateRequest); Channel find(UUID channelId); List findAll(); Channel update(UUID channelId, String newName, String newDescription); diff --git a/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/BinaryContentCreateRequest.java b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/BinaryContentCreateRequest.java new file mode 100644 index 00000000..7fac6623 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/BinaryContentCreateRequest.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.service.DTO.Request; + +public record BinaryContentCreateRequest( + String fileName, + String contentType, + byte[] content +) {} diff --git a/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/LoginRequest.java b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/LoginRequest.java new file mode 100644 index 00000000..a478b76d --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/LoginRequest.java @@ -0,0 +1,6 @@ +package com.sprint.mission.discodeit.service.DTO.Request; + +public record LoginRequest( + String userName, + String password +) {} diff --git a/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/PrivateChannelCreateRequest.java b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/PrivateChannelCreateRequest.java new file mode 100644 index 00000000..87401bbe --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/PrivateChannelCreateRequest.java @@ -0,0 +1,8 @@ +package com.sprint.mission.discodeit.service.DTO.Request; + +import java.util.List; +import java.util.UUID; + +public record PrivateChannelCreateRequest( + List inChannelUsers +) {} diff --git a/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/PublicChannelCreateRequest.java b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/PublicChannelCreateRequest.java new file mode 100644 index 00000000..4a5055e3 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/PublicChannelCreateRequest.java @@ -0,0 +1,6 @@ +package com.sprint.mission.discodeit.service.DTO.Request; + +public record PublicChannelCreateRequest( + String name, + String description +) {} diff --git a/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserCreateRequest.java b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserCreateRequest.java new file mode 100644 index 00000000..1c070ee3 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserCreateRequest.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.service.DTO.Request; + +public record UserCreateRequest( + String username, + String email, + String password +) {} diff --git a/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserFindRequest.java b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserFindRequest.java new file mode 100644 index 00000000..64417cbd --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserFindRequest.java @@ -0,0 +1,11 @@ +package com.sprint.mission.discodeit.service.DTO.Request; + +import java.util.UUID; + +public record UserFindRequest( + UUID userId, + String username, + String email, + boolean online, + Byte[] portrait +) {} diff --git a/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserUpdateRequest.java b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserUpdateRequest.java new file mode 100644 index 00000000..36f27ccd --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/DTO/Request/UserUpdateRequest.java @@ -0,0 +1,7 @@ +package com.sprint.mission.discodeit.service.DTO.Request; + +public record UserUpdateRequest ( + String userName, + String email, + String password +){} diff --git a/src/main/java/com/sprint/mission/discodeit/service/DTO/UserDTO.java b/src/main/java/com/sprint/mission/discodeit/service/DTO/UserDTO.java new file mode 100644 index 00000000..666fddba --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/DTO/UserDTO.java @@ -0,0 +1,14 @@ +package com.sprint.mission.discodeit.service.DTO; + +import java.time.Instant; +import java.util.UUID; + +public record UserDTO ( + UUID id, + Instant createdAt, + Instant updatedAt, + String userName, + String email, + UUID portraitId, + Boolean online +){} diff --git a/src/main/java/com/sprint/mission/discodeit/service/UserService.java b/src/main/java/com/sprint/mission/discodeit/service/UserService.java index bf366876..5a9737eb 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/UserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/UserService.java @@ -1,15 +1,20 @@ package com.sprint.mission.discodeit.service; import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.service.DTO.Request.BinaryContentCreateRequest; +import com.sprint.mission.discodeit.service.DTO.Request.UserCreateRequest; +import com.sprint.mission.discodeit.service.DTO.Request.UserUpdateRequest; +import com.sprint.mission.discodeit.service.DTO.UserDTO; import java.util.List; +import java.util.Optional; import java.util.UUID; public interface UserService { - User create(String username, String email, String password); - User find(UUID userId); - List findAll(); - User update(UUID userId, String newUsername, String newEmail, String newPassword); + User create(UserCreateRequest userCreateRequest, Optional portraitCreateRequest); + UserDTO find(UUID userId); + List findAll(); + User update(UUID userId, UserUpdateRequest userUpdateRequest, Optional portraitCreateRequest); void delete(UUID userId); } diff --git a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicAuthService.java b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicAuthService.java new file mode 100644 index 00000000..80ad0b14 --- /dev/null +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicAuthService.java @@ -0,0 +1,27 @@ +package com.sprint.mission.discodeit.service.basic; + +import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.repository.UserRepository; +import com.sprint.mission.discodeit.service.AuthService; +import com.sprint.mission.discodeit.service.DTO.Request.LoginRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@RequiredArgsConstructor +@Service +public class BasicAuthService implements AuthService { + private final UserRepository userRepository; + + @Override + public User Login(LoginRequest loginRequest) { + String username = loginRequest.userName(); + String password = loginRequest.password(); + User user = userRepository.findByUsername(username) + .orElseThrow(() -> new IllegalArgumentException("Username not found")); + + if(!user.getPassword().equals(password)){ + throw new IllegalArgumentException("Wrong password"); + } + return user; + } +} 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 index 75aab7be..6ba2bdae 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicChannelService.java @@ -2,11 +2,16 @@ import com.sprint.mission.discodeit.entity.Channel; import com.sprint.mission.discodeit.entity.ChannelType; +import com.sprint.mission.discodeit.entity.ReadStatus; import com.sprint.mission.discodeit.repository.ChannelRepository; +import com.sprint.mission.discodeit.repository.ReadStatusReposotory; import com.sprint.mission.discodeit.service.ChannelService; +import com.sprint.mission.discodeit.service.DTO.Request.PrivateChannelCreateRequest; +import com.sprint.mission.discodeit.service.DTO.Request.PublicChannelCreateRequest; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.time.Instant; import java.util.List; import java.util.NoSuchElementException; import java.util.UUID; @@ -15,18 +20,28 @@ @RequiredArgsConstructor public class BasicChannelService implements ChannelService { private final ChannelRepository channelRepository; - -// @Autowired -// public BasicChannelService(ChannelRepository channelRepository) { -// this.channelRepository = channelRepository; -// } + private final ReadStatusReposotory readStatusRepository; @Override - public Channel create(ChannelType type, String name, String description) { - Channel channel = new Channel(type, name, description); + public Channel create(PublicChannelCreateRequest request) { + String name = request.name(); + String description = request.description(); + Channel channel = new Channel(ChannelType.PUBLIC, name, description); return channelRepository.save(channel); } + @Override + public Channel create(PrivateChannelCreateRequest request) { + Channel channel = new Channel(ChannelType.PRIVATE, null, null); + Channel savedChannel = channelRepository.save(channel); + + request.inChannelUsers().stream() + .map(userId -> new ReadStatus(userId, savedChannel.getId(), Instant.MIN)) + .forEach(readStatusRepository::save); + + return savedChannel; + } + @Override public Channel find(UUID channelId) { return channelRepository.findById(channelId) 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 index e480571c..c359ebda 100644 --- a/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java +++ b/src/main/java/com/sprint/mission/discodeit/service/basic/BasicUserService.java @@ -1,14 +1,22 @@ package com.sprint.mission.discodeit.service.basic; +import com.sprint.mission.discodeit.entity.BinaryContent; import com.sprint.mission.discodeit.entity.User; +import com.sprint.mission.discodeit.entity.UserStatus; +import com.sprint.mission.discodeit.repository.BinaryContentRepository; import com.sprint.mission.discodeit.repository.UserRepository; +import com.sprint.mission.discodeit.repository.UserStatusRepository; +import com.sprint.mission.discodeit.service.DTO.Request.BinaryContentCreateRequest; +import com.sprint.mission.discodeit.service.DTO.Request.UserCreateRequest; +import com.sprint.mission.discodeit.service.DTO.Request.UserUpdateRequest; +import com.sprint.mission.discodeit.service.DTO.UserDTO; import com.sprint.mission.discodeit.service.UserService; import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.NoSuchElementException; +import java.util.Optional; import java.util.UUID; @Service @@ -16,41 +24,82 @@ public class BasicUserService implements UserService { private final UserRepository userRepository; + private final UserStatusRepository userStatusRepository; + private final BinaryContentRepository binaryContentRepository; + // @Autowired // public BasicUserService(UserRepository userRepository) { // this.userRepository = userRepository; // } @Override - public User create(String username, String email, String password) { - User user = new User(username, email, password); + public User create(UserCreateRequest userCreateRequest, Optional portraitRequest) { + String username = userCreateRequest.username(); + String email = userCreateRequest.email(); + String password = userCreateRequest.password(); + boolean nameExists = userRepository.existsByName(username); + if (nameExists) { + throw new IllegalArgumentException("Username already exists"); + } + boolean emailExists = userRepository.findAll().stream() + .anyMatch(u -> u.getEmail().equals(email)); + if (emailExists) { + throw new IllegalArgumentException("E-mail already exists"); + } + + User user = new User(username,email,password); + + UserStatus status = new UserStatus(user.getId()); + status.refresh(); + return userRepository.save(user); } @Override - public User find(UUID userId) { - return userRepository.findById(userId) - .orElseThrow(() -> new NoSuchElementException("User with id " + userId + " not found")); + public UserDTO find(UUID userId) { + return userRepository.findById(userId); } @Override - public List findAll() { + public List findAll() { return userRepository.findAll(); } @Override - public User update(UUID userId, String newUsername, String newEmail, String newPassword) { + public User update(UUID userId, UserUpdateRequest userUpdateRequest, Optional portraitCreateRequest) { User user = userRepository.findById(userId) .orElseThrow(() -> new NoSuchElementException("User with id " + userId + " not found")); - user.update(newUsername, newEmail, newPassword); + boolean nameExists = userRepository.findAll().stream() + .filter(u -> !u.getId().equals(userId)) + .anyMatch(u -> u.getUsername().equals(userUpdateRequest.userName())); + if (nameExists) { + throw new IllegalArgumentException("Username already exists"); + } + user.update(userUpdateRequest.userName(), userUpdateRequest.email(), userUpdateRequest.password()); return userRepository.save(user); } @Override public void delete(UUID userId) { - if (!userRepository.existsById(userId)) { - throw new NoSuchElementException("User with id " + userId + " not found"); - } + User user = userRepository.findById(userId) + .orElseThrow(() -> new NoSuchElementException("No User found")); + Optional.ofNullable(user.getPortraitId()) + .ifPresent(binaryContentId -> binaryContentRepository.deleteById(binaryContentId)); + userStatusRepository.deleteById(userId); userRepository.deleteById(userId); + + } + + private UserDTO toUserDTO(User user) { + Boolean isOnline = userStatusRepository.findById(user.getId()).get().isOnline(); + return new UserDTO( + user.getId(), + user.getCreatedAt(), + user.getUpdatedAt(), + user.getUsername(), + user.getEmail(), + user.getPortraitId(), + isOnline + ); } } From 59e8677e49c960a6ff6a1ea53a94f75d6ad716ad Mon Sep 17 00:00:00 2001 From: Leichtstar Date: Wed, 7 May 2025 20:50:35 +0900 Subject: [PATCH 09/10] =?UTF-8?q?-=EA=B8=B0=ED=95=9C=20=EB=8F=84=EB=9E=98?= =?UTF-8?q?=EB=A1=9C=20=EB=AF=B8=EC=99=84=EC=84=B1=20=EC=A0=9C=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 31 ++-- .gradle/8.10/checksums/checksums.lock | Bin 17 -> 0 bytes .gradle/8.10/checksums/md5-checksums.bin | Bin 19047 -> 0 bytes .gradle/8.10/checksums/sha1-checksums.bin | Bin 19415 -> 0 bytes .../8.10/dependencies-accessors/gc.properties | 0 .../executionHistory/executionHistory.bin | Bin 70076 -> 0 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 0 bytes .gradle/8.10/fileChanges/last-build.bin | Bin 1 -> 0 bytes .gradle/8.10/fileHashes/fileHashes.bin | Bin 22647 -> 0 bytes .gradle/8.10/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .gradle/8.10/gc.properties | 0 .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 4 +- .gradle/buildOutputCleanup/outputFiles.bin | Bin 19127 -> 18857 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .idea/.name | 2 +- .idea/gradle.xml | 1 - .../Uncommitted_changes_before_rebase.xml | 14 -- .../buildOutputCleanup.lock | Bin 17 -> 0 bytes .../executionHistory.lock | Bin 17 -> 0 bytes .../shelved.patch | 18 -- .idea/workspace.xml | 173 +++++++++++++++--- gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 43705 bytes gradle/wrapper/gradle-wrapper.properties | 5 +- gradlew | 43 +++-- gradlew.bat | 37 ++-- 26 files changed, 217 insertions(+), 111 deletions(-) delete mode 100644 .gradle/8.10/checksums/checksums.lock delete mode 100644 .gradle/8.10/checksums/md5-checksums.bin delete mode 100644 .gradle/8.10/checksums/sha1-checksums.bin delete mode 100644 .gradle/8.10/dependencies-accessors/gc.properties delete mode 100644 .gradle/8.10/executionHistory/executionHistory.bin delete mode 100644 .gradle/8.10/executionHistory/executionHistory.lock delete mode 100644 .gradle/8.10/fileChanges/last-build.bin delete mode 100644 .gradle/8.10/fileHashes/fileHashes.bin delete mode 100644 .gradle/8.10/fileHashes/fileHashes.lock delete mode 100644 .gradle/8.10/gc.properties delete mode 100644 .idea/shelf/Uncommitted_changes_before_rebase.xml delete mode 100644 .idea/shelf/Uncommitted_changes_before_rebase/buildOutputCleanup.lock delete mode 100644 .idea/shelf/Uncommitted_changes_before_rebase/executionHistory.lock delete mode 100644 .idea/shelf/Uncommitted_changes_before_rebase/shelved.patch diff --git a/.gitignore b/.gitignore index 78c63537..c2065bc2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,11 @@ +HELP.md .gradle build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ -### IntelliJ IDEA ### -.idea/modules.xml -.idea/jarRepositories.xml -.idea/compiler.xml -.idea/libraries/ -*.iws -*.iml -*.ipr -out/ -!**/src/main/**/out/ -!**/src/test/**/out/ -.idea/workspace.xml - -### Eclipse ### +### STS ### .apt_generated .classpath .factorypath @@ -29,6 +17,15 @@ bin/ !**/src/main/**/bin/ !**/src/test/**/bin/ +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + ### NetBeans ### /nbproject/private/ /nbbuild/ @@ -38,9 +35,3 @@ bin/ ### VS Code ### .vscode/ - -### Mac OS ### -.DS_Store - -## 업로드금지품목 -.idea \ No newline at end of file diff --git a/.gradle/8.10/checksums/checksums.lock b/.gradle/8.10/checksums/checksums.lock deleted file mode 100644 index d4598fdc276a9f3da92fbac9df9e401b07e42363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZQxc}g!K{EwqP0~7!NF((7a diff --git a/.gradle/8.10/checksums/md5-checksums.bin b/.gradle/8.10/checksums/md5-checksums.bin deleted file mode 100644 index 7f2ccadda7bf7abcfa921aa0386b9d43decfa9fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19047 zcmeI)?MqWp00!`@PP8_1THCa@m1~ADWlIK%ftZ0gl1f_2tOaHztxvvH6oFAF zMmi(xL((iVlL&F3vsttjqmV{pioF$Dpx53?S+e_y=S#E!xmzL}43e)HJu)J1jEwdIqyg}zLV>!EWTvQ6VhffGV z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX?}zbTN#Z!4WYHwve`{XkPe|N04&*VQ~9ifPyLzl?9o>^?G1_P(-^zh?g3 z=!q`>d?_N&JAXwVN^@+DBMo~LX(%SdjW@?x$zegU#xWPv2>yjWi^!;)ZAK zqbjYfbc1Ded~Zg}&neotO&U_+|CE-jQQvTO^qC|7?E}}e*=%&bq>TV+BnHKer#ZX2 zvqyitf9-sy303O&T?p@Sw1G5aE#gMX7JtT9=fTF)ox9HrjcHW0af>t*`^1gG3*q@| uvFiyD61rZF0_!B0}>ct6dw{$w{4RH0!Lj$(6ChvXUIes76QY zhZ-Z1Ux!$8LZtjiepQ6|aXU>z4dY~a?!MpejK^R8wD)cGJbORi_xIED`nTt~2#)iX z_tOve>*M+B6lV~C00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf{4WA}{zit7oAC~C zbDqdDIW9=bpD1c0_B!5oWtc`ELhC~I)=f7t8!#s0y%IjHSbp3Rex7%bTACp8kNUqVb+)=6hFeCVko$iy#a>-R5=bSHTvi~E&1H|uHKOij1JROdz4_pqEDIZkwxT*Ge&KmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz01*i04}tuT^PzdAhmU^t zkyOd)&Rn7tV3`nEk4s z4=VrkD91fNv*3+|&WfY6#tUbKe~Z3)vUh&`rVuVWzc4oC;=YmmGyYBuqnWe@6bM_f z`Tp^FR|=QP?2kD|^>smXTfOBgyn{pi#dkHyO}V9xd%NtdHrk4GwcHX;3tNQ)&8lm*l8TH} zT}E=zc;n7v)A&VBjkH`>i<6p!t+rN^X5T!MB00fVy+COwJ`{CMM_bjT<+()Ia(}dO z?dMFtt_O92ckjIIeYe_UQ8{fj&{==EFRN9q{wmW-HmQnEeUygwMb*6E&0K%sE7I~< zBb=4jWDofwN-XExN=imWcP*~ka^V|krIYtz#8cXZt%HZV&Gqtau@RQ$DVuW#OG4ti R`9;oI=|QepZdJa{)=ysm(q;ev diff --git a/.gradle/8.10/dependencies-accessors/gc.properties b/.gradle/8.10/dependencies-accessors/gc.properties deleted file mode 100644 index e69de29b..00000000 diff --git a/.gradle/8.10/executionHistory/executionHistory.bin b/.gradle/8.10/executionHistory/executionHistory.bin deleted file mode 100644 index a74ce8d2103e0aa9e50038e78f319eb39ee1b866..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70076 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 Y-A>i!Y9|E@`wBl+ZjOYgd(&_K4=$;r{Qv*} diff --git a/.gradle/8.10/executionHistory/executionHistory.lock b/.gradle/8.10/executionHistory/executionHistory.lock deleted file mode 100644 index 90f1f1beeb22ff78fb042c34eea61b175dc60dc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 VcmZRcp6c(&bW-LR0~jz`0RSjN19$)c diff --git a/.gradle/8.10/fileChanges/last-build.bin b/.gradle/8.10/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/.gradle/8.10/fileHashes/fileHashes.bin b/.gradle/8.10/fileHashes/fileHashes.bin deleted file mode 100644 index f97fdb6e8d24564ca4c8a05df6a1c46bc3c17a55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22647 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 diff --git a/.gradle/8.10/fileHashes/fileHashes.lock b/.gradle/8.10/fileHashes/fileHashes.lock deleted file mode 100644 index caaa0688a6708d3f000fd6eb3fe097648209aeb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 VcmZSXJ8E|^w(;;11~6cC0RTEj1oQv^ diff --git a/.gradle/8.10/gc.properties b/.gradle/8.10/gc.properties deleted file mode 100644 index e69de29b..00000000 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 16a11ee7ea656a22f5a342886b056ea57fee7682..ba53e6f9b1a9ce467015de3d3ab00ed84e2e7723 100644 GIT binary patch literal 17 UcmZQ}cF$GD7=ZClL3cA*J+z_+QL#m67ZSvawufDpa5up~j5;oqLWrQT42cIpJjli( z6bkA^1#hB49yK~tL>`J35eg!@n12q*N-CtyGViN+jS7@!U}ip^`Q{tucb$nCQ(Am1 zn>pRQr$a^vAbLHzq%?tBR#JD zdZ7C#wd`A${z!YRRlS?}6?!kdReSyA!urqA!-r09exd!w!TmM&$n0I|546W7@0AC3 zS_0CCwfAf+3`AD9re*yy?Y-~Z^DCL36*7NLyPl27`QcpShyVfzAbYk+fuWGczGgX-3V?c%J{HI}uh8zX#6t@IB9-bIxa%#~=t% zkqdkXi$l3M#S8)vfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwx`|3zS*{2*)C!$fIA z{F8N7LC}TEleik2D?d3Q=M_6G71R5JI$=}U*crz`){U0~z0Yyrm?^!E_cH4B&n+)| zZr8e57yGGScz0z!HS+EU-b<)A-PqX?d#bII?~_U0UbwAc(0S_)U!O<4#iq!rc8XQ3 zOQF$4peHGqUQ-S(g&1 zZ`t^HRjZ^Z;C*|bJ9iIztCb6^i!IdEmLdJy_%Gvp{c-A==5kG3?9esdo2VygD||MW zdW825>N;!O%AU>q7 zR}MVd+Oxl#uh&qQ+KM)7r*gHtk5ezroA_o{?|sI)agKVWr@O}Rdh#mkQV#VKePLaX zXTQhr^}W>TTM$Bv*g1Sc00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uTtEK(f5`YWY~f4WYS&$2e|^H literal 8 PcmZQzV4M~_|5rNz2%rNC diff --git a/.idea/.name b/.idea/.name index 77fd1730..387a3687 100644 --- a/.idea/.name +++ b/.idea/.name @@ -1 +1 @@ -3-sprint-mission \ No newline at end of file +discodeit \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 3a0665a8..ce1c62c7 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,6 +12,5 @@ - \ No newline at end of file diff --git a/.idea/shelf/Uncommitted_changes_before_rebase.xml b/.idea/shelf/Uncommitted_changes_before_rebase.xml deleted file mode 100644 index 51c04d1a..00000000 --- a/.idea/shelf/Uncommitted_changes_before_rebase.xml +++ /dev/null @@ -1,14 +0,0 @@ - - \ No newline at end of file diff --git a/.idea/shelf/Uncommitted_changes_before_rebase/buildOutputCleanup.lock b/.idea/shelf/Uncommitted_changes_before_rebase/buildOutputCleanup.lock deleted file mode 100644 index 0ab44c08cdd15ba3fa07747af2024a7eb2d633e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZP;-M3bmk4^D00|Yn$03u`q0RR91 diff --git a/.idea/shelf/Uncommitted_changes_before_rebase/executionHistory.lock b/.idea/shelf/Uncommitted_changes_before_rebase/executionHistory.lock deleted file mode 100644 index bf824400ce85045c000896df10712baada3789a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZRswb!mb*P5@%00B|}DV_ss diff --git a/.idea/shelf/Uncommitted_changes_before_rebase/shelved.patch b/.idea/shelf/Uncommitted_changes_before_rebase/shelved.patch deleted file mode 100644 index 435d16a7..00000000 --- a/.idea/shelf/Uncommitted_changes_before_rebase/shelved.patch +++ /dev/null @@ -1,18 +0,0 @@ -Index: .idea/gradle.xml -IDEA additional info: -Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP -<+>\r\n\r\n \r\n \r\n \r\n -Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP -<+>UTF-8 -=================================================================== -diff --git a/.idea/gradle.xml b/.idea/gradle.xml ---- a/.idea/gradle.xml (revision be9bd196e730c46dd9c256c9c561eeb1a7d75767) -+++ b/.idea/gradle.xml (date 1744631923748) -@@ -11,5 +11,6 @@ - - - -+