public async Task <JsonResult> ShareItemWithCollaborator([FromHeader] int accountId, [FromBody] ItemSharingVM sharingData) { var errorMessage = sharingData.ValidateMessage(); if (errorMessage.Length != 0) { return(new JsonResult(new JsonResponse { Result = SharedEnums.RequestResults.Failed, Data = errorMessage })); } var haveThisTask = await _collaborationService.DoesCollaboratorAlreadyHaveThisItemTask(sharingData); if (!haveThisTask.HasValue) { return(new JsonResult(new JsonResponse { Result = SharedEnums.RequestResults.Failed, Message = "An issue happened while getting data." })); } if (haveThisTask.Value) { return(new JsonResult(new JsonResponse { Result = SharedEnums.RequestResults.Failed, Message = "Task already assigned to this collaborator." })); } var(error, sharedByUser) = await _userService.GetUserProfileByAccountId(accountId); if (error || sharedByUser == null) { return(new JsonResult(new JsonResponse { Result = SharedEnums.RequestResults.Failed, Message = "An issue happened while getting data." })); } var haveCollaboration = await _collaborationService.AreTheyCollaborating(sharedByUser.Id, sharingData.SharedToUserId); switch (haveCollaboration) { case null: return(new JsonResult(new JsonResponse { Result = SharedEnums.RequestResults.Failed, Message = "An issue happened while getting data." })); case < 1: return(new JsonResult(new JsonResponse { Result = SharedEnums.RequestResults.Failed, Message = "You are not authorized for this action." })); } await _collaborationService.StartTransaction(); var updateItemExpression = sharingData.ItemType switch { nameof(Todo) => (Func <Task <bool?> >)(async() => { var todoService = HttpContext.RequestServices.GetService <ITodoService>(); if (todoService == null) { return(default);