Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,13 @@ public void broadcastRefetchToUsers(RefetchNotice notice, Collection<Long> userI
operations.sendEvent(EVENT_CHANGE, payload);
}
}

@Override
public void broadcastRefetchToAll(RefetchNotice notice) {
if (notice == null) {
return;
}
ChangePayload payload = ChangePayload.from(notice);
socketIOServer.getBroadcastOperations().sendEvent(EVENT_CHANGE, payload);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.process.clash.application.announcement.admin.data.CreateAnnouncementAdminData;
import com.process.clash.application.announcement.admin.port.in.CreateAnnouncementAdminUseCase;
import com.process.clash.application.announcement.port.out.AnnouncementRepositoryPort;
import com.process.clash.application.announcement.realtime.AnnouncementRefetchNotifier;
import com.process.clash.application.common.policy.CheckAdminPolicy;
import com.process.clash.domain.announcement.entity.Announcement;
import lombok.RequiredArgsConstructor;
Expand All @@ -16,12 +17,14 @@ public class CreateAnnouncementAdminService implements CreateAnnouncementAdminUs

private final AnnouncementRepositoryPort announcementRepositoryPort;
private final CheckAdminPolicy checkAdminPolicy;
private final AnnouncementRefetchNotifier announcementRefetchNotifier;

@Override
public CreateAnnouncementAdminData.Result execute(CreateAnnouncementAdminData.Command command) {
checkAdminPolicy.check(command.actor());

Announcement saved = announcementRepositoryPort.save(command.toDomain());
announcementRefetchNotifier.notifyAnnouncementChanged();
return CreateAnnouncementAdminData.Result.from(saved);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.process.clash.application.announcement.admin.port.in.DeleteAnnouncementAdminUseCase;
import com.process.clash.application.announcement.exception.exception.notfound.AnnouncementNotFoundException;
import com.process.clash.application.announcement.port.out.AnnouncementRepositoryPort;
import com.process.clash.application.announcement.realtime.AnnouncementRefetchNotifier;
import com.process.clash.application.common.policy.CheckAdminPolicy;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
Expand All @@ -16,6 +17,7 @@ public class DeleteAnnouncementAdminService implements DeleteAnnouncementAdminUs

private final AnnouncementRepositoryPort announcementRepositoryPort;
private final CheckAdminPolicy checkAdminPolicy;
private final AnnouncementRefetchNotifier announcementRefetchNotifier;

@Override
public void execute(DeleteAnnouncementAdminData.Command command) {
Expand All @@ -26,5 +28,6 @@ public void execute(DeleteAnnouncementAdminData.Command command) {
}

announcementRepositoryPort.deleteById(command.id());
announcementRefetchNotifier.notifyAnnouncementChanged();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.process.clash.application.announcement.admin.port.in.UpdateAnnouncementAdminUseCase;
import com.process.clash.application.announcement.exception.exception.notfound.AnnouncementNotFoundException;
import com.process.clash.application.announcement.port.out.AnnouncementRepositoryPort;
import com.process.clash.application.announcement.realtime.AnnouncementRefetchNotifier;
import com.process.clash.application.common.policy.CheckAdminPolicy;
import com.process.clash.domain.announcement.entity.Announcement;
import lombok.RequiredArgsConstructor;
Expand All @@ -17,6 +18,7 @@ public class UpdateAnnouncementAdminService implements UpdateAnnouncementAdminUs

private final AnnouncementRepositoryPort announcementRepositoryPort;
private final CheckAdminPolicy checkAdminPolicy;
private final AnnouncementRefetchNotifier announcementRefetchNotifier;

@Override
public UpdateAnnouncementAdminData.Result execute(UpdateAnnouncementAdminData.Command command) {
Expand All @@ -38,6 +40,7 @@ public UpdateAnnouncementAdminData.Result execute(UpdateAnnouncementAdminData.Co
);

Announcement saved = announcementRepositoryPort.save(updated);
announcementRefetchNotifier.notifyAnnouncementChanged();
return UpdateAnnouncementAdminData.Result.from(saved);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.process.clash.application.announcement.realtime;

import com.process.clash.application.realtime.data.ChangeDomain;
import com.process.clash.application.realtime.data.ChangeType;
import com.process.clash.application.realtime.data.RefetchNotice;
import com.process.clash.application.realtime.service.RefetchEventPublisher;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class AnnouncementRefetchNotifier {

private final RefetchEventPublisher refetchEventPublisher;

public void notifyAnnouncementChanged() {
refetchEventPublisher.publishToAll(RefetchNotice.of(ChangeDomain.ANNOUNCEMENT, ChangeType.DATA_CHANGED));
Comment thread
redjungi09 marked this conversation as resolved.
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ public enum ChangeDomain {
COMPETE,
USER,
RECORD,
ATTENDANCE
ATTENDANCE,
ANNOUNCEMENT
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@

public interface BroadcastRefetchPort {
void broadcastRefetchToUsers(RefetchNotice notice, Collection<Long> userIds);
void broadcastRefetchToAll(RefetchNotice notice);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,14 @@ public class RefetchEventListener {

@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT, fallbackExecution = true)
public void onRefetchEvent(RefetchEvent event) {
if (event == null || event.notice() == null || event.userIds() == null) {
if (event == null || event.notice() == null) {
return;
}
Collection<Long> userIds = event.userIds();
if (userIds == null) {
broadcastRefetchPort.broadcastRefetchToAll(event.notice());
return;
}
if (userIds.isEmpty()) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,11 @@ public void publish(RefetchNotice notice, Collection<Long> userIds) {
}
applicationEventPublisher.publishEvent(new RefetchEvent(notice, deduped));
}

public void publishToAll(RefetchNotice notice) {
if (notice == null) {
return;
}
applicationEventPublisher.publishEvent(new RefetchEvent(notice, null));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.process.clash.application.announcement.admin.data.CreateAnnouncementAdminData;
import com.process.clash.application.announcement.port.out.AnnouncementRepositoryPort;
import com.process.clash.application.announcement.realtime.AnnouncementRefetchNotifier;
import com.process.clash.application.common.actor.Actor;
import com.process.clash.application.common.policy.CheckAdminPolicy;
import com.process.clash.application.user.user.exception.exception.forbidden.RequiredAdminRoleException;
Expand Down Expand Up @@ -30,11 +31,14 @@ class CreateAnnouncementAdminServiceTest {
@Mock
private CheckAdminPolicy checkAdminPolicy;

@Mock
private AnnouncementRefetchNotifier announcementRefetchNotifier;

private CreateAnnouncementAdminService service;

@BeforeEach
void setUp() {
service = new CreateAnnouncementAdminService(announcementRepositoryPort, checkAdminPolicy);
service = new CreateAnnouncementAdminService(announcementRepositoryPort, checkAdminPolicy, announcementRefetchNotifier);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.process.clash.application.announcement.admin.data.DeleteAnnouncementAdminData;
import com.process.clash.application.announcement.exception.exception.notfound.AnnouncementNotFoundException;
import com.process.clash.application.announcement.port.out.AnnouncementRepositoryPort;
import com.process.clash.application.announcement.realtime.AnnouncementRefetchNotifier;
import com.process.clash.application.common.actor.Actor;
import com.process.clash.application.common.policy.CheckAdminPolicy;
import com.process.clash.application.user.user.exception.exception.forbidden.RequiredAdminRoleException;
Expand Down Expand Up @@ -30,11 +31,14 @@ class DeleteAnnouncementAdminServiceTest {
@Mock
private CheckAdminPolicy checkAdminPolicy;

@Mock
private AnnouncementRefetchNotifier announcementRefetchNotifier;

private DeleteAnnouncementAdminService service;

@BeforeEach
void setUp() {
service = new DeleteAnnouncementAdminService(announcementRepositoryPort, checkAdminPolicy);
service = new DeleteAnnouncementAdminService(announcementRepositoryPort, checkAdminPolicy, announcementRefetchNotifier);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.process.clash.application.announcement.admin.data.UpdateAnnouncementAdminData;
import com.process.clash.application.announcement.exception.exception.notfound.AnnouncementNotFoundException;
import com.process.clash.application.announcement.port.out.AnnouncementRepositoryPort;
import com.process.clash.application.announcement.realtime.AnnouncementRefetchNotifier;
import com.process.clash.application.common.policy.CheckAdminPolicy;
import com.process.clash.application.user.user.exception.exception.forbidden.RequiredAdminRoleException;
import com.process.clash.domain.announcement.entity.Announcement;
Expand Down Expand Up @@ -32,11 +33,14 @@ class UpdateAnnouncementAdminServiceTest {
@Mock
private CheckAdminPolicy checkAdminPolicy;

@Mock
private AnnouncementRefetchNotifier announcementRefetchNotifier;

private UpdateAnnouncementAdminService service;

@BeforeEach
void setUp() {
service = new UpdateAnnouncementAdminService(announcementRepositoryPort, checkAdminPolicy);
service = new UpdateAnnouncementAdminService(announcementRepositoryPort, checkAdminPolicy, announcementRefetchNotifier);
}

@Test
Expand Down
Loading