@aurora-interactive/sensei-productivity 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/README.md +2 -0
  2. package/dist/commonjs/funcs/categories-create.d.ts +1 -1
  3. package/dist/commonjs/funcs/categories-create.d.ts.map +1 -1
  4. package/dist/commonjs/funcs/categories-create.js +3 -2
  5. package/dist/commonjs/funcs/categories-create.js.map +1 -1
  6. package/dist/commonjs/funcs/categories-delete.js +2 -2
  7. package/dist/commonjs/funcs/categories-delete.js.map +1 -1
  8. package/dist/commonjs/funcs/categories-get-all.d.ts +1 -1
  9. package/dist/commonjs/funcs/categories-get-all.d.ts.map +1 -1
  10. package/dist/commonjs/funcs/categories-get-all.js +3 -2
  11. package/dist/commonjs/funcs/categories-get-all.js.map +1 -1
  12. package/dist/commonjs/funcs/categories-update.d.ts +1 -1
  13. package/dist/commonjs/funcs/categories-update.d.ts.map +1 -1
  14. package/dist/commonjs/funcs/categories-update.js +3 -2
  15. package/dist/commonjs/funcs/categories-update.js.map +1 -1
  16. package/dist/commonjs/funcs/schools-get-all.js +2 -2
  17. package/dist/commonjs/funcs/schools-get-all.js.map +1 -1
  18. package/dist/commonjs/funcs/schools-get.d.ts +1 -1
  19. package/dist/commonjs/funcs/schools-get.d.ts.map +1 -1
  20. package/dist/commonjs/funcs/schools-get.js +3 -2
  21. package/dist/commonjs/funcs/schools-get.js.map +1 -1
  22. package/dist/commonjs/funcs/schools-leaderboard.d.ts +14 -0
  23. package/dist/commonjs/funcs/schools-leaderboard.d.ts.map +1 -0
  24. package/dist/commonjs/funcs/schools-leaderboard.js +126 -0
  25. package/dist/commonjs/funcs/schools-leaderboard.js.map +1 -0
  26. package/dist/commonjs/funcs/users-activities-create.d.ts +1 -1
  27. package/dist/commonjs/funcs/users-activities-create.d.ts.map +1 -1
  28. package/dist/commonjs/funcs/users-activities-create.js +3 -2
  29. package/dist/commonjs/funcs/users-activities-create.js.map +1 -1
  30. package/dist/commonjs/funcs/users-activities-delete.js +2 -2
  31. package/dist/commonjs/funcs/users-activities-delete.js.map +1 -1
  32. package/dist/commonjs/funcs/users-activities-get-all-of-user.d.ts +1 -1
  33. package/dist/commonjs/funcs/users-activities-get-all-of-user.d.ts.map +1 -1
  34. package/dist/commonjs/funcs/users-activities-get-all-of-user.js +3 -2
  35. package/dist/commonjs/funcs/users-activities-get-all-of-user.js.map +1 -1
  36. package/dist/commonjs/funcs/users-activities-get.d.ts +1 -1
  37. package/dist/commonjs/funcs/users-activities-get.d.ts.map +1 -1
  38. package/dist/commonjs/funcs/users-activities-get.js +3 -2
  39. package/dist/commonjs/funcs/users-activities-get.js.map +1 -1
  40. package/dist/commonjs/funcs/users-activities-me.d.ts +1 -1
  41. package/dist/commonjs/funcs/users-activities-me.d.ts.map +1 -1
  42. package/dist/commonjs/funcs/users-activities-me.js +3 -2
  43. package/dist/commonjs/funcs/users-activities-me.js.map +1 -1
  44. package/dist/commonjs/funcs/users-activities-update.d.ts +1 -1
  45. package/dist/commonjs/funcs/users-activities-update.d.ts.map +1 -1
  46. package/dist/commonjs/funcs/users-activities-update.js +3 -2
  47. package/dist/commonjs/funcs/users-activities-update.js.map +1 -1
  48. package/dist/commonjs/funcs/users-delete.js +2 -2
  49. package/dist/commonjs/funcs/users-delete.js.map +1 -1
  50. package/dist/commonjs/funcs/users-friends-accept.js +2 -2
  51. package/dist/commonjs/funcs/users-friends-accept.js.map +1 -1
  52. package/dist/commonjs/funcs/users-friends-list.d.ts +1 -1
  53. package/dist/commonjs/funcs/users-friends-list.d.ts.map +1 -1
  54. package/dist/commonjs/funcs/users-friends-list.js +3 -2
  55. package/dist/commonjs/funcs/users-friends-list.js.map +1 -1
  56. package/dist/commonjs/funcs/users-friends-pending.d.ts +1 -1
  57. package/dist/commonjs/funcs/users-friends-pending.d.ts.map +1 -1
  58. package/dist/commonjs/funcs/users-friends-pending.js +3 -2
  59. package/dist/commonjs/funcs/users-friends-pending.js.map +1 -1
  60. package/dist/commonjs/funcs/users-friends-reject.js +2 -2
  61. package/dist/commonjs/funcs/users-friends-reject.js.map +1 -1
  62. package/dist/commonjs/funcs/users-friends-remove.js +2 -2
  63. package/dist/commonjs/funcs/users-friends-remove.js.map +1 -1
  64. package/dist/commonjs/funcs/users-friends-send-request.js +2 -2
  65. package/dist/commonjs/funcs/users-friends-send-request.js.map +1 -1
  66. package/dist/commonjs/funcs/users-get.d.ts +1 -1
  67. package/dist/commonjs/funcs/users-get.d.ts.map +1 -1
  68. package/dist/commonjs/funcs/users-get.js +3 -2
  69. package/dist/commonjs/funcs/users-get.js.map +1 -1
  70. package/dist/commonjs/funcs/users-login.d.ts +1 -1
  71. package/dist/commonjs/funcs/users-login.d.ts.map +1 -1
  72. package/dist/commonjs/funcs/users-login.js +3 -2
  73. package/dist/commonjs/funcs/users-login.js.map +1 -1
  74. package/dist/commonjs/funcs/users-me.d.ts +1 -1
  75. package/dist/commonjs/funcs/users-me.d.ts.map +1 -1
  76. package/dist/commonjs/funcs/users-me.js +3 -2
  77. package/dist/commonjs/funcs/users-me.js.map +1 -1
  78. package/dist/commonjs/funcs/users-posts-delete.js +2 -2
  79. package/dist/commonjs/funcs/users-posts-delete.js.map +1 -1
  80. package/dist/commonjs/funcs/users-posts-feed.d.ts +1 -1
  81. package/dist/commonjs/funcs/users-posts-feed.d.ts.map +1 -1
  82. package/dist/commonjs/funcs/users-posts-feed.js +3 -2
  83. package/dist/commonjs/funcs/users-posts-feed.js.map +1 -1
  84. package/dist/commonjs/funcs/users-posts-get-by-post-id.d.ts +1 -1
  85. package/dist/commonjs/funcs/users-posts-get-by-post-id.d.ts.map +1 -1
  86. package/dist/commonjs/funcs/users-posts-get-by-post-id.js +3 -2
  87. package/dist/commonjs/funcs/users-posts-get-by-post-id.js.map +1 -1
  88. package/dist/commonjs/funcs/users-posts-get-by-user-id.d.ts +1 -1
  89. package/dist/commonjs/funcs/users-posts-get-by-user-id.d.ts.map +1 -1
  90. package/dist/commonjs/funcs/users-posts-get-by-user-id.js +3 -2
  91. package/dist/commonjs/funcs/users-posts-get-by-user-id.js.map +1 -1
  92. package/dist/commonjs/funcs/users-posts-like.js +2 -2
  93. package/dist/commonjs/funcs/users-posts-like.js.map +1 -1
  94. package/dist/commonjs/funcs/users-posts-remove-like.js +2 -2
  95. package/dist/commonjs/funcs/users-posts-remove-like.js.map +1 -1
  96. package/dist/commonjs/funcs/users-posts-update.d.ts +1 -1
  97. package/dist/commonjs/funcs/users-posts-update.d.ts.map +1 -1
  98. package/dist/commonjs/funcs/users-posts-update.js +3 -2
  99. package/dist/commonjs/funcs/users-posts-update.js.map +1 -1
  100. package/dist/commonjs/funcs/users-signup.d.ts +1 -1
  101. package/dist/commonjs/funcs/users-signup.d.ts.map +1 -1
  102. package/dist/commonjs/funcs/users-signup.js +3 -2
  103. package/dist/commonjs/funcs/users-signup.js.map +1 -1
  104. package/dist/commonjs/funcs/users-update.d.ts +1 -1
  105. package/dist/commonjs/funcs/users-update.d.ts.map +1 -1
  106. package/dist/commonjs/funcs/users-update.js +3 -2
  107. package/dist/commonjs/funcs/users-update.js.map +1 -1
  108. package/dist/commonjs/lib/config.d.ts +4 -4
  109. package/dist/commonjs/lib/config.js +4 -4
  110. package/dist/commonjs/lib/encodings.d.ts.map +1 -1
  111. package/dist/commonjs/lib/encodings.js +20 -5
  112. package/dist/commonjs/lib/encodings.js.map +1 -1
  113. package/dist/commonjs/lib/files.d.ts +13 -0
  114. package/dist/commonjs/lib/files.d.ts.map +1 -1
  115. package/dist/commonjs/lib/files.js +19 -0
  116. package/dist/commonjs/lib/files.js.map +1 -1
  117. package/dist/commonjs/lib/sdks.d.ts.map +1 -1
  118. package/dist/commonjs/lib/sdks.js +8 -4
  119. package/dist/commonjs/lib/sdks.js.map +1 -1
  120. package/dist/commonjs/lib/security.d.ts +1 -1
  121. package/dist/commonjs/lib/security.d.ts.map +1 -1
  122. package/dist/commonjs/lib/security.js +19 -8
  123. package/dist/commonjs/lib/security.js.map +1 -1
  124. package/dist/commonjs/lib/url.d.ts.map +1 -1
  125. package/dist/commonjs/lib/url.js +4 -2
  126. package/dist/commonjs/lib/url.js.map +1 -1
  127. package/dist/commonjs/models/operations/get-feed.d.ts +1 -0
  128. package/dist/commonjs/models/operations/get-feed.d.ts.map +1 -1
  129. package/dist/commonjs/models/operations/get-feed.js +1 -0
  130. package/dist/commonjs/models/operations/get-feed.js.map +1 -1
  131. package/dist/commonjs/models/operations/get-post-by-id.d.ts +1 -0
  132. package/dist/commonjs/models/operations/get-post-by-id.d.ts.map +1 -1
  133. package/dist/commonjs/models/operations/get-post-by-id.js +1 -0
  134. package/dist/commonjs/models/operations/get-post-by-id.js.map +1 -1
  135. package/dist/commonjs/models/operations/get-top-schools.d.ts +22 -0
  136. package/dist/commonjs/models/operations/get-top-schools.d.ts.map +1 -0
  137. package/dist/commonjs/models/operations/get-top-schools.js +61 -0
  138. package/dist/commonjs/models/operations/get-top-schools.js.map +1 -0
  139. package/dist/commonjs/models/operations/get-user-posts.d.ts +1 -0
  140. package/dist/commonjs/models/operations/get-user-posts.d.ts.map +1 -1
  141. package/dist/commonjs/models/operations/get-user-posts.js +1 -0
  142. package/dist/commonjs/models/operations/get-user-posts.js.map +1 -1
  143. package/dist/commonjs/models/operations/index.d.ts +1 -0
  144. package/dist/commonjs/models/operations/index.d.ts.map +1 -1
  145. package/dist/commonjs/models/operations/index.js +1 -0
  146. package/dist/commonjs/models/operations/index.js.map +1 -1
  147. package/dist/commonjs/sdk/activities.d.ts +5 -5
  148. package/dist/commonjs/sdk/activities.d.ts.map +1 -1
  149. package/dist/commonjs/sdk/categories.d.ts +3 -3
  150. package/dist/commonjs/sdk/categories.d.ts.map +1 -1
  151. package/dist/commonjs/sdk/friends.d.ts +2 -2
  152. package/dist/commonjs/sdk/friends.d.ts.map +1 -1
  153. package/dist/commonjs/sdk/posts.d.ts +4 -4
  154. package/dist/commonjs/sdk/posts.d.ts.map +1 -1
  155. package/dist/commonjs/sdk/schools.d.ts +5 -1
  156. package/dist/commonjs/sdk/schools.d.ts.map +1 -1
  157. package/dist/commonjs/sdk/schools.js +7 -0
  158. package/dist/commonjs/sdk/schools.js.map +1 -1
  159. package/dist/commonjs/sdk/users.d.ts +5 -5
  160. package/dist/commonjs/sdk/users.d.ts.map +1 -1
  161. package/dist/esm/funcs/categories-create.d.ts +1 -1
  162. package/dist/esm/funcs/categories-create.d.ts.map +1 -1
  163. package/dist/esm/funcs/categories-create.js +3 -2
  164. package/dist/esm/funcs/categories-create.js.map +1 -1
  165. package/dist/esm/funcs/categories-delete.js +2 -2
  166. package/dist/esm/funcs/categories-delete.js.map +1 -1
  167. package/dist/esm/funcs/categories-get-all.d.ts +1 -1
  168. package/dist/esm/funcs/categories-get-all.d.ts.map +1 -1
  169. package/dist/esm/funcs/categories-get-all.js +3 -2
  170. package/dist/esm/funcs/categories-get-all.js.map +1 -1
  171. package/dist/esm/funcs/categories-update.d.ts +1 -1
  172. package/dist/esm/funcs/categories-update.d.ts.map +1 -1
  173. package/dist/esm/funcs/categories-update.js +3 -2
  174. package/dist/esm/funcs/categories-update.js.map +1 -1
  175. package/dist/esm/funcs/schools-get-all.js +2 -2
  176. package/dist/esm/funcs/schools-get-all.js.map +1 -1
  177. package/dist/esm/funcs/schools-get.d.ts +1 -1
  178. package/dist/esm/funcs/schools-get.d.ts.map +1 -1
  179. package/dist/esm/funcs/schools-get.js +3 -2
  180. package/dist/esm/funcs/schools-get.js.map +1 -1
  181. package/dist/esm/funcs/schools-leaderboard.d.ts +14 -0
  182. package/dist/esm/funcs/schools-leaderboard.d.ts.map +1 -0
  183. package/dist/esm/funcs/schools-leaderboard.js +90 -0
  184. package/dist/esm/funcs/schools-leaderboard.js.map +1 -0
  185. package/dist/esm/funcs/users-activities-create.d.ts +1 -1
  186. package/dist/esm/funcs/users-activities-create.d.ts.map +1 -1
  187. package/dist/esm/funcs/users-activities-create.js +3 -2
  188. package/dist/esm/funcs/users-activities-create.js.map +1 -1
  189. package/dist/esm/funcs/users-activities-delete.js +2 -2
  190. package/dist/esm/funcs/users-activities-delete.js.map +1 -1
  191. package/dist/esm/funcs/users-activities-get-all-of-user.d.ts +1 -1
  192. package/dist/esm/funcs/users-activities-get-all-of-user.d.ts.map +1 -1
  193. package/dist/esm/funcs/users-activities-get-all-of-user.js +3 -2
  194. package/dist/esm/funcs/users-activities-get-all-of-user.js.map +1 -1
  195. package/dist/esm/funcs/users-activities-get.d.ts +1 -1
  196. package/dist/esm/funcs/users-activities-get.d.ts.map +1 -1
  197. package/dist/esm/funcs/users-activities-get.js +3 -2
  198. package/dist/esm/funcs/users-activities-get.js.map +1 -1
  199. package/dist/esm/funcs/users-activities-me.d.ts +1 -1
  200. package/dist/esm/funcs/users-activities-me.d.ts.map +1 -1
  201. package/dist/esm/funcs/users-activities-me.js +3 -2
  202. package/dist/esm/funcs/users-activities-me.js.map +1 -1
  203. package/dist/esm/funcs/users-activities-update.d.ts +1 -1
  204. package/dist/esm/funcs/users-activities-update.d.ts.map +1 -1
  205. package/dist/esm/funcs/users-activities-update.js +3 -2
  206. package/dist/esm/funcs/users-activities-update.js.map +1 -1
  207. package/dist/esm/funcs/users-delete.js +2 -2
  208. package/dist/esm/funcs/users-delete.js.map +1 -1
  209. package/dist/esm/funcs/users-friends-accept.js +2 -2
  210. package/dist/esm/funcs/users-friends-accept.js.map +1 -1
  211. package/dist/esm/funcs/users-friends-list.d.ts +1 -1
  212. package/dist/esm/funcs/users-friends-list.d.ts.map +1 -1
  213. package/dist/esm/funcs/users-friends-list.js +3 -2
  214. package/dist/esm/funcs/users-friends-list.js.map +1 -1
  215. package/dist/esm/funcs/users-friends-pending.d.ts +1 -1
  216. package/dist/esm/funcs/users-friends-pending.d.ts.map +1 -1
  217. package/dist/esm/funcs/users-friends-pending.js +3 -2
  218. package/dist/esm/funcs/users-friends-pending.js.map +1 -1
  219. package/dist/esm/funcs/users-friends-reject.js +2 -2
  220. package/dist/esm/funcs/users-friends-reject.js.map +1 -1
  221. package/dist/esm/funcs/users-friends-remove.js +2 -2
  222. package/dist/esm/funcs/users-friends-remove.js.map +1 -1
  223. package/dist/esm/funcs/users-friends-send-request.js +2 -2
  224. package/dist/esm/funcs/users-friends-send-request.js.map +1 -1
  225. package/dist/esm/funcs/users-get.d.ts +1 -1
  226. package/dist/esm/funcs/users-get.d.ts.map +1 -1
  227. package/dist/esm/funcs/users-get.js +3 -2
  228. package/dist/esm/funcs/users-get.js.map +1 -1
  229. package/dist/esm/funcs/users-login.d.ts +1 -1
  230. package/dist/esm/funcs/users-login.d.ts.map +1 -1
  231. package/dist/esm/funcs/users-login.js +3 -2
  232. package/dist/esm/funcs/users-login.js.map +1 -1
  233. package/dist/esm/funcs/users-me.d.ts +1 -1
  234. package/dist/esm/funcs/users-me.d.ts.map +1 -1
  235. package/dist/esm/funcs/users-me.js +3 -2
  236. package/dist/esm/funcs/users-me.js.map +1 -1
  237. package/dist/esm/funcs/users-posts-delete.js +2 -2
  238. package/dist/esm/funcs/users-posts-delete.js.map +1 -1
  239. package/dist/esm/funcs/users-posts-feed.d.ts +1 -1
  240. package/dist/esm/funcs/users-posts-feed.d.ts.map +1 -1
  241. package/dist/esm/funcs/users-posts-feed.js +3 -2
  242. package/dist/esm/funcs/users-posts-feed.js.map +1 -1
  243. package/dist/esm/funcs/users-posts-get-by-post-id.d.ts +1 -1
  244. package/dist/esm/funcs/users-posts-get-by-post-id.d.ts.map +1 -1
  245. package/dist/esm/funcs/users-posts-get-by-post-id.js +3 -2
  246. package/dist/esm/funcs/users-posts-get-by-post-id.js.map +1 -1
  247. package/dist/esm/funcs/users-posts-get-by-user-id.d.ts +1 -1
  248. package/dist/esm/funcs/users-posts-get-by-user-id.d.ts.map +1 -1
  249. package/dist/esm/funcs/users-posts-get-by-user-id.js +3 -2
  250. package/dist/esm/funcs/users-posts-get-by-user-id.js.map +1 -1
  251. package/dist/esm/funcs/users-posts-like.js +2 -2
  252. package/dist/esm/funcs/users-posts-like.js.map +1 -1
  253. package/dist/esm/funcs/users-posts-remove-like.js +2 -2
  254. package/dist/esm/funcs/users-posts-remove-like.js.map +1 -1
  255. package/dist/esm/funcs/users-posts-update.d.ts +1 -1
  256. package/dist/esm/funcs/users-posts-update.d.ts.map +1 -1
  257. package/dist/esm/funcs/users-posts-update.js +3 -2
  258. package/dist/esm/funcs/users-posts-update.js.map +1 -1
  259. package/dist/esm/funcs/users-signup.d.ts +1 -1
  260. package/dist/esm/funcs/users-signup.d.ts.map +1 -1
  261. package/dist/esm/funcs/users-signup.js +3 -2
  262. package/dist/esm/funcs/users-signup.js.map +1 -1
  263. package/dist/esm/funcs/users-update.d.ts +1 -1
  264. package/dist/esm/funcs/users-update.d.ts.map +1 -1
  265. package/dist/esm/funcs/users-update.js +3 -2
  266. package/dist/esm/funcs/users-update.js.map +1 -1
  267. package/dist/esm/lib/config.d.ts +4 -4
  268. package/dist/esm/lib/config.js +4 -4
  269. package/dist/esm/lib/encodings.d.ts.map +1 -1
  270. package/dist/esm/lib/encodings.js +20 -5
  271. package/dist/esm/lib/encodings.js.map +1 -1
  272. package/dist/esm/lib/files.d.ts +13 -0
  273. package/dist/esm/lib/files.d.ts.map +1 -1
  274. package/dist/esm/lib/files.js +18 -0
  275. package/dist/esm/lib/files.js.map +1 -1
  276. package/dist/esm/lib/sdks.d.ts.map +1 -1
  277. package/dist/esm/lib/sdks.js +8 -4
  278. package/dist/esm/lib/sdks.js.map +1 -1
  279. package/dist/esm/lib/security.d.ts +1 -1
  280. package/dist/esm/lib/security.d.ts.map +1 -1
  281. package/dist/esm/lib/security.js +19 -8
  282. package/dist/esm/lib/security.js.map +1 -1
  283. package/dist/esm/lib/url.d.ts.map +1 -1
  284. package/dist/esm/lib/url.js +4 -2
  285. package/dist/esm/lib/url.js.map +1 -1
  286. package/dist/esm/models/operations/get-feed.d.ts +1 -0
  287. package/dist/esm/models/operations/get-feed.d.ts.map +1 -1
  288. package/dist/esm/models/operations/get-feed.js +1 -0
  289. package/dist/esm/models/operations/get-feed.js.map +1 -1
  290. package/dist/esm/models/operations/get-post-by-id.d.ts +1 -0
  291. package/dist/esm/models/operations/get-post-by-id.d.ts.map +1 -1
  292. package/dist/esm/models/operations/get-post-by-id.js +1 -0
  293. package/dist/esm/models/operations/get-post-by-id.js.map +1 -1
  294. package/dist/esm/models/operations/get-top-schools.d.ts +22 -0
  295. package/dist/esm/models/operations/get-top-schools.d.ts.map +1 -0
  296. package/dist/esm/models/operations/get-top-schools.js +23 -0
  297. package/dist/esm/models/operations/get-top-schools.js.map +1 -0
  298. package/dist/esm/models/operations/get-user-posts.d.ts +1 -0
  299. package/dist/esm/models/operations/get-user-posts.d.ts.map +1 -1
  300. package/dist/esm/models/operations/get-user-posts.js +1 -0
  301. package/dist/esm/models/operations/get-user-posts.js.map +1 -1
  302. package/dist/esm/models/operations/index.d.ts +1 -0
  303. package/dist/esm/models/operations/index.d.ts.map +1 -1
  304. package/dist/esm/models/operations/index.js +1 -0
  305. package/dist/esm/models/operations/index.js.map +1 -1
  306. package/dist/esm/sdk/activities.d.ts +5 -5
  307. package/dist/esm/sdk/activities.d.ts.map +1 -1
  308. package/dist/esm/sdk/categories.d.ts +3 -3
  309. package/dist/esm/sdk/categories.d.ts.map +1 -1
  310. package/dist/esm/sdk/friends.d.ts +2 -2
  311. package/dist/esm/sdk/friends.d.ts.map +1 -1
  312. package/dist/esm/sdk/posts.d.ts +4 -4
  313. package/dist/esm/sdk/posts.d.ts.map +1 -1
  314. package/dist/esm/sdk/schools.d.ts +5 -1
  315. package/dist/esm/sdk/schools.d.ts.map +1 -1
  316. package/dist/esm/sdk/schools.js +7 -0
  317. package/dist/esm/sdk/schools.js.map +1 -1
  318. package/dist/esm/sdk/users.d.ts +5 -5
  319. package/dist/esm/sdk/users.d.ts.map +1 -1
  320. package/jsr.json +1 -1
  321. package/package.json +1 -1
  322. package/rest-api/cypress/e2e/school-endpoints.cy.js +58 -0
  323. package/rest-api/cypress/e2e/user-endpoints.cy.js +1 -1
  324. package/rest-api/cypress.config.ts +0 -1
  325. package/rest-api/index.js +34 -6
  326. package/rest-api/lib/users.js +37 -0
  327. package/rest-api/routes/ActivityPostFunctions.js +20 -11
  328. package/rest-api/routes/FriendFunctions.js +2 -35
  329. package/rest-api/routes/SchoolFunctions.js +50 -0
  330. package/rest-api/routes/UserActivityFunctions.js +26 -1
  331. package/src/funcs/categories-create.ts +14 -6
  332. package/src/funcs/categories-delete.ts +3 -3
  333. package/src/funcs/categories-get-all.ts +14 -6
  334. package/src/funcs/categories-update.ts +14 -7
  335. package/src/funcs/schools-get-all.ts +2 -2
  336. package/src/funcs/schools-get.ts +11 -7
  337. package/src/funcs/schools-leaderboard.ts +184 -0
  338. package/src/funcs/users-activities-create.ts +14 -6
  339. package/src/funcs/users-activities-delete.ts +3 -3
  340. package/src/funcs/users-activities-get-all-of-user.ts +18 -7
  341. package/src/funcs/users-activities-get.ts +14 -7
  342. package/src/funcs/users-activities-me.ts +14 -6
  343. package/src/funcs/users-activities-update.ts +14 -7
  344. package/src/funcs/users-delete.ts +3 -3
  345. package/src/funcs/users-friends-accept.ts +3 -3
  346. package/src/funcs/users-friends-list.ts +14 -7
  347. package/src/funcs/users-friends-pending.ts +15 -6
  348. package/src/funcs/users-friends-reject.ts +3 -3
  349. package/src/funcs/users-friends-remove.ts +3 -3
  350. package/src/funcs/users-friends-send-request.ts +3 -3
  351. package/src/funcs/users-get.ts +11 -7
  352. package/src/funcs/users-login.ts +11 -6
  353. package/src/funcs/users-me.ts +14 -6
  354. package/src/funcs/users-posts-delete.ts +3 -3
  355. package/src/funcs/users-posts-feed.ts +14 -6
  356. package/src/funcs/users-posts-get-by-post-id.ts +11 -7
  357. package/src/funcs/users-posts-get-by-user-id.ts +14 -7
  358. package/src/funcs/users-posts-like.ts +3 -3
  359. package/src/funcs/users-posts-remove-like.ts +3 -3
  360. package/src/funcs/users-posts-update.ts +11 -7
  361. package/src/funcs/users-signup.ts +8 -6
  362. package/src/funcs/users-update.ts +11 -7
  363. package/src/lib/config.ts +4 -4
  364. package/src/lib/encodings.ts +23 -4
  365. package/src/lib/files.ts +22 -0
  366. package/src/lib/sdks.ts +7 -5
  367. package/src/lib/security.ts +14 -2
  368. package/src/lib/url.ts +16 -14
  369. package/src/models/operations/get-feed.ts +2 -0
  370. package/src/models/operations/get-post-by-id.ts +2 -0
  371. package/src/models/operations/get-top-schools.ts +60 -0
  372. package/src/models/operations/get-user-posts.ts +2 -0
  373. package/src/models/operations/index.ts +1 -0
  374. package/src/sdk/activities.ts +5 -5
  375. package/src/sdk/categories.ts +3 -3
  376. package/src/sdk/friends.ts +2 -2
  377. package/src/sdk/posts.ts +4 -4
  378. package/src/sdk/schools.ts +16 -1
  379. package/src/sdk/users.ts +5 -5
