コード例 #1
0
        public async Task <Results <bool> > DeleteAsync(int projectId)
        {
            var results = new Results <bool>();

            var project = await _projectDataContext.DataSet.FirstOrDefaultAsync(p => p.Id == projectId);

            try
            {
                var userId = await _getCurrentUserProcessor.GetUserIdAsync();

                if (project == null || project.UserId != userId)
                {
                    throw new Exception();
                }

                _projectDataContext.DataSet.Remove(project);
                await _projectDataContext.SaveChangesAsync();

                results.Data = true;
            }
            catch (System.Exception e)
            {
                results.AddException(new Exception("Could not delete this project", e));
            }

            return(results);
        }
コード例 #2
0
        async Task MarkReferencesNotPendingAsync(string referenceId)
        {
            await foreach (var pr in _projectReferenceContext.DataSet.Where(pr => pr.ReferenceId == referenceId).AsAsyncEnumerable())
            {
                pr.IsPending = false;
            }

            await _projectReferenceContext.SaveChangesAsync();
        }
コード例 #3
0
        public async Task <Results <List <string> > > AddAsync(int projectId, IEnumerable <string> documentIds)
        {
            var documentIdList = documentIds.ToList();

            var results = new Results <List <string> >();

            try
            {
                var projectResults = await _getProjectForUserProcessor.GetAsync(projectId);

                if (results.HasProblem)
                {
                    results.Merge(projectResults);
                    return(results);
                }

                List <string> documentsToAdd = documentIdList.Except(projectResults.Data.ProjectReferences.Select(pr => pr.ReferenceId)).ToList();

                projectResults.Data.ProjectReferences.AddRange(documentsToAdd.Select(d => new ProjectReference
                {
                    ReferenceId = d
                }));

                await _projectContext.SaveChangesAsync();

                foreach (var d in documentsToAdd)
                {
                    _queueManager.QueueArticleScrape(d, _scrapeDepth);
                }

                results.Data = documentsToAdd;
            }
            catch (System.Exception e)
            {
                results.AddException(new System.Exception("Failed to add this reference", e));
            }

            return(results);
        }
コード例 #4
0
        public async Task <Results <ProjectVm> > SaveAsync(ProjectSaveData saveData)
        {
            var results = new Results <ProjectVm>();

            try
            {
                var userId = await _getCurrentUserProcessor.GetUserIdAsync();

                var user = await _userContext.DataSet
                           .Include(u => u.Projects)
                           .FirstAsync(u => u.Id == userId);

                var project = user
                              .Projects
                              .FirstOrDefault(p => p.Id == saveData.Id);

                if (saveData.Id == null)
                {
                    project = new Project()
                    {
                        UserId = userId
                    };
                    user.Projects.Add(project);
                }
                else if (project == null || project.UserId != userId)
                {
                    results.AddError("This project could not be found or you do not own this project");
                }

                if (results.HasError)
                {
                    return(results);
                }

                project.Name = saveData.Name;
                await _userContext.SaveChangesAsync();

                results.Data.Id   = project.Id;
                results.Data.Name = project.Name;
                results.Data.NumberOfReferences = project.ProjectReferences.Count();
            }
            catch (Exception e)
            {
                results.AddException(new Exception("Could not save this project", e));
            }

            return(results);
        }
コード例 #5
0
        public async Task <int> CreateIfNotExistsAsync(UserSaveData saveData)
        {
            var user = await _userContext.DataSet.FirstOrDefaultAsync(u => u.GoogleIdentifier == saveData.ProviderKey);

            if (user != null)
            {
                return(user.Id);
            }

            user = new User
            {
                GoogleIdentifier = saveData.ProviderKey,
                Firstname        = saveData.Firstname,
                Lastname         = saveData.Lastname,
                Email            = saveData.Email
            };
            _userContext.DataSet.Add(user);

            await _userContext.SaveChangesAsync();

            return(user.Id);
        }