Skip to content

Commit 67da311

Browse files
authored
Merge pull request #61 from bs8841/조백선-sprint2
[조백선] sprint2
2 parents 38c88c9 + 8b04ada commit 67da311

34 files changed

+1221
-184
lines changed
Binary file not shown.
183 Bytes
Binary file not shown.

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

Lines changed: 105 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,52 +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;
12+
import com.sprint.mission.discodeit.service.ChannelService;
13+
import com.sprint.mission.discodeit.service.MessageService;
14+
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;
21+
import com.sprint.mission.discodeit.service.jcf.integration.ChannelIntegration;
622
import com.sprint.mission.discodeit.service.jcf.JCFChannelService;
723
import com.sprint.mission.discodeit.service.jcf.JCFMessageService;
824
import com.sprint.mission.discodeit.service.jcf.JCFUserService;
25+
import com.sprint.mission.discodeit.service.jcf.integration.MessageIntegration;
26+
import com.sprint.mission.discodeit.service.jcf.integration.UserIntegration;
927

28+
import java.nio.file.Path;
29+
import java.nio.file.Paths;
1030
import java.util.Scanner;
1131

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+
1289
public class JavaApplication {
1390
public static void main(String[] args) {
14-
Scanner scanner = new Scanner(System.in);
15-
JCFUserService userService = new JCFUserService();
16-
JCFMessageService messageService = new JCFMessageService(userService, null);
17-
JCFChannelService channelService = new JCFChannelService(messageService, userService);
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);
1898

19-
messageService.setChannelService(channelService);
20-
userService.addChannelService(channelService);
99+
UserIntegration userIntegration = new UserIntegration(userService, channelService);
100+
ChannelIntegration channelIntegration = new ChannelIntegration(channelService, userService, messageService);
101+
MessageIntegration messageIntegration = new MessageIntegration(messageService, userService, channelService);
21102

103+
Scanner scanner = new Scanner(System.in);
22104
while (true) {
23105
System.out.println("\n===== MAIN MENU =====");
24106
System.out.println("1. 사용자 메뉴");
25107
System.out.println("2. 채널 메뉴");
26108
System.out.println("3. 메시지 메뉴");
27109
System.out.println("0. 종료");
28110
System.out.print("번호를 입력하세요: ");
111+
String input = scanner.nextLine();
29112

30-
String mainChoice = scanner.nextLine();
31-
32-
try {
33-
switch (mainChoice) {
34-
case "1":
35-
UserMenu.manageUsers(scanner, userService);
36-
break;
37-
case "2":
38-
ChannelMenu.manageChannels(scanner, channelService, userService);
39-
break;
40-
case "3":
41-
MessageMenu.manageMessages(scanner, messageService, userService, channelService);
42-
break;
43-
case "0":
44-
System.out.println("종료합니다.");
45-
return;
46-
default:
47-
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;
48120
}
49-
} catch (Exception e) {
50-
System.out.println("[오류] 메뉴 처리 중 문제가 발생했습니다: " + e.getMessage());
121+
default -> System.out.println("올바른 번호를 입력하세요.");
51122
}
52123
}
53124
}
54-
}
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: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
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

1214
public User(String userName) {
1315
this.userName = userName;
1416
}
1517

