@sekolaos/shared-api 1.3.2 → 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.
- package/dist/{chunk-ZPEEFUEC.cjs → chunk-4LZJ36WZ.cjs} +4 -4
- package/dist/{chunk-ZPEEFUEC.cjs.map → chunk-4LZJ36WZ.cjs.map} +1 -1
- package/dist/{chunk-KB4TZTAC.cjs → chunk-4UJJALG5.cjs} +15 -17
- package/dist/chunk-4UJJALG5.cjs.map +1 -0
- package/dist/{chunk-U7YG2GA7.js → chunk-55WQN2DX.js} +3 -3
- package/dist/{chunk-U7YG2GA7.js.map → chunk-55WQN2DX.js.map} +1 -1
- package/dist/{chunk-XNH67ORL.js → chunk-7GCYXFMU.js} +16 -4
- package/dist/chunk-7GCYXFMU.js.map +1 -0
- package/dist/{chunk-FVPR2MOB.js → chunk-B2BMTZUU.js} +3 -3
- package/dist/{chunk-FVPR2MOB.js.map → chunk-B2BMTZUU.js.map} +1 -1
- package/dist/{chunk-NPR4GLFZ.js → chunk-BKRQIZIV.js} +3 -3
- package/dist/{chunk-NPR4GLFZ.js.map → chunk-BKRQIZIV.js.map} +1 -1
- package/dist/{chunk-PQFTPOP4.js → chunk-CARJ6QAB.js} +3 -3
- package/dist/{chunk-PQFTPOP4.js.map → chunk-CARJ6QAB.js.map} +1 -1
- package/dist/{chunk-Y4YURM53.cjs → chunk-DSGF264Y.cjs} +12 -12
- package/dist/{chunk-Y4YURM53.cjs.map → chunk-DSGF264Y.cjs.map} +1 -1
- package/dist/{chunk-LS4ZQRFS.cjs → chunk-EXEAVSTX.cjs} +11 -11
- package/dist/{chunk-LS4ZQRFS.cjs.map → chunk-EXEAVSTX.cjs.map} +1 -1
- package/dist/{chunk-BBJBCD2K.cjs → chunk-IWV6SOVN.cjs} +6 -6
- package/dist/{chunk-BBJBCD2K.cjs.map → chunk-IWV6SOVN.cjs.map} +1 -1
- package/dist/{chunk-N4OBLYCQ.cjs → chunk-IXMKB5VH.cjs} +6 -6
- package/dist/{chunk-N4OBLYCQ.cjs.map → chunk-IXMKB5VH.cjs.map} +1 -1
- package/dist/chunk-JBIEHGQ6.js +213 -0
- package/dist/chunk-JBIEHGQ6.js.map +1 -0
- package/dist/{chunk-KLRABMYU.js → chunk-KPGOAAOU.js} +3 -3
- package/dist/{chunk-KLRABMYU.js.map → chunk-KPGOAAOU.js.map} +1 -1
- package/dist/{chunk-23XAR4OH.cjs → chunk-N6Y2VQWI.cjs} +9 -9
- package/dist/{chunk-23XAR4OH.cjs.map → chunk-N6Y2VQWI.cjs.map} +1 -1
- package/dist/chunk-NGEJP5ON.cjs +39 -0
- package/dist/chunk-NGEJP5ON.cjs.map +1 -0
- package/dist/{chunk-HISL2IF2.cjs → chunk-NUKJPRPS.cjs} +17 -3
- package/dist/chunk-NUKJPRPS.cjs.map +1 -0
- package/dist/{chunk-SBBVQ3Z2.cjs → chunk-PDJ6OU3X.cjs} +5 -5
- package/dist/{chunk-SBBVQ3Z2.cjs.map → chunk-PDJ6OU3X.cjs.map} +1 -1
- package/dist/{chunk-ROK2DEVT.js → chunk-Q4UVXJMH.js} +3 -3
- package/dist/{chunk-ROK2DEVT.js.map → chunk-Q4UVXJMH.js.map} +1 -1
- package/dist/{chunk-DATSHIPR.js → chunk-R2S5EWDS.js} +3 -3
- package/dist/{chunk-DATSHIPR.js.map → chunk-R2S5EWDS.js.map} +1 -1
- package/dist/{chunk-RDW4IZWK.js → chunk-RGA4HK7T.js} +3 -3
- package/dist/{chunk-RDW4IZWK.js.map → chunk-RGA4HK7T.js.map} +1 -1
- package/dist/{chunk-CSEMYBBZ.js → chunk-TSMUTMIE.js} +9 -11
- package/dist/chunk-TSMUTMIE.js.map +1 -0
- package/dist/{chunk-AMKVNGY4.cjs → chunk-UJN47JNP.cjs} +11 -11
- package/dist/{chunk-AMKVNGY4.cjs.map → chunk-UJN47JNP.cjs.map} +1 -1
- package/dist/{chunk-EM5HIZFG.cjs → chunk-V7QGZZXE.cjs} +8 -8
- package/dist/{chunk-EM5HIZFG.cjs.map → chunk-V7QGZZXE.cjs.map} +1 -1
- package/dist/{chunk-NCENQB6W.js → chunk-WFDOYOBG.js} +3 -3
- package/dist/{chunk-NCENQB6W.js.map → chunk-WFDOYOBG.js.map} +1 -1
- package/dist/chunk-XGKBOKII.cjs +244 -0
- package/dist/chunk-XGKBOKII.cjs.map +1 -0
- package/dist/chunk-YJOKPUPT.js +34 -0
- package/dist/chunk-YJOKPUPT.js.map +1 -0
- package/dist/index.cjs +254 -165
- package/dist/index.d.cts +5 -4
- package/dist/index.d.ts +5 -4
- package/dist/index.js +14 -13
- package/dist/keys/index.cjs +21 -13
- package/dist/keys/index.d.cts +14 -1
- package/dist/keys/index.d.ts +14 -1
- package/dist/keys/index.js +1 -1
- package/dist/modules/academic/index.cjs +10 -10
- package/dist/modules/academic/index.js +2 -2
- package/dist/modules/attendance/index.cjs +80 -16
- package/dist/modules/attendance/index.d.cts +138 -4
- package/dist/modules/attendance/index.d.ts +138 -4
- package/dist/modules/attendance/index.js +2 -2
- package/dist/modules/auth/index.cjs +18 -18
- package/dist/modules/auth/index.js +2 -2
- package/dist/modules/classroom/index.cjs +14 -14
- package/dist/modules/classroom/index.js +2 -2
- package/dist/modules/lead/index.cjs +10 -10
- package/dist/modules/lead/index.js +2 -2
- package/dist/modules/roles/index.cjs +29 -0
- package/dist/modules/roles/index.cjs.map +1 -0
- package/dist/modules/roles/index.d.cts +39 -0
- package/dist/modules/roles/index.d.ts +39 -0
- package/dist/modules/roles/index.js +8 -0
- package/dist/modules/roles/index.js.map +1 -0
- package/dist/modules/student/index.cjs +18 -18
- package/dist/modules/student/index.js +2 -2
- package/dist/modules/subject/index.cjs +8 -8
- package/dist/modules/subject/index.js +2 -2
- package/dist/modules/system/index.cjs +4 -4
- package/dist/modules/system/index.js +2 -2
- package/dist/modules/teaching-schedule/index.cjs +14 -14
- package/dist/modules/teaching-schedule/index.js +2 -2
- package/dist/modules/tenant/index.cjs +16 -16
- package/dist/modules/tenant/index.js +2 -2
- package/dist/modules/user/index.cjs +14 -14
- package/dist/modules/user/index.d.cts +10 -20
- package/dist/modules/user/index.d.ts +10 -20
- package/dist/modules/user/index.js +2 -2
- package/package.json +7 -2
- package/dist/chunk-CSEMYBBZ.js.map +0 -1
- package/dist/chunk-HISL2IF2.cjs.map +0 -1
- package/dist/chunk-ID3UGFZZ.js +0 -102
- package/dist/chunk-ID3UGFZZ.js.map +0 -1
- package/dist/chunk-JVX37TC5.cjs +0 -117
- package/dist/chunk-JVX37TC5.cjs.map +0 -1
- package/dist/chunk-KB4TZTAC.cjs.map +0 -1
- 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"]}
|