private async Task CheckProcessingVideosAsync(VideoService videoService, FairplaytubeDatabaseContext fairplaytubeDatabaseContext, CancellationToken stoppingToken)
        {
            this.Logger?.LogInformation("Checking processing videos");
            var processingInDB = await videoService.GetDatabaseProcessingVideosIdsAsync(stoppingToken);

            string message = $"{processingInDB.Length} videos marked as processing In DB";

            this.Logger?.LogInformation(message);
            if (processingInDB.Length > 0)
            {
                this.Logger?.LogInformation("Retrieving videos status in Azure Video Indexer");
                var videosIndex = await videoService.GetVideoIndexerStatusAsync(processingInDB, stoppingToken);

                if (videosIndex.results.Length > 0)
                {
                    var indexCompleteVideos = videosIndex.results.Where(p =>
                                                                        p.state == Common.Global.Enums.VideoIndexStatus.Processed.ToString());
                    if (indexCompleteVideos.Any())
                    {
                        var indexCompleteVideosIds = indexCompleteVideos.Select(p => p.id).ToArray();
                        await videoService.AddVideoIndexTransactionsAsync(indexCompleteVideosIds, stoppingToken);

                        var videosCompleted = fairplaytubeDatabaseContext.VideoInfo.Where(video => indexCompleteVideosIds.Contains(video.VideoId));

                        foreach (var video in videosCompleted)
                        {
                            await videoService.MarkVideoAsProcessedAsync(video, stoppingToken);
                        }
                    }
                }
            }
        }
