Implementation of a generic backend of eshop in Crystal
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.7 KiB

  1. require "kemal"
  2. require "../*"
  3. require "io"
  4. require "file"
  5. require "exception"
  6. require "uuid"
  7. require "uuid/json"
  8. require "../../config"
  9. post "/category" do |context|
  10. begin
  11. begin
  12. user = authenticate_admin!(context.request.headers["user"],UUID.new(context.request.headers["api_token"]))
  13. rescue ex
  14. halt context, status_code: 403, response: ex.to_s
  15. end
  16. cat = Category.from_json(context.request.body.not_nil!).not_nil!
  17. if cat.name_id.count(' ')==0
  18. File.write Statics.data_path+"category/"+cat.name_id,cat.to_json
  19. else
  20. halt context, status_code: 400, response: "name_id should not contain spaces ' ' or '/'"
  21. end
  22. rescue ex
  23. halt context, status_code: 500, response: ex.to_s
  24. end
  25. "OK".to_json
  26. end
  27. get "/category/m/:id" do |context|
  28. begin
  29. ret = Category.from_json File.read Statics.data_path+"category/"+context.params.url["id"]
  30. rescue ex
  31. halt context, status_code: 404, response: ex.to_s
  32. end
  33. ret.to_json
  34. end
  35. get "/category/d/:id" do |context|
  36. ret = Array(Product).new
  37. begin
  38. cat = Category.from_json File.read Statics.data_path+"category/"+context.params.url["id"]
  39. sent=0
  40. skipped=0
  41. skip, limit = Statics.extract_skip_info context
  42. cat.products.each do |product|
  43. begin
  44. if(skipped<skip)
  45. skipped+=1
  46. else
  47. ret.push Product.from_json File.read Statics.data_path+"products/"+product.to_s
  48. sent+=1
  49. end
  50. rescue
  51. end
  52. end
  53. rescue ex
  54. halt context, status_code: 404, response: ex.to_s
  55. end
  56. ret.to_json
  57. end