// POST api/categories
        public ExpenceCategoryDTO Post(CreateCategoryDTO dto)
        {
            if (ModelState.IsValid)
            {
                var userId = _usersService.GetCurrentUserId();
                var resultDto = _categoriesService.Create(userId, dto);

                return resultDto;
            }
            else
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }
        }
        public ExpenceCategoryDTO Create(int userId, CreateCategoryDTO dto)
        {
            #region Validate

            if (dto == null)
            {
                throw new ArgumentNullException("dto");
            }

            if (string.IsNullOrWhiteSpace(dto.Name))
            {
                throw new InvalidInputException("Category name is required.");
            }

            var user = _userRepo.All(UserSpecifications.ById(userId)).FirstOrDefault();

            if (user == null)
            {
                throw new ItemNotFoundException(string.Format("User with id \"{0}\" not found.", userId));
            }

            var existingCategory = _categoryRepo.All(ExpenceCategorySpecifications.ByName(dto.Name)).FirstOrDefault();
            if (existingCategory != null)
            {
                throw new ItemAlreadyExistException(string.Format("Category with name \'" + dto.Name + "\' already exist"));
            }

            #endregion

            var category = new ExpenceCategory() { Name = dto.Name.Trim() };

            user.ExpenceCategories.Add(category);

            _uow.Commit();

            _tagManager.TouchTag("category", "create", category.UserId);

            return
                new ExpenceCategoryDTO
                {
                    Id = category.ExpenceCategoryId,
                    Name = category.Name
                };
        }