public async Task <JsonResult> Reject([FromQuery] uint?id)
        {
            int projectId = this.ParseValue(id);
            int userId    = int.Parse(User.Identity.Name);

            // Проверяем, что есть доступ
            var linkedProject = _dbContext.GetLinkedProjectForUser(projectId, userId);

            if (linkedProject == null)
            {
                throw new Exception(TextResource.API_YouAreNotInvited);
            }

            if (linkedProject.Accepted)
            {
                throw new Exception(TextResource.API_InviteAccepted);
            }

            _dbContext.Remove(linkedProject);

            await _dbContext.SaveChangesAsync()
            .ConfigureAwait(false);

            return(new JsonResult(new OkResponse
            {
                message = "Вы отказались от приглашения в проект"
            }));
        }
Esempio n. 2
0
        public async Task <JsonResult> Delete([FromQuery] uint?id)
        {
            int taskId = this.ParseValue(id);

            var worktask = await _context.Worktasks.FirstOrDefaultAsync(x => x.Id == taskId)
                           .ConfigureAwait(false);

            if (worktask == null)
            {
                throw new Exception(TextResource.API_NotExistWorktaskId);
            }

            int projectId = worktask.ProjectId;
            int userId    = int.Parse(User.Identity.Name);

            // Проверяем доступ
            var linkedProject = await _context.GetLinkedAcceptedProject(projectId, userId)
                                .ConfigureAwait(false);

            if (linkedProject == null || linkedProject.RoleId == 1)
            {
                throw new Exception(TextResource.API_NoAccess);
            }

            // Если на задачу кто-то тречит - заставить их прекратить
            var runningWorktracks = _context.Worktracks.Where(x => x.WorktaskId == taskId && x.Running);

            if (runningWorktracks.Any())
            {
                var users = runningWorktracks.Select(x => x.UserId);

                foreach (var userName in users)
                {
                    await _hub.Value.Clients.Group(userName.ToString()).SendAsync("getActiveTracking", false, null, false, TextResource.SignalR_TaskIsRemoved)
                    .ConfigureAwait(false);
                }
            }

            _context.Remove(worktask);

            await _context.SaveChangesAsync()
            .ConfigureAwait(false);

            return(new JsonResult(new WorktaskDeleteResponse {
                worktask = worktask
            }));
        }