@@ -4,15 +4,15 @@ export declare class Categories extends ClientSDK {
4
4
  /**
5
5
  * List all categories
6
6
  */
7
- getAll(options?: RequestOptions): Promise<Array<operations.ListCategoriesResponse>>;
7
+ getAll(options?: RequestOptions): Promise<Array<operations.ListCategoriesResponse> | undefined>;
8
8
  /**
9
9
  * Create a new category (school admins only)
10
10
  */
11
- create(request: operations.CreateCategoryRequest, options?: RequestOptions): Promise<operations.CreateCategoryResponse>;
11
+ create(request: operations.CreateCategoryRequest, options?: RequestOptions): Promise<operations.CreateCategoryResponse | undefined>;
12
12
  /**
13
13
  * Update a category (school admins only)
14
14
  */
15
- update(request: operations.UpdateCategoryRequest, options?: RequestOptions): Promise<operations.UpdateCategoryResponse>;
15
+ update(request: operations.UpdateCategoryRequest, options?: RequestOptions): Promise<operations.UpdateCategoryResponse | undefined>;
16
16
  /**
17
17
  * Delete a category (school admins only)
18
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../../src/sdk/categories.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAG5D,qBAAa,UAAW,SAAQ,SAAS;IACvC;;OAEG;IACG,MAAM,CACV,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAOpD;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,qBAAqB,EACzC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC;IAQ7C;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,qBAAqB,EACzC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC;IAQ7C;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,qBAAqB,EACzC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
1
+ {"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../../src/sdk/categories.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAG5D,qBAAa,UAAW,SAAQ,SAAS;IACvC;;OAEG;IACG,MAAM,CACV,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;IAOhE;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,qBAAqB,EACzC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAQzD;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,qBAAqB,EACzC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAQzD;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,qBAAqB,EACzC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
@@ -4,11 +4,11 @@ export declare class Friends extends ClientSDK {
4
4
  /**
5
5
  * List a user's friends
6
6
  */
7
- list(request: operations.ListFriendsRequest, options?: RequestOptions): Promise<Array<operations.ListFriendsResponse>>;
7
+ list(request: operations.ListFriendsRequest, options?: RequestOptions): Promise<Array<operations.ListFriendsResponse> | undefined>;
8
8
  /**
9
9
  * Get all pending friend requests
10
10
  */
11
- pending(options?: RequestOptions): Promise<Array<operations.PendingFriendRequestsResponse>>;
11
+ pending(options?: RequestOptions): Promise<Array<operations.PendingFriendRequestsResponse> | undefined>;
12
12
  /**
13
13
  * Send a friend request to a user
14
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"friends.d.ts","sourceRoot":"","sources":["../../../src/sdk/friends.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAG5D,qBAAa,OAAQ,SAAQ,SAAS;IACpC;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,UAAU,CAAC,kBAAkB,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAQjD;;OAEG;IACG,OAAO,CACX,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;IAO3D;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,UAAU,CAAC,wBAAwB,EAC5C,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,0BAA0B,EAC9C,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,0BAA0B,EAC9C,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,mBAAmB,EACvC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
1
+ {"version":3,"file":"friends.d.ts","sourceRoot":"","sources":["../../../src/sdk/friends.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAG5D,qBAAa,OAAQ,SAAQ,SAAS;IACpC;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,UAAU,CAAC,kBAAkB,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;IAQ7D;;OAEG;IACG,OAAO,CACX,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,6BAA6B,CAAC,GAAG,SAAS,CAAC;IAOvE;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,UAAU,CAAC,wBAAwB,EAC5C,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,0BAA0B,EAC9C,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,0BAA0B,EAC9C,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,mBAAmB,EACvC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
@@ -4,19 +4,19 @@ export declare class Posts extends ClientSDK {
4
4
  /**
5
5
  * Get a user's posts (respects post visibility)
6
6
  */
7
- getByUserId(request: operations.GetUserPostsRequest, options?: RequestOptions): Promise<Array<operations.GetUserPostsResponse>>;
7
+ getByUserId(request: operations.GetUserPostsRequest, options?: RequestOptions): Promise<Array<operations.GetUserPostsResponse> | undefined>;
8
8
  /**
9
9
  * Get the social feed of posts from the authenticated user's friends
10
10
  */
11
- feed(request?: operations.GetFeedRequest | undefined, options?: RequestOptions): Promise<Array<operations.GetFeedResponse>>;
11
+ feed(request?: operations.GetFeedRequest | undefined, options?: RequestOptions): Promise<Array<operations.GetFeedResponse> | undefined>;
12
12
  /**
13
13
  * Get a specific post by ID
14
14
  */
15
- getByPostId(request: operations.GetPostByIdRequest, options?: RequestOptions): Promise<operations.GetPostByIdResponse>;
15
+ getByPostId(request: operations.GetPostByIdRequest, options?: RequestOptions): Promise<operations.GetPostByIdResponse | undefined>;
16
16
  /**
17
17
  * Update a post's caption or visibility
18
18
  */
19
- update(request: operations.UpdatePostRequest, options?: RequestOptions): Promise<operations.UpdatePostResponse>;
19
+ update(request: operations.UpdatePostRequest, options?: RequestOptions): Promise<operations.UpdatePostResponse | undefined>;
20
20
  /**
21
21
  * Delete a post
22
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../../src/sdk/posts.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAG5D,qBAAa,KAAM,SAAQ,SAAS;IAClC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,UAAU,CAAC,mBAAmB,EACvC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAQlD;;OAEG;IACG,IAAI,CACR,OAAO,CAAC,EAAE,UAAU,CAAC,cAAc,GAAG,SAAS,EAC/C,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAQ7C;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,UAAU,CAAC,kBAAkB,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC;IAQ1C;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC;IAQzC;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,UAAU,CAAC,eAAe,EACnC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
1
+ {"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../../src/sdk/posts.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAG5D,qBAAa,KAAM,SAAQ,SAAS;IAClC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,UAAU,CAAC,mBAAmB,EACvC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,GAAG,SAAS,CAAC;IAQ9D;;OAEG;IACG,IAAI,CACR,OAAO,CAAC,EAAE,UAAU,CAAC,cAAc,GAAG,SAAS,EAC/C,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;IAQzD;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,UAAU,CAAC,kBAAkB,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAQtD;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAQrD;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,UAAU,CAAC,eAAe,EACnC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
@@ -5,9 +5,13 @@ export declare class Schools extends ClientSDK {
5
5
  * List all schools with user counts
6
6
  */
7
7
  getAll(options?: RequestOptions): Promise<Array<operations.ListSchoolsResponse>>;
8
+ /**
9
+ * Get the top 10 schools (by points) in order
10
+ */
11
+ leaderboard(request?: operations.GetTopSchoolsRequest | undefined, options?: RequestOptions): Promise<Array<operations.GetTopSchoolsResponse> | undefined>;
8
12
  /**
9
13
  * Get a school's details by ID
10
14
  */
11
- get(request: operations.GetSchoolByIdRequest, options?: RequestOptions): Promise<operations.GetSchoolByIdResponse>;
15
+ get(request: operations.GetSchoolByIdRequest, options?: RequestOptions): Promise<operations.GetSchoolByIdResponse | undefined>;
12
16
  }
