Skip to content

Commit 8b04ada

Browse files
committed
전체 구현완료
1 parent 7174742 commit 8b04ada

32 files changed

+1051
-53
lines changed
Binary file not shown.
183 Bytes
Binary file not shown.

src/main/java/com/sprint/mission/discodeit/JavaApplication.java

Lines changed: 97 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,59 +3,130 @@
33
import com.sprint.mission.discodeit.menu.ChannelMenu;
44
import com.sprint.mission.discodeit.menu.MessageMenu;
55
import com.sprint.mission.discodeit.menu.UserMenu;
6+
import com.sprint.mission.discodeit.repository.ChannelRepository;
7+
import com.sprint.mission.discodeit.repository.MessageRepository;
8+
import com.sprint.mission.discodeit.repository.UserRepository;
9+
import com.sprint.mission.discodeit.repository.file.FileChannelRepository;
10+
import com.sprint.mission.discodeit.repository.file.FileMessageRepository;
11+
import com.sprint.mission.discodeit.repository.file.FileUserRepository;
612
import com.sprint.mission.discodeit.service.ChannelService;
713
import com.sprint.mission.discodeit.service.MessageService;
814
import com.sprint.mission.discodeit.service.UserService;
15+
import com.sprint.mission.discodeit.service.basic.BasicChannelService;
16+
import com.sprint.mission.discodeit.service.basic.BasicMessageService;
17+
import com.sprint.mission.discodeit.service.basic.BasicUserService;
18+
import com.sprint.mission.discodeit.service.file.FileChannelService;
19+
import com.sprint.mission.discodeit.service.file.FileMessageService;
20+
import com.sprint.mission.discodeit.service.file.FileUserService;
921
import com.sprint.mission.discodeit.service.jcf.integration.ChannelIntegration;
1022
import com.sprint.mission.discodeit.service.jcf.JCFChannelService;
1123
import com.sprint.mission.discodeit.service.jcf.JCFMessageService;
1224
import com.sprint.mission.discodeit.service.jcf.JCFUserService;
1325
import com.sprint.mission.discodeit.service.jcf.integration.MessageIntegration;
1426
import com.sprint.mission.discodeit.service.jcf.integration.UserIntegration;
1527

28+
import java.nio.file.Path;
29+
import java.nio.file.Paths;
1630
import java.util.Scanner;
1731

