@sekolaos/shared-api 1.3.1 → 1.4.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 (103) hide show
  1. package/dist/{chunk-ZPEEFUEC.cjs → chunk-4LZJ36WZ.cjs} +4 -4
  2. package/dist/{chunk-ZPEEFUEC.cjs.map → chunk-4LZJ36WZ.cjs.map} +1 -1
  3. package/dist/{chunk-KB4TZTAC.cjs → chunk-4UJJALG5.cjs} +15 -17
  4. package/dist/chunk-4UJJALG5.cjs.map +1 -0
  5. package/dist/{chunk-U7YG2GA7.js → chunk-55WQN2DX.js} +3 -3
  6. package/dist/{chunk-U7YG2GA7.js.map → chunk-55WQN2DX.js.map} +1 -1
  7. package/dist/{chunk-XNH67ORL.js → chunk-7GCYXFMU.js} +16 -4
  8. package/dist/chunk-7GCYXFMU.js.map +1 -0
  9. package/dist/{chunk-FVPR2MOB.js → chunk-B2BMTZUU.js} +3 -3
  10. package/dist/{chunk-FVPR2MOB.js.map → chunk-B2BMTZUU.js.map} +1 -1
  11. package/dist/{chunk-NPR4GLFZ.js → chunk-BKRQIZIV.js} +3 -3
  12. package/dist/{chunk-NPR4GLFZ.js.map → chunk-BKRQIZIV.js.map} +1 -1
  13. package/dist/{chunk-PQFTPOP4.js → chunk-CARJ6QAB.js} +3 -3
  14. package/dist/{chunk-PQFTPOP4.js.map → chunk-CARJ6QAB.js.map} +1 -1
  15. package/dist/{chunk-Y4YURM53.cjs → chunk-DSGF264Y.cjs} +12 -12
  16. package/dist/{chunk-Y4YURM53.cjs.map → chunk-DSGF264Y.cjs.map} +1 -1
  17. package/dist/{chunk-LS4ZQRFS.cjs → chunk-EXEAVSTX.cjs} +11 -11
  18. package/dist/{chunk-LS4ZQRFS.cjs.map → chunk-EXEAVSTX.cjs.map} +1 -1
  19. package/dist/{chunk-BBJBCD2K.cjs → chunk-IWV6SOVN.cjs} +6 -6
  20. package/dist/{chunk-BBJBCD2K.cjs.map → chunk-IWV6SOVN.cjs.map} +1 -1
  21. package/dist/{chunk-N4OBLYCQ.cjs → chunk-IXMKB5VH.cjs} +6 -6
  22. package/dist/{chunk-N4OBLYCQ.cjs.map → chunk-IXMKB5VH.cjs.map} +1 -1
  23. package/dist/chunk-JBIEHGQ6.js +213 -0
  24. package/dist/chunk-JBIEHGQ6.js.map +1 -0
  25. package/dist/{chunk-H5WMOGLJ.js → chunk-KPGOAAOU.js} +3 -3
  26. package/dist/{chunk-H5WMOGLJ.js.map → chunk-KPGOAAOU.js.map} +1 -1
  27. package/dist/{chunk-23XAR4OH.cjs → chunk-N6Y2VQWI.cjs} +9 -9
  28. package/dist/{chunk-23XAR4OH.cjs.map → chunk-N6Y2VQWI.cjs.map} +1 -1
  29. package/dist/chunk-NGEJP5ON.cjs +39 -0
  30. package/dist/chunk-NGEJP5ON.cjs.map +1 -0
  31. package/dist/{chunk-HISL2IF2.cjs → chunk-NUKJPRPS.cjs} +17 -3
  32. package/dist/chunk-NUKJPRPS.cjs.map +1 -0
  33. package/dist/{chunk-SBBVQ3Z2.cjs → chunk-PDJ6OU3X.cjs} +5 -5
  34. package/dist/{chunk-SBBVQ3Z2.cjs.map → chunk-PDJ6OU3X.cjs.map} +1 -1
  35. package/dist/{chunk-ROK2DEVT.js → chunk-Q4UVXJMH.js} +3 -3
  36. package/dist/{chunk-ROK2DEVT.js.map → chunk-Q4UVXJMH.js.map} +1 -1
  37. package/dist/{chunk-DATSHIPR.js → chunk-R2S5EWDS.js} +3 -3
  38. package/dist/{chunk-DATSHIPR.js.map → chunk-R2S5EWDS.js.map} +1 -1
  39. package/dist/{chunk-RDW4IZWK.js → chunk-RGA4HK7T.js} +3 -3
  40. package/dist/{chunk-RDW4IZWK.js.map → chunk-RGA4HK7T.js.map} +1 -1
  41. package/dist/{chunk-CSEMYBBZ.js → chunk-TSMUTMIE.js} +9 -11
  42. package/dist/chunk-TSMUTMIE.js.map +1 -0
  43. package/dist/{chunk-AMKVNGY4.cjs → chunk-UJN47JNP.cjs} +11 -11
  44. package/dist/{chunk-AMKVNGY4.cjs.map → chunk-UJN47JNP.cjs.map} +1 -1
  45. package/dist/{chunk-NVU4IIMA.cjs → chunk-V7QGZZXE.cjs} +8 -8
  46. package/dist/{chunk-NVU4IIMA.cjs.map → chunk-V7QGZZXE.cjs.map} +1 -1
  47. package/dist/{chunk-NCENQB6W.js → chunk-WFDOYOBG.js} +3 -3
  48. package/dist/{chunk-NCENQB6W.js.map → chunk-WFDOYOBG.js.map} +1 -1
  49. package/dist/chunk-XGKBOKII.cjs +244 -0
  50. package/dist/chunk-XGKBOKII.cjs.map +1 -0
  51. package/dist/chunk-YJOKPUPT.js +34 -0
  52. package/dist/chunk-YJOKPUPT.js.map +1 -0
  53. package/dist/index.cjs +254 -165
  54. package/dist/index.d.cts +5 -4
  55. package/dist/index.d.ts +5 -4
  56. package/dist/index.js +14 -13
  57. package/dist/keys/index.cjs +21 -13
  58. package/dist/keys/index.d.cts +14 -1
  59. package/dist/keys/index.d.ts +14 -1
  60. package/dist/keys/index.js +1 -1
  61. package/dist/modules/academic/index.cjs +10 -10
  62. package/dist/modules/academic/index.js +2 -2
  63. package/dist/modules/attendance/index.cjs +80 -16
  64. package/dist/modules/attendance/index.d.cts +138 -4
  65. package/dist/modules/attendance/index.d.ts +138 -4
  66. package/dist/modules/attendance/index.js +2 -2
  67. package/dist/modules/auth/index.cjs +18 -18
  68. package/dist/modules/auth/index.d.cts +3 -21
  69. package/dist/modules/auth/index.d.ts +3 -21
  70. package/dist/modules/auth/index.js +2 -2
  71. package/dist/modules/classroom/index.cjs +14 -14
  72. package/dist/modules/classroom/index.js +2 -2
  73. package/dist/modules/lead/index.cjs +10 -10
  74. package/dist/modules/lead/index.js +2 -2
  75. package/dist/modules/roles/index.cjs +29 -0
  76. package/dist/modules/roles/index.cjs.map +1 -0
  77. package/dist/modules/roles/index.d.cts +39 -0
  78. package/dist/modules/roles/index.d.ts +39 -0
  79. package/dist/modules/roles/index.js +8 -0
  80. package/dist/modules/roles/index.js.map +1 -0
  81. package/dist/modules/student/index.cjs +18 -18
  82. package/dist/modules/student/index.js +2 -2
  83. package/dist/modules/subject/index.cjs +8 -8
  84. package/dist/modules/subject/index.js +2 -2
  85. package/dist/modules/system/index.cjs +4 -4
  86. package/dist/modules/system/index.js +2 -2
  87. package/dist/modules/teaching-schedule/index.cjs +14 -14
  88. package/dist/modules/teaching-schedule/index.js +2 -2
  89. package/dist/modules/tenant/index.cjs +16 -16
  90. package/dist/modules/tenant/index.js +2 -2
  91. package/dist/modules/user/index.cjs +14 -14
  92. package/dist/modules/user/index.d.cts +10 -20
  93. package/dist/modules/user/index.d.ts +10 -20
  94. package/dist/modules/user/index.js +2 -2
  95. package/package.json +143 -137
  96. package/dist/chunk-CSEMYBBZ.js.map +0 -1
  97. package/dist/chunk-HISL2IF2.cjs.map +0 -1
  98. package/dist/chunk-ID3UGFZZ.js +0 -102
  99. package/dist/chunk-ID3UGFZZ.js.map +0 -1
  100. package/dist/chunk-JVX37TC5.cjs +0 -117
  101. package/dist/chunk-JVX37TC5.cjs.map +0 -1
  102. package/dist/chunk-KB4TZTAC.cjs.map +0 -1
  103. package/dist/chunk-XNH67ORL.js.map +0 -1