13
17
  //# sourceMappingURL=schools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schools.d.ts","sourceRoot":"","sources":["../../../src/sdk/schools.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAG5D,qBAAa,OAAQ,SAAQ,SAAS;IACpC;;OAEG;IACG,MAAM,CACV,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAOjD;;OAEG;IACG,GAAG,CACP,OAAO,EAAE,UAAU,CAAC,oBAAoB,EACxC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC;CAO7C"}
1
+ {"version":3,"file":"schools.d.ts","sourceRoot":"","sources":["../../../src/sdk/schools.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAG5D,qBAAa,OAAQ,SAAQ,SAAS;IACpC;;OAEG;IACG,MAAM,CACV,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAOjD;;OAEG;IACG,WAAW,CACf,OAAO,CAAC,EAAE,UAAU,CAAC,oBAAoB,GAAG,SAAS,EACrD,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,GAAG,SAAS,CAAC;IAQ/D;;OAEG;IACG,GAAG,CACP,OAAO,EAAE,UAAU,CAAC,oBAAoB,EACxC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAOzD"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { schoolsGetAll } from "../funcs/schools-get-all.js";
5
5
  import { schoolsGet } from "../funcs/schools-get.js";
6
+ import { schoolsLeaderboard } from "../funcs/schools-leaderboard.js";
6
7
  import { ClientSDK } from "../lib/sdks.js";
7
8
  import { unwrapAsync } from "../types/fp.js";
8
9
  export class Schools extends ClientSDK {
@@ -12,6 +13,12 @@ export class Schools extends ClientSDK {
12
13
  async getAll(options) {
13
14
  return unwrapAsync(schoolsGetAll(this, options));
14
15
  }
16
+ /**
17
+ * Get the top 10 schools (by points) in order
18
+ */
19
+ async leaderboard(request, options) {
20
+ return unwrapAsync(schoolsLeaderboard(this, request, options));
21
+ }
15
22
  /**
16
23
  * Get a school's details by ID
17
24
  */
@@ -1 +1 @@
1
- {"version":3,"file":"schools.js","sourceRoot":"","sources":["../../../src/sdk/schools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAkB,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,OAAO,OAAQ,SAAQ,SAAS;IACpC;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,OAAwB;QAExB,OAAO,WAAW,CAAC,aAAa,CAC9B,IAAI,EACJ,OAAO,CACR,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,OAAwC,EACxC,OAAwB;QAExB,OAAO,WAAW,CAAC,UAAU,CAC3B,IAAI,EACJ,OAAO,EACP,OAAO,CACR,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"schools.js","sourceRoot":"","sources":["../../../src/sdk/schools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAkB,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,OAAO,OAAQ,SAAQ,SAAS;IACpC;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,OAAwB;QAExB,OAAO,WAAW,CAAC,aAAa,CAC9B,IAAI,EACJ,OAAO,CACR,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,OAAqD,EACrD,OAAwB;QAExB,OAAO,WAAW,CAAC,kBAAkB,CACnC,IAAI,EACJ,OAAO,EACP,OAAO,CACR,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CACP,OAAwC,EACxC,OAAwB;QAExB,OAAO,WAAW,CAAC,UAAU,CAC3B,IAAI,EACJ,OAAO,EACP,OAAO,CACR,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -13,23 +13,23 @@ export declare class Users extends ClientSDK {
13
13
  /**
14
14
  * Login the user and also return an access token the API client can use for further authentication
15
15
  */
16
- login(request: operations.UserLoginRequest, options?: RequestOptions): Promise<operations.UserLoginResponse>;
16
+ login(request: operations.UserLoginRequest, options?: RequestOptions): Promise<operations.UserLoginResponse | undefined>;
17
17
  /**
18
18
  * Signup the given user
19
19
  */
20
- signup(request: operations.UserSignupRequest, options?: RequestOptions): Promise<operations.UserSignupResponse>;
20
+ signup(request: operations.UserSignupRequest, options?: RequestOptions): Promise<operations.UserSignupResponse | undefined>;
21
21
  /**
22
22
  * Get the currently authenticated user's profile
23
23
  */
24
- me(options?: RequestOptions): Promise<operations.GetCurrentUserResponse>;
24
+ me(options?: RequestOptions): Promise<operations.GetCurrentUserResponse | undefined>;
25
25
  /**
26
26
  * Get a user's public profile by ID
27
27
  */
28
- get(request: operations.GetUserByIdRequest, options?: RequestOptions): Promise<operations.GetUserByIdResponse>;
28
+ get(request: operations.GetUserByIdRequest, options?: RequestOptions): Promise<operations.GetUserByIdResponse | undefined>;
29
29
  /**
30
30
  * Update a user's profile (own profile only)
31
31
  */
32
- update(request: operations.UpdateUserRequest, options?: RequestOptions): Promise<operations.UpdateUserResponse>;
32
+ update(request: operations.UpdateUserRequest, options?: RequestOptions): Promise<operations.UpdateUserResponse | undefined>;
33
33
  /**
34
34
  * Soft delete a user account (own account only)
35
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/sdk/users.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,qBAAa,KAAM,SAAQ,SAAS;IAClC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED,OAAO,CAAC,QAAQ,CAAC,CAAU;IAC3B,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACG,KAAK,CACT,OAAO,EAAE,UAAU,CAAC,gBAAgB,EACpC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC;IAQxC;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC;IAQzC;;OAEG;IACG,EAAE,CACN,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC;IAO7C;;OAEG;IACG,GAAG,CACP,OAAO,EAAE,UAAU,CAAC,kBAAkB,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC;IAQ1C;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC;IAQzC;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/sdk/users.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,qBAAa,KAAM,SAAQ,SAAS;IAClC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED,OAAO,CAAC,QAAQ,CAAC,CAAU;IAC3B,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACG,KAAK,CACT,OAAO,EAAE,UAAU,CAAC,gBAAgB,EACpC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAQpD;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAQrD;;OAEG;IACG,EAAE,CACN,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAOzD;;OAEG;IACG,GAAG,CACP,OAAO,EAAE,UAAU,CAAC,kBAAkB,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAQtD;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAQrD;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,UAAU,CAAC,iBAAiB,EACrC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
package/jsr.json CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  {
4
4
  "name": "@aurora-interactive/sensei-productivity",
5
- "version": "1.7.0",
5
+ "version": "1.9.0",
6
6
  "exports": {
7
7
  ".": "./src/index.ts",
8
8
  "./models/errors": "./src/models/errors/index.ts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aurora-interactive/sensei-productivity",
3
- "version": "1.7.0",
3
+ "version": "1.9.0",
4
4
  "author": "Speakeasy",
5
5
  "type": "module",
6
6
  "tshy": {
@@ -29,4 +29,62 @@ describe('School Endpoints Unit Tests', () => {
29
29
  });
30
30
  })
31
31
  });
32
+
33
+ // tests authored by Claude and verified manually
34
+ // get leaderboard
35
+ it('Getting leaderboard fails without auth token', () => {
36
+ cy.request({
37
+ url: "schools/leaderboard",
38
+ failOnStatusCode: false
39
+ }).then(response => {
40
+ expect(response.status).to.equal(400, "Getting leaderboard without auth token should have failed with HTTP 401; got different code instead!");
41
+ })
42
+ });
43
+
44
+ it('Getting leaderboard fails with invalid auth token', () => {
45
+ cy.request({
46
+ url: "schools/leaderboard",
47
+ failOnStatusCode: false,
48
+ headers: {
49
+ "Authorization": "Bearer invalidToken"
50
+ }
51
+ }).then(response => {
52
+ expect(response.status).to.equal(401, "Getting leaderboard with invalid auth token should have failed with HTTP 401; got different code instead!");
53
+ })
54
+ });
55
+
56
+ it('Getting leaderboard succeeds and returns schools ranked by points', () => {
57
+ cy.request({
58
+ url: "schools/leaderboard",
59
+ headers: {
60
+ // keep in mind this is the test user with no perms :)
61
+ "Authorization": "Bearer 9d2272fd048bfeedda522935244fc4450fb61a9da6f7b7cea529c6c11033e9efee6b140b6e4b372f0c81a07a6e040be5150f506922e8a5c47719f7be2c707252"
62
+ }
63
+ }).then(response => {
64
+ expect(response.status).to.equal(200, "Getting leaderboard should have succeeded; got non-success code instead!");
65
+ expect(response.body).to.be.an("array");
66
+ response.body.forEach(school => {
67
+ expect(school).to.have.keys(["schoolName", "schoolNameShorthand", "points"]);
68
+ expect(school.points).to.be.a("number");
69
+ });
70
+ // verify sorted descending by points
71
+ for (let i = 0; i < response.body.length - 1; i++) {
72
+ expect(response.body[i].points).to.be.at.least(response.body[i + 1].points, "Leaderboard should be sorted by points descending!");
73
+ }
74
+ })
75
+ });
76
+
77
+ it('Getting leaderboard respects the limit query parameter', () => {
78
+ cy.request({
79
+ url: "schools/leaderboard?limit=1",
80
+ headers: {
81
+ // keep in mind this isn't a sensitive secret; just the test user with no perms :)
82
+ "Authorization": "Bearer 9d2272fd048bfeedda522935244fc4450fb61a9da6f7b7cea529c6c11033e9efee6b140b6e4b372f0c81a07a6e040be5150f506922e8a5c47719f7be2c707252"
83
+ }
84
+ }).then(response => {
85
+ expect(response.status).to.equal(200, "Getting leaderboard with limit should have succeeded; got non-success code instead!");
86
+ expect(response.body).to.be.an("array");
87
+ expect(response.body.length).to.equal(1, "Leaderboard should have returned exactly 1 school when limit=1!");
88
+ })
89
+ });
32
90
  });
@@ -44,7 +44,7 @@ describe('User Endpoints Unit Tests', () => {
44
44
  })
45
45
 
46
46
  it('Login succeeds', () => {
47
- cy.request("POST", "login", { username: "UnitTester", password: "unitTester" }).then(response => {
47
+ cy.request("POST", "login", { username: "UnitTester", password: "Antonios12!" }).then(response => {
48
48
  expect(response.status).to.equal(200, "Login should have succeeded; failed on login status return code check!");
49
49
  expect(response.body).to.haveOwnProperty(
50
50
  "accessToken",
@@ -52,7 +52,6 @@ export default defineConfig({
52
52
  return await prisma.$transaction([
53
53
  prisma.likes.deleteMany({}),
54
54
  prisma.$executeRaw`REPLACE INTO User_Activity_Posts (post_id, user_id, category_name, activity_id, post_date, post_status, caption) VALUES (1, 2, 'Professional', 1, '2026-02-28 22:15:02', 'public', 'This is a test post! Nothing much going on here...');`,
55
- prisma.$executeRaw`REPLACE INTO User_Activity_Posts (post_id, user_id, category_name, activity_id, post_date, post_status, caption) VALUES (2, 3, 'Professional', 1, '2026-02-28 22:15:02', 'public', 'This is a test post! Nothing much going on here...');`
56
55
  ])
57
56
  },
58
57
 
package/rest-api/index.js CHANGED
@@ -1,8 +1,11 @@
1
- import Fastify from 'fastify';
2
- import oasFastify from '@aurora-interactive/oas-fastify';
3
- import { prisma } from './lib/prisma.js';
4
- import { load as yamlLoad } from 'js-yaml';
5
- import { readFileSync } from 'node:fs';
1
+ import Fastify from "fastify";
2
+ import oasFastify from "@aurora-interactive/oas-fastify";
3
+ import { prisma } from "./lib/prisma.js";
4
+ import { load as yamlLoad } from "js-yaml";
5
+ import { readFileSync } from "node:fs";
6
+ import { createServer } from "node:http";
7
+ import { Server } from "socket.io";
8
+ import express from "express";
6
9
 
7
10
  import * as UserFuctions from "./routes/UserFunctions.js";
8
11
  import * as SchoolFunctions from "./routes/SchoolFunctions.js";
@@ -14,7 +17,11 @@ import * as FriendFunctions from "./routes/FriendFunctions.js";
14
17
  const spec = yamlLoad(readFileSync("./api-spec.yaml"));
15
18
 
16
19
  // workaround for fastify spec -> route registrar
17
- spec.$id = '$';
20
+ spec.$id = "$";
21
+
22
+ const app = express();
23
+ const server = createServer(app);
24
+ const io = new Server(server);
18
25
 
19
26
  const fastify = Fastify({
20
27
  logger: false
@@ -29,6 +36,7 @@ const handler = {
29
36
  deleteUser: UserFuctions.deleteUserHandler,
30
37
  listSchools: SchoolFunctions.listSchoolsHandler,
31
38
  getSchoolById: SchoolFunctions.getSchoolByIdHandler,
39
+ getTopSchools: SchoolFunctions.getTopSchoolsHandler,
32
40
  listCategories: CategoryFunctions.listCategoriesHandler,
33
41
  createCategory: CategoryFunctions.createCategoryHandler,
34
42
  updateCategory: CategoryFunctions.updateCategoryHandler,
@@ -58,6 +66,26 @@ fastify.register(oasFastify, { spec, handler });
58
66
 
59
67
  fastify.prisma = prisma;
60
68
 
69
+ io.on('connection', (socket) => {
70
+ socket.send("Hey! You are now receiving real-time messaging events for Sensei Productivity. Glad to have you in :P");
71
+
72
+ socket.on("loginAs", username => {
73
+ if (typeof username !== "string") {
74
+ socket.send("The username which was provided is not a string");
75
+ return;
76
+ }
77
+
78
+ socket.join(username);
79
+ socket.send(`Successfully logged in as ${username}`);
80
+ })
81
+ });
82
+
83
+ server.listen(7654, "0.0.0.0", () => {
84
+ console.log('Websocket messaging running at http://0.0.0.0:7654');
85
+ });
86
+
87
+ fastify.socketio = io;
88
+
61
89
  try {
62
90
  await fastify.listen({ host: "0.0.0.0", port: 3000 })
63
91
  } catch (err) {
@@ -32,4 +32,41 @@ export async function areUsersFriends(prisma, userId, targetPotentialFriendId) {
32
32
  }
33
33
 
34
34
  return true;
35
+ }
36
+
37
+ export async function friendsOfUserById(prisma, userId) {
38
+ return await prisma.Friend_Requests.findMany({
39
+ where: {
40
+ OR: [
41
+ { initiator_user_id: userId, status: "accepted" },
42
+ { target_user_id: userId, status: "accepted" }
43
+ ]
44
+ },
45
+ select: {
46
+ users_Friend_Requests_initiator_user_idTousers: {
47
+ select: {
48
+ user_id: true,
49
+ first_name: true,
50
+ last_name: true,
51
+ username: true,
52
+ email: true,
53
+ school: {
54
+ select: { school_id: true, school_name: true }
55
+ }
56
+ }
57
+ },
58
+ users_Friend_Requests_target_user_idTousers: {
59
+ select: {
60
+ user_id: true,
61
+ first_name: true,
62
+ last_name: true,
63
+ username: true,
64
+ email: true,
65
+ school: {
66
+ select: { school_id: true, school_name: true }
67
+ }
68
+ }
69
+ }
70
+ }
71
+ });
35
72
  }
@@ -10,6 +10,18 @@ async function getLikesForPost(postId, prisma) {
10
10
  });
11
11
  }
12
12
 
13
+ async function userHasAlreadyLikedPost(postId, userId, prisma) {
14
+ return (await prisma.Likes.findFirst({
15
+ where: {
16
+ post_id: postId,
17
+ user_id: userId
18
+ },
19
+ select: {
20
+ like_id: true
21
+ }
22
+ })) !== null;
23
+ }
24
+
13
25
  export async function getUserPostsHandler(request, reply, fastify) {
14
26
  const accessToken = (request.headers.authorization ?? "").substring(7)
15
27
  const userInfo = await getUserAuthInfo(fastify.prisma, accessToken);
@@ -27,6 +39,7 @@ export async function getUserPostsHandler(request, reply, fastify) {
27
39
  user_id: true
28
40
  }
29
41
  });
42
+
30
43
  if (targetExistsCheck === null) {
31
44
  reply.status(404);
32
45
  return;
@@ -61,7 +74,8 @@ export async function getUserPostsHandler(request, reply, fastify) {
61
74
  postDate: post.post_date,
62
75
  postStatus: post.post_status,
63
76
  caption: post.caption,
64
- likes: await getLikesForPost(post.post_id, fastify.prisma)
77
+ likes: await getLikesForPost(post.post_id, fastify.prisma),
78
+ likedByCurrentUser: userHasAlreadyLikedPost(post.post_id, userInfo.user_id, fastify.prisma)
65
79
  })));
66
80
  }
67
81
 
@@ -146,7 +160,8 @@ export async function getFeedHandler(request, reply, fastify) {
146
160
  userId: post.users.user_id,
147
161
  categoryName: post.Category.category_name,
148
162
  activityId: post.User_Activity.activity_id,
149
- likes: await getLikesForPost(post.post_id, fastify.prisma)
163
+ likes: await getLikesForPost(post.post_id, fastify.prisma),
164
+ likedByCurrentUser: await userHasAlreadyLikedPost(post.post_id, userInfo.user_id, fastify.prisma)
150
165
  })));
151
166
  }
152
167
 
@@ -194,7 +209,8 @@ export async function getPostByIdHandler(request, reply, fastify) {
194
209
  postDate: post.post_date,
195
210
  postStatus: post.post_status,
196
211
  caption: post.caption,
197
- likes: await getLikesForPost(post.post_id, fastify.prisma)
212
+ likes: await getLikesForPost(post.post_id, fastify.prisma),
213
+ likedByCurrentUser: await userHasAlreadyLikedPost(post.post_id, userInfo.user_id, fastify.prisma)
198
214
  };
199
215
  }
200
216
 
@@ -314,15 +330,8 @@ export async function likePostHandler(request, reply, fastify) {
314
330
  return;
315
331
  }
316
332
 
317
- const likeCheck = await fastify.prisma.Likes.findFirst({
318
- where: {
319
- post_id: request.params.id,
320
- user_id: userInfo.user_id
321
- }
322
- });
323
-
324
333
  // like only if user hasn't liked the post yet
325
- if (likeCheck === null) {
334
+ if (!(await userHasAlreadyLikedPost(request.params.id, userInfo.user_id, fastify.prisma))) {
326
335
  await fastify.prisma.Likes.create({
327
336
  data: {
328
337
  post_id: request.params.id,
@@ -1,4 +1,4 @@
1
- import { getUserAuthInfo, areUsersFriends } from "../lib/users.js";
1
+ import { getUserAuthInfo, areUsersFriends, friendsOfUserById } from "../lib/users.js";
2
2
 
3
3
  export async function listFriendsHandler(request, reply, fastify) {
4
4
  const accessToken = (request.headers.authorization ?? "").substring(7);
@@ -22,40 +22,7 @@ export async function listFriendsHandler(request, reply, fastify) {
22
22
  return;
23
23
  }
24
24
 
25
- const friendsList = await fastify.prisma.Friend_Requests.findMany({
26
- where: {
27
- OR: [
28
- { initiator_user_id: request.params.id, status: "accepted" },
29
- { target_user_id: request.params.id, status: "accepted" }
30
- ]
31
- },
32
- select: {
33
- users_Friend_Requests_initiator_user_idTousers: {
34
- select: {
35
- user_id: true,
36
- first_name: true,
37
- last_name: true,
38
- username: true,
39
- email: true,
40
- school: {
41
- select: { school_id: true, school_name: true }
42
- }
43
- }
44
- },
45
- users_Friend_Requests_target_user_idTousers: {
46
- select: {
47
- user_id: true,
48
- first_name: true,
49
- last_name: true,
50
- username: true,
51
- email: true,
52
- school: {
53
- select: { school_id: true, school_name: true }
54
- }
55
- }
56
- }
57
- }
58
- });
25
+ const friendsList = await friendsOfUserById(fastify.prisma, request.params.id);
59
26
 
60
27
  return friendsList.map(friendEntry => {
61
28
  // determine which side of the relationship is the friend (not the current user)
@@ -48,4 +48,54 @@ export async function getSchoolByIdHandler(request, reply, fastify) {
48
48
  schoolNameShorthand: school.school_name_shorthand,
49
49
  userCount: school._count.users
50
50
  };
51
+ }
52
+
53
+ // authored with help from Claude
54
+ export async function getTopSchoolsHandler(request, reply, fastify) {
55
+ if (typeof request.headers.authorization !== "string") {
56
+ reply.status(401);
57
+ return;
58
+ }
59
+ const accessToken = request.headers.authorization.substring(7);
60
+ const user = await fastify.prisma.users.findFirst({
61
+ select: { user_id: true },
62
+ where: { access_token: accessToken }
63
+ });
64
+ if (user === null) {
65
+ reply.status(401);
66
+ return;
67
+ }
68
+
69
+ const limit = request.query.limit ?? 10;
70
+
71
+ const schools = await fastify.prisma.school.findMany({
72
+ select: {
73
+ school_name: true,
74
+ school_name_shorthand: true,
75
+ users: {
76
+ select: {
77
+ User_Activity_Posts: {
78
+ select: {
79
+ Category: {
80
+ select: { category_weight: true }
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ },
87
+ take: limit
88
+ });
89
+
90
+ const ranked = schools.map(school => {
91
+ const points = school.users.flatMap(u => u.User_Activity_Posts)
92
+ .reduce((sum, post) => sum + post.Category.category_weight, 0);
93
+ return {
94
+ schoolName: school.school_name,
95
+ schoolNameShorthand: school.school_name_shorthand,
96
+ points
97
+ };
98
+ }).sort((a, b) => b.points - a.points);
99
+
100
+ return ranked;
51
101
  }
@@ -1,4 +1,4 @@
1
- import { getUserAuthInfo, areUsersFriends } from "../lib/users.js";
1
+ import { getUserAuthInfo, areUsersFriends, friendsOfUserById } from "../lib/users.js";
2
2
 
3
3
  export async function getUserActivitiesHandler(request, reply, fastify) {
4
4
  const accessToken = (request.headers.authorization ?? "").substring(7);
@@ -205,6 +205,31 @@ export async function updateActivityHandler(request, reply, fastify) {
205
205
  return;
206
206
  }
207
207
 
208
+ if (currentActivity.activity_status === "active" && request.body.activityStatus === "completed") {
209
+ await fastify.prisma.User_Activity_Posts.create({
210
+ data: {
211
+ post_status: "public",
212
+ caption: currentActivity.details,
213
+ users: {
214
+ connect: { user_id: userInfo.user_id }
215
+ },
216
+ Category: {
217
+ connect: { category_name: currentActivity.category_name }
218
+ },
219
+ User_Activity: {
220
+ connect: { activity_id: request.params.id }
221
+ }
222
+ }
223
+ });
224
+
225
+ currentActivity.user_id = Number(currentActivity.user_id);
226
+ const friends = await friendsOfUserById(fastify.prisma, userInfo.user_id);
227
+ for (const friendObj of friends) {
228
+ const friend = (friendObj.users_Friend_Requests_initiator_user_idTousers.user_id === userInfo.user_id ? friendObj.users_Friend_Requests_target_user_idTousers : friendObj.users_Friend_Requests_initiator_user_idTousers).username;
229
+ fastify.socketio.to(friend).emit("userPost", currentActivity); // instantly propagate the post to all the user's friend for the post feed
230
+ }
231
+ }
232
+
208
233
  const targetActivityStatus = request.body.activityStatus ?? currentActivity.activity_status;
209
234
  const targetActivityDeadline = request.body.activityDeadline ?? currentActivity.activity_deadline;
210
235
  const targetDetails = request.body.details ?? currentActivity.details;