32+
// 기존 코드
33+
//public class JavaApplication {
34+
// public static void main(String[] args) {
35+
// Scanner scanner = new Scanner(System.in);
36+
//
37+
//// JCF*Service 구현
38+
//// UserService userService = new JCFUserService();
39+
//// MessageService messageService = new JCFMessageService();
40+
//// ChannelService channelService = new JCFChannelService();
41+
//
42+
//// File*Service 구현
43+
// Path userDir = Paths.get(System.getProperty("user.dir"), "data", "users");
44+
// Path channelDir = Paths.get(System.getProperty("user.dir"), "data", "channels");
45+
// Path messageDir = Paths.get(System.getProperty("user.dir"), "data", "messages");
46+
//
47+
// UserService userService = new FileUserService(userDir);
48+
// ChannelService channelService = new FileChannelService(channelDir);
49+
// MessageService messageService = new FileMessageService(messageDir);
50+
//
51+
// UserIntegration userIntegration = new UserIntegration(userService, channelService);
52+
// MessageIntegration messageIntegration = new MessageIntegration(messageService, userService, channelService);
53+
// ChannelIntegration channelIntegration = new ChannelIntegration(channelService, userService, messageService);
54+
//
55+
// while (true) {
56+
// System.out.println("\n===== MAIN MENU =====");
57+
// System.out.println("1. 사용자 메뉴");
58+
// System.out.println("2. 채널 메뉴");
59+
// System.out.println("3. 메시지 메뉴");
60+
// System.out.println("0. 종료");
61+
// System.out.print("번호를 입력하세요: ");
62+
//
63+
// String mainChoice = scanner.nextLine();
64+
//
65+
// try {
66+
// switch (mainChoice) {
67+
// case "1":
68+
// UserMenu.manageUsers(scanner, userService, userIntegration);
69+
// break;
70+
// case "2":
71+
// ChannelMenu.manageChannels(scanner, channelService, channelIntegration);
72+
// break;
73+
// case "3":
74+
// MessageMenu.manageMessages(scanner, messageService, messageIntegration);
75+
// break;
76+
// case "0":
77+
// System.out.println("종료합니다.");
78+
// return;
79+
// default:
80+
// System.out.println("올바른 번호를 선택하세요.");
81+
// }
82+
// } catch (Exception e) {
83+
// System.out.println("[오류] 메뉴 처리 중 문제가 발생했습니다: " + e.getMessage());
84+
// }
85+
// }
86+
// }
87+
//}
88+
1889
public class JavaApplication {
1990
public static void main(String[] args) {
20-
Scanner scanner = new Scanner(System.in);
21-
UserService userService = new JCFUserService();
22-
MessageService messageService = new JCFMessageService();
23-
ChannelService channelService = new JCFChannelService();
91+
UserRepository userRepository = new FileUserRepository(Paths.get("data/users"));
92+
ChannelRepository channelRepository = new FileChannelRepository(Paths.get("data/channels"));
93+
MessageRepository messageRepository = new FileMessageRepository(Paths.get("data/messages"));
94+
95+
UserService userService = new BasicUserService(userRepository);
96+
ChannelService channelService = new BasicChannelService(channelRepository);
97+
MessageService messageService = new BasicMessageService(messageRepository);
2498

2599
UserIntegration userIntegration = new UserIntegration(userService, channelService);
26-
MessageIntegration messageIntegration = new MessageIntegration(messageService, userService, channelService);
27100
ChannelIntegration channelIntegration = new ChannelIntegration(channelService, userService, messageService);
101+
MessageIntegration messageIntegration = new MessageIntegration(messageService, userService, channelService);
28102

103+
Scanner scanner = new Scanner(System.in);
29104
while (true) {
30105
System.out.println("\n===== MAIN MENU =====");
31106
System.out.println("1. 사용자 메뉴");
32107
System.out.println("2. 채널 메뉴");
33108
System.out.println("3. 메시지 메뉴");
34109
System.out.println("0. 종료");
35110
System.out.print("번호를 입력하세요: ");
111+
String input = scanner.nextLine();
36112

37-
String mainChoice = scanner.nextLine();
38-
39-
try {
40-
switch (mainChoice) {
41-
case "1":
42-
UserMenu.manageUsers(scanner, userService, userIntegration);
43-
break;
44-
case "2":
45-
ChannelMenu.manageChannels(scanner, channelService, channelIntegration);
46-
break;
47-
case "3":
48-
MessageMenu.manageMessages(scanner, messageService, messageIntegration);
49-
break;
50-
case "0":
51-
System.out.println("종료합니다.");
52-
return;
53-
default:
54-
System.out.println("올바른 번호를 선택하세요.");
113+
switch (input) {
114+
case "1" -> UserMenu.manageUsers(scanner, userService, userIntegration);
115+
case "2" -> ChannelMenu.manageChannels(scanner, channelService, channelIntegration);
116+
case "3" -> MessageMenu.manageMessages(scanner, messageService, messageIntegration);
117+
case "0" -> {
118+
System.out.println("종료합니다.");
119+
return;
55120
}
56-
} catch (Exception e) {
57-
System.out.println("[오류] 메뉴 처리 중 문제가 발생했습니다: " + e.getMessage());
121+
default -> System.out.println("올바른 번호를 입력하세요.");
58122
}
59123
}
60124
}
61-
}
125+
}
126+
127+
/*
128+
JCF*Service, File*Service와 Basic*Service의 차이
129+
Basic은 저장 로직을 분리해서 서비스에 비즈니스 로직만 위치함
130+
구현체를 생성자로 교체 가능해서 확장성이 좋음
131+
저장소를 변경하더라도 로직에 영향을 안줌
132+
*/

src/main/java/com/sprint/mission/discodeit/entity/BaseEntity.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.sprint.mission.discodeit.entity;
22

3+
import java.io.Serializable;
34
import java.util.UUID;
45

5-
public abstract class BaseEntity {
6+
public abstract class BaseEntity implements Serializable {
7+
private static final long serialVersionUID = 1L;
8+
69
private final UUID id;
710
private final long createdAt;
811
private long updatedAt;

src/main/java/com/sprint/mission/discodeit/entity/Channel.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.sprint.mission.discodeit.entity;
22

3+
import java.io.Serializable;
34
import java.util.*;
45

5-
public class Channel extends BaseEntity {
6+
public class Channel extends BaseEntity implements Serializable {
7+
private static final long serialVersionUID = 1L;
68
private String channelName;
79
private final Set<UUID> userIds = new HashSet<>();
810
private final List<UUID> messageIds = new ArrayList<>();

src/main/java/com/sprint/mission/discodeit/entity/Message.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package com.sprint.mission.discodeit.entity;
22

3+
import java.io.Serializable;
34
import java.util.Date;
45
import java.util.UUID;
56

6-
public class Message extends BaseEntity {
7+
public class Message extends BaseEntity implements Serializable {
8+
private static final long serialVersionUID = 1L;
79
private String msgContent;
10+
private final UUID senderId;
811
private final UUID channelId;
912

1013
public Message(String msgContent, UUID senderId, UUID channelId) {
1114
this.msgContent = msgContent;
15+
this.senderId = senderId;
1216
this.channelId = channelId;
1317
}
1418

@@ -17,6 +21,8 @@ public void updateMsgContent(String msgContent) {
1721
updateTime();
1822
}
1923

24+
public UUID getSenderId() { return senderId; }
25+
2026
public UUID getChannelId() {
2127
return channelId;
2228
}
@@ -34,6 +40,7 @@ public String toString() {
3440
if (isUpdated()) {
3541
sb.append(" (수정됨)");
3642
}
43+
sb.append(" [").append(senderId).append("] ");
3744
return sb.toString();
3845
}
3946
}

src/main/java/com/sprint/mission/discodeit/entity/User.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.sprint.mission.discodeit.entity;
22

3+
import java.io.Serializable;
34
import java.util.Date;
45
import java.util.HashSet;
56
import java.util.Set;
67
import java.util.UUID;
78

8-
public class User extends BaseEntity {
9+
public class User extends BaseEntity implements Serializable {
10+
private static final long serialVersionUID = 1L;
911
private String userName;
1012
private final Set<UUID> channelIds = new HashSet<>();
1113

src/main/java/com/sprint/mission/discodeit/menu/ChannelMenu.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ public static void manageChannels(Scanner scanner, ChannelService channelService
4747
UUID upId = UUID.fromString(scanner.nextLine());
4848
System.out.print("새 이름 입력: ");
4949
String newName = scanner.nextLine();
50-
channelService.updateChannel(upId, newName);
50+
channelService.getChannel(upId).ifPresent(c -> {
51+
c.updateChannelName(newName);
52+
channelService.updateChannel(c);
53+
});
5154
break;
5255
case "5":
5356
System.out.print("삭제할 채널 ID 입력: ");

src/main/java/com/sprint/mission/discodeit/menu/UserMenu.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ public static void manageUsers(Scanner scanner, UserService userService, UserInt
4646
UUID updateId = UUID.fromString(scanner.nextLine());
4747
System.out.print("새 이름 입력: ");
4848
String newName = scanner.nextLine();
49-
userService.updateUser(updateId, newName);
49+
userService.getUser(updateId).ifPresent(u -> {
50+
u.updateUserName(newName);
51+
userService.updateUser(u);
52+
});
5053
break;
5154
case "5":
5255
System.out.print("삭제할 사용자 ID 입력: ");
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.sprint.mission.discodeit.repository;
2+
3+
import com.sprint.mission.discodeit.entity.Channel;
4+
5+
import java.util.List;
6+
import java.util.Optional;
7+
import java.util.UUID;
8+
9+
public interface ChannelRepository {
10+
Channel save(Channel channel); // 저장 로직
11+
Optional<Channel> findById(UUID channelId); // 저장 로직
12+
List<Channel> findAll(); // 저장 로직
13+
void deleteById(UUID channelId); // 저장 로직
14+
}

0 commit comments

Comments
 (0)