16-
public String getUserName() {
17-
return userName;
18+
public Set<UUID> getChannelIds() {
19+
return channelIds;
1820
}
1921

2022
public void updateUserName(String userName) {

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

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

3+
import com.sprint.mission.discodeit.service.jcf.integration.ChannelIntegration;
34
import com.sprint.mission.discodeit.entity.Channel;
4-
import com.sprint.mission.discodeit.service.jcf.JCFChannelService;
5-
import com.sprint.mission.discodeit.service.jcf.JCFUserService;
5+
import com.sprint.mission.discodeit.service.ChannelService;
66

77
import java.util.Scanner;
88
import java.util.UUID;
99

1010
public class ChannelMenu {
11-
public static void manageChannels(Scanner scanner, JCFChannelService channelService, JCFUserService userService) {
11+
public static void manageChannels(Scanner scanner, ChannelService channelService, ChannelIntegration channelIntegration) {
1212
while (true) {
1313
System.out.println("\n===== CHANNEL MENU =====");
1414
System.out.println("1. 채널 생성");
@@ -33,8 +33,11 @@ public static void manageChannels(Scanner scanner, JCFChannelService channelServ
3333
case "2":
3434
System.out.print("채널 ID 입력: ");
3535
UUID id = UUID.fromString(scanner.nextLine());
36-
Channel found = channelService.getChannel(id);
37-
System.out.println(found != null ? found : "채널을 찾을 수 없습니다.");
36+
channelService.getChannel(id)
37+
.ifPresentOrElse(
38+
System.out::println,
39+
() -> System.out.println("채널을 찾을 수 없습니다.")
40+
);
3841
break;
3942
case "3":
4043
channelService.getAllChannels().forEach(System.out::println);
@@ -44,19 +47,22 @@ public static void manageChannels(Scanner scanner, JCFChannelService channelServ
4447
UUID upId = UUID.fromString(scanner.nextLine());
4548
System.out.print("새 이름 입력: ");
4649
String newName = scanner.nextLine();
47-
channelService.updateChannel(upId, newName);
50+
channelService.getChannel(upId).ifPresent(c -> {
51+
c.updateChannelName(newName);
52+
channelService.updateChannel(c);
53+
});
4854
break;
4955
case "5":
5056
System.out.print("삭제할 채널 ID 입력: ");
5157
UUID delId = UUID.fromString(scanner.nextLine());
52-
channelService.deleteChannel(delId);
58+
channelIntegration.deleteChannel(delId);
5359
break;
5460
case "6":
5561
System.out.print("채널 ID 입력: ");
5662
UUID chId = UUID.fromString(scanner.nextLine());
5763
System.out.print("사용자 ID 입력: ");
5864
UUID userId = UUID.fromString(scanner.nextLine());
59-
channelService.addUserToChannel(chId, userId);
65+
channelIntegration.addUserToChannel(chId, userId);
6066
break;
6167
case "0":
6268
return;

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package com.sprint.mission.discodeit.menu;
22

33
import com.sprint.mission.discodeit.entity.Message;
4-
import com.sprint.mission.discodeit.service.jcf.JCFMessageService;
5-
import com.sprint.mission.discodeit.service.jcf.JCFUserService;
6-
import com.sprint.mission.discodeit.service.jcf.JCFChannelService;
4+
import com.sprint.mission.discodeit.service.MessageService;
5+
import com.sprint.mission.discodeit.service.jcf.integration.MessageIntegration;
76

87
import java.util.Scanner;
98
import java.util.UUID;
109

1110
public class MessageMenu {
12-
public static void manageMessages(Scanner scanner, JCFMessageService messageService, JCFUserService userService, JCFChannelService channelService) {
11+
public static void manageMessages(Scanner scanner, MessageService messageService, MessageIntegration messageIntegration) {
1312
while (true) {
1413
System.out.println("\n===== MESSAGE MENU =====");
1514
System.out.println("1. 메시지 생성");
@@ -30,14 +29,17 @@ public static void manageMessages(Scanner scanner, JCFMessageService messageServ
3029
UUID sender = UUID.fromString(scanner.nextLine());
3130
System.out.print("채널 ID: ");
3231
UUID ch = UUID.fromString(scanner.nextLine());
33-
Message m = messageService.createMessageCheck(content, sender, ch);
32+
Message m = messageIntegration.createMessage(content, sender, ch);
3433
System.out.println("생성된 메시지 ID: " + m.getId());
3534
break;
3635
case "2":
3736
System.out.print("메시지 ID 입력: ");
3837
UUID id = UUID.fromString(scanner.nextLine());
39-
Message find = messageService.getMessage(id);
40-
System.out.println(find != null ? find : "메시지를 찾을 수 없습니다.");
38+
messageService.getMessage(id)
39+
.ifPresentOrElse(
40+
System.out::println,
41+
() -> System.out.println("메시지를 찾을 수 없습니다.")
42+
);
4143
break;
4244
case "3":
4345
messageService.getAllMessages().forEach(System.out::println);
@@ -52,7 +54,7 @@ public static void manageMessages(Scanner scanner, JCFMessageService messageServ
5254
case "5":
5355
System.out.print("삭제할 메시지 ID 입력: ");
5456
UUID delId = UUID.fromString(scanner.nextLine());
55-
messageService.deleteMessage(delId);
57+
messageIntegration.deleteMessage(delId);
5658
break;
5759
case "0":
5860
return;

0 commit comments

Comments
 (0)