@@ -0,0 +1,244 @@
1
+ 'use strict';
2
+
3
+ var chunk3TOBH3YY_cjs = require('./chunk-3TOBH3YY.cjs');
4
+ var chunkNGFFI4XQ_cjs = require('./chunk-NGFFI4XQ.cjs');
5
+ var chunkPPK3HQOY_cjs = require('./chunk-PPK3HQOY.cjs');
6
+ var chunkNUKJPRPS_cjs = require('./chunk-NUKJPRPS.cjs');
7
+ var reactQuery = require('@tanstack/react-query');
8
+
9
+ var ENDPOINT = chunk3TOBH3YY_cjs.API_ENDPOINTS.attendance;
10
+ var TENANT_ENDPOINT = chunk3TOBH3YY_cjs.API_ENDPOINTS.tenants;
11
+ async function getAttendanceShifts(params) {
12
+ return chunkNGFFI4XQ_cjs.getData(`${TENANT_ENDPOINT}/shifts`, { params });
13
+ }
14
+ async function getAttendanceShiftDetail(targetType) {
15
+ return chunkNGFFI4XQ_cjs.getData(`${TENANT_ENDPOINT}/shifts/${targetType}`);
16
+ }
17
+ async function createAttendanceShift(payload) {
18
+ return chunkNGFFI4XQ_cjs.postData(
19
+ `${TENANT_ENDPOINT}/shifts`,
20
+ payload
21
+ );
22
+ }
23
+ async function updateAttendanceShift(targetType, payload) {
24
+ return chunkNGFFI4XQ_cjs.putData(
25
+ `${TENANT_ENDPOINT}/shifts/${targetType}`,
26
+ payload
27
+ );
28
+ }
29
+ async function deleteAttendanceShift(targetType) {
30
+ await chunkPPK3HQOY_cjs.apiClient.delete(`${TENANT_ENDPOINT}/shifts/${targetType}`);
31
+ }
32
+ async function getAttendanceHistory(params) {
33
+ return chunkNGFFI4XQ_cjs.getPaginated(`${ENDPOINT}/history`, { params });
34
+ }
35
+ async function batchSyncAttendance(payload) {
36
+ return chunkNGFFI4XQ_cjs.postData(
37
+ `${ENDPOINT}/batch-sync`,
38
+ payload
39
+ );
40
+ }
41
+ async function updateClassAttendance(payload) {
42
+ return chunkNGFFI4XQ_cjs.postData(
43
+ `${ENDPOINT}/class-update`,
44
+ payload
45
+ );
46
+ }
47
+ async function getDynamicQrStream(params) {
48
+ if (params?.format === "text") {
49
+ const response = await chunkPPK3HQOY_cjs.apiClient.get(`${ENDPOINT}/dynamic-qr/stream`, { params });
50
+ return response.data;
51
+ }
52
+ return chunkNGFFI4XQ_cjs.getData(`${ENDPOINT}/dynamic-qr/stream`, { params });
53
+ }
54
+ async function verifyDynamicQr(payload) {
55
+ return chunkNGFFI4XQ_cjs.postData(
56
+ `${ENDPOINT}/dynamic-qr/verify`,
57
+ payload
58
+ );
59
+ }
60
+ async function listPicketSchedules(params) {
61
+ return chunkNGFFI4XQ_cjs.getData(`${ENDPOINT}/picket-schedules`, { params });
62
+ }
63
+ async function createPicketAssignment(payload) {
64
+ return chunkNGFFI4XQ_cjs.postData(
65
+ `${ENDPOINT}/picket-schedules`,
66
+ payload
67
+ );
68
+ }
69
+ async function getDutyStatus() {
70
+ return chunkNGFFI4XQ_cjs.getData(`${ENDPOINT}/duty-status`);
71
+ }
72
+ async function recordManualStudentAttendance(payload) {
73
+ return chunkNGFFI4XQ_cjs.postData(
74
+ `${ENDPOINT}/students/manual`,
75
+ payload
76
+ );
77
+ }
78
+ async function studentBatchSync(payload) {
79
+ return chunkNGFFI4XQ_cjs.postData(
80
+ `${ENDPOINT}/students/batch-sync`,
81
+ payload
82
+ );
83
+ }
84
+ function useAttendanceHistory(params, enabled = true) {
85
+ return reactQuery.useQuery({
86
+ queryKey: chunkNUKJPRPS_cjs.attendanceKeys.history(params),
87
+ queryFn: () => getAttendanceHistory(params),
88
+ enabled
89
+ });
90
+ }
91
+ function useDynamicQrStream(params, enabled = true) {
92
+ return reactQuery.useQuery({
93
+ queryKey: chunkNUKJPRPS_cjs.attendanceKeys.dynamicQrStream(params),
94
+ queryFn: () => getDynamicQrStream(params),
95
+ enabled,
96
+ refetchInterval: 15e3
97
+ });
98
+ }
99
+ function usePicketSchedules(options) {
100
+ return reactQuery.useQuery({
101
+ queryKey: chunkNUKJPRPS_cjs.attendanceKeys.picketSchedules(),
102
+ queryFn: () => listPicketSchedules(),
103
+ ...options
104
+ });
105
+ }
106
+ function useBatchSyncAttendance() {
107
+ const queryClient = reactQuery.useQueryClient();
108
+ return reactQuery.useMutation({
109
+ mutationFn: batchSyncAttendance,
110
+ onSuccess: async () => {
111
+ await queryClient.invalidateQueries({ queryKey: chunkNUKJPRPS_cjs.attendanceKeys.all });
112
+ }
113
+ });
114
+ }
115
+ function useUpdateClassAttendance() {
116
+ const queryClient = reactQuery.useQueryClient();
117
+ return reactQuery.useMutation({
118
+ mutationFn: updateClassAttendance,
119
+ onSuccess: async () => {
120
+ await queryClient.invalidateQueries({ queryKey: chunkNUKJPRPS_cjs.attendanceKeys.all });
121
+ }
122
+ });
123
+ }
124
+ function useVerifyDynamicQr() {
125
+ return reactQuery.useMutation({ mutationFn: verifyDynamicQr });
126
+ }
127
+ function useCreatePicketAssignment(options) {
128
+ const queryClient = reactQuery.useQueryClient();
129
+ return reactQuery.useMutation({
130
+ mutationFn: createPicketAssignment,
131
+ onSuccess: (data, vars, ctx) => {
132
+ queryClient.invalidateQueries({ queryKey: chunkNUKJPRPS_cjs.attendanceKeys.all });
133
+ options?.onSuccess?.(data, vars, ctx);
134
+ },
135
+ ...options
136
+ });
137
+ }
138
+ function useAttendanceShiftsQuery(params) {
139
+ return reactQuery.useQuery({
140
+ queryKey: chunkNUKJPRPS_cjs.attendanceShiftKeys.list(
141
+ params
142
+ ),
143
+ queryFn: () => getAttendanceShifts(params)
144
+ });
145
+ }
146
+ function useAttendanceShiftDetailQuery(targetType) {
147
+ return reactQuery.useQuery({
148
+ queryKey: chunkNUKJPRPS_cjs.attendanceShiftKeys.detail(targetType),
149
+ queryFn: () => getAttendanceShiftDetail(targetType)
150
+ });
151
+ }
152
+ function useCreateAttendanceShiftMutation(options) {
153
+ const queryClient = reactQuery.useQueryClient();
154
+ return reactQuery.useMutation({
155
+ mutationFn: createAttendanceShift,
156
+ onSuccess: async (data, vars, ctx) => {
157
+ await queryClient.invalidateQueries({ queryKey: chunkNUKJPRPS_cjs.attendanceShiftKeys.all });
158
+ options?.onSuccess?.(data, vars, ctx);
159
+ }
160
+ });
161
+ }
162
+ function useUpdateAttendanceShiftMutation(options) {
163
+ const queryClient = reactQuery.useQueryClient();
164
+ return reactQuery.useMutation({
165
+ mutationFn: ({
166
+ targetType,
167
+ payload
168
+ }) => updateAttendanceShift(targetType, payload),
169
+ onSuccess: async (data, vars, ctx) => {
170
+ await queryClient.invalidateQueries({ queryKey: chunkNUKJPRPS_cjs.attendanceShiftKeys.all });
171
+ options?.onSuccess?.(data, vars, ctx);
172
+ }
173
+ });
174
+ }
175
+ function useDeleteAttendanceShiftMutation(options) {
176
+ const queryClient = reactQuery.useQueryClient();
177
+ return reactQuery.useMutation({
178
+ mutationFn: deleteAttendanceShift,
179
+ onSuccess: async (data, vars, ctx) => {
180
+ await queryClient.invalidateQueries({ queryKey: chunkNUKJPRPS_cjs.attendanceShiftKeys.all });
181
+ options?.onSuccess?.(data, vars, ctx);
182
+ }
183
+ });
184
+ }
185
+ function useDutyStatusQuery(options) {
186
+ return reactQuery.useQuery({
187
+ queryKey: chunkNUKJPRPS_cjs.attendanceKeys.dutyStatus(),
188
+ queryFn: getDutyStatus,
189
+ ...options
190
+ });
191
+ }
192
+ function useManualStudentAttendanceMutation(options) {
193
+ const queryClient = reactQuery.useQueryClient();
194
+ return reactQuery.useMutation({
195
+ mutationFn: recordManualStudentAttendance,
196
+ onSuccess: async (data, vars, ctx) => {
197
+ await queryClient.invalidateQueries({ queryKey: chunkNUKJPRPS_cjs.attendanceKeys.all });
198
+ options?.onSuccess?.(data, vars, ctx);
199
+ }
200
+ });
201
+ }
202
+ function useStudentBatchSyncMutation(options) {
203
+ const queryClient = reactQuery.useQueryClient();
204
+ return reactQuery.useMutation({
205
+ mutationFn: studentBatchSync,
206
+ onSuccess: async (data, vars, ctx) => {
207
+ await queryClient.invalidateQueries({ queryKey: chunkNUKJPRPS_cjs.attendanceKeys.all });
208
+ options?.onSuccess?.(data, vars, ctx);
209
+ }
210
+ });
211
+ }
212
+
213
+ exports.batchSyncAttendance = batchSyncAttendance;
214
+ exports.createAttendanceShift = createAttendanceShift;
215
+ exports.createPicketAssignment = createPicketAssignment;
216
+ exports.deleteAttendanceShift = deleteAttendanceShift;
217
+ exports.getAttendanceHistory = getAttendanceHistory;
218
+ exports.getAttendanceShiftDetail = getAttendanceShiftDetail;
219
+ exports.getAttendanceShifts = getAttendanceShifts;
220
+ exports.getDutyStatus = getDutyStatus;
221
+ exports.getDynamicQrStream = getDynamicQrStream;
222
+ exports.listPicketSchedules = listPicketSchedules;
223
+ exports.recordManualStudentAttendance = recordManualStudentAttendance;
224
+ exports.studentBatchSync = studentBatchSync;
225
+ exports.updateAttendanceShift = updateAttendanceShift;
226
+ exports.updateClassAttendance = updateClassAttendance;
227
+ exports.useAttendanceHistory = useAttendanceHistory;
228
+ exports.useAttendanceShiftDetailQuery = useAttendanceShiftDetailQuery;
229
+ exports.useAttendanceShiftsQuery = useAttendanceShiftsQuery;
230
+ exports.useBatchSyncAttendance = useBatchSyncAttendance;
231
+ exports.useCreateAttendanceShiftMutation = useCreateAttendanceShiftMutation;
232
+ exports.useCreatePicketAssignment = useCreatePicketAssignment;
233
+ exports.useDeleteAttendanceShiftMutation = useDeleteAttendanceShiftMutation;
234
+ exports.useDutyStatusQuery = useDutyStatusQuery;
235
+ exports.useDynamicQrStream = useDynamicQrStream;
236
+ exports.useManualStudentAttendanceMutation = useManualStudentAttendanceMutation;
237
+ exports.usePicketSchedules = usePicketSchedules;
238
+ exports.useStudentBatchSyncMutation = useStudentBatchSyncMutation;
239
+ exports.useUpdateAttendanceShiftMutation = useUpdateAttendanceShiftMutation;
240
+ exports.useUpdateClassAttendance = useUpdateClassAttendance;
241
+ exports.useVerifyDynamicQr = useVerifyDynamicQr;
242
+ exports.verifyDynamicQr = verifyDynamicQr;
243
+ //# sourceMappingURL=chunk-XGKBOKII.cjs.map
244
+ //# sourceMappingURL=chunk-XGKBOKII.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/attendance/attendance.api.ts"],"names":["API_ENDPOINTS","getData","postData","putData","apiClient","getPaginated","useQuery","attendanceKeys","useQueryClient","useMutation","attendanceShiftKeys"],"mappings":"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","file":"chunk-XGKBOKII.cjs","sourcesContent":["import type {\r\n AttendanceHistoryItem,\r\n AttendanceHistoryQuery,\r\n AttendanceHistoryResult,\r\n BatchSyncAttendanceRequest,\r\n BatchSyncAttendanceResponse,\r\n ClassUpdateAttendanceResult,\r\n CreatePicketAssignmentInput,\r\n DynamicQrStreamQuery,\r\n DynamicQrStreamResult,\r\n DynamicQrVerifyResult,\r\n PicketAssignment,\r\n PicketScheduleListQuery,\r\n TeacherScanDynamicQrRequest,\r\n UpdateClassAttendanceRequest,\r\n AttendanceShift,\r\n CreateAttendanceShiftSchemaInput,\r\n UpdateAttendanceShiftSchemaInput,\r\n ManualStudentAttendanceRequest,\r\n StudentBatchSyncRequest,\r\n StudentBatchSyncResponse,\r\n} from \"@sekolaos/shared-schema\";\r\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\r\nimport { API_ENDPOINTS } from \"../../common/endpoints\";\r\nimport { apiClient } from \"../../client/axios-instance\";\r\nimport { getData, getPaginated, postData, putData } from \"../../client/http\";\r\nimport type { MutationOptionsCustom, PaginatedResult, QueryOptionsWithoutKey } from \"../../client/types\";\r\nimport { attendanceKeys, attendanceShiftKeys } from \"../../keys\";\r\n\r\nconst ENDPOINT = API_ENDPOINTS.attendance;\r\nconst TENANT_ENDPOINT = API_ENDPOINTS.tenants;\r\n\r\n// ── Shift CRUD (tenant endpoint) ───────────────────────────────────────────\r\n\r\nexport async function getAttendanceShifts(params?: {\r\n targetType?: \"SISWA\" | \"GURU\";\r\n}): Promise<AttendanceShift[]> {\r\n return getData<AttendanceShift[]>(`${TENANT_ENDPOINT}/shifts`, { params });\r\n}\r\n\r\nexport async function getAttendanceShiftDetail(\r\n targetType: \"SISWA\" | \"GURU\"\r\n): Promise<AttendanceShift> {\r\n return getData<AttendanceShift>(`${TENANT_ENDPOINT}/shifts/${targetType}`);\r\n}\r\n\r\nexport async function createAttendanceShift(\r\n payload: CreateAttendanceShiftSchemaInput\r\n): Promise<AttendanceShift> {\r\n return postData<AttendanceShift, CreateAttendanceShiftSchemaInput>(\r\n `${TENANT_ENDPOINT}/shifts`,\r\n payload\r\n );\r\n}\r\n\r\nexport async function updateAttendanceShift(\r\n targetType: \"SISWA\" | \"GURU\",\r\n payload: UpdateAttendanceShiftSchemaInput\r\n): Promise<AttendanceShift> {\r\n return putData<AttendanceShift, UpdateAttendanceShiftSchemaInput>(\r\n `${TENANT_ENDPOINT}/shifts/${targetType}`,\r\n payload\r\n );\r\n}\r\n\r\nexport async function deleteAttendanceShift(targetType: \"SISWA\" | \"GURU\"): Promise<void> {\r\n await apiClient.delete(`${TENANT_ENDPOINT}/shifts/${targetType}`);\r\n}\r\n\r\n// ── Presensi siswa ───────────────────────────────────────────────────────────\r\n\r\nexport async function getAttendanceHistory(\r\n params: AttendanceHistoryQuery\r\n): Promise<AttendanceHistoryResult> {\r\n return getPaginated<AttendanceHistoryItem>(`${ENDPOINT}/history`, { params });\r\n}\r\n\r\nexport async function batchSyncAttendance(\r\n payload: BatchSyncAttendanceRequest\r\n): Promise<BatchSyncAttendanceResponse> {\r\n return postData<BatchSyncAttendanceResponse, BatchSyncAttendanceRequest>(\r\n `${ENDPOINT}/batch-sync`,\r\n payload\r\n );\r\n}\r\n\r\nexport async function updateClassAttendance(\r\n payload: UpdateClassAttendanceRequest\r\n): Promise<ClassUpdateAttendanceResult> {\r\n return postData<ClassUpdateAttendanceResult, UpdateClassAttendanceRequest>(\r\n `${ENDPOINT}/class-update`,\r\n payload\r\n );\r\n}\r\n\r\nexport async function getDynamicQrStream(\r\n params?: DynamicQrStreamQuery\r\n): Promise<DynamicQrStreamResult | string> {\r\n if (params?.format === \"text\") {\r\n const response = await apiClient.get<string>(`${ENDPOINT}/dynamic-qr/stream`, { params });\r\n return response.data;\r\n }\r\n return getData<DynamicQrStreamResult>(`${ENDPOINT}/dynamic-qr/stream`, { params });\r\n}\r\n\r\nexport async function verifyDynamicQr(\r\n payload: TeacherScanDynamicQrRequest\r\n): Promise<DynamicQrVerifyResult> {\r\n return postData<DynamicQrVerifyResult, TeacherScanDynamicQrRequest>(\r\n `${ENDPOINT}/dynamic-qr/verify`,\r\n payload\r\n );\r\n}\r\n\r\nexport async function listPicketSchedules(\r\n params?: Partial<PicketScheduleListQuery>\r\n): Promise<PicketAssignment[]> {\r\n return getData<PicketAssignment[]>(`${ENDPOINT}/picket-schedules`, { params });\r\n}\r\n\r\nexport async function createPicketAssignment(\r\n payload: CreatePicketAssignmentInput\r\n): Promise<PicketAssignment> {\r\n return postData<PicketAssignment, CreatePicketAssignmentInput>(\r\n `${ENDPOINT}/picket-schedules`,\r\n payload\r\n );\r\n}\r\n\r\n// ── Status piket & absen manual ─────────────────────────────────────────────\r\n\r\nexport interface DutyStatus {\r\n isActiveDutyTeacher: boolean;\r\n activeShift: {\r\n id: string;\r\n name: string;\r\n checkInStart: string;\r\n checkInEnd: string;\r\n checkOutEnd: string;\r\n } | null;\r\n dutyDate: string;\r\n}\r\n\r\nexport async function getDutyStatus(): Promise<DutyStatus> {\r\n return getData<DutyStatus>(`${ENDPOINT}/duty-status`);\r\n}\r\n\r\nexport interface ManualAttendanceResult {\r\n id: string;\r\n method: \"QR_SCAN\" | \"MANUAL_DUTY_TEACHER\" | \"SYSTEM_AUTO\";\r\n status: \"PRESENT\" | \"LATE\";\r\n manualReason: string;\r\n recordedByUserId: string | null;\r\n}\r\n\r\nexport async function recordManualStudentAttendance(\r\n payload: ManualStudentAttendanceRequest\r\n): Promise<ManualAttendanceResult> {\r\n return postData<ManualAttendanceResult, ManualStudentAttendanceRequest>(\r\n `${ENDPOINT}/students/manual`,\r\n payload\r\n );\r\n}\r\n\r\nexport async function studentBatchSync(\r\n payload: StudentBatchSyncRequest\r\n): Promise<StudentBatchSyncResponse> {\r\n return postData<StudentBatchSyncResponse, StudentBatchSyncRequest>(\r\n `${ENDPOINT}/students/batch-sync`,\r\n payload\r\n );\r\n}\r\n\r\nexport function useAttendanceHistory(params: AttendanceHistoryQuery, enabled = true) {\r\n return useQuery({\r\n queryKey: attendanceKeys.history(params as unknown as Record<string, unknown>),\r\n queryFn: () => getAttendanceHistory(params),\r\n enabled,\r\n });\r\n}\r\n\r\nexport function useDynamicQrStream(params: DynamicQrStreamQuery, enabled = true) {\r\n return useQuery({\r\n queryKey: attendanceKeys.dynamicQrStream(params as unknown as Record<string, unknown>),\r\n queryFn: () => getDynamicQrStream(params),\r\n enabled,\r\n refetchInterval: 15_000,\r\n });\r\n}\r\n\r\nexport function usePicketSchedules(options?: QueryOptionsWithoutKey<PicketAssignment[]>) {\r\n return useQuery({\r\n queryKey: attendanceKeys.picketSchedules(),\r\n queryFn: () => listPicketSchedules(),\r\n ...options,\r\n });\r\n}\r\n\r\nexport function useBatchSyncAttendance() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: batchSyncAttendance,\r\n onSuccess: async () => {\r\n await queryClient.invalidateQueries({ queryKey: attendanceKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport function useUpdateClassAttendance() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: updateClassAttendance,\r\n onSuccess: async () => {\r\n await queryClient.invalidateQueries({ queryKey: attendanceKeys.all });\r\n },\r\n });\r\n}\r\n\r\nexport function useVerifyDynamicQr() {\r\n return useMutation({ mutationFn: verifyDynamicQr });\r\n}\r\n\r\nexport function useCreatePicketAssignment(options?: MutationOptionsCustom<PicketAssignment, CreatePicketAssignmentInput>) {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: createPicketAssignment,\r\n onSuccess: (data, vars, ctx) => {\r\n queryClient.invalidateQueries({ queryKey: attendanceKeys.all });\r\n options?.onSuccess?.(data, vars, ctx);\r\n },\r\n ...options,\r\n });\r\n}\r\n\r\n// ── Hooks: shift CRUD ───────────────────────────────────────────────────────\r\n\r\nexport function useAttendanceShiftsQuery(params?: { targetType?: \"SISWA\" | \"GURU\" }) {\r\n return useQuery({\r\n queryKey: attendanceShiftKeys.list(\r\n params as unknown as Record<string, unknown> | undefined\r\n ),\r\n queryFn: () => getAttendanceShifts(params),\r\n });\r\n}\r\n\r\nexport function useAttendanceShiftDetailQuery(targetType: \"SISWA\" | \"GURU\") {\r\n return useQuery({\r\n queryKey: attendanceShiftKeys.detail(targetType),\r\n queryFn: () => getAttendanceShiftDetail(targetType),\r\n });\r\n}\r\n\r\nexport function useCreateAttendanceShiftMutation(\r\n options?: MutationOptionsCustom<AttendanceShift, CreateAttendanceShiftSchemaInput>\r\n) {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: createAttendanceShift,\r\n onSuccess: async (data, vars, ctx) => {\r\n await queryClient.invalidateQueries({ queryKey: attendanceShiftKeys.all });\r\n options?.onSuccess?.(data, vars, ctx);\r\n },\r\n });\r\n}\r\n\r\nexport function useUpdateAttendanceShiftMutation(\r\n options?: MutationOptionsCustom<\r\n AttendanceShift,\r\n { targetType: \"SISWA\" | \"GURU\"; payload: UpdateAttendanceShiftSchemaInput }\r\n >\r\n) {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: ({\r\n targetType,\r\n payload,\r\n }: {\r\n targetType: \"SISWA\" | \"GURU\";\r\n payload: UpdateAttendanceShiftSchemaInput;\r\n }) => updateAttendanceShift(targetType, payload),\r\n onSuccess: async (data, vars, ctx) => {\r\n await queryClient.invalidateQueries({ queryKey: attendanceShiftKeys.all });\r\n options?.onSuccess?.(data, vars, ctx);\r\n },\r\n });\r\n}\r\n\r\nexport function useDeleteAttendanceShiftMutation(\r\n options?: MutationOptionsCustom<void, \"SISWA\" | \"GURU\">\r\n) {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: deleteAttendanceShift,\r\n onSuccess: async (data, vars, ctx) => {\r\n await queryClient.invalidateQueries({ queryKey: attendanceShiftKeys.all });\r\n options?.onSuccess?.(data, vars, ctx);\r\n },\r\n });\r\n}\r\n\r\n// ── Hooks: status piket & absen manual ─────────────────────────────────────\r\n\r\nexport function useDutyStatusQuery(options?: QueryOptionsWithoutKey<DutyStatus>) {\r\n return useQuery({\r\n queryKey: attendanceKeys.dutyStatus(),\r\n queryFn: getDutyStatus,\r\n ...options,\r\n });\r\n}\r\n\r\nexport function useManualStudentAttendanceMutation(\r\n options?: MutationOptionsCustom<ManualAttendanceResult, ManualStudentAttendanceRequest>\r\n) {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: recordManualStudentAttendance,\r\n onSuccess: async (data, vars, ctx) => {\r\n // Invalikan riwayat presensi hari ini\r\n await queryClient.invalidateQueries({ queryKey: attendanceKeys.all });\r\n options?.onSuccess?.(data, vars, ctx);\r\n },\r\n });\r\n}\r\n\r\nexport function useStudentBatchSyncMutation(\r\n options?: MutationOptionsCustom<StudentBatchSyncResponse, StudentBatchSyncRequest>\r\n) {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: studentBatchSync,\r\n onSuccess: async (data, vars, ctx) => {\r\n await queryClient.invalidateQueries({ queryKey: attendanceKeys.all });\r\n options?.onSuccess?.(data, vars, ctx);\r\n },\r\n });\r\n}\r\n\r\nexport type {\r\n AttendanceHistoryItem,\r\n AttendanceHistoryQuery,\r\n AttendanceHistoryResult,\r\n AttendanceShift,\r\n BatchSyncAttendanceRequest,\r\n BatchSyncAttendanceResponse,\r\n ClassUpdateAttendanceResult,\r\n CreateAttendanceShiftSchemaInput,\r\n CreatePicketAssignmentInput,\r\n DynamicQrStreamQuery,\r\n DynamicQrStreamResult,\r\n DynamicQrVerifyResult,\r\n ManualStudentAttendanceRequest,\r\n PaginatedResult,\r\n PicketAssignment,\r\n PicketScheduleListQuery,\r\n StudentBatchSyncRequest,\r\n StudentBatchSyncResponse,\r\n TeacherScanDynamicQrRequest,\r\n UpdateAttendanceShiftSchemaInput,\r\n UpdateClassAttendanceRequest,\r\n};\r\n"]}
@@ -0,0 +1,34 @@
1
+ import { API_ENDPOINTS } from './chunk-Q5ZX6TKB.js';
2
+ import { getData, putData } from './chunk-6JGO2CUT.js';
3
+ import { roleKeys, userKeys } from './chunk-7GCYXFMU.js';
4
+ import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
5
+
6
+ async function getRoles() {
7
+ return getData(`${API_ENDPOINTS.users}/roles`);
8
+ }
9
+ async function assignUserRoles(userId, payload) {
10
+ return putData(`${API_ENDPOINTS.users}/${userId}/roles`, payload);
11
+ }
12
+ function useRolesQuery(options) {
13
+ return useQuery({
14
+ queryKey: roleKeys.list(),
15
+ queryFn: getRoles,
16
+ staleTime: 5 * 6e4,
17
+ ...options
18
+ });
19
+ }
20
+ function useAssignUserRolesMutation(options) {
21
+ const queryClient = useQueryClient();
22
+ return useMutation({
23
+ mutationFn: ({ userId, payload }) => assignUserRoles(userId, payload),
24
+ onSuccess: async (_data, variables) => {
25
+ await queryClient.invalidateQueries({ queryKey: userKeys.all });
26
+ await queryClient.invalidateQueries({ queryKey: roleKeys.all });
27
+ options?.onSuccess?.(_data, variables, void 0);
28
+ }
29
+ });
30
+ }
31
+
32
+ export { assignUserRoles, getRoles, useAssignUserRolesMutation, useRolesQuery };
33
+ //# sourceMappingURL=chunk-YJOKPUPT.js.map
34
+ //# sourceMappingURL=chunk-YJOKPUPT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/modules/roles/roles.api.ts"],"names":[],"mappings":";;;;;AAUA,eAAsB,QAAA,GAAkC;AACtD,EAAA,OAAO,OAAA,CAAsB,CAAA,EAAG,aAAA,CAAc,KAAK,CAAA,MAAA,CAAQ,CAAA;AAC7D;AAGA,eAAsB,eAAA,CACpB,QACA,OAAA,EACwE;AACxE,EAAA,OAAO,QAGL,CAAA,EAAG,aAAA,CAAc,KAAK,CAAA,CAAA,EAAI,MAAM,UAAU,OAAO,CAAA;AACrD;AAEO,SAAS,cAAc,OAAA,EAAgD;AAC5E,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,QAAA,EAAU,SAAS,IAAA,EAAK;AAAA,IACxB,OAAA,EAAS,QAAA;AAAA,IACT,WAAW,CAAA,GAAI,GAAA;AAAA,IACf,GAAG;AAAA,GACJ,CAAA;AACH;AAEO,SAAS,2BACd,OAAA,EAIA;AACA,EAAA,MAAM,cAAc,cAAA,EAAe;AACnC,EAAA,OAAO,WAAA,CAAY;AAAA,IACjB,UAAA,EAAY,CAAC,EAAE,MAAA,EAAQ,SAAQ,KAC7B,eAAA,CAAgB,QAAQ,OAAO,CAAA;AAAA,IACjC,SAAA,EAAW,OAAO,KAAA,EAAO,SAAA,KAAc;AACrC,MAAA,MAAM,YAAY,iBAAA,CAAkB,EAAE,QAAA,EAAU,QAAA,CAAS,KAAK,CAAA;AAC9D,MAAA,MAAM,YAAY,iBAAA,CAAkB,EAAE,QAAA,EAAU,QAAA,CAAS,KAAK,CAAA;AAC9D,MAAA,OAAA,EAAS,SAAA,GAAY,KAAA,EAAO,SAAA,EAAW,MAAS,CAAA;AAAA,IAClD;AAAA,GACD,CAAA;AACH","file":"chunk-YJOKPUPT.js","sourcesContent":["import type {\r\n AssignUserRolesRequest,\r\n SchoolRole,\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, putData } from \"../../client/http\";\r\nimport type { MutationOptionsCustom, QueryOptionsWithoutKey } from \"../../client/types\";\r\nimport { roleKeys, userKeys } from \"../../keys\";\r\n\r\nexport async function getRoles(): Promise<SchoolRole[]> {\r\n return getData<SchoolRole[]>(`${API_ENDPOINTS.users}/roles`);\r\n}\r\n\r\n/** `PUT /api/v1/users/:id/roles` — ganti seluruh peran pengguna pada tahun ajaran. */\r\nexport async function assignUserRoles(\r\n userId: string,\r\n payload: AssignUserRolesRequest\r\n): Promise<{ userId: string; roleIds: string[]; academicYearId: string }> {\r\n return putData<\r\n { userId: string; roleIds: string[]; academicYearId: string },\r\n AssignUserRolesRequest\r\n >(`${API_ENDPOINTS.users}/${userId}/roles`, payload);\r\n}\r\n\r\nexport function useRolesQuery(options?: QueryOptionsWithoutKey<SchoolRole[]>) {\r\n return useQuery({\r\n queryKey: roleKeys.list(),\r\n queryFn: getRoles,\r\n staleTime: 5 * 60_000,\r\n ...options,\r\n });\r\n}\r\n\r\nexport function useAssignUserRolesMutation(\r\n options?: MutationOptionsCustom<\r\n { userId: string; roleIds: string[]; academicYearId: string },\r\n { userId: string; payload: AssignUserRolesRequest }\r\n >\r\n) {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: ({ userId, payload }: { userId: string; payload: AssignUserRolesRequest }) =>\r\n assignUserRoles(userId, payload),\r\n onSuccess: async (_data, variables) => {\r\n await queryClient.invalidateQueries({ queryKey: userKeys.all });\r\n await queryClient.invalidateQueries({ queryKey: roleKeys.all });\r\n options?.onSuccess?.(_data, variables, undefined);\r\n },\r\n });\r\n}\r\n\r\nexport type {\r\n AssignUserRolesRequest,\r\n SchoolRole,\r\n};\r\n"]}