public ProjectProduct Product() => ProjectProductRepository.Find(product_id);
Exemple #2
0
        public ProjectProductCrudController()
        {
            Post("/api/v1/project/product/new", _ => {
                var projectGuid = GetRequestStr("project_guid");

                var me     = UserRepository.Find(CurrentRequest.UserId);
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "project_guid", "name", "description", "usd_price", "use_url" }),
                    new ExistsInTable("project_guid", "projects", "guid"),
                    new HasPermission(me, EntityUtils.GetEntityId(projectGuid, EntityType.Project), EntityType.Project)
                });
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var price          = Convert.ToDecimal(GetRequestStr("usd_price"));
                int priceInPennies = (int)(price * 100);
                if (priceInPennies < 50)
                {
                    return(HttpResponse.Error(
                               HttpStatusCode.UnprocessableEntity, "Price cannot be less than 0.5 USD"
                               ));
                }

                var project = ProjectRepository.FindByGuid(GetRequestStr("project_guid"));

                var product = ProjectProductRepository.Create(
                    project, GetRequestStr("name"),
                    GetRequestStr("description"),
                    GetRequestStr("url"),
                    GetRequestStr("use_url")
                    );

                if (!String.IsNullOrEmpty(GetRequestStr("duration_hours")))
                {
                    product.UpdateCol("duration_hours", GetRequestInt("duration_hours"));
                }

                product.UpdateCol("usd_price_pennies", priceInPennies);

                return(HttpResponse.Item(
                           "product", new ProjectProductTransformer().Transform(product.Refresh()),
                           HttpStatusCode.Created
                           ));
            });

            // TODO: ???
            // Patch("/api/v1/project/product/edit", _ => {
            //     var me = UserRepository.Find(CurrentRequest.UserId);
            //
            //     var product = ProjectProductRepository.FindByGuid(GetRequestStr("product_guid"));
            //
            //     var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
            //         new ShouldHaveParameters(new[] {"product_guid"}),
            //         new ExistsInTable("product_guid", "project_products", "guid"),
            //         new HasPermission(me, product.project_id, EntityType.Project)
            //     }, true);
            //     if (errors.Count > 0) return HttpResponse.Errors(errors);
            //
            //     if (!String.IsNullOrEmpty(GetRequestStr("name"))) {
            //         product.UpdateCol("name", GetRequestStr("name"));
            //     }
            //
            //     if (!String.IsNullOrEmpty(GetRequestStr("description"))) {
            //         product.UpdateCol("description", GetRequestStr("description"));
            //     }
            //
            //     if (!String.IsNullOrEmpty(GetRequestStr("url"))) {
            //         product.UpdateCol("url", GetRequestStr("url"));
            //     }
            //
            //     if (!String.IsNullOrEmpty(GetRequestStr("set_url"))) {
            //         product.UpdateCol("set_url", GetRequestStr("set_url"));
            //     }
            //
            //     if (!String.IsNullOrEmpty(GetRequestStr("usd_price"))) {
            //         var price = Convert.ToDecimal(GetRequestStr("usd_price"));
            //         int priceInPennies = (int) (price * 100);
            //
            //         product.UpdateCol("usd_price_pennies", priceInPennies);
            //     }
            //
            //     if (!String.IsNullOrEmpty(GetRequestStr("duration_hours"))) {
            //         product.UpdateCol("duration_hours", GetRequestInt("duration_hours"));
            //     }
            //
            //     return HttpResponse.Item("product", new ProjectProductTransformer().Transform(product.Refresh()));
            // });

            Delete("/api/v1/project/product/delete", _ => {
                var me = UserRepository.Find(CurrentRequest.UserId);

                var product = ProjectProductRepository.FindByGuid(GetRequestStr("product_guid"));

                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "product_guid" }),
                    new ExistsInTable("product_guid", "project_products", "guid"),
                    new HasPermission(me, product?.project_id ?? 0, EntityType.Project)
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                if (product != null && product.UsersCount() > 0)
                {
                    return(HttpResponse.Error(HttpStatusCode.Forbidden, "You cannot delete product owned by others"));
                }

                product?.Delete();

                return(HttpResponse.Item("product", new ProjectProductTransformer().Transform(product)));
            });
        }
Exemple #3
0
 public ProjectProduct Refresh() => ProjectProductRepository.Find(id);
Exemple #4
0
 public ProjectProduct[] Products() => ProjectProductRepository.Get(this);