Skip to content

Commit 35be3fd

Browse files
committed
feat: 채널삭제기능 보충
1 parent 8048ae4 commit 35be3fd

File tree

7 files changed

+130
-71
lines changed

7 files changed

+130
-71
lines changed

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

Lines changed: 70 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -67,29 +67,29 @@ private static List<User> createAndRegisterUsers(JCFUserService userService) {
6767
//채널,멤버,카테고리 생성 및 등록
6868
private static List<Channel> createAndRegisterChannels(JCFChannelService channelService, List<User> users) {
6969
//채널1 멤버, 카테고리생성
70-
Set<User> members1 = Set.of(users.get(0), users.get(1), users.get(3));
70+
Set<User> members1 = new HashSet<>(Set.of(users.get(0), users.get(1), users.get(3)));
7171
List<String> cat1 = List.of("공지", "질문", "2팀");
7272

7373
//채널2 멤버, 카테고리생성
74-
Set<User> members2 = Set.of(users.get(1), users.get(2), users.get(4));
74+
Set<User> members2 = new HashSet<>(Set.of(users.get(1), users.get(2), users.get(4)));
7575
List<String> cat2 = List.of("이벤트", "소통");
7676

7777
//채널3 멤버, 카테고리생성
78-
Set<User> members3 = Set.of(users.get(5));
78+
Set<User> members3 = new HashSet<>(Set.of(users.get(5)));
7979
List<String> cat3 = List.of("기타");
8080

81-
Channel channel1 = new Channel("sp01", cat1, members1);
82-
Channel channel2 = new Channel("sp02", cat2, members2);
83-
Channel channel3 = new Channel("sp03", cat3, members3);
81+
Channel channel1 = new Channel("sp01", users.get(1), cat1, members1);
82+
Channel channel2 = new Channel("sp02", users.get(1), cat2, members2);
83+
Channel channel3 = new Channel("sp03", users.get(5), cat3, members3);
8484

8585

8686
//-----심화-----//
8787
//중복 채널명_ex)
88-
Channel channel4 = new Channel("sp03", cat3, members3);
88+
Channel channel4 = new Channel("sp03", users.get(5), cat3, members3);
8989

9090
//중복 카테고리_ex)
9191
List<String> cat5 = List.of("공지","공지");
92-
Channel channel5 = new Channel("sp05", cat5, members3);
92+
Channel channel5 = new Channel("sp05", users.get(5), cat5, members3);
9393

9494
System.out.println("<--------------------채널을 등록합니다------------------------->\n.\n.");
9595

@@ -100,7 +100,8 @@ private static List<Channel> createAndRegisterChannels(JCFChannelService channel
100100
try {
101101
channelService.create(ch_i.get(i));
102102
channels.add(ch_i.get(i));
103-
System.out.println("채널"+(i+1)+"[" + ch_i.get(i).getChannelName() + "] 등록 완료");
103+
System.out.print("채널"+(i+1)+"[" + ch_i.get(i).getChannelName() + "] 등록 완료");
104+
System.out.println(" --- 방장: " + ch_i.get(i).getKeyUser().getName());
104105

105106
} catch (IllegalArgumentException e) {
106107
System.out.println("!!채널" + (i+1) + "[" + ch_i.get(i).getChannelName() + "] 등록 실패!!" + e.getMessage());
@@ -134,7 +135,7 @@ private static void createAndRegisterMessages(JCFMessageService messageService,
134135
try {
135136
messageService.create(me_i.get(i));
136137
messages.add(me_i.get(i));
137-
System.out.println("메시지"+(i+1)+" 저장 완료");
138+
System.out.println("채널 ["+messages.get(i).getChannel().getChannelName() + "]에 메시지"+(i+1)+" 저장 완료");
138139
} catch (IllegalArgumentException e) {
139140
System.out.println("!!메시지" + (i+1) + " 저장 실패!!" + e.getMessage());
140141
}
@@ -177,17 +178,20 @@ private static void updateUser(JCFUserService userService, List<User> users){
177178
//유저 수정 테스트
178179
System.out.println("\n유저 수정하기\n수정 전: ");
179180

180-
//수정하려는 유저 origin에 저장
181-
User origin = users.get(2);
182-
System.out.println(userService.read(origin.getId()));
181+
//수정하려는 유저 original에 저장
182+
User original = users.get(2);
183+
System.out.println(userService.read(original.getId()));
183184

184185
//수정한 유저정보 updated에 저장
185-
User updated = userService.update(origin.getId(), new User("김철수", origin.getGender(), origin.getEmail(), origin.getPhone(), origin.getPassword()));
186+
User updated = userService.update(original.getId(), new User("김철수", original.getGender(), original.getEmail(), "010-0011-0011", original.getPassword()));
186187
System.out.println("수정 후(이름, 번호): ");
187188
System.out.println(userService.read(updated.getId()));
188189
}
189190
private static void deleteUser(JCFUserService userService, List<User> users){
190191
System.out.println("\n------------------------ DeleteUser ----------------------------");
192+
System.out.println("\n전체 유저 목록: ");
193+
userService.readAll().forEach(System.out::println);
194+
191195
//유저 삭제 실패
192196
System.out.println("\n"+ users.get(3).getName() +" 유저 탈퇴 진행중..\n.\n.\n");
193197
userService.delete(users.get(3).getId(),"0000");
@@ -250,26 +254,59 @@ private static void updateChannel(JCFChannelService channelService, List<Channel
250254
System.out.println("\n------------------------- UpdateChannel -----------------------");
251255

252256
//채널 수정
253-
System.out.println("\n채널 수정하기\n수정 전: ");
254-
//수정하려는 채널 original에 저장
255-
Channel original = channels.get(2);
256-
System.out.println(channelService.read(original.getId()));
257+
Channel original, updated;
258+
original = channels.get(2); //수정하려는 채널
259+
260+
System.out.println("\n["+ original.getChannelName() +"] 채널 수정 진행중\n.\n.\n.");
261+
System.out.println("\n["+ original.getChannelName() +"] 수정 완료(채널 이름): ");
262+
System.out.println("수정 전: " + channelService.read(original.getId()));
257263

258264
//수정한 채널 updated에 저장, 출력(채널명 수정)
259-
Channel updated = channelService.update(original.getId(), new Channel("변경sp03", original.getCategory(), original.getMembers()));
260-
System.out.println("수정 후(채널 이름): ");
261-
System.out.println(updated.toString());
265+
updated = channelService.update(original.getId(), new Channel("변경sp03", original.getKeyUser(),original.getCategory(), original.getMembers()));
266+
channelService.update(original.getId(), updated);
267+
System.out.println("수정 후: " + channelService.read(original.getId()));
268+
269+
270+
//수정한 채널 updated에 저장, 출력(방장 변경 + member에 추가)
271+
System.out.println("\n["+ original.getChannelName() +"] 채널 수정 진행중\n.\n.\n.");
272+
System.out.println("\n["+ original.getChannelName() +"] 수정 완료(새 유저로 방장 변경): ");
273+
System.out.println("수정 전: " + channelService.read(original.getId()));
274+
275+
updated = channelService.update(original.getId(), new Channel(original.getChannelName(), users.get(1), original.getCategory(), original.getMembers()));
276+
channelService.update(original.getId(), updated);
277+
System.out.println("수정 후: " + channelService.read(original.getId()));
278+
279+
280+
//기존 유저에서 방장변경
281+
//채널1에서 변경
282+
original = channels.get(0);
283+
System.out.println("\n["+ original.getChannelName() +"] 채널 수정 진행중\n.\n.\n.");
284+
System.out.println("\n["+ original.getChannelName() +"] 수정 완료(기존 유저로 방장 변경): ");
285+
System.out.println("수정 전: " + channelService.read(original.getId()));
286+
287+
updated = channelService.update(original.getId(), new Channel(original.getChannelName(), users.get(0), original.getCategory(), original.getMembers()));
288+
channelService.update(original.getId(), updated);
289+
System.out.println("수정 후: " + channelService.read(original.getId()));
290+
262291
}
263292
private static void deleteChannel(JCFChannelService channelService, List<Channel> channels, List<User> users){
264293
System.out.println("\n------------------------ DeleteChannel ------------------------");
265294

266-
//채널 삭제
267-
System.out.println("\n.\n.\n<<채널3 삭제 완료>>\n");
268-
channelService.delete(channels.get(2).getId());
295+
System.out.print("\n전체 채널 목록: \n");
296+
channelService.readAll().forEach(System.out::println);
297+
298+
//채널 삭제 실패
299+
System.out.println("\n["+ channels.get(2).getChannelName() +"] 채널 삭제 진행중..\n.\n.\n");
300+
channelService.delete(channels.get(2).getId(), users.get(1), "0000");
301+
302+
//채널 삭제 성공
303+
System.out.println("\n["+ channels.get(2).getChannelName() +"] 채널 삭제 진행중..\n.\n.\n");
304+
channelService.delete(channels.get(2).getId(), users.get(1), "9999");
305+
306+
//삭제 후 전체 유저 조회
307+
System.out.print("\n전체 채널 목록: \n");
308+
channelService.readAll().forEach(System.out::println);
269309

270-
//채널 삭제 후 재조회
271-
System.out.print("삭제 후 전체 채널: \n");
272-
channelService.readAll().forEach(channel -> System.out.println("[" + channel.getChannelName() + "]"));
273310
}
274311
private static void groupingChannel(JCFChannelService channelService, List<Channel> channels, List<User> users) {
275312
System.out.println("------------------------- GroupingUser -------------------------");
@@ -317,15 +354,16 @@ private static void readMessages(JCFMessageService messageService) {
317354
}
318355
private static void updateMessages(JCFMessageService messageService) {
319356
System.out.println("\n------------------------- UpdateMessage ------------------------");
320-
//수정할 메시지 origin변수에 저장
321-
Message origin = messageService.read(messageService.readAll().get(0).getId());
357+
//수정할 메시지 original변수에 저장
358+
Message original = messageService.read(messageService.readAll().get(0).getId());
359+
System.out.println("\n메시지1 수정 전: \n" + messageService.read(original.getId()));
322360

323361
//변경 메시지 updated변수에 저장
324-
Message updated = new Message(origin.getSender(), origin.getChannel(), origin.getCategory(), "공지 수정합니다~~~~");
362+
Message updated = new Message(original.getSender(), original.getChannel(), original.getCategory(), "공지 수정합니다~~~~");
325363

326364
//메시지 수정
327-
messageService.update(origin.getId(), updated);
328-
System.out.println("\n메시지1 수정: \n" + messageService.read(origin.getId()));
365+
messageService.update(original.getId(), updated);
366+
System.out.println("\n메시지1 수정: \n" + messageService.read(original.getId()));
329367

330368
//수정후 전체 메시지
331369
System.out.println("\n전체 메시지");

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

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
package com.sprint.mission.discodeit.entity;
22

33
import java.util.*;
4+
import java.util.stream.Collectors;
45

56
public class Channel {
67
private UUID id;
78
private String channelName;
9+
private User keyUser;
810
private List<String> categories;
911
private Set<User> members;
1012
private long createdAt;
1113
private long updatedAt;
1214

13-
public Channel(String channelName, List<String> categories, Set<User> members) {
15+
public Channel(String channelName, User keyUser, List<String> categories, Set<User> members) {
1416
this.id = UUID.randomUUID();
1517
this.channelName = channelName;
1618
this.categories = categories;
17-
this.members = members;
19+
20+
this.keyUser = keyUser;
21+
this.members = new HashSet<>(members);
22+
this.members.add(keyUser);
23+
1824
this.createdAt = System.currentTimeMillis();
1925
this.updatedAt = this.createdAt; //updatedAt의 처음 시간은 createAt과 동일해야 함
2026
}
@@ -58,18 +64,28 @@ public void setUpdatedAt(long updatedAt) {
5864
this.updatedAt = updatedAt;
5965
}
6066

67+
public User getKeyUser() {
68+
return keyUser;
69+
}
70+
71+
public void addMember(User user) {
72+
members.add(user);
73+
}
74+
6175
public void update(Channel updateChannelData) {
6276
this.channelName = updateChannelData.channelName;
63-
this.categories = new ArrayList<>(categories);
77+
this.keyUser = updateChannelData.keyUser;
78+
this.categories = new ArrayList<>(updateChannelData.categories);
6479
this.members = new HashSet<>(updateChannelData.members);
6580
this.updatedAt = System.currentTimeMillis();
6681
}
6782

6883
public String toString() {
6984
return "Channel{" +
70-
"ChannelName='" + channelName + '\'' +
71-
", Category=" + categories + '\'' +
72-
", Members=" + members +
73-
'}';
85+
"ChannelName= '" + channelName + '\'' +
86+
", KeyUser= '" + keyUser.getName() + '\'' +
87+
", Category= '" + categories + '\'' +
88+
", Members= '" + members.stream().map(User::getName).collect(Collectors.toList()) +
89+
"'}";
7490
}
7591
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,11 @@ public void update(Message updateMessageData) {
7474

7575
public String toString() {
7676
return "Message{" +
77-
"id= " + id + '\'' +
78-
", sender= " + sender.getName() + '\'' +
79-
", channel= " + channel.getChannelName() + '\'' +
77+
"id= '" + id + '\'' +
78+
", sender= '" + sender.getName() + '\'' +
79+
", channel= '" + channel.getChannelName() + '\'' +
8080
", category= '" + category + '\'' +
81-
", content= " + content + '\'' +
81+
", content= '" + content + '\'' +
8282
'}';
8383
}
8484

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,11 @@ public void update(User updateUserData) {
8585

8686
public String toString() {
8787
return "User{" +
88-
"UserName='" + name + '\'' +
89-
", Gender='" + gender + '\'' +
90-
", email=" + email + '\'' +
91-
", phone=" + phone + '\'' +
92-
", password=" + password + '\'' +
88+
"UserName= '" + name + '\'' +
89+
", Gender= '" + gender + '\'' +
90+
", email= '" + email + '\'' +
91+
", phone= '" + phone + '\'' +
92+
", password= '" + password + '\'' +
9393
'}';
9494
}
9595
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public interface ChannelService {
1515

1616
public Channel update(UUID id, Channel update);
1717

18-
public boolean delete(UUID id);
18+
public boolean delete(UUID id, User user, String password);
1919

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

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

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,25 @@ public class JCFChannelService implements ChannelService {
1313
//채널 생성
1414
@Override
1515
public void create(Channel channel) {
16-
//이미 생성된 채널 추가시
16+
17+
//중복 채널명 검증
1718
for (Channel existingChannel : data.values()) {
18-
if (existingChannel.getChannelName().equals(channel.getChannelName())) {
19-
throw new IllegalArgumentException(" --- 이미 등록된 채널입니다.");
19+
if (existingChannel.getChannelName().equals(channel.getChannelName())
20+
&& existingChannel.getKeyUser().equals(channel.getKeyUser())) {
21+
22+
throw new IllegalArgumentException(" --- "+ channel.getKeyUser().getName()+"님! 이미 등록된 채널입니다.");
2023
}
2124
}
2225

23-
List<String> categoryList = channel.getCategory();
24-
Set<String> categorySet = new HashSet<>(categoryList);
25-
if (categoryList.size() != categorySet.size()) { //list사이즈=2, set사이즈1 -> 중복있다
26+
//중복 카테고리 검증
27+
Set<String> categorySet = new HashSet<>(channel.getCategory());
28+
if (channel.getCategory().size() != categorySet.size()) { //list사이즈=2, set사이즈1 -> 중복있다
2629
throw new IllegalArgumentException(" --- 중복된 카테고리가 포함되어 있습니다.");
2730
}
31+
channel.getMembers().add(channel.getKeyUser()); // 키 유저를 초기 멤버로 추가
32+
33+
data.put(channel.getId(), channel);
2834

29-
this.data.put(channel.getId(),channel);
3035
}
3136

3237
//채널 조회
@@ -51,10 +56,17 @@ public Channel update(UUID id, Channel update) {
5156

5257
//채널 삭제
5358
@Override
54-
public boolean delete(UUID id) {
55-
return data.remove(id) != null;
59+
public boolean delete(UUID id, User user, String password) {
60+
Channel channel = this.data.get(id);
61+
if (!user.getPassword().equals(password)) {
62+
System.out.println("!!채널 삭제 실패!! --- 비밀번호 불일치");
63+
return false;
64+
}
65+
System.out.println("<<채널 [" + channel.getChannelName() + "] 삭제 성공>>");
66+
return this.data.remove(id) != null;
5667
}
5768

69+
5870
//채널 멤버셋
5971
@Override
6072
public Set<User> members(UUID id) {
@@ -78,15 +90,4 @@ public List<Channel> findChannel(String channelName) {
7890
.collect(Collectors.toList());
7991
}
8092

81-
//멤버에서 유저삭제
82-
public void removeMember(User user){
83-
for (Channel channel : data.values()) {
84-
Set<User> members = new HashSet<>(channel.getMembers());
85-
86-
if (members.remove(user)) {
87-
Channel updated = new Channel(channel.getChannelName(), channel.getCategory(), members);
88-
this.data.put(channel.getId(), updated);
89-
}
90-
}
91-
}
9293
}

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ private void removeUserFromChannels(User user) {
8585
if (members.remove(user)) {
8686
Channel updatedChannel = new Channel(
8787
channel.getChannelName(),
88+
channel.getKeyUser(),
8889
channel.getCategory(),
8990
members
9091
);
@@ -94,8 +95,11 @@ private void removeUserFromChannels(User user) {
9495
}
9596

9697
//성별 그룹화
97-
public Map<String, List<User>> groupByGender() {
98+
public Map<String, List<String>> groupByGender() {
9899
return data.values().stream()
99-
.collect(Collectors.groupingBy(User::getGender));
100+
.collect(Collectors.groupingBy(
101+
User::getGender,
102+
Collectors.mapping(User::getName, Collectors.toList())
103+
));
100104
}
101105
}

0 commit comments

Comments
 (0)