Exemple #2
0
 public PaymentService(PaypalService paypalService, FairplaytubeDatabaseContext fairplaytubeDatabaseContext,
                       ILogger <CustomHttpClientHandler> customHttpClientHandlerLogger)
 {
     this.FairplaytubeDatabaseContext = fairplaytubeDatabaseContext;
     this.PaypalService = paypalService;
     this.CustomHttpClientHandlerLogger = customHttpClientHandlerLogger;
 }
 /// <summary>
 /// Initializes <see cref="UserProfileController"/>
 /// </summary>
 /// <param name="fairplaytubeDatabaseContext"></param>
 /// <param name="currentUserProvider"></param>
 /// <param name="paymentService"></param>
 public UserProfileController(FairplaytubeDatabaseContext fairplaytubeDatabaseContext,
                              ICurrentUserProvider currentUserProvider, PaymentService paymentService)
 {
     this.FairplaytubeDatabaseContext = fairplaytubeDatabaseContext;
     this.CurrentUserProvider         = currentUserProvider;
     this.PaymentService = paymentService;
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="actionContextAccessor"></param>
 /// <param name="currentUserProvider"></param>
 /// <param name="fairplaytubeDatabase"></param>
 public PaidFeatureFilter(IActionContextAccessor actionContextAccessor,
                          ICurrentUserProvider currentUserProvider,
                          FairplaytubeDatabaseContext fairplaytubeDatabase)
 {
     this.ActionContextAccessor = actionContextAccessor;
     this.CurrentUserProvider   = currentUserProvider;
     this.FairplaytubeDatabase  = fairplaytubeDatabase;
 }
Exemple #5
0
 public VideoJobService(FairplaytubeDatabaseContext fairplaytubeDatabaseContext,
                        ICurrentUserProvider currentUserProvider,
                        IStringLocalizer <VideoJobService> localizer)
 {
     this.FairplaytubeDatabaseContext = fairplaytubeDatabaseContext;
     this.CurrentUserProvider         = currentUserProvider;
     this.Localizer = localizer;
 }
 public VisitorTrackingService(IHttpContextAccessor httpContextAccessor,
                               FairplaytubeDatabaseContext fairplaytubeDatabaseContext,
                               IpStackService ipStackService, IpDataService ipDataService)
 {
     this.HttpContextAccessor         = httpContextAccessor;
     this.FairplaytubeDatabaseContext = fairplaytubeDatabaseContext;
     this.IpStackService = ipStackService;
     this.IpDataService  = ipDataService;
 }
Exemple #7
0
 /// <summary>
 /// Initializes <see cref="UserController"/>
 /// </summary>
 /// <param name="fairplaytubeDatabaseContext"></param>
 /// <param name="currentUserProvider"></param>
 /// <param name="emailService"></param>
 /// <param name="messageService"></param>
 /// <param name="userService"></param>
 public UserController(FairplaytubeDatabaseContext fairplaytubeDatabaseContext,
                       ICurrentUserProvider currentUserProvider, EmailService emailService,
                       MessageService messageService, UserService userService)
 {
     this.FairplaytubeDatabaseContext = fairplaytubeDatabaseContext;
     this.CurrentUserProvider         = currentUserProvider;
     this.EmailService   = emailService;
     this.MessageService = messageService;
     this.UserService    = userService;
 }
Exemple #8
0
 public PayoutService(PaypalService paypalService,
                      FairplaytubeDatabaseContext fairplaytubeDatabaseContext,
                      ICurrentUserProvider currentUserProvider,
                      IStringLocalizer <PayoutService> localizer)
 {
     this.PaypalService = paypalService;
     this.FairplaytubeDatabaseContext = fairplaytubeDatabaseContext;
     this.CurrentUserProvider         = currentUserProvider;
     Localizer = localizer;
 }
Exemple #9
0
 public VideoCommentService(FairplaytubeDatabaseContext fairplaytubeDatabaseContext,
                            TextAnalysisService textAnalysisService,
                            ContentModerationService contentModerationService,
                            ICurrentUserProvider currentUserProvider)
 {
     this.FairplaytubeDatabaseContext = fairplaytubeDatabaseContext;
     this.TextAnalysisService         = textAnalysisService;
     this.ContentModerationService    = contentModerationService;
     this.CurrentUserProvider         = currentUserProvider;
 }
 public UserRequestService(FairplaytubeDatabaseContext fairplaytubeDatabaseContext,
                           IStringLocalizer <UserRequestService> localizer,
                           ICurrentUserProvider currentUserProvider,
                           EmailService emailService)
 {
     FairplaytubeDatabaseContext = fairplaytubeDatabaseContext;
     Localizer           = localizer;
     CurrentUserProvider = currentUserProvider;
     EmailService        = emailService;
 }
 public MessageService(FairplaytubeDatabaseContext fairplaytubeDatabaseContext,
                       IHubContext <NotificationHub, INotificationHub> hubContext,
                       ContentModerationService contentModerationService,
                       EmailService emailService, IConfiguration configuration)
 {
     this.FairplaytubeDatabaseContext = fairplaytubeDatabaseContext;
     this.HubContext = hubContext;
     this.ContentModerationService = contentModerationService;
     this.EmailService             = emailService;
     this.Configuration            = configuration;
 }
        public async Task <VisitorTracking> UpdateVisitTimeElapsedAsync(long visitorTrackingId, CancellationToken cancellationToken)
        {
            var entity = await this.FairplaytubeDatabaseContext.VisitorTracking
                         .SingleOrDefaultAsync(p => p.VisitorTrackingId == visitorTrackingId, cancellationToken);

            if (entity != null)
            {
                entity.LastTrackedDateTime = DateTimeOffset.UtcNow;
                await FairplaytubeDatabaseContext.SaveChangesAsync(cancellationToken);
            }
            return(entity);
        }
Exemple #13
0
 public VideoJobApplicationService(FairplaytubeDatabaseContext fairplaytubeDatabaseContext,
                                   ICurrentUserProvider currentUserProvider,
                                   IStringLocalizer <VideoJobApplicationService> localizer,
                                   IHubContext <NotificationHub, INotificationHub> hubContext,
                                   EmailService emailService)
 {
     FairplaytubeDatabaseContext = fairplaytubeDatabaseContext;
     CurrentUserProvider         = currentUserProvider;
     Localizer    = localizer;
     HubContext   = hubContext;
     EmailService = emailService;
 }
Exemple #14
0
        public async Task ApproveVideoJobApplicationAsync(long videoJobApplicationId, CancellationToken cancellationToken)
        {
            var loggedInUserAzureObjectId = this.CurrentUserProvider.GetObjectId();
            var videoJobApplication       = await this.FairplaytubeDatabaseContext.VideoJobApplication
                                            .Include(p => p.VideoJob).ThenInclude(p => p.VideoInfo)
                                            .ThenInclude(p => p.ApplicationUser)
                                            .Where(p => p.VideoJobApplicationId == videoJobApplicationId)
                                            .SingleOrDefaultAsync(cancellationToken: cancellationToken);

            if (videoJobApplication is null)
            {
                throw new CustomValidationException(Localizer[VideoJobApplicationNotFoundTextKey]);
            }
            if (loggedInUserAzureObjectId != videoJobApplication.VideoJob
                .VideoInfo.ApplicationUser.AzureAdB2cobjectId.ToString())
            {
                throw new CustomValidationException(Localizer[NotVideoOwnerTextKey]);
            }
            var hasApprovedApplication = await FairplaytubeDatabaseContext.VideoJobApplication
                                         .AnyAsync(p => p.VideoJobApplicationId == videoJobApplicationId &&
                                                   p.VideoJobApplicationStatusId ==
                                                   (short)Common.Global.Enums.VideoJobApplicationStatus.Selected,
                                                   cancellationToken : cancellationToken);

            if (hasApprovedApplication)
            {
                throw new CustomValidationException(Localizer[ApprovedApplicationsExistTextKey]);
            }
            videoJobApplication.VideoJobApplicationStatusId =
                (short)Common.Global.Enums.VideoJobApplicationStatus.Selected;
            await FairplaytubeDatabaseContext.SaveChangesAsync(cancellationToken);

            var applicantUserEntity = await this.FairplaytubeDatabaseContext.ApplicationUser
                                      .SingleAsync(p => p.ApplicationUserId ==
                                                   videoJobApplication.ApplicantApplicationUserId,
                                                   cancellationToken : cancellationToken);

            string message = String.Format(Localizer[ApprovedApplicationUserNotificationTextKey],
                                           videoJobApplication.VideoJob.Title,
                                           videoJobApplication.VideoJob.VideoInfo.Name);
            await HubContext.Clients.User(applicantUserEntity.AzureAdB2cobjectId.ToString())
            .ReceiveMessage(new Models.Notifications.NotificationModel()
            {
                Message = message,
            });

            await EmailService.SendEmailAsync(toEmailAddress :
                                              applicantUserEntity.EmailAddress,
                                              subject : Localizer[ApprovedApplicationEmailSubjectTextKey],
                                              body : message,
                                              isBodyHtml : true, cancellationToken : cancellationToken);
        }
        public async Task AddAnonymousUserRequestAsync(CreateUserRequestModel createUserRequestModel,
                                                       CancellationToken cancellationToken)
        {
            UserRequest userRequestEntity = new()
            {
                Description       = createUserRequestModel.Description,
                UserRequestTypeId = (short)createUserRequestModel.UserRequestType,
                EmailAddress      = createUserRequestModel.EmailAddress,
            };
            await FairplaytubeDatabaseContext.UserRequest.AddAsync(userRequestEntity, cancellationToken);

            await FairplaytubeDatabaseContext.SaveChangesAsync(cancellationToken);

            await NotifyNewUserRequestToAllUsersAsync(userRequestEntity, cancellationToken);;
        }
Exemple #16
0
        public async Task AddVideoJobApplicationAsync(CreateVideoJobApplicationModel createVideoJobApplicationModel, CancellationToken cancellationToken)
        {
            var loggedInUserAzureObjectId = CurrentUserProvider.GetObjectId();
            var userEntity = FairplaytubeDatabaseContext.ApplicationUser
                             .Single(p => p.AzureAdB2cobjectId.ToString() == loggedInUserAzureObjectId);
            var videoJobApplicationEntity = await FairplaytubeDatabaseContext.VideoJobApplication
                                            .Include(p => p.ApplicantApplicationUser)
                                            .Include(p => p.VideoJob)
                                            .ThenInclude(p => p.VideoInfo)
                                            .ThenInclude(p => p.ApplicationUser)
                                            .SingleOrDefaultAsync(p => p.VideoJobId == createVideoJobApplicationModel.VideoJobId &&
                                                                  p.ApplicantApplicationUser.AzureAdB2cobjectId.ToString() == loggedInUserAzureObjectId,
                                                                  cancellationToken: cancellationToken);

            if (videoJobApplicationEntity is not null)
            {
                throw new CustomValidationException(Localizer[UserApplicationAlreadyExistsTextKey]);
            }
            var videoJobEntity = await FairplaytubeDatabaseContext.VideoJob
                                 .Include(p => p.VideoInfo).ThenInclude(p => p.ApplicationUser)
                                 .SingleAsync(p => p.VideoJobId == createVideoJobApplicationModel.VideoJobId,
                                              cancellationToken: cancellationToken);

            if (videoJobEntity.VideoInfo.ApplicationUser
                .AzureAdB2cobjectId.ToString() == loggedInUserAzureObjectId)
            {
                throw new CustomValidationException(Localizer[CannotApplyToOwnedVideosJobsTextKey]);
            }
            videoJobApplicationEntity = new VideoJobApplication()
            {
                ApplicantApplicationUserId = userEntity.ApplicationUserId,
                ApplicantCoverLetter       = createVideoJobApplicationModel.ApplicantCoverLetter,
                VideoJobId = createVideoJobApplicationModel.VideoJobId.Value,
                VideoJobApplicationStatusId = (short)Common.Global.Enums.VideoJobApplicationStatus.New
            };
            await FairplaytubeDatabaseContext.VideoJobApplication.AddAsync(videoJobApplicationEntity, cancellationToken);

            await FairplaytubeDatabaseContext.SaveChangesAsync(cancellationToken);

            string message = String.Format(Localizer[UserHasAppliedToJobTextKey],
                                           videoJobEntity.VideoInfo.ApplicationUser.FullName, videoJobEntity.Title);
            await HubContext.Clients.User(videoJobEntity.VideoInfo
                                          .ApplicationUser.AzureAdB2cobjectId.ToString())
            .ReceiveMessage(new Models.Notifications.NotificationModel()
            {
                Message = message
            });
        }
 public VideoService(AzureVideoIndexerService azureVideoIndexerService, AzureBlobStorageService azureBlobStorageService,
                     DataStorageConfiguration dataStorageConfiguration, ICurrentUserProvider currentUserProvider,
                     FairplaytubeDatabaseContext fairplaytubeDatabaseContext,
                     AzureVideoIndexerConfiguration azureVideoIndexerConfiguration,
                     CustomHttpClient customHttpClient,
                     IHubContext <NotificationHub, INotificationHub> hubContext,
                     EmailService emailService,
                     IConfiguration configuration)
 {
     this.AzureVideoIndexerService       = azureVideoIndexerService;
     this.AzureBlobStorageService        = azureBlobStorageService;
     this.DataStorageConfiguration       = dataStorageConfiguration;
     this.CurrentUserProvider            = currentUserProvider;
     this.FairplaytubeDatabaseContext    = fairplaytubeDatabaseContext;
     this.AzureVideoIndexerConfiguration = azureVideoIndexerConfiguration;
     this.CustomHttpClient = customHttpClient;
     this.HubContext       = hubContext;
     this.EmailService     = emailService;
     this.Configuration    = configuration;
 }
        public async Task AddAuthenticatedUserRequestAsync(CreateUserRequestModel createUserRequestModel,
                                                           CancellationToken cancellationToken)
        {
            var userObjectId = this.CurrentUserProvider.GetObjectId();
            var userEntity   = await this.FairplaytubeDatabaseContext
                               .ApplicationUser.SingleAsync(p => p.AzureAdB2cobjectId.ToString() == userObjectId,
                                                            cancellationToken);

            if (userEntity is null)
            {
                throw new CustomValidationException(Localizer[UserNotFoundTextKey]);
            }
            UserRequest userRequestEntity = new()
            {
                Description       = createUserRequestModel.Description,
                UserRequestTypeId = (short)createUserRequestModel.UserRequestType,
                EmailAddress      = createUserRequestModel.EmailAddress,
                ApplicationUserId = userEntity.ApplicationUserId
            };
            await FairplaytubeDatabaseContext.UserRequest.AddAsync(userRequestEntity, cancellationToken);

            await FairplaytubeDatabaseContext.SaveChangesAsync(cancellationToken);
        }
Exemple #19
0
 public ClientSideErrorLogService(FairplaytubeDatabaseContext fairplaytubeDatabaseContext)
 {
     this.FairplaytubeDatabaseContext = fairplaytubeDatabaseContext;
 }