class UserNotificationServiceImpl implements UserNotificationService {

    @Transactional
    @Nonnull
    @Override
    public UserNotification createUserNotification(@Nonnull final Long userId, @Nonnull final Long notificationId, @Nonnull final UserNotificationDto userNotificationDto) {
        Assert.notNull(userId, "User id should not be null");
        Assert.notNull(notificationId, "Notification id should not be null");
        Assert.notNull(userNotificationDto, "Notification DTO should not be null");
        LOGGER.debug("Creating user notification, user id - {}, notification id - {}, user notification DTO - {}", userId, notificationId, userNotificationDto);
        // Load notification
        final Notification notification = notificationService.getNotificationById(notificationId);
        assertNoUserNotificationExistsForNotification(notification);
        // Load user
        final User user = userService.getUserById(userId);
        // Create user notification
        UserNotification userNotification = new UserNotification();
        userNotificationDto.updateDomainEntityProperties(userNotification);
        userNotification.setUser(user);
        userNotification.setNotification(notification);
        // Persist notification
        userNotification = userNotificationRepository.save(userNotification);
        LOGGER.debug("Successfully created new user notification with id - {}, user notification - {}", userNotification.getId(), userNotification);
        return userNotification;
    }

    public  UserNotificationServiceImpl();

}