public HttpResponseMessage UpdateFundingPackage(FundingPackageModel fundingPackage, int projectId, int fundingPackageId)
        {
            if (!ModelState.IsValid || projectId <= 0 || fundingPackageId <= 0)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }

            var identity = User.Identity as ClaimsIdentity;

            using (var s = new FundingPackageRepository())
            {
                var httpStatusCode = HttpStatusCode.OK;

                FundingPackageRepository.StatusCodes hasUpdated = s.EditFundingPackage(fundingPackage, identity, projectId, fundingPackageId);

                switch (hasUpdated)
                {
                //project or funding package not found
                case FundingPackageRepository.StatusCodes.NOT_FOUND:
                    httpStatusCode = HttpStatusCode.NotFound;
                    break;

                //not authorized to update this funding package. You are not the project creator that has this specific funding package
                case FundingPackageRepository.StatusCodes.NOT_AUTHORIZED:
                    httpStatusCode = HttpStatusCode.MethodNotAllowed;
                    break;

                //funding package updated ok
                case FundingPackageRepository.StatusCodes.OK:
                    httpStatusCode = HttpStatusCode.OK;
                    break;
                }

                return(Request.CreateResponse(httpStatusCode));
            }
        }
        public HttpResponseMessage DeleteFundingPackage(int projectId, int fundingPackageId)
        {
            if (projectId <= 0 || fundingPackageId <= 0)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }

            var identity = User.Identity as ClaimsIdentity;

            using (var s = new FundingPackageRepository())
            {
                var httpStatusCode = HttpStatusCode.NoContent;

                FundingPackageRepository.StatusCodes hasDeleted = s.DeleteFundingPackage(identity, projectId, fundingPackageId);

                switch (hasDeleted)
                {
                //project not found or funding package to delete not found
                case FundingPackageRepository.StatusCodes.NOT_FOUND:
                    httpStatusCode = HttpStatusCode.NotFound;
                    break;

                //not authorized to delete this funding package - either you are not the project creator or this is a donations package automatically created by the system
                case FundingPackageRepository.StatusCodes.NOT_AUTHORIZED:
                    httpStatusCode = HttpStatusCode.MethodNotAllowed;
                    break;

                //funding package deleted ok
                case FundingPackageRepository.StatusCodes.OK:
                    httpStatusCode = HttpStatusCode.NoContent;
                    break;
                }

                return(Request.CreateResponse(httpStatusCode));
            }
        }
        public HttpResponseMessage CreateFundingPackage(FundingPackageModel fundingPackage, int projectId)
        {
            if (!ModelState.IsValid || projectId <= 0)
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }

            var identity = User.Identity as ClaimsIdentity;

            using (var s = new FundingPackageRepository())
            {
                var httpStatusCode = HttpStatusCode.Created;

                FundingPackageRepository.StatusCodes hasInserted = s.CreateFundingPackage(fundingPackage, identity, projectId, false);

                switch (hasInserted)
                {
                //project for inserting the funding package not found
                case FundingPackageRepository.StatusCodes.NOT_FOUND:
                    httpStatusCode = HttpStatusCode.NotFound;
                    break;

                //not authorized to add this funding package to this specific project
                case FundingPackageRepository.StatusCodes.NOT_AUTHORIZED:
                    httpStatusCode = HttpStatusCode.MethodNotAllowed;
                    break;

                //funding package inserted ok
                case FundingPackageRepository.StatusCodes.OK:
                    httpStatusCode = HttpStatusCode.Created;
                    break;
                }

                return(Request.CreateResponse(httpStatusCode));
            }
        }