class PushNotificationServiceImpl extends AbstractNotificationServiceImpl<PushNotification> implements PushNotificationService {

    @Transactional
    @Nonnull
    @Override
    public PushNotification createNotification(@Nonnull final Long pushNotificationRecipientId, @Nonnull final PushNotificationDto pushNotificationDto) {
        Assert.notNull(pushNotificationRecipientId, "Push notification recipient id should not be null");
        assertPushNotificationDto(pushNotificationDto);
        logger.debug("Creating push notification for recipient with id - {}, DTO - {}, properties - {}", pushNotificationRecipientId, pushNotificationDto, pushNotificationDto.getProperties());
        final PushNotificationRecipient recipient = pushNotificationRecipientService.getPushNotificationRecipientById(pushNotificationRecipientId);
        // Create push notification
        PushNotification pushNotification = new PushNotification(true);
        // Set properties
        pushNotificationDto.updateDomainEntityProperties(pushNotification);
        pushNotification.setRecipient(recipient);
        pushNotification.setProviderType(recipient.getType().getNotificationProviderType());
        pushNotification.setLocale(pushNotificationDto.getLocale());
        pushNotification.setTemplateName(pushNotificationDto.getTemplateName());
        // Create push notifications properties
        // Persist push notification
        pushNotification = pushNotificationRepository.save(pushNotification);
        logger.debug("Successfully created push notification with id - {}, push notification - {}", pushNotification.getId(), pushNotification);
        return pushNotification;
    }

      PushNotificationServiceImpl();

}