88import org .springframework .data .domain .Page ;
99import org .springframework .data .domain .Pageable ;
1010import org .springframework .stereotype .Service ;
11+ import org .springframework .transaction .annotation .Transactional ;
12+ import org .tuna .zoopzoop .backend .domain .SSE .service .EmitterService ;
1113import org .tuna .zoopzoop .backend .domain .member .entity .Member ;
1214import org .tuna .zoopzoop .backend .domain .member .service .MemberService ;
1315import org .tuna .zoopzoop .backend .domain .space .membership .entity .Membership ;
1416import org .tuna .zoopzoop .backend .domain .space .membership .enums .Authority ;
1517import org .tuna .zoopzoop .backend .domain .space .membership .enums .JoinState ;
1618import org .tuna .zoopzoop .backend .domain .space .membership .repository .MembershipRepository ;
19+ import org .tuna .zoopzoop .backend .domain .space .space .dto .etc .SpaceInvitationInfo ;
1720import org .tuna .zoopzoop .backend .domain .space .space .entity .Space ;
1821import org .tuna .zoopzoop .backend .global .rsData .RsData ;
1922
2629public class MembershipService {
2730 private final MembershipRepository membershipRepository ;
2831 private final MemberService memberService ;
32+ private final NotificationService notificationService ;
2933
3034 // ======================== 멤버십 조회 ======================== //
3135
@@ -205,6 +209,7 @@ public Membership addMemberToSpace(Member member, Space space, Authority authori
205209 * @param invitedName 초대할 멤버 이름 목록
206210 * @return 생성된 Membership 엔티티 목록
207211 */
212+ @ Transactional
208213 public List <Membership > inviteMembersToSpace (Space space , List <String > invitedName ) {
209214 // 1. 이름 중복 제거
210215 List <String > uniqueNames = invitedName .stream ().distinct ().toList ();
@@ -228,7 +233,24 @@ public List<Membership> inviteMembersToSpace(Space space, List<String> invitedNa
228233 })
229234 .toList ();
230235
231- return membershipRepository .saveAll (invitedMemberships );
236+ // 4. 멤버십 저장
237+ List <Membership > savedMemberships = membershipRepository .saveAll (invitedMemberships );
238+
239+ // 5. 알림 전송 호출
240+ savedMemberships .forEach (membership -> {
241+ notificationService .sendSpaceInvitation (
242+ (long ) membership .getMember ().getId (),
243+ new SpaceInvitationInfo (
244+ space .getId (),
245+ space .getName (),
246+ space .getThumbnailUrl (),
247+ membership .getId ()
248+ )
249+ );
250+ });
251+
252+ // 6. 저장된 멤버십 반환
253+ return savedMemberships ;
232254 }
233255
234256 /**
0 commit comments