Plan stuff. Log stuff.
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.

194 lines
4.3 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. import ky from "ky";
  2. import Activity, {ActivityUpdate} from "../models/activity";
  3. import Period, {PeriodUpdate} from "../models/period";
  4. import Item, {ItemUpdate} from "../models/item";
  5. function json(data) {
  6. return {
  7. body: JSON.stringify(data),
  8. headers: {
  9. "Content-Type": "application/json",
  10. },
  11. credentials: "include",
  12. }
  13. }
  14. const k = ky.create({
  15. credentials: "include",
  16. })
  17. export class StuffLogAPI {
  18. async checkSession() {
  19. return await k.get("/api/user/").json();
  20. }
  21. async login(username, password) {
  22. return await k.post("/api/user/login", json({username,password})).json();
  23. }
  24. async register(username, password) {
  25. return await k.post("/api/user/register", json({username,password})).json();
  26. }
  27. async logout() {
  28. return await k.post("/api/user/logout").json();
  29. }
  30. /**
  31. * List activities
  32. *
  33. * @returns {Promise<Activity[]>}
  34. */
  35. async listActivities() {
  36. const data = await k.get("/api/activity/").json();
  37. return data.activities.map(d => new Activity(d));
  38. }
  39. /**
  40. * List periods
  41. *
  42. * @returns {Promise<{>periods: Period[], activities: Activity[]}}
  43. */
  44. async listPeriods() {
  45. const data = await k.get("/api/period/").json();
  46. return data.periods.map(d => new Period(d));
  47. }
  48. /**
  49. * Find activity
  50. *
  51. * @param {string} id
  52. * @returns {Promise<Activity>}
  53. */
  54. async findActivity(id) {
  55. const data = await k.get(`/api/activity/${id}`).json();
  56. return new Activity(data.activity);
  57. }
  58. /**
  59. * Find period
  60. *
  61. * @param {string} id
  62. * @returns {Promise<Period>}
  63. */
  64. async findPeriod(id) {
  65. const data = await k.get(`/api/period/${id}`).json();
  66. return new Period(data.period);
  67. }
  68. /**
  69. * Create a new activity
  70. *
  71. * @param {Activity} activity
  72. * @returns {Promise<Activity>}
  73. */
  74. async postActivity(activity) {
  75. const data = await k.post(`/api/activity/`, json(activity)).json();
  76. return new Activity(data.activity);
  77. }
  78. /**
  79. * Create a new period
  80. *
  81. * @param {Period} period
  82. * @returns {Promise<Period>}
  83. */
  84. async postPeriod(period) {
  85. const data = await k.post(`/api/period/`, json(period)).json();
  86. return new Period(data.period);
  87. }
  88. /**
  89. * Update an activity
  90. *
  91. * @param {string} id
  92. * @param {ActivityUpdate[]} updates
  93. * @returns {Promise<Activity>}
  94. */
  95. async patchActivity(id, ...updates) {
  96. const data = await k.patch(`/api/activity/${id}`, json(updates)).json();
  97. return new Activity(data.activity);
  98. }
  99. /**
  100. * Update an period
  101. *
  102. * @param {string} id
  103. * @param {PeriodUpdate[]} updates
  104. * @returns {Promise<Period>}
  105. */
  106. async patchPeriod(id, ...updates) {
  107. const data = await k.patch(`/api/period/${id}`, json(updates)).json();
  108. return new Period(data.period);
  109. }
  110. /**
  111. * Update an activity
  112. *
  113. * @param {string} id
  114. * @returns {Promise<Activity>}
  115. */
  116. async deleteActivity(id) {
  117. const data = await k.delete(`/api/activity/${id}`).json();
  118. return new Activity(data.activity);
  119. }
  120. /**
  121. * Update an period
  122. *
  123. * @param {string} id
  124. * @returns {Promise<Period>}
  125. */
  126. async deletePeriod(id) {
  127. const data = await k.delete(`/api/period/${id}`).json();
  128. return new Period(data.period);
  129. }
  130. /**
  131. * Get items
  132. *
  133. * @param {string} id
  134. * @returns {Promise<Item[]>}
  135. */
  136. async listItems() {
  137. const data = await k.get(`/api/item/`).json();
  138. return data.items
  139. }
  140. /**
  141. * Get an item
  142. *
  143. * @param {string} id
  144. * @returns {Promise<Item>}
  145. */
  146. async getItem(id) {
  147. const data = await k.get(`/api/item/${id}`).json();
  148. return data.item
  149. }
  150. /**
  151. * Post an item
  152. *
  153. * @param {Item} item
  154. * @returns {Promise<Item>}
  155. */
  156. async postItem(item) {
  157. const data = await k.post(`/api/item/`, json(item)).json();
  158. return data.item
  159. }
  160. /**
  161. * Delete an item
  162. *
  163. * @param {string} id
  164. * @param {ItemUpdate} updates
  165. * @returns {Promise<Item>}
  166. */
  167. async updateItem(id, ...updates) {
  168. const data = await k.patch(`/api/item/${id}`, json(updates)).json();
  169. return data.item
  170. }
  171. /**
  172. * Delete an item
  173. *
  174. * @param {string} id
  175. * @returns {Promise<Item>}
  176. */
  177. async deleteItem(id) {
  178. const data = await k.delete(`/api/item/${id}`).json();
  179. return data.item
  180. }
  181. }
  182. const slApi = new StuffLogAPI();
  183. export default slApi;