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);