Пример #1
0
        public async Task <IActionResult> InitiateDownload([FromBody] DownloadRequest downloadRequest)
        {
            if (!downloadRequest.IsValid())
            {
                return(Json(ResponseModel <object> .CreateFailure("The request is invalid and does not meet the API-Requirements")));
            }

            var userId       = "Anonymous";
            var traceId      = Guid.NewGuid().ToString();
            var downloadLink = downloadRequest.DownloadLink.Trim();

            var downloadJobState = await _vidloadCache.GetJobStatus(downloadLink);

            if (downloadJobState.IsSuccess && downloadJobState.Value.HasValue)
            {
                return(Json(ResponseModel <object> .CreateSuccess(null)));
            }

            var existingMetaData = await _vidloadCache.GetMetadata(downloadLink);

            if (existingMetaData.IsSuccess && existingMetaData.Value.HasNoValue)
            {
                await _jobEnqueuer.Enqueue(new MediaMetadataJob { DownloadLink = downloadLink, TraceId = traceId, UserId = userId });
            }

            var existingFileLocation = await _vidloadCache.GetMediaLocation(downloadLink);

            if (existingFileLocation.IsSuccess && existingFileLocation.Value.HasNoValue)
            {
                var targetFormat = (OutputFormat)Enum.Parse(typeof(OutputFormat), downloadRequest.OutputFormat, true);
                await _jobEnqueuer.Enqueue(new MediaDownloadJob { DownloadLink = downloadLink, TraceId = traceId, UserId = userId, TargetFormat = targetFormat });
            }

            await _vidloadCache.SetJobStatus(traceId, JobStatus.Enqueued);

            return(Json(ResponseModel <object> .CreateSuccess(null)));
        }