11package org .sopt .makers .crew .main .slack ;
22
3+ import java .util .List ;
4+
35import org .sopt .makers .crew .main .entity .slack .MakersUserSlack ;
46import org .sopt .makers .crew .main .entity .slack .MakersUserSlackRepository ;
57import org .sopt .makers .crew .main .entity .slack .SlackMessageTemplate ;
@@ -31,31 +33,34 @@ public class SlackMessageService {
3133
3234 @ Transactional
3335 public void insertEvent (SlackEmojiEventDto dto ) {
34- if (makersUserSlackRepository .existsByCallEmoji (( dto .getCallEmoji ())))
36+ if (makersUserSlackRepository .existsByCallEmojiAndUserSlackId ( dto .getCallEmoji (), dto . getUserSlackId ( )))
3537 throw new IllegalArgumentException ("Call Emoji already exists" );
3638
3739 makersUserSlackRepository .save (dto .toEntity ());
3840 }
3941
4042 @ Transactional
4143 public void updateEvent (SlackUpdateEmojiEventDto dto ) {
42- MakersUserSlack makersUserSlack = makersUserSlackRepository .findByCallEmoji (dto .getCallEmoji ())
43- .orElseThrow (() -> new IllegalArgumentException ("Invalid call emoji: " + dto .getCallEmoji ()));
44+ MakersUserSlack makersUserSlack = makersUserSlackRepository .findByCallEmojiAndUserSlackId (dto .getCallEmoji (),
45+ dto .getUserSlackId ())
46+ .orElseThrow (() -> new IllegalArgumentException (
47+ "Invalid call emoji or user slack Id : " + dto .getCallEmoji () + " " + dto .getUserSlackId ()));
4448
4549 makersUserSlack .updateEmoji (dto .getUpdateCallEmoji ());
4650 }
4751
4852 @ Transactional
4953 public void deleteEvent (SlackDeleteEmojiEventDto dto ) {
50- if (!makersUserSlackRepository .existsByCallEmoji (( dto .getCallEmoji ())))
54+ if (!makersUserSlackRepository .existsByCallEmojiAndUserSlackId ( dto .getCallEmoji (), dto . getUserSlackId ( )))
5155 throw new IllegalArgumentException ("Call Emoji not exists" );
52- makersUserSlackRepository .deleteByCallEmoji (dto .getCallEmoji ());
56+
57+ makersUserSlackRepository .deleteByCallEmojiAndUserSlackId (dto .getCallEmoji (), dto .getUserSlackId ());
5358 }
5459
5560 public void sendMention (MethodsClient client , ReactionAddedEvent event ) {
5661 String channel = event .getItem ().getChannel ();
5762 String user = event .getUser ();
58- MakersUserSlack slackUser = resolveSlackUser (event );
63+ List < MakersUserSlack > slackUser = resolveSlackUser (event );
5964
6065 String sendMessage = messageBuild (slackUser , user );
6166
@@ -76,22 +81,40 @@ public void sendMention(MethodsClient client, ReactionAddedEvent event) {
7681 }
7782 }
7883
79- private MakersUserSlack resolveSlackUser (ReactionAddedEvent event ) {
84+ private List < MakersUserSlack > resolveSlackUser (ReactionAddedEvent event ) {
8085 String reaction = event .getReaction ();
8186
82- MakersUserSlack slackUser = makersUserSlackRepository .findByCallEmoji (reaction )
83- .orElseThrow (() -> new IllegalArgumentException ("slack 전송 오류" ));
87+ List <MakersUserSlack > slackUser = makersUserSlackRepository .findByCallEmoji (reaction );
88+
89+ if (slackUser .isEmpty ())
90+ throw new IllegalArgumentException ("Invalid reaction emoji : " + reaction );
91+
8492 return slackUser ;
8593 }
8694
87- private String messageBuild (MakersUserSlack slackUser , String user ) {
88- String slackTemplateCd = slackUser .getSlackTemplateCd ();
95+ private String messageBuild (List <MakersUserSlack > slackUsers , String user ) {
96+
97+ String slackTemplateCd = extractTemplateCd (slackUsers );
8998 SlackMessageTemplate slackMessageTemplate = slackMessageTemplateRepository .findByTemplateCd (slackTemplateCd )
9099 .orElseThrow (() -> new IllegalArgumentException ("해당 슬랙 메시지 템플릿이 존재하지 않습니다." ));
91100 SlackMessageBuilder slackMessageBuilder = selector .selectSlackMessageBuilder (slackTemplateCd );
92101 String sendMessage = slackMessageBuilder .buildSlackMessage (slackMessageTemplate .getTemplateContent (),
93- MessageContext .create (user , slackUser . getUserSlackId ( )));
102+ MessageContext .create (user , userIdList ( slackUsers )));
94103 return sendMessage ;
95104 }
96105
106+ private List <String > userIdList (List <MakersUserSlack > slackUsers ) {
107+ return slackUsers .stream ().map (MakersUserSlack ::getUserSlackId ).toList ();
108+ }
109+
110+ private String extractTemplateCd (List <MakersUserSlack > slackUser ) {
111+ if (slackUser .size () > 1 ) {
112+ return slackUser .stream ()
113+ .map (MakersUserSlack ::getSlackTemplateCd )
114+ .findFirst ().orElseThrow (() -> new IllegalArgumentException ("templateCd not found" ));
115+ }
116+
117+ return slackUser .get (0 ).getSlackTemplateCd ();
118+ }
119+
97120}
0 commit comments