Guest User

Untitled

a guest
Jun 14th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. (load "NuMongoDB")
  2. (load "NuJSON")
  3. (load "Nutils:cl_utils") ; for butlast and last functions
  4. (load "Nutils:with_object") ; for with-object
  5.  
  6. ; Wrap the mongo connection and make sure the last value of body is
  7. ; the return value
  8. (macro with-mongo ((user password db) *body)
  9. (set __allbutlast (butlast *body))
  10. (set __last (last *body))
  11. `(let* ((mongo (NuMongoDB new))
  12. (__connected (mongo connectWithOptions:nil)))
  13. (mongo authenticateUser:,user withPassword:,password forDatabase:,db)
  14. ,@__allbutlast
  15. (set __lastResult ,@__last)
  16. (mongo close)
  17. __lastResult))
  18.  
  19.  
  20. ; Shortened version:
  21.  
  22. (post "/reset"
  23. (with-mongo ("stickup" "stickup" "stickup")
  24. (mongo dropCollection:"users" inDatabase:"stickup")
  25. (mongo dropCollection:"stickups" inDatabase:"stickup")
  26. ((dict status:200 message:"Reset database.") JSONRepresentation)))
  27.  
  28.  
  29. (post "/stickup"
  30. (with-mongo ("stickup" "stickup" "stickup")
  31. (set stickup (REQUEST post))
  32. (set user (mongo findOne:(dict name:(stickup user:)) inCollection:"stickup.users"))
  33. (unless user
  34. (set user (dict name:(stickup user:) password:(stickup password:)))
  35. (mongo insertObject:user intoCollection:"stickup.users"))
  36. (set result (if (eq (user password:) (stickup password:))
  37. (then (with-object stickup
  38. (removeObjectForKey:"password")
  39. (time:((NSDate date) description))
  40. (location:(dict latitude:((stickup latitude:) floatValue)
  41. longitude:((stickup longitude:) floatValue)))
  42. (removeObjectForKey:"latitude")
  43. (removeObjectForKey:"longitude"))
  44. (mongo insertObject:stickup intoCollection:"stickup.stickups")
  45. (dict status:200 message:"Thank you." saved:stickup))
  46. (else (dict status:403 message:"Unable to post stickup."))))
  47. (result JSONRepresentation)))
  48.  
  49. (get "/stickups"
  50. (with-mongo ("stickup" "stickup" "stickup")
  51. (mongo ensureCollection:"stickup.stickups" hasIndex:(dict location:"2d") withOptions:0)
  52. (set query (dict))
  53. (if (and (set latitude (((REQUEST query) latitude:) floatValue))
  54. (set longitude (((REQUEST query) longitude:) floatValue)))
  55. (query location:(dict $near:(dict latitude:latitude longitude:longitude))))
  56. (unless (set count (((REQUEST query) count:) intValue))
  57. (set count 10))
  58. ((dict status:200 stickups:(mongo findArray:query
  59. inCollection:"stickup.stickups"
  60. returningFields:nil
  61. numberToReturn:count
  62. numberToSkip:0))
  63. JSONRepresentation)))
  64.  
  65. (get "/count"
  66. (with-mongo ("stickup" "stickup" "stickup")
  67. (set count (mongo countWithCondition:nil inCollection:"stickups" inDatabase:"stickup"))
  68. ((dict status:200 count:count) JSONRepresentation)))
Add Comment
Please, Sign In to add comment