Skip to content

Commit c25068f

Browse files
committed
심화 요구사항 반영
1 parent 8097cb1 commit c25068f

File tree

9 files changed

+155
-49
lines changed

9 files changed

+155
-49
lines changed

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

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33
import com.sprint.mission.discodeit.entity.Channel;
44
import com.sprint.mission.discodeit.entity.Message;
55
import com.sprint.mission.discodeit.entity.User;
6-
import com.sprint.mission.discodeit.service.ChannelService;
7-
import com.sprint.mission.discodeit.service.MessageService;
8-
import com.sprint.mission.discodeit.service.UserService;
96
import com.sprint.mission.discodeit.service.jcf.JCFChannelService;
107
import com.sprint.mission.discodeit.service.jcf.JCFMessageService;
118
import com.sprint.mission.discodeit.service.jcf.JCFUserService;
@@ -14,9 +11,12 @@
1411

1512
public class JavaApplication {
1613
public static void main(String[] args) {
17-
UserService userService = new JCFUserService();
18-
MessageService messageService = new JCFMessageService();
19-
ChannelService channelService = new JCFChannelService();
14+
JCFUserService userService = new JCFUserService();
15+
JCFMessageService messageService = new JCFMessageService(userService, null);
16+
JCFChannelService channelService = new JCFChannelService(messageService, userService);
17+
18+
messageService.setChannelService(channelService);
19+
userService.addChannelService(channelService);
2020

2121
System.out.println("유저 생성 및 조회");
2222
User user1 = new User("유저1");
@@ -32,7 +32,7 @@ public static void main(String[] args) {
3232
System.out.println("모든 유저 조회");
3333
userService.getAllUsers().stream()
3434
.sorted(Comparator.comparing(User::getUserName))
35-
.forEach(user -> System.out.println("Id : " + user.getId() + " 유저 이름 : " + user.getUserName() ));
35+
.forEach(user -> System.out.println("Id : " + user.getId() + " 유저 이름 : " + user.getUserName()));
3636

3737
System.out.println();
3838
System.out.println("채널 생성 및 조회");
@@ -42,10 +42,10 @@ public static void main(String[] args) {
4242
channelService.createChannel(channel1);
4343
channelService.createChannel(channel2);
4444

45-
channel1.addUser(user1.getId());
46-
channel1.addUser(user2.getId());
47-
channel2.addUser(user3.getId());
48-
channel2.addUser(user4.getId());
45+
channelService.addUserToChannel(channel1.getId(), user1.getId());
46+
channelService.addUserToChannel(channel1.getId(), user2.getId());
47+
channelService.addUserToChannel(channel2.getId(), user3.getId());
48+
channelService.addUserToChannel(channel2.getId(), user4.getId());
4949

5050
System.out.println("채널 참가 유저 목록 조회");
5151
System.out.println("채널 : " + channel1.getChannelName());
@@ -55,33 +55,20 @@ public static void main(String[] args) {
5555

5656
System.out.println();
5757
System.out.println("메시지 생성 및 조회");
58-
Message message1 = new Message("안녕하세요", user1.getId(), channel1.getId());
59-
Message message2 = new Message("여긴 채널1입니다", user2.getId(), channel1.getId());
60-
Message message3 = new Message("여긴 채널2입니다", user3.getId(), channel2.getId());
61-
Message message4 = new Message("테스트중", user4.getId(), channel2.getId());
62-
63-
messageService.createMessage(message1);
64-
channelService.addMessageToChannel(channel1.getId(), message1.getId());
65-
messageService.createMessage(message2);
66-
channelService.addMessageToChannel(channel1.getId(), message2.getId());
67-
messageService.createMessage(message3);
68-
channelService.addMessageToChannel(channel2.getId(), message3.getId());
69-
messageService.createMessage(message4);
70-
channelService.addMessageToChannel(channel2.getId(), message4.getId());
58+
messageService.createMessageCheck("안녕하세요", user1.getId(), channel1.getId());
59+
messageService.createMessageCheck("여긴 채널1입니다", user2.getId(), channel1.getId());
60+
messageService.createMessageCheck("여긴 채널2입니다", user3.getId(), channel2.getId());
61+
messageService.createMessageCheck("테스트중", user4.getId(), channel2.getId());
7162

7263
System.out.println("채널 : " + channel1.getChannelName() + "의 모든 메시지 목록");
7364
messageService.getAllMessages().stream()
7465
.filter(message -> message.getChannelId().equals(channel1.getId()))
75-
.forEach((message) -> {
76-
System.out.println(message.getId() + " - " + message.getMsgContent());
77-
});
66+
.forEach(message -> System.out.println(message.getId() + " - " + message.getMsgContent()));
7867

7968
System.out.println("채널 : " + channel2.getChannelName() + "의 모든 메시지 목록");
8069
messageService.getAllMessages().stream()
8170
.filter(message -> message.getChannelId().equals(channel2.getId()))
82-
.forEach((message) -> {
83-
System.out.println(message.getId() + " - " + message.getMsgContent());
84-
});
71+
.forEach(message -> System.out.println(message.getId() + " - " + message.getMsgContent()));
8572

8673
System.out.println();
8774
System.out.print("수정된 유저 정보 : ");
@@ -98,23 +85,36 @@ public static void main(String[] args) {
9885
System.out.println(channelService.getChannel(channel2.getId()));
9986
System.out.println();
10087

101-
System.out.print("수정된 메시지 : ");
102-
System.out.print(messageService.getMessage(message1.getId()).getMsgContent());
103-
messageService.updateMessage(message1.getId(), "Update Message");
104-
System.out.print(" -> ");
105-
System.out.println(messageService.getMessage(message1.getId()).getMsgContent());
106-
System.out.println();
88+
Message message1 = messageService.getAllMessages().stream()
89+
.filter(msg -> msg.getChannelId().equals(channel1.getId()) && msg.getMsgContent().equals("안녕하세요"))
90+
.findFirst().orElse(null);
10791

92+
if (message1 != null) {
93+
System.out.print("수정된 메시지 : ");
94+
System.out.print(message1.getMsgContent());
95+
messageService.updateMessage(message1.getId(), "Update Message");
96+
System.out.print(" -> ");
97+
System.out.println(messageService.getMessage(message1.getId()).getMsgContent());
98+
}
99+
100+
System.out.println();
108101
userService.deleteUser(user4.getId());
109102
channelService.deleteChannel(channel1.getId());
110-
messageService.deleteMessage(message3.getId());
111103

112-
System.out.println("삭제 후 남은 유저 목록");
104+
Message messageToDelete = messageService.getAllMessages().stream()
105+
.filter(msg -> msg.getChannelId().equals(channel2.getId()) && msg.getMsgContent().equals("여긴 채널2입니다"))
106+
.findFirst().orElse(null);
107+
if (messageToDelete != null) {
108+
messageService.deleteMessage(messageToDelete.getId());
109+
}
110+
111+
System.out.println("삭제 후 남은 유저");
113112
userService.getAllUsers().forEach(user -> System.out.println(user.getUserName()));
114-
System.out.println("삭제 후 남은 채널 목록");
113+
114+
System.out.println("삭제 후 남은 채널");
115115
channelService.getAllChannels().forEach(channel -> System.out.println(channel.getChannelName()));
116-
System.out.println("삭제 후 남은 메시지 목록");
117-
messageService.getAllMessages().forEach(message -> System.out.println(message.getMsgContent()));
118116

117+
System.out.println("삭제 후 남은 메시지");
118+
messageService.getAllMessages().forEach(message -> System.out.println(message.getMsgContent()));
119119
}
120120
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
// 공통으로 들어갈 변수들
66
public abstract class BaseEntity {
77
private final UUID id;
8-
private final Long createdAt;
9-
private Long updatedAt;
8+
private final long createdAt;
9+
private long updatedAt;
1010

1111
public BaseEntity() {
1212
this.id = UUID.randomUUID();
@@ -18,11 +18,11 @@ public UUID getId() {
1818
return id;
1919
}
2020

21-
public Long getCreatedAt() {
21+
public long getCreatedAt() {
2222
return createdAt;
2323
}
2424

25-
public Long getUpdatedAt() {
25+
public long getUpdatedAt() {
2626
return updatedAt;
2727
}
2828

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,16 @@ public Set<UUID> getUserIds() {
2424
return userIds;
2525
}
2626

27+
public List<UUID> getMessageIds() { return messageIds; }
28+
2729
public void addUser(UUID userId) {
2830
userIds.add(userId);
31+
updateTime();
2932
}
3033

3134
public void addMessage(UUID messageId) {
3235
messageIds.add(messageId);
36+
updateTime();
3337
}
3438

3539
@Override

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ public void updateUserName(String userName) {
2121
updateTime();
2222
}
2323

24+
public void addChannel(UUID channelId) {
25+
channelIds.add(channelId);
26+
}
27+
2428
@Override
2529
public String toString() {
2630
return "User{name = " + userName +

src/main/java/com/sprint/mission/discodeit/service/ChannelService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ public interface ChannelService {
1212
void updateChannel(UUID channelId, String channelName);
1313
void deleteChannel(UUID channelId);
1414
void addMessageToChannel(UUID channelId, UUID messageId);
15+
void addUserToChannel(UUID channelId, UUID userId);
1516
}

src/main/java/com/sprint/mission/discodeit/service/MessageService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ public interface MessageService {
1111
List<Message> getAllMessages();
1212
void updateMessage(UUID messageId, String msgContent);
1313
void deleteMessage(UUID messageId);
14+
Message createMessageCheck(String msgContent, UUID senderId, UUID channelId);
1415
}

src/main/java/com/sprint/mission/discodeit/service/jcf/JCFChannelService.java

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
package com.sprint.mission.discodeit.service.jcf;
22

33
import com.sprint.mission.discodeit.entity.Channel;
4+
import com.sprint.mission.discodeit.entity.Message;
5+
import com.sprint.mission.discodeit.entity.User;
46
import com.sprint.mission.discodeit.service.ChannelService;
7+
import com.sprint.mission.discodeit.service.MessageService;
8+
import com.sprint.mission.discodeit.service.UserService;
59

610
import java.util.*;
711

812
public class JCFChannelService implements ChannelService {
913
private final Map<UUID, Channel> data = new HashMap<>();
14+
private final MessageService messageService;
15+
private final UserService userService;
16+
17+
public JCFChannelService(MessageService messageService, UserService userService) {
18+
this.messageService = messageService;
19+
this.userService = userService;
20+
}
1021

1122
public Channel createChannel(Channel channel) {
1223
data.put(channel.getId(), channel);
@@ -22,19 +33,55 @@ public List<Channel> getAllChannels() {
2233
}
2334

2435
public void updateChannel(UUID channelId, String channelName) {
25-
if (data.containsKey(channelId)) {
26-
data.get(channelId).updateChannelName(channelName);
36+
Channel channel = data.get(channelId);
37+
if (channel != null) {
38+
channel.updateChannelName(channelName);
2739
}
2840
}
2941

3042
public void deleteChannel(UUID channelId) {
43+
Channel channel = getChannel(channelId);
44+
if (channel == null) {
45+
throw new IllegalArgumentException("존재하지 않는 채널");
46+
}
47+
48+
for (UUID messageId : new HashSet<>(channel.getMessageIds())) {
49+
messageService.deleteMessage(messageId);
50+
}
51+
3152
data.remove(channelId);
3253
}
3354

55+
public void addUserToChannel(UUID channelId, UUID userId) {
56+
Channel channel = data.get(channelId);
57+
if (channel == null) {
58+
throw new IllegalArgumentException("존재하지 않는 채널");
59+
}
60+
61+
User user = userService.getUser(userId);
62+
if (user == null) {
63+
throw new IllegalArgumentException("존재하지 않는 유저");
64+
}
65+
66+
channel.addUser(userId);
67+
user.addChannel(channelId);
68+
}
69+
3470
public void addMessageToChannel(UUID channelId, UUID messageId) {
3571
Channel channel = data.get(channelId);
36-
if (channel != null) {
37-
channel.addMessage(messageId);
72+
if (channel == null) {
73+
throw new IllegalArgumentException("존재하지 않는 채널");
3874
}
75+
76+
Message message = messageService.getMessage(messageId);
77+
if(message == null) {
78+
throw new IllegalArgumentException("존재하지 않는 메시지");
79+
}
80+
81+
if (!message.getChannelId().equals(channelId)) {
82+
throw new IllegalStateException("이 채널에 속하지 않은 메시지입니다");
83+
}
84+
85+
channel.addMessage(messageId);
3986
}
4087
}

src/main/java/com/sprint/mission/discodeit/service/jcf/JCFMessageService.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
package com.sprint.mission.discodeit.service.jcf;
22

3+
import com.sprint.mission.discodeit.entity.Channel;
34
import com.sprint.mission.discodeit.entity.Message;
5+
import com.sprint.mission.discodeit.entity.User;
6+
import com.sprint.mission.discodeit.service.ChannelService;
47
import com.sprint.mission.discodeit.service.MessageService;
8+
import com.sprint.mission.discodeit.service.UserService;
59

610
import java.util.*;
711

812
public class JCFMessageService implements MessageService {
913
private final Map<UUID, Message> data = new HashMap<>();
14+
private final UserService userService;
15+
private ChannelService channelService;
16+
17+
public JCFMessageService(UserService userService, ChannelService channelService) {
18+
this.userService = userService;
19+
this.channelService = channelService;
20+
}
1021

1122
public Message createMessage(Message message) {
1223
data.put(message.getId(), message);
@@ -21,6 +32,10 @@ public List<Message> getAllMessages() {
2132
return new ArrayList<>(data.values());
2233
}
2334

35+
public void setChannelService(JCFChannelService channelService) {
36+
this.channelService = channelService;
37+
}
38+
2439
public void updateMessage(UUID messageId, String message) {
2540
if (data.containsKey(messageId)) {
2641
data.get(messageId).updateMsgContent(message);
@@ -30,4 +45,25 @@ public void updateMessage(UUID messageId, String message) {
3045
public void deleteMessage(UUID messageId) {
3146
data.remove(messageId);
3247
}
48+
49+
public Message createMessageCheck(String msgContent, UUID senderId, UUID channelId) {
50+
User sender = userService.getUser(senderId);
51+
if (sender == null) {
52+
throw new IllegalArgumentException("존재하지 않는 유저");
53+
}
54+
55+
Channel channel = channelService.getChannel(channelId);
56+
if (channel == null) {
57+
throw new IllegalArgumentException("존재하지 않는 채널");
58+
}
59+
60+
if(!channel.getUserIds().contains(senderId)) {
61+
throw new IllegalStateException("채널에 속해있지 않은 유저");
62+
}
63+
64+
Message message = new Message(msgContent, senderId, channelId);
65+
data.put(message.getId(), message);
66+
channelService.addMessageToChannel(channelId,message.getId());
67+
return message;
68+
}
3369
}

src/main/java/com/sprint/mission/discodeit/service/jcf/JCFUserService.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package com.sprint.mission.discodeit.service.jcf;
22

33
import com.sprint.mission.discodeit.entity.User;
4+
import com.sprint.mission.discodeit.service.ChannelService;
45
import com.sprint.mission.discodeit.service.UserService;
56

67
import java.util.*;
78

89
public class JCFUserService implements UserService {
910
private final Map<UUID, User> data = new HashMap<>();
11+
private final Set<ChannelService> channelServiceSet = new HashSet<>();
12+
13+
public void addChannelService(ChannelService channelService) {
14+
channelServiceSet.add(channelService);
15+
}
1016

1117
@Override
1218
public User createUser(User user) {
@@ -34,5 +40,12 @@ public void updateUser(UUID userId, String userName) {
3440
@Override
3541
public void deleteUser(UUID userId) {
3642
data.remove(userId);
43+
channelServiceSet.forEach(service -> {
44+
service.getAllChannels().forEach(channel -> {
45+
if (channel.getUserIds().contains(userId)) {
46+
channel.getUserIds().remove(userId);
47+
}
48+
});
49+
});
3750
}
3851
}

0 commit comments

Comments
 (0)