public async Task <HttpResponseMessage> Post(string id, ExternalVideoModel model) { // Get project entity await GetProjectAsync(id); DomainExternalVideo externalVideo = await _externalVideoService.AddAsync(id, model); var result = new ExternalVideo { ProductName = externalVideo.ProductName, VideoUri = externalVideo.VideoUri, AcsNamespace = _settings.AcsNamespace }; HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, result); return(response); }
// GET api/projects/{id}/external public async Task <HttpResponseMessage> Get(string id) { // Get project await GetProjectAsync(id); // Get DomainExternalVideo externalVideo = await _externalVideoService.GetAsync(id); if (externalVideo == null) { return(Request.CreateErrorResponse(HttpStatusCode.NotFound, ResponseMessages.ResourceNotFound)); } var result = new ExternalVideo { ProductName = externalVideo.ProductName, VideoUri = externalVideo.VideoUri, AcsNamespace = _settings.AcsNamespace }; HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, result); return(response); }
private Watch AggregateProject(ProjectEntity projectEntity, string userId, Dictionary <string, UserEntity> users, Dictionary <string, int> commentsCounts, Dictionary <string, List <CommentEntity> > comments) { DomainProject project = _mapper.Map <ProjectEntity, DomainProject>(projectEntity); // 1. Aggregate Data UserEntity projectUser = users.ContainsKey(project.UserId) ? users[project.UserId] : null; int commentsCount = commentsCounts.ContainsKey(project.Id) ? commentsCounts[project.Id] : 0; List <CommentEntity> projectComments = comments.ContainsKey(project.Id) ? comments[project.Id] : new List <CommentEntity>(); // Processed Videos var watchVideos = new List <WatchVideo>(); watchVideos.AddRange( from @group in project.EncodedVideos.GroupBy(q => q.Width) select @group.ToList() into processedVideos where processedVideos.Count == 2 from v in processedVideos select new WatchVideo { ContentType = v.ContentType, Width = v.Width, Height = v.Height, Uri = _uriProvider.CreateUri(v.FileId) }); // Processed Screenshots List <WatchScreenshot> watchScreenshots = project.EncodedScreenshots.Select( s => new WatchScreenshot { ContentType = s.ContentType, Uri = _uriProvider.CreateUri(s.FileId) }).ToList(); // External Video ExternalVideo externalVideo = !string.IsNullOrEmpty(project.VideoSource) ? new ExternalVideo { ProductName = project.VideoSourceProductName, VideoUri = project.VideoSource, AcsNamespace = _settings.AcsNamespace } : null; // 2. Calculate Video State WatchState state; if (string.IsNullOrEmpty(project.AvsxFileId) || (string.IsNullOrEmpty(project.OriginalVideoFileId) && externalVideo == null)) { state = WatchState.Uploading; } else if (externalVideo == null && watchVideos.Count == 0) { state = WatchState.Encoding; } else { state = WatchState.Ready; } // 3. Map comments var watchComments = new List <Comment>(); foreach (CommentEntity projectComment in projectComments) { UserEntity commentAuthor = users.ContainsKey(projectComment.UserId) ? users[projectComment.UserId] : null; DomainComment domainComment = _mapper.Map <Tuple <CommentEntity, UserEntity>, DomainComment>(new Tuple <CommentEntity, UserEntity>(projectComment, commentAuthor)); Comment comment = _mapper.Map <DomainComment, Comment>(domainComment); if (commentAuthor != null) { comment.AvatarUrl = _userAvatarProvider.GetAvatar(commentAuthor.Email); } watchComments.Add(comment); } watchComments.Reverse(); // Result return(new Watch { Name = project.Name, UserId = project.UserId, UserName = projectUser != null ? projectUser.Name : null, UserAvatarUrl = projectUser != null?_userAvatarProvider.GetAvatar(new DomainUser { Email = projectUser.Email }) : null, Description = project.Description, Created = project.Created, Avsx = !string.IsNullOrEmpty(project.AvsxFileId) ? _uriProvider.CreateUri(project.AvsxFileId) : null, Screenshots = watchScreenshots, Videos = watchVideos, PublicUrl = _projectUriProvider.GetUri(project.Id), Id = project.Id, Access = project.Access, IsEditable = project.UserId == userId, HitsCount = project.HitsCount, External = externalVideo, ScreenshotUrl = !string.IsNullOrEmpty(project.ScreenshotFileId) ? _uriProvider.CreateUri(project.ScreenshotFileId) : null, State = state, Generator = (int)project.ProductType, ProjectType = project.ProjectType, ProjectSubtype = project.ProjectSubtype, EnableComments = project.EnableComments, CommentsCount = commentsCount, LikesCount = project.LikesCount, DislikesCount = project.DislikesCount, Comments = watchComments }); }