Untitled

 avatar
unknown
plain_text
a year ago
1.9 kB
4
Indexable
@Service
public class WebhookService {
    private static final Logger log = LoggerFactory.getLogger(WebhookService.class);
    private final WebClient webClient = CustomWebClientBuilder.createWebClientBuilderWithDisabledSSLVerification().build();
    private final WebhookConfig webhookConfig;

    public WebhookService(WebhookConfig webhookConfig) {
        this.webhookConfig = webhookConfig;
    }

    public Mono<Void> notifyWebhooks(String event, Object data) {
        List<String> webhookUrls = this.webhookConfig.getUrls();
        return Flux.fromIterable(webhookUrls).flatMap((url) -> {
            return this.sendNotification(url, event, data);
        }).then();
    }

    private Mono<Void> sendNotification(String url, String event, Object data) {
        WebhookTr payload = new WebhookTr(event, data);
        return ((WebClient.RequestBodySpec)this.webClient.post().uri(url, new Object[0])).bodyValue(payload).retrieve().bodyToMono(Void.class).onErrorResume((error) -> {
            log.error("Failed to send webhook to {} {}: ", url, error.getMessage());
            return Mono.empty();
        });
    }
}


public Mono<UserTr> saveRoleAndPermissionForUser(String userName, String roleName, Long initiativeId) {
        UserRolePermissionTr roleAndPermission = UserRolePermissionTr.builder().userId(userName).roleId(roleName).initiativeId(initiativeId).insertedAt(LocalDateTime.now()).build();
        return this.userPersistencePort.saveRoleAndPermissionForUser(roleAndPermission).doOnSuccess((userTr) -> {
            this.webhookService.notifyWebhooks("user.creation", userTr);
        });
    }

public Mono<Void> delete(@NotNull String userName) {
        return this.userPersistencePort.delete(userName).doOnSuccess((tr) -> {
            this.webhookService.notifyWebhooks("user.deletion", userName);
        });
    }
Editor is loading...
Leave a Comment