@sekolaos/shared-api 0.0.0-stage → 1.1.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 (172) hide show
  1. package/dist/chunk-2FTS6JMO.cjs +66 -0
  2. package/dist/chunk-2FTS6JMO.cjs.map +1 -0
  3. package/dist/chunk-3RS57C3E.cjs +90 -0
  4. package/dist/chunk-3RS57C3E.cjs.map +1 -0
  5. package/dist/chunk-4ECXVAIQ.cjs +50 -0
  6. package/dist/chunk-4ECXVAIQ.cjs.map +1 -0
  7. package/dist/chunk-4T52ABA5.js +63 -0
  8. package/dist/chunk-4T52ABA5.js.map +1 -0
  9. package/dist/chunk-6JGO2CUT.js +52 -0
  10. package/dist/chunk-6JGO2CUT.js.map +1 -0
  11. package/dist/chunk-6UCHRWSL.js +43 -0
  12. package/dist/chunk-6UCHRWSL.js.map +1 -0
  13. package/dist/chunk-AGNLUQKT.cjs +52 -0
  14. package/dist/chunk-AGNLUQKT.cjs.map +1 -0
  15. package/dist/chunk-AGPMQFZM.js +3 -0
  16. package/dist/chunk-AGPMQFZM.js.map +1 -0
  17. package/dist/chunk-ALMSFTRM.js +66 -0
  18. package/dist/chunk-ALMSFTRM.js.map +1 -0
  19. package/dist/chunk-AOBHBJ2G.cjs +89 -0
  20. package/dist/chunk-AOBHBJ2G.cjs.map +1 -0
  21. package/dist/chunk-BOASJ3VG.cjs +31 -0
  22. package/dist/chunk-BOASJ3VG.cjs.map +1 -0
  23. package/dist/chunk-CBTITLRR.js +43 -0
  24. package/dist/chunk-CBTITLRR.js.map +1 -0
  25. package/dist/chunk-CP46K2UB.cjs +74 -0
  26. package/dist/chunk-CP46K2UB.cjs.map +1 -0
  27. package/dist/chunk-DMEWJ56D.js +76 -0
  28. package/dist/chunk-DMEWJ56D.js.map +1 -0
  29. package/dist/chunk-DNNK2DMM.cjs +119 -0
  30. package/dist/chunk-DNNK2DMM.cjs.map +1 -0
  31. package/dist/chunk-GKKJMRCL.js +75 -0
  32. package/dist/chunk-GKKJMRCL.js.map +1 -0
  33. package/dist/chunk-GRBBLS5Y.js +77 -0
  34. package/dist/chunk-GRBBLS5Y.js.map +1 -0
  35. package/dist/chunk-GRXFSXG5.js +124 -0
  36. package/dist/chunk-GRXFSXG5.js.map +1 -0
  37. package/dist/chunk-GUJVCKEN.js +102 -0
  38. package/dist/chunk-GUJVCKEN.js.map +1 -0
  39. package/dist/chunk-LA7MRXWR.js +77 -0
  40. package/dist/chunk-LA7MRXWR.js.map +1 -0
  41. package/dist/chunk-MRFGUSN2.js +20 -0
  42. package/dist/chunk-MRFGUSN2.js.map +1 -0
  43. package/dist/chunk-NBVPN4KL.cjs +23 -0
  44. package/dist/chunk-NBVPN4KL.cjs.map +1 -0
  45. package/dist/chunk-NGFFI4XQ.cjs +61 -0
  46. package/dist/chunk-NGFFI4XQ.cjs.map +1 -0
  47. package/dist/chunk-OKSRSOYJ.cjs +88 -0
  48. package/dist/chunk-OKSRSOYJ.cjs.map +1 -0
  49. package/dist/chunk-PPK3HQOY.cjs +134 -0
  50. package/dist/chunk-PPK3HQOY.cjs.map +1 -0
  51. package/dist/chunk-QJSOSQ7M.cjs +23 -0
  52. package/dist/chunk-QJSOSQ7M.cjs.map +1 -0
  53. package/dist/chunk-R37QQTQS.cjs +64 -0
  54. package/dist/chunk-R37QQTQS.cjs.map +1 -0
  55. package/dist/chunk-R7ACSDOA.cjs +114 -0
  56. package/dist/chunk-R7ACSDOA.cjs.map +1 -0
  57. package/dist/chunk-S6QFHKCE.js +99 -0
  58. package/dist/chunk-S6QFHKCE.js.map +1 -0
  59. package/dist/chunk-TSLEYQKD.cjs +92 -0
  60. package/dist/chunk-TSLEYQKD.cjs.map +1 -0
  61. package/dist/chunk-WF63F6RJ.cjs +4 -0
  62. package/dist/chunk-WF63F6RJ.cjs.map +1 -0
  63. package/dist/chunk-XU5UEIBL.js +43 -0
  64. package/dist/chunk-XU5UEIBL.js.map +1 -0
  65. package/dist/chunk-XVG5Z6B5.cjs +79 -0
  66. package/dist/chunk-XVG5Z6B5.cjs.map +1 -0
  67. package/dist/chunk-YA2KONBB.js +20 -0
  68. package/dist/chunk-YA2KONBB.js.map +1 -0
  69. package/dist/chunk-YK7QFPBF.js +55 -0
  70. package/dist/chunk-YK7QFPBF.js.map +1 -0
  71. package/dist/chunk-YTF4Z7I4.js +26 -0
  72. package/dist/chunk-YTF4Z7I4.js.map +1 -0
  73. package/dist/client/index.cjs +62 -0
  74. package/dist/client/index.cjs.map +1 -0
  75. package/dist/client/index.d.cts +28 -0
  76. package/dist/client/index.d.ts +28 -0
  77. package/dist/client/index.js +5 -0
  78. package/dist/client/index.js.map +1 -0
  79. package/dist/index.cjs +620 -0
  80. package/dist/index.cjs.map +1 -0
  81. package/dist/index.d.cts +39 -0
  82. package/dist/index.d.ts +39 -0
  83. package/dist/index.js +21 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/keys/index.cjs +56 -0
  86. package/dist/keys/index.cjs.map +1 -0
  87. package/dist/keys/index.d.cts +64 -0
  88. package/dist/keys/index.d.ts +64 -0
  89. package/dist/keys/index.js +3 -0
  90. package/dist/keys/index.js.map +1 -0
  91. package/dist/modules/academic/index.cjs +44 -0
  92. package/dist/modules/academic/index.cjs.map +1 -0
  93. package/dist/modules/academic/index.d.cts +54 -0
  94. package/dist/modules/academic/index.d.ts +54 -0
  95. package/dist/modules/academic/index.js +7 -0
  96. package/dist/modules/academic/index.js.map +1 -0
  97. package/dist/modules/attendance/index.cjs +68 -0
  98. package/dist/modules/attendance/index.cjs.map +1 -0
  99. package/dist/modules/attendance/index.d.cts +135 -0
  100. package/dist/modules/attendance/index.d.ts +135 -0
  101. package/dist/modules/attendance/index.js +7 -0
  102. package/dist/modules/attendance/index.js.map +1 -0
  103. package/dist/modules/auth/index.cjs +52 -0
  104. package/dist/modules/auth/index.cjs.map +1 -0
  105. package/dist/modules/auth/index.d.cts +44 -0
  106. package/dist/modules/auth/index.d.ts +44 -0
  107. package/dist/modules/auth/index.js +7 -0
  108. package/dist/modules/auth/index.js.map +1 -0
  109. package/dist/modules/classroom/index.cjs +60 -0
  110. package/dist/modules/classroom/index.cjs.map +1 -0
  111. package/dist/modules/classroom/index.d.cts +84 -0
  112. package/dist/modules/classroom/index.d.ts +84 -0
  113. package/dist/modules/classroom/index.js +7 -0
  114. package/dist/modules/classroom/index.js.map +1 -0
  115. package/dist/modules/lead/index.cjs +44 -0
  116. package/dist/modules/lead/index.cjs.map +1 -0
  117. package/dist/modules/lead/index.d.cts +104 -0
  118. package/dist/modules/lead/index.d.ts +104 -0
  119. package/dist/modules/lead/index.js +7 -0
  120. package/dist/modules/lead/index.js.map +1 -0
  121. package/dist/modules/student/index.cjs +76 -0
  122. package/dist/modules/student/index.cjs.map +1 -0
  123. package/dist/modules/student/index.d.cts +125 -0
  124. package/dist/modules/student/index.d.ts +125 -0
  125. package/dist/modules/student/index.js +7 -0
  126. package/dist/modules/student/index.js.map +1 -0
  127. package/dist/modules/subject/index.cjs +36 -0
  128. package/dist/modules/subject/index.cjs.map +1 -0
  129. package/dist/modules/subject/index.d.cts +40 -0
  130. package/dist/modules/subject/index.d.ts +40 -0
  131. package/dist/modules/subject/index.js +7 -0
  132. package/dist/modules/subject/index.js.map +1 -0
  133. package/dist/modules/system/index.cjs +20 -0
  134. package/dist/modules/system/index.cjs.map +1 -0
  135. package/dist/modules/system/index.d.cts +14 -0
  136. package/dist/modules/system/index.d.ts +14 -0
  137. package/dist/modules/system/index.js +7 -0
  138. package/dist/modules/system/index.js.map +1 -0
  139. package/dist/modules/teaching-schedule/index.cjs +60 -0
  140. package/dist/modules/teaching-schedule/index.cjs.map +1 -0
  141. package/dist/modules/teaching-schedule/index.d.cts +97 -0
  142. package/dist/modules/teaching-schedule/index.d.ts +97 -0
  143. package/dist/modules/teaching-schedule/index.js +7 -0
  144. package/dist/modules/teaching-schedule/index.js.map +1 -0
  145. package/dist/modules/tenant/index.cjs +68 -0
  146. package/dist/modules/tenant/index.cjs.map +1 -0
  147. package/dist/modules/tenant/index.d.cts +113 -0
  148. package/dist/modules/tenant/index.d.ts +113 -0
  149. package/dist/modules/tenant/index.js +7 -0
  150. package/dist/modules/tenant/index.js.map +1 -0
  151. package/dist/modules/upload/index.cjs +27 -0
  152. package/dist/modules/upload/index.cjs.map +1 -0
  153. package/dist/modules/upload/index.d.cts +18 -0
  154. package/dist/modules/upload/index.d.ts +18 -0
  155. package/dist/modules/upload/index.js +6 -0
  156. package/dist/modules/upload/index.js.map +1 -0
  157. package/dist/modules/user/index.cjs +60 -0
  158. package/dist/modules/user/index.cjs.map +1 -0
  159. package/dist/modules/user/index.d.cts +117 -0
  160. package/dist/modules/user/index.d.ts +117 -0
  161. package/dist/modules/user/index.js +7 -0
  162. package/dist/modules/user/index.js.map +1 -0
  163. package/dist/provider.cjs +17 -0
  164. package/dist/provider.cjs.map +1 -0
  165. package/dist/provider.d.cts +15 -0
  166. package/dist/provider.d.ts +15 -0
  167. package/dist/provider.js +4 -0
  168. package/dist/provider.js.map +1 -0
  169. package/dist/types-BxV0BtVp.d.cts +89 -0
  170. package/dist/types-BxV0BtVp.d.ts +89 -0
  171. package/package.json +138 -6
  172. package/README.md +0 -3
