CreateCategoryOfCare(CategoryOfCare categoryOfCare)
        {
            var validationResult = CategoryOfCareStatus.Success;

            var existingCustomer = (await customerRepository
                                    .FindAsync(
                                        c => !c.IsDeleted && c.Id == categoryOfCare.CustomerId
                                        ))
                                   .SingleOrDefault();

            if (existingCustomer == null)
            {
                validationResult = CategoryOfCareStatus.CustomerDoesNotExist;
            }

            var existingCategoryOfCare = await GetCategoryOfCare(categoryOfCare.CustomerId, categoryOfCare.Name);

            if (existingCategoryOfCare != null)
            {
                if (validationResult.HasFlag(CategoryOfCareStatus.Success))
                {
                    validationResult = CategoryOfCareStatus.NameConflict;
                }
                else
                {
                    validationResult |= CategoryOfCareStatus.NameConflict;
                }
            }

            if (!validationResult.HasFlag(CategoryOfCareStatus.Success))
            {
                return(new OperationResultDto <CategoryOfCare, CategoryOfCareStatus>()
                {
                    Status = validationResult
                });
            }

            categoryOfCareRepository.Insert(categoryOfCare);

            await unitOfWork.SaveAsync();

            return(new OperationResultDto <CategoryOfCare, CategoryOfCareStatus>()
            {
                Content = categoryOfCare,
                Status = CategoryOfCareStatus.Success
            });
        }
        /// <summary>
        /// Updates the category of care.
        /// </summary>
        /// <param name="categoryOfCare">The category of care.</param>
        /// <returns></returns>
        public async Task <CategoryOfCareStatus> UpdateCategoryOfCare(CategoryOfCare categoryOfCare)
        {
            var existingCategoryOfCare = await GetCategoryOfCare(categoryOfCare.Id);

            if (existingCategoryOfCare == null)
            {
                return(CategoryOfCareStatus.CategoryOfCareWithSuchIdDoesNotExist);
            }

            var existingCategoryOfCareWithConflictedName =
                await GetCategoryOfCare(categoryOfCare.CustomerId, categoryOfCare.Name);

            if (existingCategoryOfCareWithConflictedName != null)
            {
                return(CategoryOfCareStatus.NameConflict);
            }

            existingCategoryOfCare.Name = categoryOfCare.Name;

            categoryOfCareRepository.Update(existingCategoryOfCare);
            await unitOfWork.SaveAsync();

            return(CategoryOfCareStatus.Success);
        }