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 = "Вы отказались от приглашения в проект" })); }
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 })); }