@@ -0,0 +1,77 @@
1
+ import { API_ENDPOINTS } from './chunk-MRFGUSN2.js';
2
+ import { getData, postData, putData } from './chunk-6JGO2CUT.js';
3
+ import { scheduleKeys } from './chunk-ALMSFTRM.js';
4
+ import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
5
+
6
+ var ENDPOINT = API_ENDPOINTS.teachingSchedules;
7
+ async function listTeachingSchedules(params) {
8
+ return getData(ENDPOINT, { params });
9
+ }
10
+ async function createTeachingSchedule(payload) {
11
+ return postData(ENDPOINT, payload);
12
+ }
13
+ async function updateTeachingSchedule(id, payload) {
14
+ return putData(`${ENDPOINT}/${id}`, payload);
15
+ }
16
+ async function checkScheduleConflict(params) {
17
+ return getData(`${ENDPOINT}/conflicts`, { params });
18
+ }
19
+ async function batchCreateTeachingSchedules(payload) {
20
+ return postData(`${ENDPOINT}/batch`, payload);
21
+ }
22
+ async function copyRoster(payload) {
23
+ return postData(`${ENDPOINT}/copy`, payload);
24
+ }
25
+ function useTeachingSchedules(params) {
26
+ return useQuery({
27
+ queryKey: scheduleKeys.list(params),
28
+ queryFn: () => listTeachingSchedules(params)
29
+ });
30
+ }
31
+ function useScheduleConflict(params, enabled = true) {
32
+ return useQuery({
33
+ queryKey: scheduleKeys.conflicts(params),
34
+ queryFn: () => checkScheduleConflict(params),
35
+ enabled
36
+ });
37
+ }
38
+ function useCreateTeachingSchedule() {
39
+ const queryClient = useQueryClient();
40
+ return useMutation({
41
+ mutationFn: createTeachingSchedule,
42
+ onSuccess: async () => {
43
+ await queryClient.invalidateQueries({ queryKey: scheduleKeys.all });
44
+ }
45
+ });
46
+ }
47
+ function useUpdateTeachingSchedule() {
48
+ const queryClient = useQueryClient();
49
+ return useMutation({
50
+ mutationFn: ({ id, payload }) => updateTeachingSchedule(id, payload),
51
+ onSuccess: async () => {
52
+ await queryClient.invalidateQueries({ queryKey: scheduleKeys.all });
53
+ }
54
+ });
55
+ }
56
+ function useBatchCreateTeachingSchedules() {
57
+ const queryClient = useQueryClient();
58
+ return useMutation({
59
+ mutationFn: batchCreateTeachingSchedules,
60
+ onSuccess: async () => {
61
+ await queryClient.invalidateQueries({ queryKey: scheduleKeys.all });
62
+ }
63
+ });
64
+ }
65
+ function useCopyRoster() {
66
+ const queryClient = useQueryClient();
67
+ return useMutation({
68
+ mutationFn: copyRoster,
69
+ onSuccess: async () => {
70
+ await queryClient.invalidateQueries({ queryKey: scheduleKeys.all });
71
+ }
72
+ });
73
+ }
74
+
75
+ export { batchCreateTeachingSchedules, checkScheduleConflict, copyRoster, createTeachingSchedule, listTeachingSchedules, updateTeachingSchedule, useBatchCreateTeachingSchedules, useCopyRoster, useCreateTeachingSchedule, useScheduleConflict, useTeachingSchedules, useUpdateTeachingSchedule };
76
+ //# sourceMappingURL=chunk-GRBBLS5Y.js.map
77
+ //# sourceMappingURL=chunk-GRBBLS5Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/teaching-schedule/teaching-schedule.api.ts"],"names":[],"mappings":";;;;;AAcA,IAAM,WAAW,aAAA,CAAc,iBAAA;AAc/B,eAAsB,sBACpB,MAAA,EAC6B;AAC7B,EAAA,OAAO,OAAA,CAA4B,QAAA,EAAU,EAAE,MAAA,EAAQ,CAAA;AACzD;AAEA,eAAsB,uBACpB,OAAA,EAC2B;AAC3B,EAAA,OAAO,QAAA,CAAwD,UAAU,OAAO,CAAA;AAClF;AAEA,eAAsB,sBAAA,CACpB,IACA,OAAA,EAC2B;AAC3B,EAAA,OAAO,QAAuD,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,EAAE,IAAI,OAAO,CAAA;AAC5F;AAEA,eAAsB,sBACpB,MAAA,EACiC;AACjC,EAAA,OAAO,QAAgC,CAAA,EAAG,QAAQ,CAAA,UAAA,CAAA,EAAc,EAAE,QAAQ,CAAA;AAC5E;AAEA,eAAsB,6BACpB,OAAA,EAC6B;AAC7B,EAAA,OAAO,QAAA,CAA+D,CAAA,EAAG,QAAQ,CAAA,MAAA,CAAA,EAAU,OAAO,CAAA;AACpG;AAEA,eAAsB,WAAW,OAAA,EAA8D;AAC7F,EAAA,OAAO,QAAA,CAAqD,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAA,EAAS,OAAO,CAAA;AACzF;AAEO,SAAS,qBAAqB,MAAA,EAAoC;AACvE,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,QAAA,EAAU,YAAA,CAAa,IAAA,CAAK,MAA6C,CAAA;AAAA,IACzE,OAAA,EAAS,MAAM,qBAAA,CAAsB,MAAM;AAAA,GAC5C,CAAA;AACH;AAEO,SAAS,mBAAA,CAAoB,MAAA,EAAoC,OAAA,GAAU,IAAA,EAAM;AACtF,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,QAAA,EAAU,YAAA,CAAa,SAAA,CAAU,MAA4C,CAAA;AAAA,IAC7E,OAAA,EAAS,MAAM,qBAAA,CAAsB,MAAM,CAAA;AAAA,IAC3C;AAAA,GACD,CAAA;AACH;AAEO,SAAS,yBAAA,GAA4B;AAC1C,EAAA,MAAM,cAAc,cAAA,EAAe;AACnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,UAAA,EAAY,sBAAA;AAAA,IACZ,WAAW,YAAY;AACrB,MAAA,MAAM,YAAY,iBAAA,CAAkB,EAAE,QAAA,EAAU,YAAA,CAAa,KAAK,CAAA;AAAA,IACpE;AAAA,GACD,CAAA;AACH;AAEO,SAAS,yBAAA,GAA4B;AAC1C,EAAA,MAAM,cAAc,cAAA,EAAe;AACnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,UAAA,EAAY,CAAC,EAAE,EAAA,EAAI,SAAQ,KACzB,sBAAA,CAAuB,IAAI,OAAO,CAAA;AAAA,IACpC,WAAW,YAAY;AACrB,MAAA,MAAM,YAAY,iBAAA,CAAkB,EAAE,QAAA,EAAU,YAAA,CAAa,KAAK,CAAA;AAAA,IACpE;AAAA,GACD,CAAA;AACH;AAEO,SAAS,+BAAA,GAAkC;AAChD,EAAA,MAAM,cAAc,cAAA,EAAe;AACnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,UAAA,EAAY,4BAAA;AAAA,IACZ,WAAW,YAAY;AACrB,MAAA,MAAM,YAAY,iBAAA,CAAkB,EAAE,QAAA,EAAU,YAAA,CAAa,KAAK,CAAA;AAAA,IACpE;AAAA,GACD,CAAA;AACH;AAEO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,cAAc,cAAA,EAAe;AACnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,UAAA,EAAY,UAAA;AAAA,IACZ,WAAW,YAAY;AACrB,MAAA,MAAM,YAAY,iBAAA,CAAkB,EAAE,QAAA,EAAU,YAAA,CAAa,KAAK,CAAA;AAAA,IACpE;AAAA,GACD,CAAA;AACH","file":"chunk-GRBBLS5Y.js","sourcesContent":["import type {\r\n BatchCreateTeachingScheduleInput,\r\n CheckScheduleConflictQuery,\r\n CopyRosterRequestInput,\r\n CreateTeachingScheduleInput,\r\n TeachingSchedule,\r\n TeachingScheduleListQuery,\r\n UpdateTeachingScheduleInput,\r\n} from \"@sekolaos/shared-schema\";\r\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\r\nimport { API_ENDPOINTS } from \"../../common/endpoints\";\r\nimport { getData, postData, putData } from \"../../client/http\";\r\nimport { scheduleKeys } from \"../../keys\";\r\n\r\nconst ENDPOINT = API_ENDPOINTS.teachingSchedules;\r\n\r\nexport type ScheduleConflictType = \"TEACHER\" | \"CLASSROOM\";\r\n\r\nexport interface ScheduleConflictResult {\r\n hasConflict: boolean;\r\n conflictType: ScheduleConflictType | null;\r\n conflictingSchedule: TeachingSchedule | null;\r\n}\r\n\r\nexport interface AffectedRowsResult {\r\n totalCreated: number;\r\n}\r\n\r\nexport async function listTeachingSchedules(\r\n params?: TeachingScheduleListQuery\r\n): Promise<TeachingSchedule[]> {\r\n return getData<TeachingSchedule[]>(ENDPOINT, { params });\r\n}\r\n\r\nexport async function createTeachingSchedule(\r\n payload: CreateTeachingScheduleInput\r\n): Promise<TeachingSchedule> {\r\n return postData<TeachingSchedule, CreateTeachingScheduleInput>(ENDPOINT, payload);\r\n}\r\n\r\nexport async function updateTeachingSchedule(\r\n id: string,\r\n payload: UpdateTeachingScheduleInput\r\n): Promise<TeachingSchedule> {\r\n return putData<TeachingSchedule, UpdateTeachingScheduleInput>(`${ENDPOINT}/${id}`, payload);\r\n}\r\n\r\nexport async function checkScheduleConflict(\r\n params: CheckScheduleConflictQuery\r\n): Promise<ScheduleConflictResult> {\r\n return getData<ScheduleConflictResult>(`${ENDPOINT}/conflicts`, { params });\r\n}\r\n\r\nexport async function batchCreateTeachingSchedules(\r\n payload: BatchCreateTeachingScheduleInput\r\n): Promise<AffectedRowsResult> {\r\n return postData<AffectedRowsResult, BatchCreateTeachingScheduleInput>(`${ENDPOINT}/batch`, payload);\r\n}\r\n\r\nexport async function copyRoster(payload: CopyRosterRequestInput): Promise<AffectedRowsResult> {\r\n return postData<AffectedRowsResult, CopyRosterRequestInput>(`${ENDPOINT}/copy`, payload);\r\n}\r\n\r\nexport function useTeachingSchedules(params?: TeachingScheduleListQuery) {\r\n return useQuery({\r\n queryKey: scheduleKeys.list(params as Record<string, unknown> | undefined),\r\n queryFn: () => listTeachingSchedules(params),\r\n });\r\n}\r\n\r\nexport function useScheduleConflict(params: CheckScheduleConflictQuery, enabled = true) {\r\n return useQuery({\r\n queryKey: scheduleKeys.conflicts(params as unknown as Record<string, unknown>),\r\n queryFn: () => checkScheduleConflict(params),\r\n enabled,\r\n });\r\n}\r\n\r\nexport function useCreateTeachingSchedule() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: createTeachingSchedule,\r\n onSuccess: async () => {\r\n await queryClient.invalidateQueries({ queryKey: scheduleKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport function useUpdateTeachingSchedule() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: ({ id, payload }: { id: string; payload: UpdateTeachingScheduleInput }) =>\r\n updateTeachingSchedule(id, payload),\r\n onSuccess: async () => {\r\n await queryClient.invalidateQueries({ queryKey: scheduleKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport function useBatchCreateTeachingSchedules() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: batchCreateTeachingSchedules,\r\n onSuccess: async () => {\r\n await queryClient.invalidateQueries({ queryKey: scheduleKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport function useCopyRoster() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: copyRoster,\r\n onSuccess: async () => {\r\n await queryClient.invalidateQueries({ queryKey: scheduleKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport type {\r\n BatchCreateTeachingScheduleInput,\r\n CheckScheduleConflictQuery,\r\n CopyRosterRequestInput,\r\n CreateTeachingScheduleInput,\r\n TeachingSchedule,\r\n TeachingScheduleListQuery,\r\n UpdateTeachingScheduleInput,\r\n};\r\n"]}
@@ -0,0 +1,124 @@
1
+ import axios, { AxiosError } from 'axios';
2
+
3
+ // src/client/error.ts
4
+ var DEFAULT_ERROR_MESSAGE = "Terjadi kesalahan sistem";
5
+ var SekolaosApiError = class _SekolaosApiError extends Error {
6
+ constructor(message, statusCode = 500, errors = [], isNetworkError = false, rawError) {
7
+ super(message);
8
+ this.statusCode = statusCode;
9
+ this.errors = errors;
10
+ this.isNetworkError = isNetworkError;
11
+ this.rawError = rawError;
12
+ this.name = "SekolaosApiError";
13
+ Object.setPrototypeOf(this, _SekolaosApiError.prototype);
14
+ }
15
+ statusCode;
16
+ errors;
17
+ isNetworkError;
18
+ rawError;
19
+ /** HTTP 422 validation failure coming from the Zod validation middleware. */
20
+ get isValidationError() {
21
+ return this.statusCode === 422 && this.errors.length > 0;
22
+ }
23
+ get isUnauthorized() {
24
+ return this.statusCode === 401;
25
+ }
26
+ get isForbidden() {
27
+ return this.statusCode === 403;
28
+ }
29
+ get isNotFound() {
30
+ return this.statusCode === 404;
31
+ }
32
+ /** Maps field-level validation errors into a `{ field: message }` record. */
33
+ toFieldErrors() {
34
+ return this.errors.reduce((accumulator, detail) => {
35
+ if (detail.field) {
36
+ accumulator[detail.field] = detail.message;
37
+ }
38
+ return accumulator;
39
+ }, {});
40
+ }
41
+ static fromAxiosError(error) {
42
+ if (!error.response) {
43
+ const isCanceled = error.code === "ERR_CANCELED";
44
+ return new _SekolaosApiError(
45
+ isCanceled ? "Permintaan dibatalkan" : "Koneksi jaringan terputus atau server tidak merespons",
46
+ 0,
47
+ [],
48
+ !isCanceled,
49
+ error
50
+ );
51
+ }
52
+ const { status, data } = error.response;
53
+ return new _SekolaosApiError(
54
+ data?.message || error.message || DEFAULT_ERROR_MESSAGE,
55
+ status,
56
+ data?.errors ?? [],
57
+ false,
58
+ error
59
+ );
60
+ }
61
+ /** Converts any thrown value into a `SekolaosApiError` instance. */
62
+ static normalize(error) {
63
+ if (error instanceof _SekolaosApiError) {
64
+ return error;
65
+ }
66
+ if (error instanceof AxiosError || error?.isAxiosError) {
67
+ return _SekolaosApiError.fromAxiosError(error);
68
+ }
69
+ if (error instanceof Error) {
70
+ return new _SekolaosApiError(error.message);
71
+ }
72
+ return new _SekolaosApiError(DEFAULT_ERROR_MESSAGE);
73
+ }
74
+ };
75
+ var DEFAULT_BASE_URL = "http://localhost:5000";
76
+ var DEFAULT_TIMEOUT = 3e4;
77
+ var clientConfig = {
78
+ baseURL: DEFAULT_BASE_URL,
79
+ timeout: DEFAULT_TIMEOUT,
80
+ withCredentials: true
81
+ };
82
+ var apiClient = axios.create({
83
+ baseURL: clientConfig.baseURL,
84
+ timeout: clientConfig.timeout,
85
+ // Sesi HTTP-Only cookie wildcard domain .sekolaos.com
86
+ withCredentials: true,
87
+ headers: {
88
+ "Content-Type": "application/json",
89
+ Accept: "application/json"
90
+ }
91
+ });
92
+ function configureApiClient(config) {
93
+ clientConfig = { ...clientConfig, ...config };
94
+ if (config.baseURL) apiClient.defaults.baseURL = config.baseURL;
95
+ if (config.timeout) apiClient.defaults.timeout = config.timeout;
96
+ if (typeof config.withCredentials === "boolean") {
97
+ apiClient.defaults.withCredentials = config.withCredentials;
98
+ }
99
+ }
100
+ function getApiClientConfig() {
101
+ return clientConfig;
102
+ }
103
+ function setBearerToken(token) {
104
+ clientConfig.bearerToken = token;
105
+ }
106
+ apiClient.interceptors.request.use((config) => {
107
+ if (clientConfig.bearerToken) {
108
+ config.headers.Authorization = `Bearer ${clientConfig.bearerToken}`;
109
+ }
110
+ return config;
111
+ });
112
+ apiClient.interceptors.response.use(
113
+ (response) => response,
114
+ (error) => {
115
+ const apiError = SekolaosApiError.normalize(error);
116
+ if (apiError.statusCode === 401) clientConfig.onUnauthorized?.();
117
+ if (apiError.statusCode === 403) clientConfig.onForbidden?.();
118
+ return Promise.reject(apiError);
119
+ }
120
+ );
121
+
122
+ export { SekolaosApiError, apiClient, configureApiClient, getApiClientConfig, setBearerToken };
123
+ //# sourceMappingURL=chunk-GRXFSXG5.js.map
124
+ //# sourceMappingURL=chunk-GRXFSXG5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client/error.ts","../src/client/axios-instance.ts"],"names":[],"mappings":"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","file":"chunk-GRXFSXG5.js","sourcesContent":["import { AxiosError, type AxiosRequestConfig } from \"axios\";\r\nimport { ApiErrorDetail, ApiErrorPayload } from \"./types\";\r\n\r\nconst DEFAULT_ERROR_MESSAGE = \"Terjadi kesalahan sistem\";\r\n\r\nexport class SekolaosApiError extends Error {\r\n constructor(\r\n message: string,\r\n public readonly statusCode: number = 500,\r\n public readonly errors: ApiErrorDetail[] = [],\r\n public readonly isNetworkError: boolean = false,\r\n public readonly rawError?: AxiosError\r\n ) {\r\n super(message);\r\n this.name = \"SekolaosApiError\";\r\n Object.setPrototypeOf(this, SekolaosApiError.prototype);\r\n }\r\n\r\n /** HTTP 422 validation failure coming from the Zod validation middleware. */\r\n public get isValidationError(): boolean {\r\n return this.statusCode === 422 && this.errors.length > 0;\r\n }\r\n\r\n public get isUnauthorized(): boolean {\r\n return this.statusCode === 401;\r\n }\r\n\r\n public get isForbidden(): boolean {\r\n return this.statusCode === 403;\r\n }\r\n\r\n public get isNotFound(): boolean {\r\n return this.statusCode === 404;\r\n }\r\n\r\n /** Maps field-level validation errors into a `{ field: message }` record. */\r\n public toFieldErrors(): Record<string, string> {\r\n return this.errors.reduce<Record<string, string>>((accumulator, detail) => {\r\n if (detail.field) {\r\n accumulator[detail.field] = detail.message;\r\n }\r\n return accumulator;\r\n }, {});\r\n }\r\n\r\n public static fromAxiosError(error: AxiosError<ApiErrorPayload>): SekolaosApiError {\r\n if (!error.response) {\r\n const isCanceled = error.code === \"ERR_CANCELED\";\r\n return new SekolaosApiError(\r\n isCanceled ? \"Permintaan dibatalkan\" : \"Koneksi jaringan terputus atau server tidak merespons\",\r\n 0,\r\n [],\r\n !isCanceled,\r\n error\r\n );\r\n }\r\n\r\n const { status, data } = error.response;\r\n return new SekolaosApiError(\r\n data?.message || error.message || DEFAULT_ERROR_MESSAGE,\r\n status,\r\n data?.errors ?? [],\r\n false,\r\n error\r\n );\r\n }\r\n\r\n /** Converts any thrown value into a `SekolaosApiError` instance. */\r\n public static normalize(error: unknown): SekolaosApiError {\r\n if (error instanceof SekolaosApiError) {\r\n return error;\r\n }\r\n if (error instanceof AxiosError || (error as AxiosError | undefined)?.isAxiosError) {\r\n return SekolaosApiError.fromAxiosError(error as AxiosError<ApiErrorPayload>);\r\n }\r\n if (error instanceof Error) {\r\n return new SekolaosApiError(error.message);\r\n }\r\n return new SekolaosApiError(DEFAULT_ERROR_MESSAGE);\r\n }\r\n}\r\n\r\nexport interface RequestOptions {\r\n /** Extra axios options (headers, signal, params, ...). */\r\n config?: AxiosRequestConfig;\r\n /** Query string parameters serialized by axios. */\r\n params?: AxiosRequestConfig[\"params\"];\r\n /** Abort signal forwarded to axios for TanStack Query cancellation. */\r\n signal?: AbortSignal;\r\n}\r\n","import axios, { AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from \"axios\";\r\nimport { SekolaosApiError } from \"./error\";\r\nimport { ClientConfig } from \"./types\";\r\n\r\nconst DEFAULT_BASE_URL = \"http://localhost:5000\";\r\nconst DEFAULT_TIMEOUT = 30_000;\r\n\r\nlet clientConfig: ClientConfig = {\r\n baseURL: DEFAULT_BASE_URL,\r\n timeout: DEFAULT_TIMEOUT,\r\n withCredentials: true,\r\n};\r\n\r\nexport const apiClient: AxiosInstance = axios.create({\r\n baseURL: clientConfig.baseURL,\r\n timeout: clientConfig.timeout,\r\n // Sesi HTTP-Only cookie wildcard domain .sekolaos.com\r\n withCredentials: true,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json\",\r\n },\r\n});\r\n\r\nexport function configureApiClient(config: Partial<ClientConfig>): void {\r\n clientConfig = { ...clientConfig, ...config };\r\n if (config.baseURL) apiClient.defaults.baseURL = config.baseURL;\r\n if (config.timeout) apiClient.defaults.timeout = config.timeout;\r\n if (typeof config.withCredentials === \"boolean\") {\r\n apiClient.defaults.withCredentials = config.withCredentials;\r\n }\r\n}\r\n\r\nexport function getApiClientConfig(): Readonly<ClientConfig> {\r\n return clientConfig;\r\n}\r\n\r\nexport function setBearerToken(token?: string): void {\r\n clientConfig.bearerToken = token;\r\n}\r\n\r\napiClient.interceptors.request.use((config: InternalAxiosRequestConfig) => {\r\n if (clientConfig.bearerToken) {\r\n config.headers.Authorization = `Bearer ${clientConfig.bearerToken}`;\r\n }\r\n return config;\r\n});\r\n\r\napiClient.interceptors.response.use(\r\n (response: AxiosResponse) => response,\r\n (error: unknown) => {\r\n const apiError = SekolaosApiError.normalize(error);\r\n if (apiError.statusCode === 401) clientConfig.onUnauthorized?.();\r\n if (apiError.statusCode === 403) clientConfig.onForbidden?.();\r\n return Promise.reject(apiError);\r\n }\r\n);\r\n"]}
@@ -0,0 +1,102 @@
1
+ import { API_ENDPOINTS } from './chunk-MRFGUSN2.js';
2
+ import { getData, postData, putData, deleteData } from './chunk-6JGO2CUT.js';
3
+ import { studentKeys } from './chunk-ALMSFTRM.js';
4
+ import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
5
+
6
+ var ENDPOINT = API_ENDPOINTS.students;
7
+ async function listStudents(params) {
8
+ return getData(ENDPOINT, { params });
9
+ }
10
+ async function getStudent(id) {
11
+ return getData(`${ENDPOINT}/${id}`);
12
+ }
13
+ async function createStudent(payload) {
14
+ return postData(ENDPOINT, payload);
15
+ }
16
+ async function updateStudent(id, payload) {
17
+ return putData(`${ENDPOINT}/${id}`, payload);
18
+ }
19
+ async function deleteStudent(id) {
20
+ await deleteData(`${ENDPOINT}/${id}`);
21
+ }
22
+ async function getStudentKioskCache() {
23
+ return getData(`${ENDPOINT}/kiosk-cache`);
24
+ }
25
+ async function getStudentQrPayload(id) {
26
+ return getData(`${ENDPOINT}/${id}/qr-code`);
27
+ }
28
+ async function bulkImportStudents(payload) {
29
+ return postData(
30
+ `${ENDPOINT}/bulk-import`,
31
+ payload
32
+ );
33
+ }
34
+ function useStudents(params) {
35
+ return useQuery({
36
+ queryKey: studentKeys.list(params),
37
+ queryFn: () => listStudents(params)
38
+ });
39
+ }
40
+ function useStudent(id, options) {
41
+ return useQuery({
42
+ queryKey: studentKeys.detail(id),
43
+ queryFn: () => getStudent(id),
44
+ enabled: options?.enabled ?? Boolean(id)
45
+ });
46
+ }
47
+ function useStudentKioskCache(options) {
48
+ return useQuery({
49
+ queryKey: studentKeys.kioskCache(),
50
+ queryFn: getStudentKioskCache,
51
+ enabled: options?.enabled ?? true,
52
+ staleTime: 5 * 6e4
53
+ });
54
+ }
55
+ function useStudentQrCode(id, options) {
56
+ return useQuery({
57
+ queryKey: studentKeys.qrCode(id),
58
+ queryFn: () => getStudentQrPayload(id),
59
+ enabled: options?.enabled ?? Boolean(id)
60
+ });
61
+ }
62
+ function useCreateStudent() {
63
+ const queryClient = useQueryClient();
64
+ return useMutation({
65
+ mutationFn: createStudent,
66
+ onSuccess: async () => {
67
+ await queryClient.invalidateQueries({ queryKey: studentKeys.all });
68
+ }
69
+ });
70
+ }
71
+ function useUpdateStudent() {
72
+ const queryClient = useQueryClient();
73
+ return useMutation({
74
+ mutationFn: ({ id, payload }) => updateStudent(id, payload),
75
+ onSuccess: async (_data, variables) => {
76
+ await queryClient.invalidateQueries({ queryKey: studentKeys.detail(variables.id) });
77
+ await queryClient.invalidateQueries({ queryKey: studentKeys.all });
78
+ }
79
+ });
80
+ }
81
+ function useDeleteStudent() {
82
+ const queryClient = useQueryClient();
83
+ return useMutation({
84
+ mutationFn: deleteStudent,
85
+ onSuccess: async () => {
86
+ await queryClient.invalidateQueries({ queryKey: studentKeys.all });
87
+ }
88
+ });
89
+ }
90
+ function useBulkImportStudents() {
91
+ const queryClient = useQueryClient();
92
+ return useMutation({
93
+ mutationFn: bulkImportStudents,
94
+ onSuccess: async () => {
95
+ await queryClient.invalidateQueries({ queryKey: studentKeys.all });
96
+ }
97
+ });
98
+ }
99
+
100
+ export { bulkImportStudents, createStudent, deleteStudent, getStudent, getStudentKioskCache, getStudentQrPayload, listStudents, updateStudent, useBulkImportStudents, useCreateStudent, useDeleteStudent, useStudent, useStudentKioskCache, useStudentQrCode, useStudents, useUpdateStudent };
101
+ //# sourceMappingURL=chunk-GUJVCKEN.js.map
102
+ //# sourceMappingURL=chunk-GUJVCKEN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/student/student.api.ts"],"names":[],"mappings":"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","file":"chunk-GUJVCKEN.js","sourcesContent":["import type {\r\n BulkImportStudentRequest,\r\n BulkImportStudentResponse,\r\n CreateStudentInput,\r\n Student,\r\n StudentListQuery,\r\n StudentOfflineCache,\r\n StudentQrPayload,\r\n UpdateStudentInput,\r\n} from \"@sekolaos/shared-schema\";\r\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\r\nimport { API_ENDPOINTS } from \"../../common/endpoints\";\r\nimport { deleteData, getData, postData, putData } from \"../../client/http\";\r\nimport { studentKeys } from \"../../keys\";\r\n\r\nconst ENDPOINT = API_ENDPOINTS.students;\r\n\r\nexport async function listStudents(params?: Partial<StudentListQuery>): Promise<Student[]> {\r\n return getData<Student[]>(ENDPOINT, { params });\r\n}\r\n\r\nexport async function getStudent(id: string): Promise<Student> {\r\n return getData<Student>(`${ENDPOINT}/${id}`);\r\n}\r\n\r\nexport async function createStudent(payload: CreateStudentInput): Promise<Student> {\r\n return postData<Student, CreateStudentInput>(ENDPOINT, payload);\r\n}\r\n\r\nexport async function updateStudent(id: string, payload: UpdateStudentInput): Promise<Student> {\r\n return putData<Student, UpdateStudentInput>(`${ENDPOINT}/${id}`, payload);\r\n}\r\n\r\nexport async function deleteStudent(id: string): Promise<void> {\r\n await deleteData<void>(`${ENDPOINT}/${id}`);\r\n}\r\n\r\n/** Cache siswa ringkas untuk mode offline kiosk absensi. */\r\nexport async function getStudentKioskCache(): Promise<StudentOfflineCache[]> {\r\n return getData<StudentOfflineCache[]>(`${ENDPOINT}/kiosk-cache`);\r\n}\r\n\r\nexport async function getStudentQrPayload(id: string): Promise<StudentQrPayload> {\r\n return getData<StudentQrPayload>(`${ENDPOINT}/${id}/qr-code`);\r\n}\r\n\r\nexport async function bulkImportStudents(\r\n payload: BulkImportStudentRequest\r\n): Promise<BulkImportStudentResponse> {\r\n return postData<BulkImportStudentResponse, BulkImportStudentRequest>(\r\n `${ENDPOINT}/bulk-import`,\r\n payload\r\n );\r\n}\r\n\r\nexport function useStudents(params?: Partial<StudentListQuery>) {\r\n return useQuery({\r\n queryKey: studentKeys.list(params as Record<string, unknown> | undefined),\r\n queryFn: () => listStudents(params),\r\n });\r\n}\r\n\r\nexport function useStudent(id: string, options?: { enabled?: boolean }) {\r\n return useQuery({\r\n queryKey: studentKeys.detail(id),\r\n queryFn: () => getStudent(id),\r\n enabled: options?.enabled ?? Boolean(id),\r\n });\r\n}\r\n\r\nexport function useStudentKioskCache(options?: { enabled?: boolean }) {\r\n return useQuery({\r\n queryKey: studentKeys.kioskCache(),\r\n queryFn: getStudentKioskCache,\r\n enabled: options?.enabled ?? true,\r\n staleTime: 5 * 60_000,\r\n });\r\n}\r\n\r\nexport function useStudentQrCode(id: string, options?: { enabled?: boolean }) {\r\n return useQuery({\r\n queryKey: studentKeys.qrCode(id),\r\n queryFn: () => getStudentQrPayload(id),\r\n enabled: options?.enabled ?? Boolean(id),\r\n });\r\n}\r\n\r\nexport function useCreateStudent() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: createStudent,\r\n onSuccess: async () => {\r\n await queryClient.invalidateQueries({ queryKey: studentKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport function useUpdateStudent() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: ({ id, payload }: { id: string; payload: UpdateStudentInput }) =>\r\n updateStudent(id, payload),\r\n onSuccess: async (_data, variables) => {\r\n await queryClient.invalidateQueries({ queryKey: studentKeys.detail(variables.id) });\r\n await queryClient.invalidateQueries({ queryKey: studentKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport function useDeleteStudent() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: deleteStudent,\r\n onSuccess: async () => {\r\n await queryClient.invalidateQueries({ queryKey: studentKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport function useBulkImportStudents() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: bulkImportStudents,\r\n onSuccess: async () => {\r\n await queryClient.invalidateQueries({ queryKey: studentKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport type {\r\n BulkImportStudentRequest,\r\n BulkImportStudentResponse,\r\n CreateStudentInput,\r\n Student,\r\n StudentListQuery,\r\n StudentOfflineCache,\r\n StudentQrPayload,\r\n UpdateStudentInput,\r\n};\r\n"]}
@@ -0,0 +1,77 @@
1
+ import { API_ENDPOINTS } from './chunk-MRFGUSN2.js';
2
+ import { getData, putData, postData } from './chunk-6JGO2CUT.js';
3
+ import { tenantKeys } from './chunk-ALMSFTRM.js';
4
+ import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
5
+
6
+ var ENDPOINT = API_ENDPOINTS.tenants;
7
+ async function getCurrentTenant() {
8
+ return getData(`${ENDPOINT}/current`);
9
+ }
10
+ async function getTenantModules() {
11
+ return getData(`${ENDPOINT}/current/modules`);
12
+ }
13
+ async function updateCurrentTenant(payload) {
14
+ return putData(`${ENDPOINT}/current`, payload);
15
+ }
16
+ async function listAttendanceShifts(params) {
17
+ return getData(`${ENDPOINT}/shifts`, { params });
18
+ }
19
+ async function getAttendanceShift(targetType) {
20
+ return getData(`${ENDPOINT}/shifts/${targetType}`);
21
+ }
22
+ async function upsertAttendanceShifts(payload) {
23
+ return putData(`${ENDPOINT}/shifts`, payload);
24
+ }
25
+ async function createTenant(payload) {
26
+ return postData(ENDPOINT, payload);
27
+ }
28
+ function useCurrentTenant() {
29
+ return useQuery({ queryKey: tenantKeys.current(), queryFn: getCurrentTenant });
30
+ }
31
+ function useTenantModules() {
32
+ return useQuery({ queryKey: tenantKeys.modules(), queryFn: getTenantModules });
33
+ }
34
+ function useAttendanceShifts(params) {
35
+ return useQuery({
36
+ queryKey: tenantKeys.shifts(params),
37
+ queryFn: () => listAttendanceShifts(params)
38
+ });
39
+ }
40
+ function useAttendanceShift(targetType) {
41
+ return useQuery({
42
+ queryKey: tenantKeys.shiftDetail(targetType),
43
+ queryFn: () => getAttendanceShift(targetType)
44
+ });
45
+ }
46
+ function useUpdateCurrentTenant() {
47
+ const queryClient = useQueryClient();
48
+ return useMutation({
49
+ mutationFn: updateCurrentTenant,
50
+ onSuccess: async (tenant) => {
51
+ queryClient.setQueryData(tenantKeys.current(), tenant);
52
+ await queryClient.invalidateQueries({ queryKey: tenantKeys.all });
53
+ }
54
+ });
55
+ }
56
+ function useUpsertAttendanceShifts() {
57
+ const queryClient = useQueryClient();
58
+ return useMutation({
59
+ mutationFn: upsertAttendanceShifts,
60
+ onSuccess: async () => {
61
+ await queryClient.invalidateQueries({ queryKey: tenantKeys.shifts() });
62
+ }
63
+ });
64
+ }
65
+ function useCreateTenant() {
66
+ const queryClient = useQueryClient();
67
+ return useMutation({
68
+ mutationFn: createTenant,
69
+ onSuccess: async () => {
70
+ await queryClient.invalidateQueries({ queryKey: tenantKeys.all });
71
+ }
72
+ });
73
+ }
74
+
75
+ export { createTenant, getAttendanceShift, getCurrentTenant, getTenantModules, listAttendanceShifts, updateCurrentTenant, upsertAttendanceShifts, useAttendanceShift, useAttendanceShifts, useCreateTenant, useCurrentTenant, useTenantModules, useUpdateCurrentTenant, useUpsertAttendanceShifts };
76
+ //# sourceMappingURL=chunk-LA7MRXWR.js.map
77
+ //# sourceMappingURL=chunk-LA7MRXWR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/tenant/tenant.api.ts"],"names":[],"mappings":"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","file":"chunk-LA7MRXWR.js","sourcesContent":["import type {\r\n AttendanceShift,\r\n CreateTenantInput,\r\n PortalModuleItem,\r\n ShiftTargetType,\r\n Tenant,\r\n UpdateTenantProfileInput,\r\n UpsertAttendanceShiftInput,\r\n} from \"@sekolaos/shared-schema\";\r\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\r\nimport { API_ENDPOINTS } from \"../../common/endpoints\";\r\nimport { getData, postData, putData } from \"../../client/http\";\r\nimport { tenantKeys } from \"../../keys\";\r\n\r\nconst ENDPOINT = API_ENDPOINTS.tenants;\r\n\r\nexport async function getCurrentTenant(): Promise<Tenant> {\r\n return getData<Tenant>(`${ENDPOINT}/current`);\r\n}\r\n\r\nexport async function getTenantModules(): Promise<PortalModuleItem[]> {\r\n return getData<PortalModuleItem[]>(`${ENDPOINT}/current/modules`);\r\n}\r\n\r\nexport async function updateCurrentTenant(payload: UpdateTenantProfileInput): Promise<Tenant> {\r\n return putData<Tenant, UpdateTenantProfileInput>(`${ENDPOINT}/current`, payload);\r\n}\r\n\r\nexport async function listAttendanceShifts(params?: {\r\n targetType?: ShiftTargetType;\r\n}): Promise<AttendanceShift[]> {\r\n return getData<AttendanceShift[]>(`${ENDPOINT}/shifts`, { params });\r\n}\r\n\r\nexport async function getAttendanceShift(targetType: ShiftTargetType): Promise<AttendanceShift> {\r\n return getData<AttendanceShift>(`${ENDPOINT}/shifts/${targetType}`);\r\n}\r\n\r\nexport interface UpsertAttendanceShiftsPayload {\r\n SISWA?: UpsertAttendanceShiftInput;\r\n GURU?: UpsertAttendanceShiftInput;\r\n}\r\n\r\nexport async function upsertAttendanceShifts(\r\n payload: UpsertAttendanceShiftsPayload\r\n): Promise<AttendanceShift[]> {\r\n return putData<AttendanceShift[], UpsertAttendanceShiftsPayload>(`${ENDPOINT}/shifts`, payload);\r\n}\r\n\r\nexport async function createTenant(payload: CreateTenantInput): Promise<Tenant> {\r\n return postData<Tenant, CreateTenantInput>(ENDPOINT, payload);\r\n}\r\n\r\nexport function useCurrentTenant() {\r\n return useQuery({ queryKey: tenantKeys.current(), queryFn: getCurrentTenant });\r\n}\r\n\r\nexport function useTenantModules() {\r\n return useQuery({ queryKey: tenantKeys.modules(), queryFn: getTenantModules });\r\n}\r\n\r\nexport function useAttendanceShifts(params?: { targetType?: ShiftTargetType }) {\r\n return useQuery({\r\n queryKey: tenantKeys.shifts(params),\r\n queryFn: () => listAttendanceShifts(params),\r\n });\r\n}\r\n\r\nexport function useAttendanceShift(targetType: ShiftTargetType) {\r\n return useQuery({\r\n queryKey: tenantKeys.shiftDetail(targetType),\r\n queryFn: () => getAttendanceShift(targetType),\r\n });\r\n}\r\n\r\nexport function useUpdateCurrentTenant() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: updateCurrentTenant,\r\n onSuccess: async (tenant) => {\r\n queryClient.setQueryData(tenantKeys.current(), tenant);\r\n await queryClient.invalidateQueries({ queryKey: tenantKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport function useUpsertAttendanceShifts() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: upsertAttendanceShifts,\r\n onSuccess: async () => {\r\n await queryClient.invalidateQueries({ queryKey: tenantKeys.shifts() });\r\n },\r\n });\r\n}\r\n\r\nexport function useCreateTenant() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: createTenant,\r\n onSuccess: async () => {\r\n await queryClient.invalidateQueries({ queryKey: tenantKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport type {\r\n AttendanceShift,\r\n CreateTenantInput,\r\n PortalModuleItem,\r\n ShiftTargetType,\r\n Tenant,\r\n UpdateTenantProfileInput,\r\n UpsertAttendanceShiftInput,\r\n};\r\n"]}
@@ -0,0 +1,20 @@
1
+ // src/common/endpoints.ts
2
+ var API_V1_PREFIX = "/api/v1";
3
+ var API_ENDPOINTS = {
4
+ auth: `${API_V1_PREFIX}/auth`,
5
+ tenants: `${API_V1_PREFIX}/tenants`,
6
+ users: `${API_V1_PREFIX}/users`,
7
+ academicYears: `${API_V1_PREFIX}/academic-years`,
8
+ subjects: `${API_V1_PREFIX}/subjects`,
9
+ teachingSchedules: `${API_V1_PREFIX}/teaching-schedules`,
10
+ classrooms: `${API_V1_PREFIX}/classrooms`,
11
+ students: `${API_V1_PREFIX}/students`,
12
+ leads: `${API_V1_PREFIX}/leads`,
13
+ uploads: `${API_V1_PREFIX}/uploads`,
14
+ attendance: `${API_V1_PREFIX}/attendance`,
15
+ health: `${API_V1_PREFIX}/health`
16
+ };
17
+
18
+ export { API_ENDPOINTS, API_V1_PREFIX };
19
+ //# sourceMappingURL=chunk-MRFGUSN2.js.map
20
+ //# sourceMappingURL=chunk-MRFGUSN2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common/endpoints.ts"],"names":[],"mappings":";AAAO,IAAM,aAAA,GAAgB;AAEtB,IAAM,aAAA,GAAgB;AAAA,EAC3B,IAAA,EAAM,GAAG,aAAa,CAAA,KAAA,CAAA;AAAA,EACtB,OAAA,EAAS,GAAG,aAAa,CAAA,QAAA,CAAA;AAAA,EACzB,KAAA,EAAO,GAAG,aAAa,CAAA,MAAA,CAAA;AAAA,EACvB,aAAA,EAAe,GAAG,aAAa,CAAA,eAAA,CAAA;AAAA,EAC/B,QAAA,EAAU,GAAG,aAAa,CAAA,SAAA,CAAA;AAAA,EAC1B,iBAAA,EAAmB,GAAG,aAAa,CAAA,mBAAA,CAAA;AAAA,EACnC,UAAA,EAAY,GAAG,aAAa,CAAA,WAAA,CAAA;AAAA,EAC5B,QAAA,EAAU,GAAG,aAAa,CAAA,SAAA,CAAA;AAAA,EAC1B,KAAA,EAAO,GAAG,aAAa,CAAA,MAAA,CAAA;AAAA,EACvB,OAAA,EAAS,GAAG,aAAa,CAAA,QAAA,CAAA;AAAA,EACzB,UAAA,EAAY,GAAG,aAAa,CAAA,WAAA,CAAA;AAAA,EAC5B,MAAA,EAAQ,GAAG,aAAa,CAAA,OAAA;AAC1B","file":"chunk-MRFGUSN2.js","sourcesContent":["export const API_V1_PREFIX = \"/api/v1\";\r\n\r\nexport const API_ENDPOINTS = {\r\n auth: `${API_V1_PREFIX}/auth`,\r\n tenants: `${API_V1_PREFIX}/tenants`,\r\n users: `${API_V1_PREFIX}/users`,\r\n academicYears: `${API_V1_PREFIX}/academic-years`,\r\n subjects: `${API_V1_PREFIX}/subjects`,\r\n teachingSchedules: `${API_V1_PREFIX}/teaching-schedules`,\r\n classrooms: `${API_V1_PREFIX}/classrooms`,\r\n students: `${API_V1_PREFIX}/students`,\r\n leads: `${API_V1_PREFIX}/leads`,\r\n uploads: `${API_V1_PREFIX}/uploads`,\r\n attendance: `${API_V1_PREFIX}/attendance`,\r\n health: `${API_V1_PREFIX}/health`,\r\n} as const;\r\n"]}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var chunkQJSOSQ7M_cjs = require('./chunk-QJSOSQ7M.cjs');
4
+ var chunkNGFFI4XQ_cjs = require('./chunk-NGFFI4XQ.cjs');
5
+ var chunkXVG5Z6B5_cjs = require('./chunk-XVG5Z6B5.cjs');
6
+ var reactQuery = require('@tanstack/react-query');
7
+
8
+ async function getHealth() {
9
+ return chunkNGFFI4XQ_cjs.getData(chunkQJSOSQ7M_cjs.API_ENDPOINTS.health);
10
+ }
11
+ function useHealth(options) {
12
+ return reactQuery.useQuery({
13
+ queryKey: chunkXVG5Z6B5_cjs.systemKeys.health(),
14
+ queryFn: getHealth,
15
+ enabled: options?.enabled ?? true,
16
+ staleTime: 3e4
17
+ });
18
+ }
19
+
20
+ exports.getHealth = getHealth;
21
+ exports.useHealth = useHealth;
22
+ //# sourceMappingURL=chunk-NBVPN4KL.cjs.map
23
+ //# sourceMappingURL=chunk-NBVPN4KL.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/system/system.api.ts"],"names":["getData","API_ENDPOINTS","useQuery","systemKeys"],"mappings":";;;;;;;AAYA,eAAsB,SAAA,GAAwC;AAC5D,EAAA,OAAOA,yBAAA,CAA2BC,gCAAc,MAAM,CAAA;AACxD;AAEO,SAAS,UAAU,OAAA,EAAiC;AACzD,EAAA,OAAOC,mBAAA,CAAS;AAAA,IACd,QAAA,EAAUC,6BAAW,MAAA,EAAO;AAAA,IAC5B,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAS,OAAA,IAAW,IAAA;AAAA,IAC7B,SAAA,EAAW;AAAA,GACZ,CAAA;AACH","file":"chunk-NBVPN4KL.cjs","sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\r\nimport { API_ENDPOINTS } from \"../../common/endpoints\";\r\nimport { getData } from \"../../client/http\";\r\nimport { systemKeys } from \"../../keys\";\r\n\r\nexport interface HealthCheckResult {\r\n status: \"ok\" | \"degraded\" | \"down\";\r\n uptime?: number;\r\n timestamp?: string;\r\n services?: Record<string, string>;\r\n}\r\n\r\nexport async function getHealth(): Promise<HealthCheckResult> {\r\n return getData<HealthCheckResult>(API_ENDPOINTS.health);\r\n}\r\n\r\nexport function useHealth(options?: { enabled?: boolean }) {\r\n return useQuery({\r\n queryKey: systemKeys.health(),\r\n queryFn: getHealth,\r\n enabled: options?.enabled ?? true,\r\n staleTime: 30_000,\r\n });\r\n}\r\n"]}
@@ -0,0 +1,61 @@
1
+ 'use strict';
2
+
3
+ var chunkPPK3HQOY_cjs = require('./chunk-PPK3HQOY.cjs');
4
+
5
+ // src/client/http.ts
6
+ function toAxiosConfig(options) {
7
+ return {
8
+ ...options?.config,
9
+ ...options?.params !== void 0 ? { params: options.params } : {},
10
+ ...options?.signal ? { signal: options.signal } : {}
11
+ };
12
+ }
13
+ async function getData(url, options) {
14
+ const response = await chunkPPK3HQOY_cjs.apiClient.get(url, toAxiosConfig(options));
15
+ return response.data.data;
16
+ }
17
+ async function getEnvelope(url, options) {
18
+ const response = await chunkPPK3HQOY_cjs.apiClient.get(url, toAxiosConfig(options));
19
+ return response.data;
20
+ }
21
+ async function getPaginated(url, options) {
22
+ const response = await chunkPPK3HQOY_cjs.apiClient.get(url, toAxiosConfig(options));
23
+ return response.data.data;
24
+ }
25
+ async function postData(url, body, options) {
26
+ const response = await chunkPPK3HQOY_cjs.apiClient.post(url, body, toAxiosConfig(options));
27
+ return response.data.data;
28
+ }
29
+ async function patchData(url, body, options) {
30
+ const response = await chunkPPK3HQOY_cjs.apiClient.patch(url, body, toAxiosConfig(options));
31
+ return response.data.data;
32
+ }
33
+ async function putData(url, body, options) {
34
+ const response = await chunkPPK3HQOY_cjs.apiClient.put(url, body, toAxiosConfig(options));
35
+ return response.data.data;
36
+ }
37
+ async function deleteData(url, options) {
38
+ const response = await chunkPPK3HQOY_cjs.apiClient.delete(url, toAxiosConfig(options));
39
+ return response.data.data;
40
+ }
41
+ async function uploadData(url, formData, options) {
42
+ const response = await chunkPPK3HQOY_cjs.apiClient.post(url, formData, {
43
+ ...toAxiosConfig(options),
44
+ headers: {
45
+ ...options?.config?.headers,
46
+ "Content-Type": "multipart/form-data"
47
+ }
48
+ });
49
+ return response.data.data;
50
+ }
51
+
52
+ exports.deleteData = deleteData;
53
+ exports.getData = getData;
54
+ exports.getEnvelope = getEnvelope;
55
+ exports.getPaginated = getPaginated;
56
+ exports.patchData = patchData;
57
+ exports.postData = postData;
58
+ exports.putData = putData;
59
+ exports.uploadData = uploadData;
60
+ //# sourceMappingURL=chunk-NGFFI4XQ.cjs.map
61
+ //# sourceMappingURL=chunk-NGFFI4XQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client/http.ts"],"names":["apiClient"],"mappings":";;;;;AAKA,SAAS,cAAc,OAAA,EAA8C;AACnE,EAAA,OAAO;AAAA,IACL,GAAG,OAAA,EAAS,MAAA;AAAA,IACZ,GAAI,SAAS,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAO,GAAI,EAAC;AAAA,IAClE,GAAI,SAAS,MAAA,GAAS,EAAE,QAAQ,OAAA,CAAQ,MAAA,KAAW;AAAC,GACtD;AACF;AAGA,eAAsB,OAAA,CAAW,KAAa,OAAA,EAAsC;AAClF,EAAA,MAAM,WAAW,MAAMA,2BAAA,CAAU,IAAwB,GAAA,EAAK,aAAA,CAAc,OAAO,CAAC,CAAA;AACpF,EAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AACvB;AAGA,eAAsB,WAAA,CAAe,KAAa,OAAA,EAAuD;AACvG,EAAA,MAAM,WAAW,MAAMA,2BAAA,CAAU,IAAwB,GAAA,EAAK,aAAA,CAAc,OAAO,CAAC,CAAA;AACpF,EAAA,OAAO,QAAA,CAAS,IAAA;AAClB;AAGA,eAAsB,YAAA,CAAgB,KAAa,OAAA,EAAqD;AACtG,EAAA,MAAM,WAAW,MAAMA,2BAAA,CAAU,IAA6B,GAAA,EAAK,aAAA,CAAc,OAAO,CAAC,CAAA;AACzF,EAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AACvB;AAGA,eAAsB,QAAA,CACpB,GAAA,EACA,IAAA,EACA,OAAA,EACoB;AACpB,EAAA,MAAM,QAAA,GAAW,MAAMA,2BAAA,CAAU,IAAA,CAAiC,KAAK,IAAA,EAAM,aAAA,CAAc,OAAO,CAAC,CAAA;AACnG,EAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AACvB;AAGA,eAAsB,SAAA,CACpB,GAAA,EACA,IAAA,EACA,OAAA,EACoB;AACpB,EAAA,MAAM,QAAA,GAAW,MAAMA,2BAAA,CAAU,KAAA,CAAkC,KAAK,IAAA,EAAM,aAAA,CAAc,OAAO,CAAC,CAAA;AACpG,EAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AACvB;AAGA,eAAsB,OAAA,CACpB,GAAA,EACA,IAAA,EACA,OAAA,EACoB;AACpB,EAAA,MAAM,QAAA,GAAW,MAAMA,2BAAA,CAAU,GAAA,CAAgC,KAAK,IAAA,EAAM,aAAA,CAAc,OAAO,CAAC,CAAA;AAClG,EAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AACvB;AAGA,eAAsB,UAAA,CAA6B,KAAa,OAAA,EAA8C;AAC5G,EAAA,MAAM,WAAW,MAAMA,2BAAA,CAAU,OAAmC,GAAA,EAAK,aAAA,CAAc,OAAO,CAAC,CAAA;AAC/F,EAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AACvB;AAGA,eAAsB,UAAA,CACpB,GAAA,EACA,QAAA,EACA,OAAA,EACoB;AACpB,EAAA,MAAM,QAAA,GAAW,MAAMA,2BAAA,CAAU,IAAA,CAAiC,KAAK,QAAA,EAAU;AAAA,IAC/E,GAAG,cAAc,OAAO,CAAA;AAAA,IACxB,OAAA,EAAS;AAAA,MACP,GAAG,SAAS,MAAA,EAAQ,OAAA;AAAA,MACpB,cAAA,EAAgB;AAAA;AAClB,GACD,CAAA;AACD,EAAA,OAAO,SAAS,IAAA,CAAK,IAAA;AACvB","file":"chunk-NGFFI4XQ.cjs","sourcesContent":["import type { AxiosRequestConfig } from \"axios\";\r\nimport { apiClient } from \"./axios-instance\";\r\nimport { RequestOptions } from \"./error\";\r\nimport { BaseApiResponse, PaginatedApiResponse, PaginatedData } from \"./types\";\r\n\r\nfunction toAxiosConfig(options?: RequestOptions): AxiosRequestConfig {\r\n return {\r\n ...options?.config,\r\n ...(options?.params !== undefined ? { params: options.params } : {}),\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n };\r\n}\r\n\r\n/** GET request that unwraps the `{ success, message, data }` envelope. */\r\nexport async function getData<T>(url: string, options?: RequestOptions): Promise<T> {\r\n const response = await apiClient.get<BaseApiResponse<T>>(url, toAxiosConfig(options));\r\n return response.data.data;\r\n}\r\n\r\n/** GET request returning the full envelope (useful when `meta` is needed). */\r\nexport async function getEnvelope<T>(url: string, options?: RequestOptions): Promise<BaseApiResponse<T>> {\r\n const response = await apiClient.get<BaseApiResponse<T>>(url, toAxiosConfig(options));\r\n return response.data;\r\n}\r\n\r\n/** GET request for paginated endpoints; resolves the `{ items, meta }` payload. */\r\nexport async function getPaginated<T>(url: string, options?: RequestOptions): Promise<PaginatedData<T>> {\r\n const response = await apiClient.get<PaginatedApiResponse<T>>(url, toAxiosConfig(options));\r\n return response.data.data;\r\n}\r\n\r\n/** POST request that unwraps the response envelope. */\r\nexport async function postData<TResponse, TBody = unknown>(\r\n url: string,\r\n body?: TBody,\r\n options?: RequestOptions\r\n): Promise<TResponse> {\r\n const response = await apiClient.post<BaseApiResponse<TResponse>>(url, body, toAxiosConfig(options));\r\n return response.data.data;\r\n}\r\n\r\n/** PATCH request that unwraps the response envelope. */\r\nexport async function patchData<TResponse, TBody = unknown>(\r\n url: string,\r\n body?: TBody,\r\n options?: RequestOptions\r\n): Promise<TResponse> {\r\n const response = await apiClient.patch<BaseApiResponse<TResponse>>(url, body, toAxiosConfig(options));\r\n return response.data.data;\r\n}\r\n\r\n/** PUT request that unwraps the response envelope. */\r\nexport async function putData<TResponse, TBody = unknown>(\r\n url: string,\r\n body?: TBody,\r\n options?: RequestOptions\r\n): Promise<TResponse> {\r\n const response = await apiClient.put<BaseApiResponse<TResponse>>(url, body, toAxiosConfig(options));\r\n return response.data.data;\r\n}\r\n\r\n/** DELETE request that unwraps the response envelope. */\r\nexport async function deleteData<TResponse = void>(url: string, options?: RequestOptions): Promise<TResponse> {\r\n const response = await apiClient.delete<BaseApiResponse<TResponse>>(url, toAxiosConfig(options));\r\n return response.data.data;\r\n}\r\n\r\n/** Uploads a binary payload as `multipart/form-data`. */\r\nexport async function uploadData<TResponse>(\r\n url: string,\r\n formData: FormData,\r\n options?: RequestOptions\r\n): Promise<TResponse> {\r\n const response = await apiClient.post<BaseApiResponse<TResponse>>(url, formData, {\r\n ...toAxiosConfig(options),\r\n headers: {\r\n ...options?.config?.headers,\r\n \"Content-Type\": \"multipart/form-data\",\r\n },\r\n });\r\n return response.data.data;\r\n}\r\n"]}