Skip to content

Commit 471d692

Browse files
committed
feat: 심화기능 보충
1 parent 35be3fd commit 471d692

File tree

8 files changed

+268
-155
lines changed

8 files changed

+268
-155
lines changed

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

Lines changed: 162 additions & 126 deletions
Large diffs are not rendered by default.

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public Message(User sender,Channel channel, String category, String content) {
2121
this.content = content;
2222
this.createdAt = System.currentTimeMillis();
2323
this.updatedAt = this.createdAt; //updatedAt의 처음 시간은 createAt과 동일해야 함
24+
25+
validateMessage();
2426
}
2527

2628
public UUID getId() {
@@ -72,6 +74,20 @@ public void update(Message updateMessageData) {
7274
this.updatedAt = System.currentTimeMillis();
7375
}
7476

77+
public void validateMessage() {
78+
//채널 멤버가 아닌 유저가 메시지 생성시
79+
if (!channel.getMembers().contains(sender)) {
80+
throw new IllegalArgumentException(
81+
" ---" + sender.getName()+"(은/는) [" + channel.getChannelName() + "]채널 멤버가 아닙니다.");
82+
}
83+
84+
//채널에 없는 카테고리에 메시지 생성시
85+
if (!channel.getCategory().contains(category)) {
86+
throw new IllegalArgumentException(
87+
" ---"+ category + "(은/는) [" + channel.getChannelName() + "]채널에 존재 하지 않는 카테고리입니다.");
88+
}
89+
}
90+
7591
public String toString() {
7692
return "Message{" +
7793
"id= '" + id + '\'' +
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.sprint.mission.discodeit.factory;
2+
3+
import com.sprint.mission.discodeit.service.ChannelService;
4+
import com.sprint.mission.discodeit.service.MessageService;
5+
import com.sprint.mission.discodeit.service.UserService;
6+
import com.sprint.mission.discodeit.service.jcf.JCFChannelService;
7+
import com.sprint.mission.discodeit.service.jcf.JCFMessageService;
8+
import com.sprint.mission.discodeit.service.jcf.JCFUserService;
9+
10+
public class ServiceFactory {
11+
12+
private static final ServiceFactory instance = new ServiceFactory();
13+
14+
private final ChannelService channelService;
15+
private final UserService userService;
16+
private final MessageService messageService;
17+
18+
private ServiceFactory() {
19+
this.channelService = new JCFChannelService();
20+
this.userService = new JCFUserService((JCFChannelService) channelService);
21+
this.messageService = new JCFMessageService((JCFUserService) userService, (JCFChannelService) channelService);
22+
}
23+
24+
public static ServiceFactory getInstance() {
25+
return instance;
26+
}
27+
28+
public ChannelService createChannelService() {
29+
return channelService;
30+
}
31+
public UserService createUserService() {
32+
return userService;
33+
}
34+
public MessageService createMessageService() {
35+
return messageService;
36+
}
37+
38+
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@ public interface ChannelService {
1919

2020
public Set<User> members(UUID id);
2121

22+
public List<Channel> readByName(String channelName);
23+
24+
public Map<String, List<List<String>>> groupByChannel();
25+
2226
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,16 @@ public interface UserService {
1010

1111
public User read(UUID id);
1212

13-
public List<User> read(String name);
13+
public List<User> readByName(String name);
1414

1515
public List<User> readAll();
1616

1717
public User update(UUID id, User update);
1818

1919
public boolean delete(UUID id, String password);
2020

21+
public void removeUserFromChannels(User user);
22+
23+
public Map<String, List<String>> groupByGender();
24+
2125
}

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

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.sprint.mission.discodeit.service.jcf;
22
import com.sprint.mission.discodeit.entity.Channel;
3+
import com.sprint.mission.discodeit.entity.Message;
34
import com.sprint.mission.discodeit.entity.User;
45
import com.sprint.mission.discodeit.service.ChannelService;
56

@@ -18,7 +19,6 @@ public void create(Channel channel) {
1819
for (Channel existingChannel : data.values()) {
1920
if (existingChannel.getChannelName().equals(channel.getChannelName())
2021
&& existingChannel.getKeyUser().equals(channel.getKeyUser())) {
21-
2222
throw new IllegalArgumentException(" --- "+ channel.getKeyUser().getName()+"님! 이미 등록된 채널입니다.");
2323
}
2424
}
@@ -37,21 +37,38 @@ public void create(Channel channel) {
3737
//채널 조회
3838
@Override
3939
public Channel read(UUID id) {
40-
return this.data.get(id);
40+
Channel channel = this.data.get(id);
41+
42+
if (channel == null) { //아무 객체도 가리키지 않음
43+
throw new IllegalArgumentException(" --해당 ID의 채널을 찾을 수 없습니다.");
44+
}
45+
46+
return channel;
4147
}
4248

4349
//채널 전체 조회
4450
@Override
4551
public List<Channel> readAll() {
46-
return new ArrayList<>(data.values());
52+
List<Channel> channels = new ArrayList<>(data.values());
53+
54+
if (channels.isEmpty()) { //리스트있지만 요소없음
55+
System.out.println(" --조회 가능한 채널이 없습니다.");
56+
}
57+
58+
return channels;
4759
}
4860

4961
//채널 수정
5062
@Override
5163
public Channel update(UUID id, Channel update) {
52-
Channel selected = this.data.get(id);
53-
selected.update(update);
54-
return selected;
64+
Channel channel = this.data.get(id);
65+
66+
if (channel == null) {
67+
throw new IllegalArgumentException(" --해당 ID의 채널을 찾을 수 없습니다.");
68+
}
69+
70+
channel.update(update);
71+
return channel;
5572
}
5673

5774
//채널 삭제
@@ -84,10 +101,16 @@ public Map<String, List<List<String>>> groupByChannel() {
84101
}
85102

86103
//특정 채널 정보
87-
public List<Channel> findChannel(String channelName) {
88-
return data.values().stream()
89-
.filter(c -> c.getChannelName().equals(channelName))
104+
public List<Channel> readByName(String channelName) {
105+
List<Channel> result = data.values().stream()
106+
.filter(channel -> channel.getChannelName().contains(channelName))
90107
.collect(Collectors.toList());
108+
109+
if (result.isEmpty()) {
110+
throw new IllegalArgumentException("존재하지 않는 채널입니다.");
111+
}
112+
return result;
91113
}
92114

115+
93116
}

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

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,7 @@ public JCFMessageService(JCFUserService userService, JCFChannelService channelSe
2121
//메시지 생성
2222
@Override
2323
public void create(Message message) {
24-
//채널 멤버가 아닌 유저가 메시지 생성시
25-
if (!message.getChannel().getMembers().contains(message.getSender())) {
26-
throw new IllegalArgumentException(
27-
" ---" + message.getSender().getName()+"(은/는) [" + message.getChannel().getChannelName() + "]채널 멤버가 아닙니다.");
28-
}
29-
30-
//채널에 없는 카테고리에 메시지 생성시
31-
if (!message.getChannel().getCategory().contains(message.getCategory())) {
32-
throw new IllegalArgumentException(
33-
" ---"+message.getCategory()+ "(은/는) [" + message.getChannel().getChannelName() + "]채널에 존재 하지 않는 카테고리입니다.");
34-
}
35-
24+
// message.validateMessage();
3625
data.put(message.getId(), message);
3726
}
3827

@@ -45,7 +34,6 @@ public Message read(UUID id) {
4534
if (message == null) {
4635
throw new IllegalArgumentException(" --해당 ID의 메시지를 찾을 수 없습니다.");
4736
}
48-
4937
return this.data.get(id);
5038
}
5139

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

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.sprint.mission.discodeit.entity.Channel;
44
import com.sprint.mission.discodeit.entity.User;
5-
import com.sprint.mission.discodeit.service.ChannelService;
65
import com.sprint.mission.discodeit.service.UserService;
76

87
import java.util.*;
@@ -36,7 +35,7 @@ public User read(UUID id) {
3635

3736
//유저 이름으로 조회
3837
@Override
39-
public List<User> read(String name) {
38+
public List<User> readByName(String name) {
4039
List<User> result = data.values().stream()
4140
.filter(user -> user.getName().contains(name))
4241
.collect(Collectors.toList());
@@ -56,9 +55,14 @@ public List<User> readAll() {
5655
//유저 수정
5756
@Override
5857
public User update(UUID id, User update) {
59-
User selected = this.data.get(id);
60-
selected.update(update);
61-
return selected;
58+
User user = this.data.get(id);
59+
60+
if (user == null) {
61+
throw new IllegalArgumentException(" --해당 ID의 채널을 찾을 수 없습니다.");
62+
}
63+
64+
user.update(update);
65+
return user;
6266
}
6367

6468
//유저 삭제
@@ -79,7 +83,7 @@ public boolean delete(UUID id, String password) {
7983
}
8084

8185
//채널 전체에서 해당 유저 삭제
82-
private void removeUserFromChannels(User user) {
86+
public void removeUserFromChannels(User user) {
8387
for (Channel channel : channelService.readAll()) {
8488
Set<User> members = new HashSet<>(channel.getMembers());
8589
if (members.remove(user)) {

0 commit comments

Comments
 (0)