private IList <TResource> GetRecentResources <TResource>(Guid userId, IEnumerable <TResource> resources, IEnumerable <Resource> excludeResources) where TResource : Resource { var recentResources = excludeResources == null ? resources.Take(2).ToList() : (from r in resources where excludeResources.All(x => x.Id != r.Id) select r).Take(2).ToList(); for (var index = 0; index < recentResources.Count; ++index) { var viewing = new ResourceViewing { ResourceType = typeof(TResource) == typeof(Article) ? ResourceType.Article : typeof(TResource) == typeof(Video) ? ResourceType.Video : ResourceType.QnA, UserId = userId, ResourceId = recentResources[index].Id, Id = Guid.NewGuid(), Time = DateTime.Now.AddDays(-1 * (index + 1)), }; _resourcesRepository.CreateResourceViewing(viewing); } return(recentResources); }
void IResourcesRepository.CreateResourceViewing(ResourceViewing resourceViewing) { using (var dc = CreateContext()) { dc.ResourceViewingEntities.InsertOnSubmit(resourceViewing.Map()); dc.SubmitChanges(); } }
internal static ResourceViewingEntity Map(this ResourceViewing viewing) { return(new ResourceViewingEntity { id = viewing.Id, userId = viewing.UserId, resourceId = viewing.ResourceId, resourceType = (byte)viewing.ResourceType, time = viewing.Time, }); }
private void ViewResource(ResourceType resourceType, Guid userId, Guid resourceId) { var viewing = new ResourceViewing { ResourceType = resourceType, UserId = userId, ResourceId = resourceId }; viewing.Prepare(); viewing.Validate(); _repository.CreateResourceViewing(viewing); var handlers = ResourceViewed; if (handlers != null) { handlers(this, new ResourceEventArgs(viewing.ResourceId)); } }
protected IList <Resource> GetRelatedResources(Guid userId, Resource resource, int count) { var resources = (from a in _resourcesQuery.GetArticles() where a.Id != resource.Id && a.SubcategoryId == resource.SubcategoryId select(Resource) a) .Concat(from v in _resourcesQuery.GetVideos() where v.Id != resource.Id && v.SubcategoryId == resource.SubcategoryId select v) .Concat(from q in _resourcesQuery.GetQnAs() where q.Id != resource.Id && q.SubcategoryId == resource.SubcategoryId select q).Randomise().ToList(); // View more than are needed to push them down the list, but not resources of the same type. resources = resources.Where(r => r.GetType() == resource.GetType()).Concat(resources.Where(r => r.GetType() != resource.GetType())).ToList(); for (var index = count; index < resources.Count; ++index) { var relatedResource = resources[index]; var viewing = new ResourceViewing { ResourceType = relatedResource is Article ? ResourceType.Article : resource is Video ? ResourceType.Video : ResourceType.QnA, UserId = userId, ResourceId = relatedResource.Id, Id = Guid.NewGuid(), Time = DateTime.Now.AddDays(-1 * (index + 1)) }; _resourcesRepository.CreateResourceViewing(viewing); } return(resources.ToList()); }