academe-kit 0.1.9 → 0.2.2

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.
@@ -1,5 +1,6 @@
1
- import { KeycloakLoginOptions, KeycloakPromise } from 'keycloak-js';
2
- import { MongoDBUser } from '../../services/userService';
1
+ import { KeycloakLoginOptions } from 'keycloak-js';
2
+ import { User } from '../../types';
3
+ import { AcademeApiClient, AcademeServices } from '../../services';
3
4
  export type AcademeKeycloakContextProps = {
4
5
  realm: string;
5
6
  hubUrl: string;
@@ -18,17 +19,19 @@ export type KeycloakUser = {
18
19
  lastName: string;
19
20
  email: string;
20
21
  };
21
- export type AcademeUser = MongoDBUser & {
22
+ export type AcademeUser = User & {
22
23
  keycloakUser?: KeycloakUser;
23
24
  };
24
25
  export type SecurityContextType = {
25
26
  isInitialized: boolean;
26
27
  isAuthenticated: () => boolean;
27
28
  signOut: () => void | null;
28
- goToLogin: (options?: KeycloakLoginOptions | undefined) => KeycloakPromise<void, void> | null;
29
+ goToLogin: (options?: KeycloakLoginOptions | undefined) => void;
29
30
  user: AcademeUser | null;
30
31
  refreshUserData: () => Promise<void>;
31
32
  hasRealmRole: (role: string) => boolean;
32
33
  hasSchool: (schoolId: string) => boolean;
33
34
  hasClientRole: (role: string, resource?: string) => boolean;
35
+ apiClient: AcademeApiClient | null;
36
+ services: AcademeServices | null;
34
37
  };
@@ -5,9 +5,14 @@ export { ProtectedComponent } from './components/ProtectedComponent';
5
5
  export { ProtectedRouter } from './components/ProtectedRouter';
6
6
  export { Spinner } from './components/ui/spinner';
7
7
  export { AcademeAuthProvider, useAcademeAuth } from './context/SecurityProvider';
8
- export { createUserService } from './services/userService';
9
- export type { MongoDBUser, UserServiceConfig } from './services/userService';
10
8
  export type { AcademeKeycloakContextProps, SecurityProviderProps, KeycloakUser, SecurityContextType, AcademeUser, } from './context/SecurityProvider/types';
9
+ export { createAcademeApiClient } from './services';
10
+ export type { AcademeApiClient } from './services';
11
11
  export { cn } from './lib/utils';
12
12
  import './index.css';
13
13
  import './styles/globals.css';
14
+ export { GLOBAL_ROLES } from './roles/global';
15
+ export { BACKOFFICE_ROLES } from './roles/backoffice';
16
+ export { DASHBOARD_ROLES } from './roles/dashboard';
17
+ export * as types from './types';
18
+ export * as apiTypes from './types/academe-api';
@@ -0,0 +1,2 @@
1
+ export declare enum BACKOFFICE_ROLES {
2
+ }
@@ -0,0 +1,2 @@
1
+ export declare enum DASHBOARD_ROLES {
2
+ }
@@ -0,0 +1,7 @@
1
+ export declare enum GLOBAL_ROLES {
2
+ ADMIN_ACADEME = "admin_academe",
3
+ SCHOOL_ADMIN = "school_admin",
4
+ TEACHER = "teacher",
5
+ STUDENT = "student",
6
+ GUARDIAN = "guardian"
7
+ }
@@ -0,0 +1,270 @@
1
+ import type { AcademeApiClient } from './index';
2
+ import type { components } from '../types/academe-api';
3
+ type CreateClassroomDto = components['schemas']['CreateClassroomDto'];
4
+ type UpdateClassroomDto = components['schemas']['UpdateClassroomDto'];
5
+ type GetClassroomsByInstitutionParams = {
6
+ page?: number;
7
+ limit?: number;
8
+ search?: string;
9
+ };
10
+ export declare function createClassroomService(apiClient: AcademeApiClient): {
11
+ /**
12
+ * List all classrooms
13
+ */
14
+ getAll(): Promise<import("openapi-fetch").FetchResponse<{
15
+ parameters: {
16
+ query?: never;
17
+ header?: never;
18
+ path?: never;
19
+ cookie?: never;
20
+ };
21
+ requestBody?: never;
22
+ responses: {
23
+ 200: {
24
+ headers: {
25
+ [name: string]: unknown;
26
+ };
27
+ content: {
28
+ "application/json": {
29
+ status?: string;
30
+ data?: components["schemas"]["Classroom"][];
31
+ };
32
+ };
33
+ };
34
+ 401: components["responses"]["Unauthorized"];
35
+ 500: components["responses"]["ServerError"];
36
+ };
37
+ }, import("openapi-fetch").FetchOptions<{
38
+ parameters: {
39
+ query?: never;
40
+ header?: never;
41
+ path?: never;
42
+ cookie?: never;
43
+ };
44
+ requestBody?: never;
45
+ responses: {
46
+ 200: {
47
+ headers: {
48
+ [name: string]: unknown;
49
+ };
50
+ content: {
51
+ "application/json": {
52
+ status?: string;
53
+ data?: components["schemas"]["Classroom"][];
54
+ };
55
+ };
56
+ };
57
+ 401: components["responses"]["Unauthorized"];
58
+ 500: components["responses"]["ServerError"];
59
+ };
60
+ }> | undefined, `${string}/${string}`>>;
61
+ /**
62
+ * Get classroom by ID
63
+ */
64
+ getById(id: string): Promise<import("openapi-fetch").FetchResponse<{
65
+ parameters: {
66
+ query?: never;
67
+ header?: never;
68
+ path: {
69
+ id: components["parameters"]["id"];
70
+ };
71
+ cookie?: never;
72
+ };
73
+ requestBody?: never;
74
+ responses: {
75
+ 200: {
76
+ headers: {
77
+ [name: string]: unknown;
78
+ };
79
+ content: {
80
+ "application/json": {
81
+ status?: string;
82
+ data?: components["schemas"]["Classroom"];
83
+ };
84
+ };
85
+ };
86
+ 400: components["responses"]["BadRequest"];
87
+ 401: components["responses"]["Unauthorized"];
88
+ 404: components["responses"]["NotFound"];
89
+ 500: components["responses"]["ServerError"];
90
+ };
91
+ }, {
92
+ params: {
93
+ path: {
94
+ id: string;
95
+ };
96
+ };
97
+ }, `${string}/${string}`>>;
98
+ /**
99
+ * Get classrooms by institution ID
100
+ */
101
+ getByInstitution(institutionId: string, params?: GetClassroomsByInstitutionParams): Promise<import("openapi-fetch").FetchResponse<{
102
+ parameters: {
103
+ query?: {
104
+ page?: number;
105
+ limit?: number;
106
+ search?: string;
107
+ };
108
+ header?: never;
109
+ path: {
110
+ id: string;
111
+ };
112
+ cookie?: never;
113
+ };
114
+ requestBody?: never;
115
+ responses: {
116
+ 200: {
117
+ headers: {
118
+ [name: string]: unknown;
119
+ };
120
+ content: {
121
+ "application/json": {
122
+ status?: string;
123
+ data?: components["schemas"]["Classroom"][];
124
+ meta?: {
125
+ total?: number;
126
+ page?: number;
127
+ limit?: number;
128
+ totalPages?: number;
129
+ };
130
+ };
131
+ };
132
+ };
133
+ 400: components["responses"]["BadRequest"];
134
+ 401: components["responses"]["Unauthorized"];
135
+ 500: components["responses"]["ServerError"];
136
+ };
137
+ }, {
138
+ params: {
139
+ path: {
140
+ id: string;
141
+ };
142
+ query: GetClassroomsByInstitutionParams | undefined;
143
+ };
144
+ }, `${string}/${string}`>>;
145
+ /**
146
+ * Create a new classroom
147
+ */
148
+ create(data: CreateClassroomDto): Promise<import("openapi-fetch").FetchResponse<{
149
+ parameters: {
150
+ query?: never;
151
+ header?: never;
152
+ path?: never;
153
+ cookie?: never;
154
+ };
155
+ requestBody: {
156
+ content: {
157
+ "application/json": components["schemas"]["CreateClassroomDto"];
158
+ };
159
+ };
160
+ responses: {
161
+ 201: {
162
+ headers: {
163
+ [name: string]: unknown;
164
+ };
165
+ content: {
166
+ "application/json": {
167
+ status?: string;
168
+ data?: components["schemas"]["Classroom"];
169
+ message?: string;
170
+ };
171
+ };
172
+ };
173
+ 400: components["responses"]["BadRequest"];
174
+ 401: components["responses"]["Unauthorized"];
175
+ 500: components["responses"]["ServerError"];
176
+ };
177
+ }, {
178
+ body: {
179
+ name: string;
180
+ shiftId: string;
181
+ serieId: string;
182
+ };
183
+ }, `${string}/${string}`>>;
184
+ /**
185
+ * Update classroom
186
+ */
187
+ update(id: string, data: UpdateClassroomDto): Promise<import("openapi-fetch").FetchResponse<{
188
+ parameters: {
189
+ query?: never;
190
+ header?: never;
191
+ path: {
192
+ id: components["parameters"]["id"];
193
+ };
194
+ cookie?: never;
195
+ };
196
+ requestBody: {
197
+ content: {
198
+ "application/json": components["schemas"]["UpdateClassroomDto"];
199
+ };
200
+ };
201
+ responses: {
202
+ 200: {
203
+ headers: {
204
+ [name: string]: unknown;
205
+ };
206
+ content: {
207
+ "application/json": {
208
+ status?: string;
209
+ data?: components["schemas"]["Classroom"];
210
+ message?: string;
211
+ };
212
+ };
213
+ };
214
+ 400: components["responses"]["BadRequest"];
215
+ 401: components["responses"]["Unauthorized"];
216
+ 404: components["responses"]["NotFound"];
217
+ 500: components["responses"]["ServerError"];
218
+ };
219
+ }, {
220
+ params: {
221
+ path: {
222
+ id: string;
223
+ };
224
+ };
225
+ body: {
226
+ name?: string;
227
+ shiftId?: string;
228
+ serieId?: string;
229
+ };
230
+ }, `${string}/${string}`>>;
231
+ /**
232
+ * Delete classroom
233
+ */
234
+ delete(id: string): Promise<import("openapi-fetch").FetchResponse<{
235
+ parameters: {
236
+ query?: never;
237
+ header?: never;
238
+ path: {
239
+ id: components["parameters"]["id"];
240
+ };
241
+ cookie?: never;
242
+ };
243
+ requestBody?: never;
244
+ responses: {
245
+ 200: {
246
+ headers: {
247
+ [name: string]: unknown;
248
+ };
249
+ content: {
250
+ "application/json": {
251
+ status?: string;
252
+ message?: string;
253
+ };
254
+ };
255
+ };
256
+ 400: components["responses"]["BadRequest"];
257
+ 401: components["responses"]["Unauthorized"];
258
+ 404: components["responses"]["NotFound"];
259
+ 500: components["responses"]["ServerError"];
260
+ };
261
+ }, {
262
+ params: {
263
+ path: {
264
+ id: string;
265
+ };
266
+ };
267
+ }, `${string}/${string}`>>;
268
+ };
269
+ export type ClassroomService = ReturnType<typeof createClassroomService>;
270
+ export {};
@@ -0,0 +1,309 @@
1
+ import type { AcademeApiClient } from './index';
2
+ import type { components } from '../types/academe-api';
3
+ type CreateGuardianDto = components['schemas']['CreateGuardianDto'];
4
+ type UpdateGuardianDto = components['schemas']['UpdateGuardianDto'];
5
+ type AssignGuardianToUserDto = components['schemas']['AssignGuardianToUserDto'];
6
+ export declare function createGuardianService(apiClient: AcademeApiClient): {
7
+ getAll(): Promise<import("openapi-fetch").FetchResponse<{
8
+ parameters: {
9
+ query?: never;
10
+ header?: never;
11
+ path?: never;
12
+ cookie?: never;
13
+ };
14
+ requestBody?: never;
15
+ responses: {
16
+ 200: {
17
+ headers: {
18
+ [name: string]: unknown;
19
+ };
20
+ content: {
21
+ "application/json": {
22
+ status?: string;
23
+ data?: components["schemas"]["Guardian"][];
24
+ };
25
+ };
26
+ };
27
+ 401: components["responses"]["Unauthorized"];
28
+ 500: components["responses"]["ServerError"];
29
+ };
30
+ }, import("openapi-fetch").FetchOptions<{
31
+ parameters: {
32
+ query?: never;
33
+ header?: never;
34
+ path?: never;
35
+ cookie?: never;
36
+ };
37
+ requestBody?: never;
38
+ responses: {
39
+ 200: {
40
+ headers: {
41
+ [name: string]: unknown;
42
+ };
43
+ content: {
44
+ "application/json": {
45
+ status?: string;
46
+ data?: components["schemas"]["Guardian"][];
47
+ };
48
+ };
49
+ };
50
+ 401: components["responses"]["Unauthorized"];
51
+ 500: components["responses"]["ServerError"];
52
+ };
53
+ }> | undefined, `${string}/${string}`>>;
54
+ getById(id: string): Promise<import("openapi-fetch").FetchResponse<{
55
+ parameters: {
56
+ query?: never;
57
+ header?: never;
58
+ path: {
59
+ id: components["parameters"]["id"];
60
+ };
61
+ cookie?: never;
62
+ };
63
+ requestBody?: never;
64
+ responses: {
65
+ 200: {
66
+ headers: {
67
+ [name: string]: unknown;
68
+ };
69
+ content: {
70
+ "application/json": {
71
+ status?: string;
72
+ data?: components["schemas"]["Guardian"];
73
+ };
74
+ };
75
+ };
76
+ 400: components["responses"]["BadRequest"];
77
+ 401: components["responses"]["Unauthorized"];
78
+ 404: components["responses"]["NotFound"];
79
+ 500: components["responses"]["ServerError"];
80
+ };
81
+ }, {
82
+ params: {
83
+ path: {
84
+ id: string;
85
+ };
86
+ };
87
+ }, `${string}/${string}`>>;
88
+ create(data: CreateGuardianDto): Promise<import("openapi-fetch").FetchResponse<{
89
+ parameters: {
90
+ query?: never;
91
+ header?: never;
92
+ path?: never;
93
+ cookie?: never;
94
+ };
95
+ requestBody: {
96
+ content: {
97
+ "application/json": components["schemas"]["CreateGuardianDto"];
98
+ };
99
+ };
100
+ responses: {
101
+ 201: {
102
+ headers: {
103
+ [name: string]: unknown;
104
+ };
105
+ content: {
106
+ "application/json": {
107
+ status?: string;
108
+ data?: components["schemas"]["Guardian"];
109
+ message?: string;
110
+ };
111
+ };
112
+ };
113
+ 400: components["responses"]["BadRequest"];
114
+ 401: components["responses"]["Unauthorized"];
115
+ 500: components["responses"]["ServerError"];
116
+ };
117
+ }, {
118
+ body: {
119
+ email: string;
120
+ phone?: string;
121
+ name: string;
122
+ };
123
+ }, `${string}/${string}`>>;
124
+ update(id: string, data: UpdateGuardianDto): Promise<import("openapi-fetch").FetchResponse<{
125
+ parameters: {
126
+ query?: never;
127
+ header?: never;
128
+ path: {
129
+ id: components["parameters"]["id"];
130
+ };
131
+ cookie?: never;
132
+ };
133
+ requestBody: {
134
+ content: {
135
+ "application/json": components["schemas"]["UpdateGuardianDto"];
136
+ };
137
+ };
138
+ responses: {
139
+ 200: {
140
+ headers: {
141
+ [name: string]: unknown;
142
+ };
143
+ content: {
144
+ "application/json": {
145
+ status?: string;
146
+ data?: components["schemas"]["Guardian"];
147
+ message?: string;
148
+ };
149
+ };
150
+ };
151
+ 400: components["responses"]["BadRequest"];
152
+ 401: components["responses"]["Unauthorized"];
153
+ 404: components["responses"]["NotFound"];
154
+ 500: components["responses"]["ServerError"];
155
+ };
156
+ }, {
157
+ params: {
158
+ path: {
159
+ id: string;
160
+ };
161
+ };
162
+ body: {
163
+ email?: string;
164
+ phone?: string;
165
+ name?: string;
166
+ };
167
+ }, `${string}/${string}`>>;
168
+ delete(id: string): Promise<import("openapi-fetch").FetchResponse<{
169
+ parameters: {
170
+ query?: never;
171
+ header?: never;
172
+ path: {
173
+ id: components["parameters"]["id"];
174
+ };
175
+ cookie?: never;
176
+ };
177
+ requestBody?: never;
178
+ responses: {
179
+ 200: {
180
+ headers: {
181
+ [name: string]: unknown;
182
+ };
183
+ content: {
184
+ "application/json": {
185
+ status?: string;
186
+ message?: string;
187
+ };
188
+ };
189
+ };
190
+ 400: components["responses"]["BadRequest"];
191
+ 401: components["responses"]["Unauthorized"];
192
+ 404: components["responses"]["NotFound"];
193
+ 500: components["responses"]["ServerError"];
194
+ };
195
+ }, {
196
+ params: {
197
+ path: {
198
+ id: string;
199
+ };
200
+ };
201
+ }, `${string}/${string}`>>;
202
+ getUsers(id: string): Promise<import("openapi-fetch").FetchResponse<{
203
+ parameters: {
204
+ query?: never;
205
+ header?: never;
206
+ path: {
207
+ id: components["parameters"]["id"];
208
+ };
209
+ cookie?: never;
210
+ };
211
+ requestBody?: never;
212
+ responses: {
213
+ 200: {
214
+ headers: {
215
+ [name: string]: unknown;
216
+ };
217
+ content: {
218
+ "application/json": {
219
+ status?: string;
220
+ data?: components["schemas"]["User"][];
221
+ };
222
+ };
223
+ };
224
+ 400: components["responses"]["BadRequest"];
225
+ 401: components["responses"]["Unauthorized"];
226
+ 404: components["responses"]["NotFound"];
227
+ 500: components["responses"]["ServerError"];
228
+ };
229
+ }, {
230
+ params: {
231
+ path: {
232
+ id: string;
233
+ };
234
+ };
235
+ }, `${string}/${string}`>>;
236
+ assignToUser(data: AssignGuardianToUserDto): Promise<import("openapi-fetch").FetchResponse<{
237
+ parameters: {
238
+ query?: never;
239
+ header?: never;
240
+ path?: never;
241
+ cookie?: never;
242
+ };
243
+ requestBody: {
244
+ content: {
245
+ "application/json": components["schemas"]["AssignGuardianToUserDto"];
246
+ };
247
+ };
248
+ responses: {
249
+ 200: {
250
+ headers: {
251
+ [name: string]: unknown;
252
+ };
253
+ content: {
254
+ "application/json": {
255
+ status?: string;
256
+ message?: string;
257
+ };
258
+ };
259
+ };
260
+ 400: components["responses"]["BadRequest"];
261
+ 401: components["responses"]["Unauthorized"];
262
+ 404: components["responses"]["NotFound"];
263
+ 500: components["responses"]["ServerError"];
264
+ };
265
+ }, {
266
+ body: {
267
+ userId: string;
268
+ guardianId: string;
269
+ };
270
+ }, `${string}/${string}`>>;
271
+ removeFromUser(guardianId: string, userId: string): Promise<import("openapi-fetch").FetchResponse<{
272
+ parameters: {
273
+ query?: never;
274
+ header?: never;
275
+ path: {
276
+ guardianId: string;
277
+ userId: string;
278
+ };
279
+ cookie?: never;
280
+ };
281
+ requestBody?: never;
282
+ responses: {
283
+ 200: {
284
+ headers: {
285
+ [name: string]: unknown;
286
+ };
287
+ content: {
288
+ "application/json": {
289
+ status?: string;
290
+ message?: string;
291
+ };
292
+ };
293
+ };
294
+ 400: components["responses"]["BadRequest"];
295
+ 401: components["responses"]["Unauthorized"];
296
+ 404: components["responses"]["NotFound"];
297
+ 500: components["responses"]["ServerError"];
298
+ };
299
+ }, {
300
+ params: {
301
+ path: {
302
+ guardianId: string;
303
+ userId: string;
304
+ };
305
+ };
306
+ }, `${string}/${string}`>>;
307
+ };
308
+ export type GuardianService = ReturnType<typeof createGuardianService>;
309
+ export {};