Implementation of a generic backend of eshop in Crystal
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

63 lignes
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