lifedebugger commited on
Commit
dc9bcf8
·
1 Parent(s): ebcbdce

Deploy files from GitHub repository

Browse files
.vscode/settings.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "postman.settings.dotenv-detection-notification-visibility": false
3
+ }
Quzuu_API_Collection.postman_collection.json ADDED
@@ -0,0 +1,2078 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "info": {
3
+ "_postman_id": "quzuu-api-collection-2024",
4
+ "name": "Quzuu API Collection",
5
+ "description": "Complete API collection for Quzuu Platform with all endpoints organized by modules.",
6
+ "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
7
+ },
8
+ "item": [
9
+ {
10
+ "name": "Health Check",
11
+ "item": [
12
+ {
13
+ "name": "Health Check",
14
+ "request": {
15
+ "method": "GET",
16
+ "header": [],
17
+ "url": {
18
+ "raw": "{{base_url}}/health-check",
19
+ "host": ["{{base_url}}"],
20
+ "path": ["health-check"]
21
+ },
22
+ "description": "Check if the service is up and running"
23
+ },
24
+ "response": []
25
+ },
26
+ {
27
+ "name": "Welcome",
28
+ "request": {
29
+ "method": "GET",
30
+ "header": [],
31
+ "url": {
32
+ "raw": "{{base_url}}/",
33
+ "host": ["{{base_url}}"],
34
+ "path": [""]
35
+ },
36
+ "description": "Welcome endpoint"
37
+ },
38
+ "response": []
39
+ }
40
+ ]
41
+ },
42
+ {
43
+ "name": "Authentication",
44
+ "item": [
45
+ {
46
+ "name": "External Login",
47
+ "request": {
48
+ "method": "POST",
49
+ "header": [
50
+ {
51
+ "key": "Content-Type",
52
+ "value": "application/json",
53
+ "type": "text"
54
+ }
55
+ ],
56
+ "body": {
57
+ "mode": "raw",
58
+ "raw": "{\n \"provider\": \"google\",\n \"token\": \"external_token_here\"\n}"
59
+ },
60
+ "url": {
61
+ "raw": "{{base_url}}/api/v1/authentication/external-login",
62
+ "host": ["{{base_url}}"],
63
+ "path": ["api", "v1", "authentication", "external-login"]
64
+ },
65
+ "description": "Login using external provider (Google, etc)"
66
+ },
67
+ "response": []
68
+ },
69
+ {
70
+ "name": "Login",
71
+ "request": {
72
+ "method": "POST",
73
+ "header": [
74
+ {
75
+ "key": "Content-Type",
76
+ "value": "application/json",
77
+ "type": "text"
78
+ }
79
+ ],
80
+ "body": {
81
+ "mode": "raw",
82
+ "raw": "{\n \"email\": \"user@example.com\",\n \"password\": \"password123\"\n}"
83
+ },
84
+ "url": {
85
+ "raw": "{{base_url}}/api/v1/authentication/login",
86
+ "host": ["{{base_url}}"],
87
+ "path": ["api", "v1", "authentication", "login"]
88
+ },
89
+ "description": "Sign in with email and password"
90
+ },
91
+ "response": []
92
+ },
93
+ {
94
+ "name": "Register",
95
+ "request": {
96
+ "method": "POST",
97
+ "header": [
98
+ {
99
+ "key": "Content-Type",
100
+ "value": "application/json",
101
+ "type": "text"
102
+ }
103
+ ],
104
+ "body": {
105
+ "mode": "raw",
106
+ "raw": "{\n \"email\": \"newuser@example.com\",\n \"password\": \"password123\",\n \"full_name\": \"New User\"\n}"
107
+ },
108
+ "url": {
109
+ "raw": "{{base_url}}/api/v1/authentication/register",
110
+ "host": ["{{base_url}}"],
111
+ "path": ["api", "v1", "authentication", "register"]
112
+ },
113
+ "description": "Register a new user account"
114
+ },
115
+ "response": []
116
+ },
117
+ {
118
+ "name": "Change Password",
119
+ "request": {
120
+ "method": "PUT",
121
+ "header": [
122
+ {
123
+ "key": "Content-Type",
124
+ "value": "application/json",
125
+ "type": "text"
126
+ },
127
+ {
128
+ "key": "Authorization",
129
+ "value": "Bearer {{access_token}}",
130
+ "type": "text"
131
+ }
132
+ ],
133
+ "body": {
134
+ "mode": "raw",
135
+ "raw": "{\n \"old_password\": \"old_password123\",\n \"new_password\": \"new_password123\"\n}"
136
+ },
137
+ "url": {
138
+ "raw": "{{base_url}}/api/v1/authentication/change-password",
139
+ "host": ["{{base_url}}"],
140
+ "path": ["api", "v1", "authentication", "change-password"]
141
+ },
142
+ "description": "Change user password (requires authentication)"
143
+ },
144
+ "response": []
145
+ }
146
+ ]
147
+ },
148
+ {
149
+ "name": "Forgot Password",
150
+ "item": [
151
+ {
152
+ "name": "Request Password Reset",
153
+ "request": {
154
+ "method": "POST",
155
+ "header": [
156
+ {
157
+ "key": "Content-Type",
158
+ "value": "application/json",
159
+ "type": "text"
160
+ }
161
+ ],
162
+ "body": {
163
+ "mode": "raw",
164
+ "raw": "{\n \"email\": \"user@example.com\"\n}"
165
+ },
166
+ "url": {
167
+ "raw": "{{base_url}}/api/v1/authentication/forgot-password/",
168
+ "host": ["{{base_url}}"],
169
+ "path": ["api", "v1", "authentication", "forgot-password", ""]
170
+ },
171
+ "description": "Request password reset for an account"
172
+ },
173
+ "response": []
174
+ }
175
+ ]
176
+ },
177
+ {
178
+ "name": "Account Details",
179
+ "item": [
180
+ {
181
+ "name": "Get Profile",
182
+ "request": {
183
+ "method": "GET",
184
+ "header": [
185
+ {
186
+ "key": "Authorization",
187
+ "value": "Bearer {{access_token}}",
188
+ "type": "text"
189
+ }
190
+ ],
191
+ "url": {
192
+ "raw": "{{base_url}}/api/v1/account/me",
193
+ "host": ["{{base_url}}"],
194
+ "path": ["api", "v1", "account", "me"]
195
+ },
196
+ "description": "Get authenticated user's profile details"
197
+ },
198
+ "response": []
199
+ },
200
+ {
201
+ "name": "Update Profile",
202
+ "request": {
203
+ "method": "PUT",
204
+ "header": [
205
+ {
206
+ "key": "Content-Type",
207
+ "value": "application/json",
208
+ "type": "text"
209
+ },
210
+ {
211
+ "key": "Authorization",
212
+ "value": "Bearer {{access_token}}",
213
+ "type": "text"
214
+ }
215
+ ],
216
+ "body": {
217
+ "mode": "raw",
218
+ "raw": "{\n \"full_name\": \"Updated Name\",\n \"phone\": \"08123456789\",\n \"address\": \"Jl. Contoh No. 1\"\n}"
219
+ },
220
+ "url": {
221
+ "raw": "{{base_url}}/api/v1/account/me",
222
+ "host": ["{{base_url}}"],
223
+ "path": ["api", "v1", "account", "me"]
224
+ },
225
+ "description": "Update authenticated user's profile details"
226
+ },
227
+ "response": []
228
+ }
229
+ ]
230
+ },
231
+ {
232
+ "name": "Email Verification",
233
+ "item": [
234
+ {
235
+ "name": "Create Verification",
236
+ "request": {
237
+ "method": "POST",
238
+ "header": [
239
+ {
240
+ "key": "Content-Type",
241
+ "value": "application/json",
242
+ "type": "text"
243
+ }
244
+ ],
245
+ "body": {
246
+ "mode": "raw",
247
+ "raw": "{\n \"email\": \"user@example.com\"\n}"
248
+ },
249
+ "url": {
250
+ "raw": "{{base_url}}/api/v1/email/create-verification",
251
+ "host": ["{{base_url}}"],
252
+ "path": ["api", "v1", "email", "create-verification"]
253
+ },
254
+ "description": "Create email verification request"
255
+ },
256
+ "response": []
257
+ },
258
+ {
259
+ "name": "Verify Email",
260
+ "request": {
261
+ "method": "POST",
262
+ "header": [
263
+ {
264
+ "key": "Content-Type",
265
+ "value": "application/json",
266
+ "type": "text"
267
+ }
268
+ ],
269
+ "body": {
270
+ "mode": "raw",
271
+ "raw": "{\n \"email\": \"user@example.com\",\n \"code\": \"123456\"\n}"
272
+ },
273
+ "url": {
274
+ "raw": "{{base_url}}/api/v1/email/verify",
275
+ "host": ["{{base_url}}"],
276
+ "path": ["api", "v1", "email", "verify"]
277
+ },
278
+ "description": "Verify email with verification code"
279
+ },
280
+ "response": []
281
+ }
282
+ ]
283
+ },
284
+ {
285
+ "name": "Events",
286
+ "item": [
287
+ {
288
+ "name": "List Events",
289
+ "request": {
290
+ "method": "GET",
291
+ "header": [
292
+ {
293
+ "key": "Authorization",
294
+ "value": "Bearer {{access_token}}",
295
+ "type": "text"
296
+ }
297
+ ],
298
+ "url": {
299
+ "raw": "{{base_url}}/api/v1/events/",
300
+ "host": ["{{base_url}}"],
301
+ "path": ["api", "v1", "events", ""]
302
+ },
303
+ "description": "List all events"
304
+ },
305
+ "response": []
306
+ },
307
+ {
308
+ "name": "Get Event Detail",
309
+ "request": {
310
+ "method": "GET",
311
+ "header": [
312
+ {
313
+ "key": "Authorization",
314
+ "value": "Bearer {{access_token}}",
315
+ "type": "text"
316
+ }
317
+ ],
318
+ "url": {
319
+ "raw": "{{base_url}}/api/v1/events/:event_slug",
320
+ "host": ["{{base_url}}"],
321
+ "path": ["api", "v1", "events", ":event_slug"],
322
+ "variable": [
323
+ {
324
+ "key": "event_slug",
325
+ "value": ""
326
+ }
327
+ ]
328
+ },
329
+ "description": "Get event detail by slug"
330
+ },
331
+ "response": []
332
+ },
333
+ {
334
+ "name": "Register to Event",
335
+ "request": {
336
+ "method": "POST",
337
+ "header": [
338
+ {
339
+ "key": "Content-Type",
340
+ "value": "application/json",
341
+ "type": "text"
342
+ },
343
+ {
344
+ "key": "Authorization",
345
+ "value": "Bearer {{access_token}}",
346
+ "type": "text"
347
+ }
348
+ ],
349
+ "body": {
350
+ "mode": "raw",
351
+ "raw": "{\n \"code\": \"event_code\"\n}"
352
+ },
353
+ "url": {
354
+ "raw": "{{base_url}}/api/v1/events/register-event",
355
+ "host": ["{{base_url}}"],
356
+ "path": ["api", "v1", "events", "register-event"]
357
+ },
358
+ "description": "Register user to an event"
359
+ },
360
+ "response": []
361
+ }
362
+ ]
363
+ },
364
+ {
365
+ "name": "Event Exams",
366
+ "item": [
367
+ {
368
+ "name": "List Event Exams",
369
+ "request": {
370
+ "method": "GET",
371
+ "header": [
372
+ {
373
+ "key": "Authorization",
374
+ "value": "Bearer {{access_token}}",
375
+ "type": "text"
376
+ }
377
+ ],
378
+ "url": {
379
+ "raw": "{{base_url}}/api/v1/events/:event_slug/exam",
380
+ "host": ["{{base_url}}"],
381
+ "path": ["api", "v1", "events", ":event_slug", "exam"],
382
+ "variable": [
383
+ {
384
+ "key": "event_slug",
385
+ "value": ""
386
+ }
387
+ ]
388
+ },
389
+ "description": "List exams in an event"
390
+ },
391
+ "response": []
392
+ },
393
+ {
394
+ "name": "Start Exam Attempt",
395
+ "request": {
396
+ "method": "GET",
397
+ "header": [
398
+ {
399
+ "key": "Authorization",
400
+ "value": "Bearer {{access_token}}",
401
+ "type": "text"
402
+ }
403
+ ],
404
+ "url": {
405
+ "raw": "{{base_url}}/api/v1/events/:event_slug/exam/:exam_slug/attempt",
406
+ "host": ["{{base_url}}"],
407
+ "path": ["api", "v1", "events", ":event_slug", "exam", ":exam_slug", "attempt"],
408
+ "variable": [
409
+ {
410
+ "key": "event_slug",
411
+ "value": ""
412
+ },
413
+ {
414
+ "key": "exam_slug",
415
+ "value": ""
416
+ }
417
+ ]
418
+ },
419
+ "description": "Start exam attempt"
420
+ },
421
+ "response": []
422
+ },
423
+ {
424
+ "name": "Answer Question",
425
+ "request": {
426
+ "method": "POST",
427
+ "header": [
428
+ {
429
+ "key": "Content-Type",
430
+ "value": "application/json",
431
+ "type": "text"
432
+ },
433
+ {
434
+ "key": "Authorization",
435
+ "value": "Bearer {{access_token}}",
436
+ "type": "text"
437
+ }
438
+ ],
439
+ "body": {
440
+ "mode": "raw",
441
+ "raw": "{\n \"question_id\": \"question_id\",\n \"answer\": \"answer_text_or_option_id\"\n}"
442
+ },
443
+ "url": {
444
+ "raw": "{{base_url}}/api/v1/events/:event_slug/exam/:attempt_id/answer_question",
445
+ "host": ["{{base_url}}"],
446
+ "path": ["api", "v1", "events", ":event_slug", "exam", ":attempt_id", "answer_question"],
447
+ "variable": [
448
+ {
449
+ "key": "event_slug",
450
+ "value": ""
451
+ },
452
+ {
453
+ "key": "attempt_id",
454
+ "value": ""
455
+ }
456
+ ]
457
+ },
458
+ "description": "Submit answer to a question during exam"
459
+ },
460
+ "response": []
461
+ },
462
+ {
463
+ "name": "Submit Exam",
464
+ "request": {
465
+ "method": "POST",
466
+ "header": [
467
+ {
468
+ "key": "Content-Type",
469
+ "value": "application/json",
470
+ "type": "text"
471
+ },
472
+ {
473
+ "key": "Authorization",
474
+ "value": "Bearer {{access_token}}",
475
+ "type": "text"
476
+ }
477
+ ],
478
+ "body": {
479
+ "mode": "raw",
480
+ "raw": "{}"
481
+ },
482
+ "url": {
483
+ "raw": "{{base_url}}/api/v1/events/:event_slug/exam/:attempt_id/submit",
484
+ "host": ["{{base_url}}"],
485
+ "path": ["api", "v1", "events", ":event_slug", "exam", ":attempt_id", "submit"],
486
+ "variable": [
487
+ {
488
+ "key": "event_slug",
489
+ "value": ""
490
+ },
491
+ {
492
+ "key": "attempt_id",
493
+ "value": ""
494
+ }
495
+ ]
496
+ },
497
+ "description": "Submit completed exam"
498
+ },
499
+ "response": []
500
+ }
501
+ ]
502
+ },
503
+ {
504
+ "name": "Event Exam Proctoring",
505
+ "item": [
506
+ {
507
+ "name": "Create Proctoring Log",
508
+ "request": {
509
+ "method": "POST",
510
+ "header": [
511
+ {
512
+ "key": "Content-Type",
513
+ "value": "application/json",
514
+ "type": "text"
515
+ },
516
+ {
517
+ "key": "Authorization",
518
+ "value": "Bearer {{access_token}}",
519
+ "type": "text"
520
+ }
521
+ ],
522
+ "body": {
523
+ "mode": "raw",
524
+ "raw": "{\n \"event_slug\": \"event_slug\",\n \"exam_slug\": \"exam_slug\",\n \"log_data\": \"proctoring_event_data\"\n}"
525
+ },
526
+ "url": {
527
+ "raw": "{{base_url}}/api/v1/proctoring/:event_slug/exam/:exam_slug/proctoring",
528
+ "host": ["{{base_url}}"],
529
+ "path": ["api", "v1", "proctoring", ":event_slug", "exam", ":exam_slug", "proctoring"],
530
+ "variable": [
531
+ {
532
+ "key": "event_slug",
533
+ "value": ""
534
+ },
535
+ {
536
+ "key": "exam_slug",
537
+ "value": ""
538
+ }
539
+ ]
540
+ },
541
+ "description": "Create proctoring log entry during exam"
542
+ },
543
+ "response": []
544
+ }
545
+ ]
546
+ },
547
+ {
548
+ "name": "Academy",
549
+ "item": [
550
+ {
551
+ "name": "List Academies",
552
+ "request": {
553
+ "method": "GET",
554
+ "header": [
555
+ {
556
+ "key": "Authorization",
557
+ "value": "Bearer {{access_token}}",
558
+ "type": "text"
559
+ }
560
+ ],
561
+ "url": {
562
+ "raw": "{{base_url}}/api/v1/academy/",
563
+ "host": ["{{base_url}}"],
564
+ "path": ["api", "v1", "academy", ""]
565
+ },
566
+ "description": "List all academies available to user"
567
+ },
568
+ "response": []
569
+ },
570
+ {
571
+ "name": "Join Academy",
572
+ "request": {
573
+ "method": "POST",
574
+ "header": [
575
+ {
576
+ "key": "Content-Type",
577
+ "value": "application/json",
578
+ "type": "text"
579
+ },
580
+ {
581
+ "key": "Authorization",
582
+ "value": "Bearer {{access_token}}",
583
+ "type": "text"
584
+ }
585
+ ],
586
+ "body": {
587
+ "mode": "raw",
588
+ "raw": "{\n \"code\": \"academy_code\"\n}"
589
+ },
590
+ "url": {
591
+ "raw": "{{base_url}}/api/v1/academy/join",
592
+ "host": ["{{base_url}}"],
593
+ "path": ["api", "v1", "academy", "join"]
594
+ },
595
+ "description": "Join academy using academy code"
596
+ },
597
+ "response": []
598
+ },
599
+ {
600
+ "name": "Get Academy Detail",
601
+ "request": {
602
+ "method": "GET",
603
+ "header": [
604
+ {
605
+ "key": "Authorization",
606
+ "value": "Bearer {{access_token}}",
607
+ "type": "text"
608
+ }
609
+ ],
610
+ "url": {
611
+ "raw": "{{base_url}}/api/v1/academy/:academy_slug",
612
+ "host": ["{{base_url}}"],
613
+ "path": ["api", "v1", "academy", ":academy_slug"],
614
+ "variable": [
615
+ {
616
+ "key": "academy_slug",
617
+ "value": ""
618
+ }
619
+ ]
620
+ },
621
+ "description": "Get academy detail by slug"
622
+ },
623
+ "response": []
624
+ },
625
+ {
626
+ "name": "Get Academy Material",
627
+ "request": {
628
+ "method": "GET",
629
+ "header": [
630
+ {
631
+ "key": "Authorization",
632
+ "value": "Bearer {{access_token}}",
633
+ "type": "text"
634
+ }
635
+ ],
636
+ "url": {
637
+ "raw": "{{base_url}}/api/v1/academy/:academy_slug/:material_slug",
638
+ "host": ["{{base_url}}"],
639
+ "path": ["api", "v1", "academy", ":academy_slug", ":material_slug"],
640
+ "variable": [
641
+ {
642
+ "key": "academy_slug",
643
+ "value": ""
644
+ },
645
+ {
646
+ "key": "material_slug",
647
+ "value": ""
648
+ }
649
+ ]
650
+ },
651
+ "description": "Get material details in an academy"
652
+ },
653
+ "response": []
654
+ },
655
+ {
656
+ "name": "Get Academy Content",
657
+ "request": {
658
+ "method": "GET",
659
+ "header": [
660
+ {
661
+ "key": "Authorization",
662
+ "value": "Bearer {{access_token}}",
663
+ "type": "text"
664
+ }
665
+ ],
666
+ "url": {
667
+ "raw": "{{base_url}}/api/v1/academy/:academy_slug/:material_slug/:order",
668
+ "host": ["{{base_url}}"],
669
+ "path": ["api", "v1", "academy", ":academy_slug", ":material_slug", ":order"],
670
+ "variable": [
671
+ {
672
+ "key": "academy_slug",
673
+ "value": ""
674
+ },
675
+ {
676
+ "key": "material_slug",
677
+ "value": ""
678
+ },
679
+ {
680
+ "key": "order",
681
+ "value": ""
682
+ }
683
+ ]
684
+ },
685
+ "description": "Get specific content in academy material"
686
+ },
687
+ "response": []
688
+ },
689
+ {
690
+ "name": "Update Content Progress",
691
+ "request": {
692
+ "method": "POST",
693
+ "header": [
694
+ {
695
+ "key": "Content-Type",
696
+ "value": "application/json",
697
+ "type": "text"
698
+ },
699
+ {
700
+ "key": "Authorization",
701
+ "value": "Bearer {{access_token}}",
702
+ "type": "text"
703
+ }
704
+ ],
705
+ "body": {
706
+ "mode": "raw",
707
+ "raw": "{\n \"progress\": 100\n}"
708
+ },
709
+ "url": {
710
+ "raw": "{{base_url}}/api/v1/academy/:academy_slug/:material_slug/:order",
711
+ "host": ["{{base_url}}"],
712
+ "path": ["api", "v1", "academy", ":academy_slug", ":material_slug", ":order"],
713
+ "variable": [
714
+ {
715
+ "key": "academy_slug",
716
+ "value": ""
717
+ },
718
+ {
719
+ "key": "material_slug",
720
+ "value": ""
721
+ },
722
+ {
723
+ "key": "order",
724
+ "value": ""
725
+ }
726
+ ]
727
+ },
728
+ "description": "Update progress on academy content"
729
+ },
730
+ "response": []
731
+ }
732
+ ]
733
+ },
734
+ {
735
+ "name": "Academy Exams",
736
+ "item": [
737
+ {
738
+ "name": "List Academy Exams",
739
+ "request": {
740
+ "method": "GET",
741
+ "header": [
742
+ {
743
+ "key": "Authorization",
744
+ "value": "Bearer {{access_token}}",
745
+ "type": "text"
746
+ }
747
+ ],
748
+ "url": {
749
+ "raw": "{{base_url}}/api/v1/academy/:academy_slug/exam",
750
+ "host": ["{{base_url}}"],
751
+ "path": ["api", "v1", "academy", ":academy_slug", "exam"],
752
+ "variable": [
753
+ {
754
+ "key": "academy_slug",
755
+ "value": ""
756
+ }
757
+ ]
758
+ },
759
+ "description": "List exams in an academy"
760
+ },
761
+ "response": []
762
+ },
763
+ {
764
+ "name": "Start Exam Attempt",
765
+ "request": {
766
+ "method": "GET",
767
+ "header": [
768
+ {
769
+ "key": "Authorization",
770
+ "value": "Bearer {{access_token}}",
771
+ "type": "text"
772
+ }
773
+ ],
774
+ "url": {
775
+ "raw": "{{base_url}}/api/v1/academy/:academy_slug/exam/:exam_slug/attempt",
776
+ "host": ["{{base_url}}"],
777
+ "path": ["api", "v1", "academy", ":academy_slug", "exam", ":exam_slug", "attempt"],
778
+ "variable": [
779
+ {
780
+ "key": "academy_slug",
781
+ "value": ""
782
+ },
783
+ {
784
+ "key": "exam_slug",
785
+ "value": ""
786
+ }
787
+ ]
788
+ },
789
+ "description": "Start exam attempt in academy"
790
+ },
791
+ "response": []
792
+ },
793
+ {
794
+ "name": "Answer Question",
795
+ "request": {
796
+ "method": "POST",
797
+ "header": [
798
+ {
799
+ "key": "Content-Type",
800
+ "value": "application/json",
801
+ "type": "text"
802
+ },
803
+ {
804
+ "key": "Authorization",
805
+ "value": "Bearer {{access_token}}",
806
+ "type": "text"
807
+ }
808
+ ],
809
+ "body": {
810
+ "mode": "raw",
811
+ "raw": "{\n \"question_id\": \"question_id\",\n \"answer\": \"answer_text_or_option_id\"\n}"
812
+ },
813
+ "url": {
814
+ "raw": "{{base_url}}/api/v1/academy/:academy_slug/exam/:attempt_id/answer_question",
815
+ "host": ["{{base_url}}"],
816
+ "path": ["api", "v1", "academy", ":academy_slug", "exam", ":attempt_id", "answer_question"],
817
+ "variable": [
818
+ {
819
+ "key": "academy_slug",
820
+ "value": ""
821
+ },
822
+ {
823
+ "key": "attempt_id",
824
+ "value": ""
825
+ }
826
+ ]
827
+ },
828
+ "description": "Submit answer during academy exam"
829
+ },
830
+ "response": []
831
+ },
832
+ {
833
+ "name": "Submit Exam",
834
+ "request": {
835
+ "method": "POST",
836
+ "header": [
837
+ {
838
+ "key": "Content-Type",
839
+ "value": "application/json",
840
+ "type": "text"
841
+ },
842
+ {
843
+ "key": "Authorization",
844
+ "value": "Bearer {{access_token}}",
845
+ "type": "text"
846
+ }
847
+ ],
848
+ "body": {
849
+ "mode": "raw",
850
+ "raw": "{}"
851
+ },
852
+ "url": {
853
+ "raw": "{{base_url}}/api/v1/academy/:academy_slug/exam/:attempt_id/submit",
854
+ "host": ["{{base_url}}"],
855
+ "path": ["api", "v1", "academy", ":academy_slug", "exam", ":attempt_id", "submit"],
856
+ "variable": [
857
+ {
858
+ "key": "academy_slug",
859
+ "value": ""
860
+ },
861
+ {
862
+ "key": "attempt_id",
863
+ "value": ""
864
+ }
865
+ ]
866
+ },
867
+ "description": "Submit completed academy exam"
868
+ },
869
+ "response": []
870
+ }
871
+ ]
872
+ },
873
+ {
874
+ "name": "File Upload",
875
+ "item": [
876
+ {
877
+ "name": "Upload File",
878
+ "request": {
879
+ "method": "POST",
880
+ "header": [
881
+ {
882
+ "key": "Authorization",
883
+ "value": "Bearer {{access_token}}",
884
+ "type": "text"
885
+ }
886
+ ],
887
+ "body": {
888
+ "mode": "formdata",
889
+ "formdata": [
890
+ {
891
+ "key": "file",
892
+ "type": "file",
893
+ "src": ""
894
+ }
895
+ ]
896
+ },
897
+ "url": {
898
+ "raw": "{{base_url}}/api/v1/files/",
899
+ "host": ["{{base_url}}"],
900
+ "path": ["api", "v1", "files", ""]
901
+ },
902
+ "description": "Upload a file"
903
+ },
904
+ "response": []
905
+ },
906
+ {
907
+ "name": "Get File",
908
+ "request": {
909
+ "method": "GET",
910
+ "header": [
911
+ {
912
+ "key": "Authorization",
913
+ "value": "Bearer {{access_token}}",
914
+ "type": "text"
915
+ }
916
+ ],
917
+ "url": {
918
+ "raw": "{{base_url}}/api/v1/files/:id",
919
+ "host": ["{{base_url}}"],
920
+ "path": ["api", "v1", "files", ":id"],
921
+ "variable": [
922
+ {
923
+ "key": "id",
924
+ "value": ""
925
+ }
926
+ ]
927
+ },
928
+ "description": "Get file by ID"
929
+ },
930
+ "response": []
931
+ }
932
+ ]
933
+ },
934
+ {
935
+ "name": "Options & Regions",
936
+ "item": [
937
+ {
938
+ "name": "Create Options (Bulk)",
939
+ "request": {
940
+ "method": "POST",
941
+ "header": [
942
+ {
943
+ "key": "Content-Type",
944
+ "value": "application/json",
945
+ "type": "text"
946
+ }
947
+ ],
948
+ "body": {
949
+ "mode": "raw",
950
+ "raw": "{\n \"slug\": \"option_slug\",\n \"options\": [\n {\n \"name\": \"Option 1\",\n \"value\": \"value_1\"\n },\n {\n \"name\": \"Option 2\",\n \"value\": \"value_2\"\n }\n ]\n}"
951
+ },
952
+ "url": {
953
+ "raw": "{{base_url}}/api/v1/options/create",
954
+ "host": ["{{base_url}}"],
955
+ "path": ["api", "v1", "options", "create"]
956
+ },
957
+ "description": "Create options in bulk by slug"
958
+ },
959
+ "response": []
960
+ },
961
+ {
962
+ "name": "Get Options by Slug",
963
+ "request": {
964
+ "method": "GET",
965
+ "header": [],
966
+ "url": {
967
+ "raw": "{{base_url}}/api/v1/options/list/:slug",
968
+ "host": ["{{base_url}}"],
969
+ "path": ["api", "v1", "options", "list", ":slug"],
970
+ "variable": [
971
+ {
972
+ "key": "slug",
973
+ "value": ""
974
+ }
975
+ ]
976
+ },
977
+ "description": "Get options list by slug"
978
+ },
979
+ "response": []
980
+ },
981
+ {
982
+ "name": "List Provinces",
983
+ "request": {
984
+ "method": "GET",
985
+ "header": [],
986
+ "url": {
987
+ "raw": "{{base_url}}/api/v1/options/region/provinces",
988
+ "host": ["{{base_url}}"],
989
+ "path": ["api", "v1", "options", "region", "provinces"]
990
+ },
991
+ "description": "List all provinces"
992
+ },
993
+ "response": []
994
+ },
995
+ {
996
+ "name": "List Cities by Province",
997
+ "request": {
998
+ "method": "GET",
999
+ "header": [],
1000
+ "url": {
1001
+ "raw": "{{base_url}}/api/v1/options/region/cities?province_id={{province_id}}",
1002
+ "host": ["{{base_url}}"],
1003
+ "path": ["api", "v1", "options", "region", "cities"],
1004
+ "query": [
1005
+ {
1006
+ "key": "province_id",
1007
+ "value": "{{province_id}}"
1008
+ }
1009
+ ]
1010
+ },
1011
+ "description": "List cities by province ID"
1012
+ },
1013
+ "response": []
1014
+ },
1015
+ {
1016
+ "name": "Seed Provinces",
1017
+ "request": {
1018
+ "method": "POST",
1019
+ "header": [
1020
+ {
1021
+ "key": "Content-Type",
1022
+ "value": "application/json",
1023
+ "type": "text"
1024
+ }
1025
+ ],
1026
+ "body": {
1027
+ "mode": "raw",
1028
+ "raw": "{}"
1029
+ },
1030
+ "url": {
1031
+ "raw": "{{base_url}}/api/v1/options/region/seed-provinces",
1032
+ "host": ["{{base_url}}"],
1033
+ "path": ["api", "v1", "options", "region", "seed-provinces"]
1034
+ },
1035
+ "description": "Seed provinces data (admin only)"
1036
+ },
1037
+ "response": []
1038
+ },
1039
+ {
1040
+ "name": "Seed Cities",
1041
+ "request": {
1042
+ "method": "POST",
1043
+ "header": [
1044
+ {
1045
+ "key": "Content-Type",
1046
+ "value": "application/json",
1047
+ "type": "text"
1048
+ }
1049
+ ],
1050
+ "body": {
1051
+ "mode": "raw",
1052
+ "raw": "{}"
1053
+ },
1054
+ "url": {
1055
+ "raw": "{{base_url}}/api/v1/options/region/seed-cities",
1056
+ "host": ["{{base_url}}"],
1057
+ "path": ["api", "v1", "options", "region", "seed-cities"]
1058
+ },
1059
+ "description": "Seed cities data (admin only)"
1060
+ },
1061
+ "response": []
1062
+ }
1063
+ ]
1064
+ },
1065
+ {
1066
+ "name": "Admin",
1067
+ "item": [
1068
+ {
1069
+ "name": "Events Management",
1070
+ "item": [
1071
+ {
1072
+ "name": "Create Event",
1073
+ "request": {
1074
+ "method": "POST",
1075
+ "header": [
1076
+ {
1077
+ "key": "Content-Type",
1078
+ "value": "application/json",
1079
+ "type": "text"
1080
+ },
1081
+ {
1082
+ "key": "Authorization",
1083
+ "value": "Bearer {{access_token}}",
1084
+ "type": "text"
1085
+ }
1086
+ ],
1087
+ "body": {
1088
+ "mode": "raw",
1089
+ "raw": "{\n \"name\": \"Event Name\",\n \"slug\": \"event-slug\",\n \"description\": \"Event description\",\n \"start_date\": \"2024-03-15\",\n \"end_date\": \"2024-03-20\"\n}"
1090
+ },
1091
+ "url": {
1092
+ "raw": "{{base_url}}/api/v1/admin/events/",
1093
+ "host": ["{{base_url}}"],
1094
+ "path": ["api", "v1", "admin", "events", ""]
1095
+ },
1096
+ "description": "Create new event (admin)"
1097
+ },
1098
+ "response": []
1099
+ },
1100
+ {
1101
+ "name": "Update Event",
1102
+ "request": {
1103
+ "method": "PUT",
1104
+ "header": [
1105
+ {
1106
+ "key": "Content-Type",
1107
+ "value": "application/json",
1108
+ "type": "text"
1109
+ },
1110
+ {
1111
+ "key": "Authorization",
1112
+ "value": "Bearer {{access_token}}",
1113
+ "type": "text"
1114
+ }
1115
+ ],
1116
+ "body": {
1117
+ "mode": "raw",
1118
+ "raw": "{\n \"name\": \"Updated Event Name\",\n \"description\": \"Updated description\"\n}"
1119
+ },
1120
+ "url": {
1121
+ "raw": "{{base_url}}/api/v1/admin/events/:id",
1122
+ "host": ["{{base_url}}"],
1123
+ "path": ["api", "v1", "admin", "events", ":id"],
1124
+ "variable": [
1125
+ {
1126
+ "key": "id",
1127
+ "value": ""
1128
+ }
1129
+ ]
1130
+ },
1131
+ "description": "Update event (admin)"
1132
+ },
1133
+ "response": []
1134
+ },
1135
+ {
1136
+ "name": "Delete Event",
1137
+ "request": {
1138
+ "method": "DELETE",
1139
+ "header": [
1140
+ {
1141
+ "key": "Authorization",
1142
+ "value": "Bearer {{access_token}}",
1143
+ "type": "text"
1144
+ }
1145
+ ],
1146
+ "url": {
1147
+ "raw": "{{base_url}}/api/v1/admin/events/:id",
1148
+ "host": ["{{base_url}}"],
1149
+ "path": ["api", "v1", "admin", "events", ":id"],
1150
+ "variable": [
1151
+ {
1152
+ "key": "id",
1153
+ "value": ""
1154
+ }
1155
+ ]
1156
+ },
1157
+ "description": "Delete event (admin)"
1158
+ },
1159
+ "response": []
1160
+ }
1161
+ ]
1162
+ },
1163
+ {
1164
+ "name": "Academy Management",
1165
+ "item": [
1166
+ {
1167
+ "name": "Create Academy",
1168
+ "request": {
1169
+ "method": "POST",
1170
+ "header": [
1171
+ {
1172
+ "key": "Content-Type",
1173
+ "value": "application/json",
1174
+ "type": "text"
1175
+ },
1176
+ {
1177
+ "key": "Authorization",
1178
+ "value": "Bearer {{access_token}}",
1179
+ "type": "text"
1180
+ }
1181
+ ],
1182
+ "body": {
1183
+ "mode": "raw",
1184
+ "raw": "{\n \"name\": \"Academy Name\",\n \"slug\": \"academy-slug\",\n \"description\": \"Academy description\"\n}"
1185
+ },
1186
+ "url": {
1187
+ "raw": "{{base_url}}/api/v1/admin/academy/",
1188
+ "host": ["{{base_url}}"],
1189
+ "path": ["api", "v1", "admin", "academy", ""]
1190
+ },
1191
+ "description": "Create new academy (admin)"
1192
+ },
1193
+ "response": []
1194
+ },
1195
+ {
1196
+ "name": "Get Academy Detail",
1197
+ "request": {
1198
+ "method": "GET",
1199
+ "header": [
1200
+ {
1201
+ "key": "Authorization",
1202
+ "value": "Bearer {{access_token}}",
1203
+ "type": "text"
1204
+ }
1205
+ ],
1206
+ "url": {
1207
+ "raw": "{{base_url}}/api/v1/admin/academy/id/:id/detail",
1208
+ "host": ["{{base_url}}"],
1209
+ "path": ["api", "v1", "admin", "academy", "id", ":id", "detail"],
1210
+ "variable": [
1211
+ {
1212
+ "key": "id",
1213
+ "value": ""
1214
+ }
1215
+ ]
1216
+ },
1217
+ "description": "Get academy detail by ID (admin)"
1218
+ },
1219
+ "response": []
1220
+ },
1221
+ {
1222
+ "name": "Update Academy",
1223
+ "request": {
1224
+ "method": "PUT",
1225
+ "header": [
1226
+ {
1227
+ "key": "Content-Type",
1228
+ "value": "application/json",
1229
+ "type": "text"
1230
+ },
1231
+ {
1232
+ "key": "Authorization",
1233
+ "value": "Bearer {{access_token}}",
1234
+ "type": "text"
1235
+ }
1236
+ ],
1237
+ "body": {
1238
+ "mode": "raw",
1239
+ "raw": "{\n \"name\": \"Updated Academy Name\",\n \"description\": \"Updated description\"\n}"
1240
+ },
1241
+ "url": {
1242
+ "raw": "{{base_url}}/api/v1/admin/academy/id/:id",
1243
+ "host": ["{{base_url}}"],
1244
+ "path": ["api", "v1", "admin", "academy", "id", ":id"],
1245
+ "variable": [
1246
+ {
1247
+ "key": "id",
1248
+ "value": ""
1249
+ }
1250
+ ]
1251
+ },
1252
+ "description": "Update academy (admin)"
1253
+ },
1254
+ "response": []
1255
+ },
1256
+ {
1257
+ "name": "Delete Academy",
1258
+ "request": {
1259
+ "method": "DELETE",
1260
+ "header": [
1261
+ {
1262
+ "key": "Authorization",
1263
+ "value": "Bearer {{access_token}}",
1264
+ "type": "text"
1265
+ }
1266
+ ],
1267
+ "url": {
1268
+ "raw": "{{base_url}}/api/v1/admin/academy/id/:id",
1269
+ "host": ["{{base_url}}"],
1270
+ "path": ["api", "v1", "admin", "academy", "id", ":id"],
1271
+ "variable": [
1272
+ {
1273
+ "key": "id",
1274
+ "value": ""
1275
+ }
1276
+ ]
1277
+ },
1278
+ "description": "Delete academy (admin)"
1279
+ },
1280
+ "response": []
1281
+ },
1282
+ {
1283
+ "name": "Create Material",
1284
+ "request": {
1285
+ "method": "POST",
1286
+ "header": [
1287
+ {
1288
+ "key": "Content-Type",
1289
+ "value": "application/json",
1290
+ "type": "text"
1291
+ },
1292
+ {
1293
+ "key": "Authorization",
1294
+ "value": "Bearer {{access_token}}",
1295
+ "type": "text"
1296
+ }
1297
+ ],
1298
+ "body": {
1299
+ "mode": "raw",
1300
+ "raw": "{\n \"academy_id\": \"academy_id\",\n \"name\": \"Material Name\",\n \"slug\": \"material-slug\",\n \"description\": \"Material description\"\n}"
1301
+ },
1302
+ "url": {
1303
+ "raw": "{{base_url}}/api/v1/admin/academy/materials",
1304
+ "host": ["{{base_url}}"],
1305
+ "path": ["api", "v1", "admin", "academy", "materials"]
1306
+ },
1307
+ "description": "Create academy material (admin)"
1308
+ },
1309
+ "response": []
1310
+ },
1311
+ {
1312
+ "name": "Delete Material",
1313
+ "request": {
1314
+ "method": "DELETE",
1315
+ "header": [
1316
+ {
1317
+ "key": "Authorization",
1318
+ "value": "Bearer {{access_token}}",
1319
+ "type": "text"
1320
+ }
1321
+ ],
1322
+ "url": {
1323
+ "raw": "{{base_url}}/api/v1/admin/academy/materials/:id",
1324
+ "host": ["{{base_url}}"],
1325
+ "path": ["api", "v1", "admin", "academy", "materials", ":id"],
1326
+ "variable": [
1327
+ {
1328
+ "key": "id",
1329
+ "value": ""
1330
+ }
1331
+ ]
1332
+ },
1333
+ "description": "Delete academy material (admin)"
1334
+ },
1335
+ "response": []
1336
+ },
1337
+ {
1338
+ "name": "Create Content",
1339
+ "request": {
1340
+ "method": "POST",
1341
+ "header": [
1342
+ {
1343
+ "key": "Content-Type",
1344
+ "value": "application/json",
1345
+ "type": "text"
1346
+ },
1347
+ {
1348
+ "key": "Authorization",
1349
+ "value": "Bearer {{access_token}}",
1350
+ "type": "text"
1351
+ }
1352
+ ],
1353
+ "body": {
1354
+ "mode": "raw",
1355
+ "raw": "{\n \"material_id\": \"material_id\",\n \"title\": \"Content Title\",\n \"content\": \"Content data\",\n \"order\": 1\n}"
1356
+ },
1357
+ "url": {
1358
+ "raw": "{{base_url}}/api/v1/admin/academy/contents",
1359
+ "host": ["{{base_url}}"],
1360
+ "path": ["api", "v1", "admin", "academy", "contents"]
1361
+ },
1362
+ "description": "Create academy content (admin)"
1363
+ },
1364
+ "response": []
1365
+ },
1366
+ {
1367
+ "name": "Delete Content",
1368
+ "request": {
1369
+ "method": "DELETE",
1370
+ "header": [
1371
+ {
1372
+ "key": "Authorization",
1373
+ "value": "Bearer {{access_token}}",
1374
+ "type": "text"
1375
+ }
1376
+ ],
1377
+ "url": {
1378
+ "raw": "{{base_url}}/api/v1/admin/academy/contents/:id",
1379
+ "host": ["{{base_url}}"],
1380
+ "path": ["api", "v1", "admin", "academy", "contents", ":id"],
1381
+ "variable": [
1382
+ {
1383
+ "key": "id",
1384
+ "value": ""
1385
+ }
1386
+ ]
1387
+ },
1388
+ "description": "Delete academy content (admin)"
1389
+ },
1390
+ "response": []
1391
+ },
1392
+ {
1393
+ "name": "Assign Account to Academy",
1394
+ "request": {
1395
+ "method": "POST",
1396
+ "header": [
1397
+ {
1398
+ "key": "Content-Type",
1399
+ "value": "application/json",
1400
+ "type": "text"
1401
+ },
1402
+ {
1403
+ "key": "Authorization",
1404
+ "value": "Bearer {{access_token}}",
1405
+ "type": "text"
1406
+ }
1407
+ ],
1408
+ "body": {
1409
+ "mode": "raw",
1410
+ "raw": "{\n \"account_id\": \"account_id\",\n \"academy_id\": \"academy_id\"\n}"
1411
+ },
1412
+ "url": {
1413
+ "raw": "{{base_url}}/api/v1/admin/academy/assign",
1414
+ "host": ["{{base_url}}"],
1415
+ "path": ["api", "v1", "admin", "academy", "assign"]
1416
+ },
1417
+ "description": "Assign user account to academy (admin)"
1418
+ },
1419
+ "response": []
1420
+ },
1421
+ {
1422
+ "name": "Unassign Account from Academy",
1423
+ "request": {
1424
+ "method": "DELETE",
1425
+ "header": [
1426
+ {
1427
+ "key": "Authorization",
1428
+ "value": "Bearer {{access_token}}",
1429
+ "type": "text"
1430
+ }
1431
+ ],
1432
+ "url": {
1433
+ "raw": "{{base_url}}/api/v1/admin/academy/assign/:id",
1434
+ "host": ["{{base_url}}"],
1435
+ "path": ["api", "v1", "admin", "academy", "assign", ":id"],
1436
+ "variable": [
1437
+ {
1438
+ "key": "id",
1439
+ "value": ""
1440
+ }
1441
+ ]
1442
+ },
1443
+ "description": "Unassign user account from academy (admin)"
1444
+ },
1445
+ "response": []
1446
+ },
1447
+ {
1448
+ "name": "List Academy Assignments",
1449
+ "request": {
1450
+ "method": "GET",
1451
+ "header": [
1452
+ {
1453
+ "key": "Authorization",
1454
+ "value": "Bearer {{access_token}}",
1455
+ "type": "text"
1456
+ }
1457
+ ],
1458
+ "url": {
1459
+ "raw": "{{base_url}}/api/v1/admin/academy/assign/:academy_id",
1460
+ "host": ["{{base_url}}"],
1461
+ "path": ["api", "v1", "admin", "academy", "assign", ":academy_id"],
1462
+ "variable": [
1463
+ {
1464
+ "key": "academy_id",
1465
+ "value": ""
1466
+ }
1467
+ ]
1468
+ },
1469
+ "description": "List academy assignments by academy ID (admin)"
1470
+ },
1471
+ "response": []
1472
+ }
1473
+ ]
1474
+ },
1475
+ {
1476
+ "name": "Proctoring Management",
1477
+ "item": [
1478
+ {
1479
+ "name": "List Proctoring Logs",
1480
+ "request": {
1481
+ "method": "GET",
1482
+ "header": [
1483
+ {
1484
+ "key": "Authorization",
1485
+ "value": "Bearer {{access_token}}",
1486
+ "type": "text"
1487
+ }
1488
+ ],
1489
+ "url": {
1490
+ "raw": "{{base_url}}/api/v1/admin/proctoring/events/:event_slug/exam/:exam_slug/proctoring",
1491
+ "host": ["{{base_url}}"],
1492
+ "path": ["api", "v1", "admin", "proctoring", "events", ":event_slug", "exam", ":exam_slug", "proctoring"],
1493
+ "variable": [
1494
+ {
1495
+ "key": "event_slug",
1496
+ "value": ""
1497
+ },
1498
+ {
1499
+ "key": "exam_slug",
1500
+ "value": ""
1501
+ }
1502
+ ]
1503
+ },
1504
+ "description": "List proctoring logs for an exam (admin)"
1505
+ },
1506
+ "response": []
1507
+ },
1508
+ {
1509
+ "name": "Get Proctoring Log Detail",
1510
+ "request": {
1511
+ "method": "GET",
1512
+ "header": [
1513
+ {
1514
+ "key": "Authorization",
1515
+ "value": "Bearer {{access_token}}",
1516
+ "type": "text"
1517
+ }
1518
+ ],
1519
+ "url": {
1520
+ "raw": "{{base_url}}/api/v1/admin/proctoring/events/:event_slug/exam/:exam_slug/proctoring/:log_id",
1521
+ "host": ["{{base_url}}"],
1522
+ "path": ["api", "v1", "admin", "proctoring", "events", ":event_slug", "exam", ":exam_slug", "proctoring", ":log_id"],
1523
+ "variable": [
1524
+ {
1525
+ "key": "event_slug",
1526
+ "value": ""
1527
+ },
1528
+ {
1529
+ "key": "exam_slug",
1530
+ "value": ""
1531
+ },
1532
+ {
1533
+ "key": "log_id",
1534
+ "value": ""
1535
+ }
1536
+ ]
1537
+ },
1538
+ "description": "Get proctoring log detail (admin)"
1539
+ },
1540
+ "response": []
1541
+ },
1542
+ {
1543
+ "name": "Update Proctoring Log",
1544
+ "request": {
1545
+ "method": "PUT",
1546
+ "header": [
1547
+ {
1548
+ "key": "Content-Type",
1549
+ "value": "application/json",
1550
+ "type": "text"
1551
+ },
1552
+ {
1553
+ "key": "Authorization",
1554
+ "value": "Bearer {{access_token}}",
1555
+ "type": "text"
1556
+ }
1557
+ ],
1558
+ "body": {
1559
+ "mode": "raw",
1560
+ "raw": "{\n \"status\": \"reviewed\",\n \"notes\": \"Proctoring notes\"\n}"
1561
+ },
1562
+ "url": {
1563
+ "raw": "{{base_url}}/api/v1/admin/proctoring/events/:event_slug/exam/:exam_slug/proctoring/:log_id",
1564
+ "host": ["{{base_url}}"],
1565
+ "path": ["api", "v1", "admin", "proctoring", "events", ":event_slug", "exam", ":exam_slug", "proctoring", ":log_id"],
1566
+ "variable": [
1567
+ {
1568
+ "key": "event_slug",
1569
+ "value": ""
1570
+ },
1571
+ {
1572
+ "key": "exam_slug",
1573
+ "value": ""
1574
+ },
1575
+ {
1576
+ "key": "log_id",
1577
+ "value": ""
1578
+ }
1579
+ ]
1580
+ },
1581
+ "description": "Update proctoring log (admin)"
1582
+ },
1583
+ "response": []
1584
+ },
1585
+ {
1586
+ "name": "Delete Proctoring Log",
1587
+ "request": {
1588
+ "method": "DELETE",
1589
+ "header": [
1590
+ {
1591
+ "key": "Authorization",
1592
+ "value": "Bearer {{access_token}}",
1593
+ "type": "text"
1594
+ }
1595
+ ],
1596
+ "url": {
1597
+ "raw": "{{base_url}}/api/v1/admin/proctoring/events/:event_slug/exam/:exam_slug/proctoring/:log_id",
1598
+ "host": ["{{base_url}}"],
1599
+ "path": ["api", "v1", "admin", "proctoring", "events", ":event_slug", "exam", ":exam_slug", "proctoring", ":log_id"],
1600
+ "variable": [
1601
+ {
1602
+ "key": "event_slug",
1603
+ "value": ""
1604
+ },
1605
+ {
1606
+ "key": "exam_slug",
1607
+ "value": ""
1608
+ },
1609
+ {
1610
+ "key": "log_id",
1611
+ "value": ""
1612
+ }
1613
+ ]
1614
+ },
1615
+ "description": "Delete proctoring log (admin)"
1616
+ },
1617
+ "response": []
1618
+ }
1619
+ ]
1620
+ }
1621
+ ]
1622
+ },
1623
+ {
1624
+ "name": "Exam Management",
1625
+ "item": [
1626
+ {
1627
+ "name": "Create Exam",
1628
+ "request": {
1629
+ "method": "POST",
1630
+ "header": [
1631
+ {
1632
+ "key": "Content-Type",
1633
+ "value": "application/json",
1634
+ "type": "text"
1635
+ },
1636
+ {
1637
+ "key": "Authorization",
1638
+ "value": "Bearer {{access_token}}",
1639
+ "type": "text"
1640
+ }
1641
+ ],
1642
+ "body": {
1643
+ "mode": "raw",
1644
+ "raw": "{\n \"title\": \"Exam Title\",\n \"slug\": \"exam-slug\",\n \"description\": \"Exam description\",\n \"duration_minutes\": 120\n}"
1645
+ },
1646
+ "url": {
1647
+ "raw": "{{base_url}}/api/v1/admin/exam",
1648
+ "host": ["{{base_url}}"],
1649
+ "path": ["api", "v1", "admin", "exam"]
1650
+ },
1651
+ "description": "Create new exam (admin)"
1652
+ },
1653
+ "response": []
1654
+ },
1655
+ {
1656
+ "name": "List Exams",
1657
+ "request": {
1658
+ "method": "GET",
1659
+ "header": [
1660
+ {
1661
+ "key": "Authorization",
1662
+ "value": "Bearer {{access_token}}",
1663
+ "type": "text"
1664
+ }
1665
+ ],
1666
+ "url": {
1667
+ "raw": "{{base_url}}/api/v1/admin/exam",
1668
+ "host": ["{{base_url}}"],
1669
+ "path": ["api", "v1", "admin", "exam"]
1670
+ },
1671
+ "description": "List all exams (admin)"
1672
+ },
1673
+ "response": []
1674
+ },
1675
+ {
1676
+ "name": "Update Exam",
1677
+ "request": {
1678
+ "method": "PUT",
1679
+ "header": [
1680
+ {
1681
+ "key": "Content-Type",
1682
+ "value": "application/json",
1683
+ "type": "text"
1684
+ },
1685
+ {
1686
+ "key": "Authorization",
1687
+ "value": "Bearer {{access_token}}",
1688
+ "type": "text"
1689
+ }
1690
+ ],
1691
+ "body": {
1692
+ "mode": "raw",
1693
+ "raw": "{\n \"title\": \"Updated Exam Title\",\n \"description\": \"Updated description\"\n}"
1694
+ },
1695
+ "url": {
1696
+ "raw": "{{base_url}}/api/v1/admin/exam/:id",
1697
+ "host": ["{{base_url}}"],
1698
+ "path": ["api", "v1", "admin", "exam", ":id"],
1699
+ "variable": [
1700
+ {
1701
+ "key": "id",
1702
+ "value": ""
1703
+ }
1704
+ ]
1705
+ },
1706
+ "description": "Update exam (admin)"
1707
+ },
1708
+ "response": []
1709
+ },
1710
+ {
1711
+ "name": "Delete Exam",
1712
+ "request": {
1713
+ "method": "DELETE",
1714
+ "header": [
1715
+ {
1716
+ "key": "Authorization",
1717
+ "value": "Bearer {{access_token}}",
1718
+ "type": "text"
1719
+ }
1720
+ ],
1721
+ "url": {
1722
+ "raw": "{{base_url}}/api/v1/admin/exam/:id",
1723
+ "host": ["{{base_url}}"],
1724
+ "path": ["api", "v1", "admin", "exam", ":id"],
1725
+ "variable": [
1726
+ {
1727
+ "key": "id",
1728
+ "value": ""
1729
+ }
1730
+ ]
1731
+ },
1732
+ "description": "Delete exam (admin)"
1733
+ },
1734
+ "response": []
1735
+ },
1736
+ {
1737
+ "name": "Get Exam Detail",
1738
+ "request": {
1739
+ "method": "GET",
1740
+ "header": [
1741
+ {
1742
+ "key": "Authorization",
1743
+ "value": "Bearer {{access_token}}",
1744
+ "type": "text"
1745
+ }
1746
+ ],
1747
+ "url": {
1748
+ "raw": "{{base_url}}/api/v1/admin/exam/:id",
1749
+ "host": ["{{base_url}}"],
1750
+ "path": ["api", "v1", "admin", "exam", ":id"],
1751
+ "variable": [
1752
+ {
1753
+ "key": "id",
1754
+ "value": ""
1755
+ }
1756
+ ]
1757
+ },
1758
+ "description": "Get exam detail (admin)"
1759
+ },
1760
+ "response": []
1761
+ },
1762
+ {
1763
+ "name": "Assign Exam to Event",
1764
+ "request": {
1765
+ "method": "POST",
1766
+ "header": [
1767
+ {
1768
+ "key": "Content-Type",
1769
+ "value": "application/json",
1770
+ "type": "text"
1771
+ },
1772
+ {
1773
+ "key": "Authorization",
1774
+ "value": "Bearer {{access_token}}",
1775
+ "type": "text"
1776
+ }
1777
+ ],
1778
+ "body": {
1779
+ "mode": "raw",
1780
+ "raw": "{}"
1781
+ },
1782
+ "url": {
1783
+ "raw": "{{base_url}}/api/v1/admin/exam/:exam_id/event/:event_id",
1784
+ "host": ["{{base_url}}"],
1785
+ "path": ["api", "v1", "admin", "exam", ":exam_id", "event", ":event_id"],
1786
+ "variable": [
1787
+ {
1788
+ "key": "exam_id",
1789
+ "value": ""
1790
+ },
1791
+ {
1792
+ "key": "event_id",
1793
+ "value": ""
1794
+ }
1795
+ ]
1796
+ },
1797
+ "description": "Assign exam to event (admin)"
1798
+ },
1799
+ "response": []
1800
+ },
1801
+ {
1802
+ "name": "Assign Exam to Academy",
1803
+ "request": {
1804
+ "method": "POST",
1805
+ "header": [
1806
+ {
1807
+ "key": "Content-Type",
1808
+ "value": "application/json",
1809
+ "type": "text"
1810
+ },
1811
+ {
1812
+ "key": "Authorization",
1813
+ "value": "Bearer {{access_token}}",
1814
+ "type": "text"
1815
+ }
1816
+ ],
1817
+ "body": {
1818
+ "mode": "raw",
1819
+ "raw": "{}"
1820
+ },
1821
+ "url": {
1822
+ "raw": "{{base_url}}/api/v1/admin/exam/:exam_id/academy/:academy_id",
1823
+ "host": ["{{base_url}}"],
1824
+ "path": ["api", "v1", "admin", "exam", ":exam_id", "academy", ":academy_id"],
1825
+ "variable": [
1826
+ {
1827
+ "key": "exam_id",
1828
+ "value": ""
1829
+ },
1830
+ {
1831
+ "key": "academy_id",
1832
+ "value": ""
1833
+ }
1834
+ ]
1835
+ },
1836
+ "description": "Assign exam to academy (admin)"
1837
+ },
1838
+ "response": []
1839
+ }
1840
+ ]
1841
+ },
1842
+ {
1843
+ "name": "Super Admin",
1844
+ "item": [
1845
+ {
1846
+ "name": "Users Management",
1847
+ "item": [
1848
+ {
1849
+ "name": "List Users",
1850
+ "request": {
1851
+ "method": "GET",
1852
+ "header": [
1853
+ {
1854
+ "key": "Authorization",
1855
+ "value": "Bearer {{access_token}}",
1856
+ "type": "text"
1857
+ }
1858
+ ],
1859
+ "url": {
1860
+ "raw": "{{base_url}}/api/v1/super-admin/users/",
1861
+ "host": ["{{base_url}}"],
1862
+ "path": ["api", "v1", "super-admin", "users", ""]
1863
+ },
1864
+ "description": "List all users (super admin)"
1865
+ },
1866
+ "response": []
1867
+ },
1868
+ {
1869
+ "name": "Create User",
1870
+ "request": {
1871
+ "method": "POST",
1872
+ "header": [
1873
+ {
1874
+ "key": "Content-Type",
1875
+ "value": "application/json",
1876
+ "type": "text"
1877
+ },
1878
+ {
1879
+ "key": "Authorization",
1880
+ "value": "Bearer {{access_token}}",
1881
+ "type": "text"
1882
+ }
1883
+ ],
1884
+ "body": {
1885
+ "mode": "raw",
1886
+ "raw": "{\n \"email\": \"newuser@example.com\",\n \"password\": \"password123\",\n \"full_name\": \"New User\",\n \"role\": \"user\"\n}"
1887
+ },
1888
+ "url": {
1889
+ "raw": "{{base_url}}/api/v1/super-admin/users/",
1890
+ "host": ["{{base_url}}"],
1891
+ "path": ["api", "v1", "super-admin", "users", ""]
1892
+ },
1893
+ "description": "Create user (super admin)"
1894
+ },
1895
+ "response": []
1896
+ },
1897
+ {
1898
+ "name": "Bulk Create Users",
1899
+ "request": {
1900
+ "method": "POST",
1901
+ "header": [
1902
+ {
1903
+ "key": "Content-Type",
1904
+ "value": "application/json",
1905
+ "type": "text"
1906
+ },
1907
+ {
1908
+ "key": "Authorization",
1909
+ "value": "Bearer {{access_token}}",
1910
+ "type": "text"
1911
+ }
1912
+ ],
1913
+ "body": {
1914
+ "mode": "raw",
1915
+ "raw": "{\n \"users\": [\n {\n \"email\": \"user1@example.com\",\n \"password\": \"password123\",\n \"full_name\": \"User One\",\n \"role\": \"user\"\n },\n {\n \"email\": \"user2@example.com\",\n \"password\": \"password123\",\n \"full_name\": \"User Two\",\n \"role\": \"user\"\n }\n ]\n}"
1916
+ },
1917
+ "url": {
1918
+ "raw": "{{base_url}}/api/v1/super-admin/users/bulk",
1919
+ "host": ["{{base_url}}"],
1920
+ "path": ["api", "v1", "super-admin", "users", "bulk"]
1921
+ },
1922
+ "description": "Create multiple users at once (super admin)"
1923
+ },
1924
+ "response": []
1925
+ },
1926
+ {
1927
+ "name": "Update User",
1928
+ "request": {
1929
+ "method": "PUT",
1930
+ "header": [
1931
+ {
1932
+ "key": "Content-Type",
1933
+ "value": "application/json",
1934
+ "type": "text"
1935
+ },
1936
+ {
1937
+ "key": "Authorization",
1938
+ "value": "Bearer {{access_token}}",
1939
+ "type": "text"
1940
+ }
1941
+ ],
1942
+ "body": {
1943
+ "mode": "raw",
1944
+ "raw": "{\n \"full_name\": \"Updated Name\",\n \"email\": \"newemail@example.com\"\n}"
1945
+ },
1946
+ "url": {
1947
+ "raw": "{{base_url}}/api/v1/super-admin/users/:id",
1948
+ "host": ["{{base_url}}"],
1949
+ "path": ["api", "v1", "super-admin", "users", ":id"],
1950
+ "variable": [
1951
+ {
1952
+ "key": "id",
1953
+ "value": ""
1954
+ }
1955
+ ]
1956
+ },
1957
+ "description": "Update user (super admin)"
1958
+ },
1959
+ "response": []
1960
+ },
1961
+ {
1962
+ "name": "Delete User",
1963
+ "request": {
1964
+ "method": "DELETE",
1965
+ "header": [
1966
+ {
1967
+ "key": "Authorization",
1968
+ "value": "Bearer {{access_token}}",
1969
+ "type": "text"
1970
+ }
1971
+ ],
1972
+ "url": {
1973
+ "raw": "{{base_url}}/api/v1/super-admin/users/:id",
1974
+ "host": ["{{base_url}}"],
1975
+ "path": ["api", "v1", "super-admin", "users", ":id"],
1976
+ "variable": [
1977
+ {
1978
+ "key": "id",
1979
+ "value": ""
1980
+ }
1981
+ ]
1982
+ },
1983
+ "description": "Delete user (super admin)"
1984
+ },
1985
+ "response": []
1986
+ }
1987
+ ]
1988
+ },
1989
+ {
1990
+ "name": "Authentication Management",
1991
+ "item": [
1992
+ {
1993
+ "name": "Update User Role",
1994
+ "request": {
1995
+ "method": "PUT",
1996
+ "header": [
1997
+ {
1998
+ "key": "Content-Type",
1999
+ "value": "application/json",
2000
+ "type": "text"
2001
+ },
2002
+ {
2003
+ "key": "Authorization",
2004
+ "value": "Bearer {{access_token}}",
2005
+ "type": "text"
2006
+ }
2007
+ ],
2008
+ "body": {
2009
+ "mode": "raw",
2010
+ "raw": "{\n \"role\": \"admin\"\n}"
2011
+ },
2012
+ "url": {
2013
+ "raw": "{{base_url}}/api/v1/admin/authentication/:account_id/assign",
2014
+ "host": ["{{base_url}}"],
2015
+ "path": ["api", "v1", "admin", "authentication", ":account_id", "assign"],
2016
+ "variable": [
2017
+ {
2018
+ "key": "account_id",
2019
+ "value": ""
2020
+ }
2021
+ ]
2022
+ },
2023
+ "description": "Update user role (super admin)"
2024
+ },
2025
+ "response": []
2026
+ }
2027
+ ]
2028
+ }
2029
+ ]
2030
+ },
2031
+ {
2032
+ "name": "Payment",
2033
+ "item": [
2034
+ {
2035
+ "name": "Payment Callback",
2036
+ "request": {
2037
+ "method": "POST",
2038
+ "header": [
2039
+ {
2040
+ "key": "Content-Type",
2041
+ "value": "application/json",
2042
+ "type": "text"
2043
+ }
2044
+ ],
2045
+ "body": {
2046
+ "mode": "raw",
2047
+ "raw": "{\n \"transaction_id\": \"txn_id\",\n \"status\": \"success\",\n \"amount\": 100000,\n \"timestamp\": \"2024-03-15T10:30:00Z\"\n}"
2048
+ },
2049
+ "url": {
2050
+ "raw": "{{base_url}}/api/v1/payment/callback",
2051
+ "host": ["{{base_url}}"],
2052
+ "path": ["api", "v1", "payment", "callback"]
2053
+ },
2054
+ "description": "Handle payment callback from payment gateway"
2055
+ },
2056
+ "response": []
2057
+ }
2058
+ ]
2059
+ }
2060
+ ],
2061
+ "variable": [
2062
+ {
2063
+ "key": "base_url",
2064
+ "value": "http://localhost:8080",
2065
+ "type": "string"
2066
+ },
2067
+ {
2068
+ "key": "access_token",
2069
+ "value": "your_jwt_token_here",
2070
+ "type": "string"
2071
+ },
2072
+ {
2073
+ "key": "province_id",
2074
+ "value": "",
2075
+ "type": "string"
2076
+ }
2077
+ ]
2078
+ }
Quzuu_Dev_Environment.postman_environment.json ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "Quzuu Development",
3
+ "values": [
4
+ {
5
+ "key": "base_url",
6
+ "value": "http://localhost:8080",
7
+ "enabled": true,
8
+ "type": "default"
9
+ },
10
+ {
11
+ "key": "access_token",
12
+ "value": "",
13
+ "enabled": true,
14
+ "type": "secret"
15
+ },
16
+ {
17
+ "key": "province_id",
18
+ "value": "",
19
+ "enabled": true,
20
+ "type": "default"
21
+ },
22
+ {
23
+ "key": "account_id",
24
+ "value": "",
25
+ "enabled": true,
26
+ "type": "default"
27
+ },
28
+ {
29
+ "key": "event_id",
30
+ "value": "",
31
+ "enabled": true,
32
+ "type": "default"
33
+ },
34
+ {
35
+ "key": "event_slug",
36
+ "value": "",
37
+ "enabled": true,
38
+ "type": "default"
39
+ },
40
+ {
41
+ "key": "academy_id",
42
+ "value": "",
43
+ "enabled": true,
44
+ "type": "default"
45
+ },
46
+ {
47
+ "key": "academy_slug",
48
+ "value": "",
49
+ "enabled": true,
50
+ "type": "default"
51
+ },
52
+ {
53
+ "key": "exam_id",
54
+ "value": "",
55
+ "enabled": true,
56
+ "type": "default"
57
+ },
58
+ {
59
+ "key": "exam_slug",
60
+ "value": "",
61
+ "enabled": true,
62
+ "type": "default"
63
+ },
64
+ {
65
+ "key": "attempt_id",
66
+ "value": "",
67
+ "enabled": true,
68
+ "type": "default"
69
+ },
70
+ {
71
+ "key": "material_slug",
72
+ "value": "",
73
+ "enabled": true,
74
+ "type": "default"
75
+ },
76
+ {
77
+ "key": "order",
78
+ "value": "",
79
+ "enabled": true,
80
+ "type": "default"
81
+ },
82
+ {
83
+ "key": "log_id",
84
+ "value": "",
85
+ "enabled": true,
86
+ "type": "default"
87
+ },
88
+ {
89
+ "key": "file_id",
90
+ "value": "",
91
+ "enabled": true,
92
+ "type": "default"
93
+ }
94
+ ],
95
+ "_postman_variable_scope": "environment",
96
+ "_postman_exported_at": "2024-03-10T00:00:00.000Z",
97
+ "_postman_exported_using": "Postman/v11.0.0"
98
+ }
controllers/user_controller.go CHANGED
@@ -1,7 +1,10 @@
1
  package controllers
2
 
3
  import (
 
 
4
  "abdanhafidz.com/go-boilerplate/models/dto"
 
5
  http_error "abdanhafidz.com/go-boilerplate/models/error"
6
  "abdanhafidz.com/go-boilerplate/services"
7
  "github.com/gin-gonic/gin"
@@ -26,17 +29,52 @@ func NewUserController(accountService services.AccountService) UserController {
26
 
27
  // ListUsers godoc
28
  // @Summary List All Users
29
- // @Description Retrieve a list of all users in the system
30
  // @Tags Admin Users
31
  // @Accept json
32
  // @Produce json
33
  // @Security BearerAuth
 
 
 
34
  // @Success 200 {object} dto.SuccessResponse[[]dto.UserResponse]
35
  // @Failure 401 {object} dto.ErrorResponse
36
  // @Failure 403 {object} dto.ErrorResponse
37
- // @Router /api/v1/admin/users [get]
38
  func (c *userController) ListUsers(ctx *gin.Context) {
39
- accounts, err := c.accountService.GetAllAccounts(ctx.Request.Context())
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  if err != nil {
41
  ResponseJSON(ctx, gin.H{}, []dto.UserResponse{}, err)
42
  return
@@ -55,7 +93,25 @@ func (c *userController) ListUsers(ctx *gin.Context) {
55
  })
56
  }
57
 
58
- ResponseJSON(ctx, gin.H{}, users, nil)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  }
60
 
61
  // CreateUser godoc
@@ -70,7 +126,7 @@ func (c *userController) ListUsers(ctx *gin.Context) {
70
  // @Failure 400 {object} dto.ErrorResponse
71
  // @Failure 401 {object} dto.ErrorResponse
72
  // @Failure 403 {object} dto.ErrorResponse
73
- // @Router /api/v1/admin/users [post]
74
  func (c *userController) CreateUser(ctx *gin.Context) {
75
  req := RequestJSON[dto.CreateUserRequest](ctx)
76
 
@@ -111,7 +167,7 @@ func (c *userController) CreateUser(ctx *gin.Context) {
111
  // @Failure 400 {object} dto.ErrorResponse
112
  // @Failure 401 {object} dto.ErrorResponse
113
  // @Failure 403 {object} dto.ErrorResponse
114
- // @Router /api/v1/admin/users/bulk [post]
115
  func (c *userController) BulkCreateUsers(ctx *gin.Context) {
116
  var requests []dto.CreateUserRequest
117
  if err := ctx.ShouldBindJSON(&requests); err != nil {
@@ -138,7 +194,7 @@ func (c *userController) BulkCreateUsers(ctx *gin.Context) {
138
  // @Failure 401 {object} dto.ErrorResponse
139
  // @Failure 403 {object} dto.ErrorResponse
140
  // @Failure 404 {object} dto.ErrorResponse
141
- // @Router /api/v1/admin/users/{id} [put]
142
  func (c *userController) UpdateUser(ctx *gin.Context) {
143
  idParam := ctx.Param("id")
144
  userId, err := uuid.Parse(idParam)
@@ -198,7 +254,7 @@ func (c *userController) UpdateUser(ctx *gin.Context) {
198
  // @Failure 401 {object} dto.ErrorResponse
199
  // @Failure 403 {object} dto.ErrorResponse
200
  // @Failure 404 {object} dto.ErrorResponse
201
- // @Router /api/v1/admin/users/{id} [delete]
202
  func (c *userController) DeleteUser(ctx *gin.Context) {
203
  idParam := ctx.Param("id")
204
  userId, err := uuid.Parse(idParam)
 
1
  package controllers
2
 
3
  import (
4
+ "strconv"
5
+
6
  "abdanhafidz.com/go-boilerplate/models/dto"
7
+ entity "abdanhafidz.com/go-boilerplate/models/entity"
8
  http_error "abdanhafidz.com/go-boilerplate/models/error"
9
  "abdanhafidz.com/go-boilerplate/services"
10
  "github.com/gin-gonic/gin"
 
29
 
30
  // ListUsers godoc
31
  // @Summary List All Users
32
+ // @Description Retrieve a paginated list of users with optional role filter
33
  // @Tags Admin Users
34
  // @Accept json
35
  // @Produce json
36
  // @Security BearerAuth
37
+ // @Param page query int false "Page number" default(1)
38
+ // @Param limit query int false "Number of items per page" default(10)
39
+ // @Param role query string false "Filter by role (user, admin, super admin)"
40
  // @Success 200 {object} dto.SuccessResponse[[]dto.UserResponse]
41
  // @Failure 401 {object} dto.ErrorResponse
42
  // @Failure 403 {object} dto.ErrorResponse
43
+ // @Router /api/v1/super-admin/users [get]
44
  func (c *userController) ListUsers(ctx *gin.Context) {
45
+ limit, _ := strconv.Atoi(ctx.DefaultQuery("limit", "10"))
46
+ page, _ := strconv.Atoi(ctx.DefaultQuery("page", "1"))
47
+ role := ctx.DefaultQuery("role", "user")
48
+
49
+ if limit < 1 {
50
+ limit = 1
51
+ } else if limit > 50 {
52
+ limit = 50
53
+ }
54
+
55
+ if page < 1 {
56
+ page = 1
57
+ }
58
+
59
+ validRoles := map[string]bool{
60
+ "user": true,
61
+ "admin": true,
62
+ "super_admin": true,
63
+ }
64
+
65
+ if role != "" && !validRoles[role] {
66
+ ResponseJSON(ctx, gin.H{}, []dto.UserResponse{}, http_error.BAD_REQUEST_ERROR)
67
+ return
68
+ }
69
+
70
+ offset := (page - 1) * limit
71
+ p := entity.Pagination{
72
+ Limit: limit,
73
+ Offset: offset,
74
+ Role: role,
75
+ }
76
+
77
+ accounts, total, err := c.accountService.GetAllAccountsWithPagination(ctx.Request.Context(), p)
78
  if err != nil {
79
  ResponseJSON(ctx, gin.H{}, []dto.UserResponse{}, err)
80
  return
 
93
  })
94
  }
95
 
96
+ var totalPages int
97
+ if total == 0 {
98
+ totalPages = 1
99
+ } else {
100
+ totalPages = int((total + int64(limit) - 1) / int64(limit))
101
+ }
102
+
103
+ if page > totalPages {
104
+ page = totalPages
105
+ }
106
+
107
+ meta := gin.H{
108
+ "totalItems": total,
109
+ "totalPages": totalPages,
110
+ "currentPage": page,
111
+ "limit": limit,
112
+ }
113
+
114
+ ResponseJSON(ctx, meta, users, nil)
115
  }
116
 
117
  // CreateUser godoc
 
126
  // @Failure 400 {object} dto.ErrorResponse
127
  // @Failure 401 {object} dto.ErrorResponse
128
  // @Failure 403 {object} dto.ErrorResponse
129
+ // @Router /api/v1/super-admin/users [post]
130
  func (c *userController) CreateUser(ctx *gin.Context) {
131
  req := RequestJSON[dto.CreateUserRequest](ctx)
132
 
 
167
  // @Failure 400 {object} dto.ErrorResponse
168
  // @Failure 401 {object} dto.ErrorResponse
169
  // @Failure 403 {object} dto.ErrorResponse
170
+ // @Router /api/v1/super-admin/users/bulk [post]
171
  func (c *userController) BulkCreateUsers(ctx *gin.Context) {
172
  var requests []dto.CreateUserRequest
173
  if err := ctx.ShouldBindJSON(&requests); err != nil {
 
194
  // @Failure 401 {object} dto.ErrorResponse
195
  // @Failure 403 {object} dto.ErrorResponse
196
  // @Failure 404 {object} dto.ErrorResponse
197
+ // @Router /api/v1/super-admin/users/{id} [put]
198
  func (c *userController) UpdateUser(ctx *gin.Context) {
199
  idParam := ctx.Param("id")
200
  userId, err := uuid.Parse(idParam)
 
254
  // @Failure 401 {object} dto.ErrorResponse
255
  // @Failure 403 {object} dto.ErrorResponse
256
  // @Failure 404 {object} dto.ErrorResponse
257
+ // @Router /api/v1/super-admin/users/{id} [delete]
258
  func (c *userController) DeleteUser(ctx *gin.Context) {
259
  idParam := ctx.Param("id")
260
  userId, err := uuid.Parse(idParam)
models/entity/constant.go CHANGED
@@ -29,4 +29,5 @@ type Pagination struct {
29
  Order string
30
  RegisterStatus *int
31
  Status *string
 
32
  }
 
29
  Order string
30
  RegisterStatus *int
31
  Status *string
32
+ Role string
33
  }
provider/provider.go CHANGED
@@ -29,6 +29,7 @@ func NewAppProvider() AppProvider {
29
 
30
  log.Println("[BOOT] Creating Gin Router")
31
  ginRouter := gin.Default()
 
32
 
33
  log.Println("[BOOT] Initializing Config Provider")
34
  configProvider := NewConfigProvider()
 
29
 
30
  log.Println("[BOOT] Creating Gin Router")
31
  ginRouter := gin.Default()
32
+ ginRouter.SetTrustedProxies(nil)
33
 
34
  log.Println("[BOOT] Initializing Config Provider")
35
  configProvider := NewConfigProvider()
repositories/account_repository.go CHANGED
@@ -14,6 +14,7 @@ type AccountRepository interface {
14
  GetAccountByEmail(ctx context.Context, email string) (entity.Account, error)
15
  GetAccountByUsername(ctx context.Context, username string) (entity.Account, error)
16
  GetAllaccount(ctx context.Context) ([]entity.Account, error)
 
17
  UpdateAccount(ctx context.Context, account entity.Account) (entity.Account, error)
18
  SoftDeleteAccount(ctx context.Context, accountId uuid.UUID) error
19
  DeleteAccount(ctx context.Context, accountId uuid.UUID) error
@@ -66,6 +67,27 @@ func (r *accountRepository) GetAllaccount(ctx context.Context) ([]entity.Account
66
  return account, nil
67
  }
68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  func (r *accountRepository) UpdateAccount(ctx context.Context, account entity.Account) (entity.Account, error) {
70
  if err := r.db.WithContext(ctx).Save(&account).Error; err != nil {
71
  return entity.Account{}, err
 
14
  GetAccountByEmail(ctx context.Context, email string) (entity.Account, error)
15
  GetAccountByUsername(ctx context.Context, username string) (entity.Account, error)
16
  GetAllaccount(ctx context.Context) ([]entity.Account, error)
17
+ GetAllAccountsWithPagination(ctx context.Context, pagination entity.Pagination) ([]entity.Account, int64, error)
18
  UpdateAccount(ctx context.Context, account entity.Account) (entity.Account, error)
19
  SoftDeleteAccount(ctx context.Context, accountId uuid.UUID) error
20
  DeleteAccount(ctx context.Context, accountId uuid.UUID) error
 
67
  return account, nil
68
  }
69
 
70
+ func (r *accountRepository) GetAllAccountsWithPagination(ctx context.Context, pagination entity.Pagination) ([]entity.Account, int64, error) {
71
+ var accounts []entity.Account
72
+ var total int64
73
+
74
+ query := r.db.WithContext(ctx)
75
+
76
+ if pagination.Role != "" {
77
+ query = query.Where("role = ?", pagination.Role)
78
+ }
79
+
80
+ if err := query.Model(&entity.Account{}).Count(&total).Error; err != nil {
81
+ return nil, 0, err
82
+ }
83
+
84
+ if err := query.Limit(pagination.Limit).Offset(pagination.Offset).Find(&accounts).Error; err != nil {
85
+ return nil, 0, err
86
+ }
87
+
88
+ return accounts, total, nil
89
+ }
90
+
91
  func (r *accountRepository) UpdateAccount(ctx context.Context, account entity.Account) (entity.Account, error) {
92
  if err := r.db.WithContext(ctx).Save(&account).Error; err != nil {
93
  return entity.Account{}, err
services/account_service.go CHANGED
@@ -27,6 +27,7 @@ type AccountService interface {
27
  CreateEmptyDetail(ctx context.Context, accountId uuid.UUID) (dto.AccountDetailResponse, error)
28
  UpdateDetail(ctx context.Context, details entity.AccountDetail) (dto.AccountDetailResponse, error)
29
  GetAllAccounts(ctx context.Context) ([]entity.Account, error)
 
30
  BulkCreateAccounts(ctx context.Context, requests []dto.CreateUserRequest) (dto.BulkCreateUserResponse, error)
31
  DeleteAccount(ctx context.Context, accountId uuid.UUID) error
32
  }
@@ -208,6 +209,10 @@ func (s *accountService) GetAllAccounts(ctx context.Context) ([]entity.Account,
208
  return s.accountRepo.GetAllaccount(ctx)
209
  }
210
 
 
 
 
 
211
  func (s *accountService) BulkCreateAccounts(ctx context.Context, requests []dto.CreateUserRequest) (dto.BulkCreateUserResponse, error) {
212
  response := dto.BulkCreateUserResponse{
213
  SuccessCount: 0,
 
27
  CreateEmptyDetail(ctx context.Context, accountId uuid.UUID) (dto.AccountDetailResponse, error)
28
  UpdateDetail(ctx context.Context, details entity.AccountDetail) (dto.AccountDetailResponse, error)
29
  GetAllAccounts(ctx context.Context) ([]entity.Account, error)
30
+ GetAllAccountsWithPagination(ctx context.Context, pagination entity.Pagination) ([]entity.Account, int64, error)
31
  BulkCreateAccounts(ctx context.Context, requests []dto.CreateUserRequest) (dto.BulkCreateUserResponse, error)
32
  DeleteAccount(ctx context.Context, accountId uuid.UUID) error
33
  }
 
209
  return s.accountRepo.GetAllaccount(ctx)
210
  }
211
 
212
+ func (s *accountService) GetAllAccountsWithPagination(ctx context.Context, pagination entity.Pagination) ([]entity.Account, int64, error) {
213
+ return s.accountRepo.GetAllAccountsWithPagination(ctx, pagination)
214
+ }
215
+
216
  func (s *accountService) BulkCreateAccounts(ctx context.Context, requests []dto.CreateUserRequest) (dto.BulkCreateUserResponse, error) {
217
  response := dto.BulkCreateUserResponse{
218
  SuccessCount: 0,
swag.json CHANGED
@@ -14,7 +14,6 @@
14
  "host": "",
15
  "basePath": "/",
16
  "schemes": [
17
- "http",
18
  "https"
19
  ],
20
  "consumes": [
 
14
  "host": "",
15
  "basePath": "/",
16
  "schemes": [
 
17
  "https"
18
  ],
19
  "consumes": [
swagger/docs/docs.go CHANGED
@@ -1488,290 +1488,6 @@ const docTemplate = `{
1488
  }
1489
  }
1490
  },
1491
- "/api/v1/admin/users": {
1492
- "get": {
1493
- "security": [
1494
- {
1495
- "BearerAuth": []
1496
- }
1497
- ],
1498
- "description": "Retrieve a list of all users in the system",
1499
- "consumes": [
1500
- "application/json"
1501
- ],
1502
- "produces": [
1503
- "application/json"
1504
- ],
1505
- "tags": [
1506
- "Admin Users"
1507
- ],
1508
- "summary": "List All Users",
1509
- "responses": {
1510
- "200": {
1511
- "description": "OK",
1512
- "schema": {
1513
- "$ref": "#/definitions/dto.SuccessResponse-array_dto_UserResponse"
1514
- }
1515
- },
1516
- "401": {
1517
- "description": "Unauthorized",
1518
- "schema": {
1519
- "$ref": "#/definitions/dto.ErrorResponse"
1520
- }
1521
- },
1522
- "403": {
1523
- "description": "Forbidden",
1524
- "schema": {
1525
- "$ref": "#/definitions/dto.ErrorResponse"
1526
- }
1527
- }
1528
- }
1529
- },
1530
- "post": {
1531
- "security": [
1532
- {
1533
- "BearerAuth": []
1534
- }
1535
- ],
1536
- "description": "Create a new user account by providing user details",
1537
- "consumes": [
1538
- "application/json"
1539
- ],
1540
- "produces": [
1541
- "application/json"
1542
- ],
1543
- "tags": [
1544
- "Admin Users"
1545
- ],
1546
- "summary": "Create Single User",
1547
- "parameters": [
1548
- {
1549
- "description": "Create User Request",
1550
- "name": "request",
1551
- "in": "body",
1552
- "required": true,
1553
- "schema": {
1554
- "$ref": "#/definitions/dto.CreateUserRequest"
1555
- }
1556
- }
1557
- ],
1558
- "responses": {
1559
- "200": {
1560
- "description": "OK",
1561
- "schema": {
1562
- "$ref": "#/definitions/dto.SuccessResponse-dto_UserResponse"
1563
- }
1564
- },
1565
- "400": {
1566
- "description": "Bad Request",
1567
- "schema": {
1568
- "$ref": "#/definitions/dto.ErrorResponse"
1569
- }
1570
- },
1571
- "401": {
1572
- "description": "Unauthorized",
1573
- "schema": {
1574
- "$ref": "#/definitions/dto.ErrorResponse"
1575
- }
1576
- },
1577
- "403": {
1578
- "description": "Forbidden",
1579
- "schema": {
1580
- "$ref": "#/definitions/dto.ErrorResponse"
1581
- }
1582
- }
1583
- }
1584
- }
1585
- },
1586
- "/api/v1/admin/users/bulk": {
1587
- "post": {
1588
- "security": [
1589
- {
1590
- "BearerAuth": []
1591
- }
1592
- ],
1593
- "description": "Create multiple user accounts at once",
1594
- "consumes": [
1595
- "application/json"
1596
- ],
1597
- "produces": [
1598
- "application/json"
1599
- ],
1600
- "tags": [
1601
- "Admin Users"
1602
- ],
1603
- "summary": "Bulk Create Users",
1604
- "parameters": [
1605
- {
1606
- "description": "Bulk Create User Requests",
1607
- "name": "requests",
1608
- "in": "body",
1609
- "required": true,
1610
- "schema": {
1611
- "type": "array",
1612
- "items": {
1613
- "$ref": "#/definitions/dto.CreateUserRequest"
1614
- }
1615
- }
1616
- }
1617
- ],
1618
- "responses": {
1619
- "200": {
1620
- "description": "OK",
1621
- "schema": {
1622
- "$ref": "#/definitions/dto.SuccessResponse-dto_CreateUserRequest"
1623
- }
1624
- },
1625
- "400": {
1626
- "description": "Bad Request",
1627
- "schema": {
1628
- "$ref": "#/definitions/dto.ErrorResponse"
1629
- }
1630
- },
1631
- "401": {
1632
- "description": "Unauthorized",
1633
- "schema": {
1634
- "$ref": "#/definitions/dto.ErrorResponse"
1635
- }
1636
- },
1637
- "403": {
1638
- "description": "Forbidden",
1639
- "schema": {
1640
- "$ref": "#/definitions/dto.ErrorResponse"
1641
- }
1642
- }
1643
- }
1644
- }
1645
- },
1646
- "/api/v1/admin/users/{id}": {
1647
- "put": {
1648
- "security": [
1649
- {
1650
- "BearerAuth": []
1651
- }
1652
- ],
1653
- "description": "Update user information by ID",
1654
- "consumes": [
1655
- "application/json"
1656
- ],
1657
- "produces": [
1658
- "application/json"
1659
- ],
1660
- "tags": [
1661
- "Admin Users"
1662
- ],
1663
- "summary": "Edit User",
1664
- "parameters": [
1665
- {
1666
- "type": "string",
1667
- "description": "User ID",
1668
- "name": "id",
1669
- "in": "path",
1670
- "required": true
1671
- },
1672
- {
1673
- "description": "Update User Request",
1674
- "name": "request",
1675
- "in": "body",
1676
- "required": true,
1677
- "schema": {
1678
- "$ref": "#/definitions/dto.UpdateUserRequest"
1679
- }
1680
- }
1681
- ],
1682
- "responses": {
1683
- "200": {
1684
- "description": "OK",
1685
- "schema": {
1686
- "$ref": "#/definitions/dto.SuccessResponse-dto_UserResponse"
1687
- }
1688
- },
1689
- "400": {
1690
- "description": "Bad Request",
1691
- "schema": {
1692
- "$ref": "#/definitions/dto.ErrorResponse"
1693
- }
1694
- },
1695
- "401": {
1696
- "description": "Unauthorized",
1697
- "schema": {
1698
- "$ref": "#/definitions/dto.ErrorResponse"
1699
- }
1700
- },
1701
- "403": {
1702
- "description": "Forbidden",
1703
- "schema": {
1704
- "$ref": "#/definitions/dto.ErrorResponse"
1705
- }
1706
- },
1707
- "404": {
1708
- "description": "Not Found",
1709
- "schema": {
1710
- "$ref": "#/definitions/dto.ErrorResponse"
1711
- }
1712
- }
1713
- }
1714
- },
1715
- "delete": {
1716
- "security": [
1717
- {
1718
- "BearerAuth": []
1719
- }
1720
- ],
1721
- "description": "Delete a user account by ID",
1722
- "consumes": [
1723
- "application/json"
1724
- ],
1725
- "produces": [
1726
- "application/json"
1727
- ],
1728
- "tags": [
1729
- "Admin Users"
1730
- ],
1731
- "summary": "Delete User",
1732
- "parameters": [
1733
- {
1734
- "type": "string",
1735
- "description": "User ID",
1736
- "name": "id",
1737
- "in": "path",
1738
- "required": true
1739
- }
1740
- ],
1741
- "responses": {
1742
- "200": {
1743
- "description": "OK",
1744
- "schema": {
1745
- "$ref": "#/definitions/dto.SuccessResponse-any"
1746
- }
1747
- },
1748
- "400": {
1749
- "description": "Bad Request",
1750
- "schema": {
1751
- "$ref": "#/definitions/dto.ErrorResponse"
1752
- }
1753
- },
1754
- "401": {
1755
- "description": "Unauthorized",
1756
- "schema": {
1757
- "$ref": "#/definitions/dto.ErrorResponse"
1758
- }
1759
- },
1760
- "403": {
1761
- "description": "Forbidden",
1762
- "schema": {
1763
- "$ref": "#/definitions/dto.ErrorResponse"
1764
- }
1765
- },
1766
- "404": {
1767
- "description": "Not Found",
1768
- "schema": {
1769
- "$ref": "#/definitions/dto.ErrorResponse"
1770
- }
1771
- }
1772
- }
1773
- }
1774
- },
1775
  "/api/v1/authentication/external-login": {
1776
  "post": {
1777
  "description": "Authenticate user using external OAuth provider",
@@ -2463,9 +2179,164 @@ const docTemplate = `{
2463
  }
2464
  }
2465
  },
2466
- "/api/v1/options/create": {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2467
  "post": {
2468
- "description": "Create multiple options in bulk",
2469
  "consumes": [
2470
  "application/json"
2471
  ],
@@ -2473,19 +2344,19 @@ const docTemplate = `{
2473
  "application/json"
2474
  ],
2475
  "tags": [
2476
- "Option"
2477
  ],
2478
- "summary": "Create Bulk Options",
2479
  "parameters": [
2480
  {
2481
- "description": "Bulk Options Request",
2482
  "name": "request",
2483
  "in": "body",
2484
  "required": true,
2485
  "schema": {
2486
  "type": "array",
2487
  "items": {
2488
- "$ref": "#/definitions/dto.OptionsRequest"
2489
  }
2490
  }
2491
  }
@@ -2494,7 +2365,7 @@ const docTemplate = `{
2494
  "200": {
2495
  "description": "OK",
2496
  "schema": {
2497
- "$ref": "#/definitions/dto.SuccessResponse-any"
2498
  }
2499
  },
2500
  "400": {
@@ -2506,9 +2377,9 @@ const docTemplate = `{
2506
  }
2507
  }
2508
  },
2509
- "/api/v1/options/list/{slug}": {
2510
- "get": {
2511
- "description": "Retrieve option details using its slug",
2512
  "consumes": [
2513
  "application/json"
2514
  ],
@@ -2516,23 +2387,28 @@ const docTemplate = `{
2516
  "application/json"
2517
  ],
2518
  "tags": [
2519
- "Option"
2520
  ],
2521
- "summary": "Get Option by Slug",
2522
  "parameters": [
2523
  {
2524
- "type": "string",
2525
- "description": "Option Slug",
2526
- "name": "slug",
2527
- "in": "path",
2528
- "required": true
 
 
 
 
 
2529
  }
2530
  ],
2531
  "responses": {
2532
  "200": {
2533
  "description": "OK",
2534
  "schema": {
2535
- "$ref": "#/definitions/dto.SuccessResponse-models_Options"
2536
  }
2537
  },
2538
  "400": {
@@ -2544,9 +2420,9 @@ const docTemplate = `{
2544
  }
2545
  }
2546
  },
2547
- "/api/v1/options/region/cities": {
2548
- "get": {
2549
- "description": "Retrieve a list of cities within a specific province",
2550
  "consumes": [
2551
  "application/json"
2552
  ],
@@ -2554,22 +2430,18 @@ const docTemplate = `{
2554
  "application/json"
2555
  ],
2556
  "tags": [
2557
- "Region"
2558
  ],
2559
- "summary": "List Cities by Province",
2560
  "parameters": [
2561
  {
2562
- "description": "Province ID",
2563
  "name": "request",
2564
  "in": "body",
2565
  "required": true,
2566
  "schema": {
2567
  "type": "object",
2568
- "properties": {
2569
- "province_id": {
2570
- "type": "integer"
2571
- }
2572
- }
2573
  }
2574
  }
2575
  ],
@@ -2577,7 +2449,7 @@ const docTemplate = `{
2577
  "200": {
2578
  "description": "OK",
2579
  "schema": {
2580
- "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionCity"
2581
  }
2582
  },
2583
  "400": {
@@ -2589,9 +2461,14 @@ const docTemplate = `{
2589
  }
2590
  }
2591
  },
2592
- "/api/v1/options/region/provinces": {
2593
  "get": {
2594
- "description": "Retrieve a list of all provinces",
 
 
 
 
 
2595
  "consumes": [
2596
  "application/json"
2597
  ],
@@ -2599,28 +2476,37 @@ const docTemplate = `{
2599
  "application/json"
2600
  ],
2601
  "tags": [
2602
- "Region"
2603
  ],
2604
- "summary": "List Provinces",
2605
  "responses": {
2606
  "200": {
2607
  "description": "OK",
2608
  "schema": {
2609
- "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionProvince"
2610
  }
2611
  },
2612
- "400": {
2613
- "description": "Bad Request",
 
 
 
 
 
 
2614
  "schema": {
2615
  "$ref": "#/definitions/dto.ErrorResponse"
2616
  }
2617
  }
2618
  }
2619
- }
2620
- },
2621
- "/api/v1/options/region/seed-cities": {
2622
  "post": {
2623
- "description": "Seed multiple cities into the system",
 
 
 
 
 
2624
  "consumes": [
2625
  "application/json"
2626
  ],
@@ -2628,20 +2514,17 @@ const docTemplate = `{
2628
  "application/json"
2629
  ],
2630
  "tags": [
2631
- "Region"
2632
  ],
2633
- "summary": "Seed Cities",
2634
  "parameters": [
2635
  {
2636
- "description": "Seed Cities Request",
2637
  "name": "request",
2638
  "in": "body",
2639
  "required": true,
2640
  "schema": {
2641
- "type": "array",
2642
- "items": {
2643
- "$ref": "#/definitions/models.RegionCity"
2644
- }
2645
  }
2646
  }
2647
  ],
@@ -2649,7 +2532,7 @@ const docTemplate = `{
2649
  "200": {
2650
  "description": "OK",
2651
  "schema": {
2652
- "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionCity"
2653
  }
2654
  },
2655
  "400": {
@@ -2657,13 +2540,30 @@ const docTemplate = `{
2657
  "schema": {
2658
  "$ref": "#/definitions/dto.ErrorResponse"
2659
  }
 
 
 
 
 
 
 
 
 
 
 
 
2660
  }
2661
  }
2662
  }
2663
  },
2664
- "/api/v1/options/region/seed-provinces": {
2665
  "post": {
2666
- "description": "Seed multiple provinces into the system",
 
 
 
 
 
2667
  "consumes": [
2668
  "application/json"
2669
  ],
@@ -2671,19 +2571,19 @@ const docTemplate = `{
2671
  "application/json"
2672
  ],
2673
  "tags": [
2674
- "Region"
2675
  ],
2676
- "summary": "Seed Provinces",
2677
  "parameters": [
2678
  {
2679
- "description": "Seed Provinces Request",
2680
- "name": "request",
2681
  "in": "body",
2682
  "required": true,
2683
  "schema": {
2684
  "type": "array",
2685
  "items": {
2686
- "$ref": "#/definitions/models.RegionProvince"
2687
  }
2688
  }
2689
  }
@@ -2692,7 +2592,7 @@ const docTemplate = `{
2692
  "200": {
2693
  "description": "OK",
2694
  "schema": {
2695
- "$ref": "#/definitions/dto.SuccessResponse-any"
2696
  }
2697
  },
2698
  "400": {
@@ -2700,13 +2600,30 @@ const docTemplate = `{
2700
  "schema": {
2701
  "$ref": "#/definitions/dto.ErrorResponse"
2702
  }
 
 
 
 
 
 
 
 
 
 
 
 
2703
  }
2704
  }
2705
  }
2706
  },
2707
- "/api/v1/payment/callback": {
2708
- "post": {
2709
- "description": "Receive and process payment status updates from Xendit",
 
 
 
 
 
2710
  "consumes": [
2711
  "application/json"
2712
  ],
@@ -2714,20 +2631,85 @@ const docTemplate = `{
2714
  "application/json"
2715
  ],
2716
  "tags": [
2717
- "Payment"
2718
  ],
2719
- "summary": "Handle Xendit Payment Callback",
2720
  "parameters": [
2721
  {
2722
- "description": "Xendit Callback Payload",
 
 
 
 
 
 
 
2723
  "name": "request",
2724
  "in": "body",
2725
  "required": true,
2726
  "schema": {
2727
- "type": "object",
2728
- "additionalProperties": true
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2729
  }
2730
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2731
  ],
2732
  "responses": {
2733
  "200": {
@@ -2741,6 +2723,24 @@ const docTemplate = `{
2741
  "schema": {
2742
  "$ref": "#/definitions/dto.ErrorResponse"
2743
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2744
  }
2745
  }
2746
  }
@@ -4726,7 +4726,7 @@ var SwaggerInfo = &swag.Spec{
4726
  Version: "1.0.0",
4727
  Host: "localhost:8000",
4728
  BasePath: "/",
4729
- Schemes: []string{"http", "https"},
4730
  Title: "Go Boilerplate API",
4731
  Description: "Backend API documentation",
4732
  InfoInstanceName: "swagger",
 
1488
  }
1489
  }
1490
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1491
  "/api/v1/authentication/external-login": {
1492
  "post": {
1493
  "description": "Authenticate user using external OAuth provider",
 
2179
  }
2180
  }
2181
  },
2182
+ "/api/v1/options/create": {
2183
+ "post": {
2184
+ "description": "Create multiple options in bulk",
2185
+ "consumes": [
2186
+ "application/json"
2187
+ ],
2188
+ "produces": [
2189
+ "application/json"
2190
+ ],
2191
+ "tags": [
2192
+ "Option"
2193
+ ],
2194
+ "summary": "Create Bulk Options",
2195
+ "parameters": [
2196
+ {
2197
+ "description": "Bulk Options Request",
2198
+ "name": "request",
2199
+ "in": "body",
2200
+ "required": true,
2201
+ "schema": {
2202
+ "type": "array",
2203
+ "items": {
2204
+ "$ref": "#/definitions/dto.OptionsRequest"
2205
+ }
2206
+ }
2207
+ }
2208
+ ],
2209
+ "responses": {
2210
+ "200": {
2211
+ "description": "OK",
2212
+ "schema": {
2213
+ "$ref": "#/definitions/dto.SuccessResponse-any"
2214
+ }
2215
+ },
2216
+ "400": {
2217
+ "description": "Bad Request",
2218
+ "schema": {
2219
+ "$ref": "#/definitions/dto.ErrorResponse"
2220
+ }
2221
+ }
2222
+ }
2223
+ }
2224
+ },
2225
+ "/api/v1/options/list/{slug}": {
2226
+ "get": {
2227
+ "description": "Retrieve option details using its slug",
2228
+ "consumes": [
2229
+ "application/json"
2230
+ ],
2231
+ "produces": [
2232
+ "application/json"
2233
+ ],
2234
+ "tags": [
2235
+ "Option"
2236
+ ],
2237
+ "summary": "Get Option by Slug",
2238
+ "parameters": [
2239
+ {
2240
+ "type": "string",
2241
+ "description": "Option Slug",
2242
+ "name": "slug",
2243
+ "in": "path",
2244
+ "required": true
2245
+ }
2246
+ ],
2247
+ "responses": {
2248
+ "200": {
2249
+ "description": "OK",
2250
+ "schema": {
2251
+ "$ref": "#/definitions/dto.SuccessResponse-models_Options"
2252
+ }
2253
+ },
2254
+ "400": {
2255
+ "description": "Bad Request",
2256
+ "schema": {
2257
+ "$ref": "#/definitions/dto.ErrorResponse"
2258
+ }
2259
+ }
2260
+ }
2261
+ }
2262
+ },
2263
+ "/api/v1/options/region/cities": {
2264
+ "get": {
2265
+ "description": "Retrieve a list of cities within a specific province",
2266
+ "consumes": [
2267
+ "application/json"
2268
+ ],
2269
+ "produces": [
2270
+ "application/json"
2271
+ ],
2272
+ "tags": [
2273
+ "Region"
2274
+ ],
2275
+ "summary": "List Cities by Province",
2276
+ "parameters": [
2277
+ {
2278
+ "description": "Province ID",
2279
+ "name": "request",
2280
+ "in": "body",
2281
+ "required": true,
2282
+ "schema": {
2283
+ "type": "object",
2284
+ "properties": {
2285
+ "province_id": {
2286
+ "type": "integer"
2287
+ }
2288
+ }
2289
+ }
2290
+ }
2291
+ ],
2292
+ "responses": {
2293
+ "200": {
2294
+ "description": "OK",
2295
+ "schema": {
2296
+ "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionCity"
2297
+ }
2298
+ },
2299
+ "400": {
2300
+ "description": "Bad Request",
2301
+ "schema": {
2302
+ "$ref": "#/definitions/dto.ErrorResponse"
2303
+ }
2304
+ }
2305
+ }
2306
+ }
2307
+ },
2308
+ "/api/v1/options/region/provinces": {
2309
+ "get": {
2310
+ "description": "Retrieve a list of all provinces",
2311
+ "consumes": [
2312
+ "application/json"
2313
+ ],
2314
+ "produces": [
2315
+ "application/json"
2316
+ ],
2317
+ "tags": [
2318
+ "Region"
2319
+ ],
2320
+ "summary": "List Provinces",
2321
+ "responses": {
2322
+ "200": {
2323
+ "description": "OK",
2324
+ "schema": {
2325
+ "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionProvince"
2326
+ }
2327
+ },
2328
+ "400": {
2329
+ "description": "Bad Request",
2330
+ "schema": {
2331
+ "$ref": "#/definitions/dto.ErrorResponse"
2332
+ }
2333
+ }
2334
+ }
2335
+ }
2336
+ },
2337
+ "/api/v1/options/region/seed-cities": {
2338
  "post": {
2339
+ "description": "Seed multiple cities into the system",
2340
  "consumes": [
2341
  "application/json"
2342
  ],
 
2344
  "application/json"
2345
  ],
2346
  "tags": [
2347
+ "Region"
2348
  ],
2349
+ "summary": "Seed Cities",
2350
  "parameters": [
2351
  {
2352
+ "description": "Seed Cities Request",
2353
  "name": "request",
2354
  "in": "body",
2355
  "required": true,
2356
  "schema": {
2357
  "type": "array",
2358
  "items": {
2359
+ "$ref": "#/definitions/models.RegionCity"
2360
  }
2361
  }
2362
  }
 
2365
  "200": {
2366
  "description": "OK",
2367
  "schema": {
2368
+ "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionCity"
2369
  }
2370
  },
2371
  "400": {
 
2377
  }
2378
  }
2379
  },
2380
+ "/api/v1/options/region/seed-provinces": {
2381
+ "post": {
2382
+ "description": "Seed multiple provinces into the system",
2383
  "consumes": [
2384
  "application/json"
2385
  ],
 
2387
  "application/json"
2388
  ],
2389
  "tags": [
2390
+ "Region"
2391
  ],
2392
+ "summary": "Seed Provinces",
2393
  "parameters": [
2394
  {
2395
+ "description": "Seed Provinces Request",
2396
+ "name": "request",
2397
+ "in": "body",
2398
+ "required": true,
2399
+ "schema": {
2400
+ "type": "array",
2401
+ "items": {
2402
+ "$ref": "#/definitions/models.RegionProvince"
2403
+ }
2404
+ }
2405
  }
2406
  ],
2407
  "responses": {
2408
  "200": {
2409
  "description": "OK",
2410
  "schema": {
2411
+ "$ref": "#/definitions/dto.SuccessResponse-any"
2412
  }
2413
  },
2414
  "400": {
 
2420
  }
2421
  }
2422
  },
2423
+ "/api/v1/payment/callback": {
2424
+ "post": {
2425
+ "description": "Receive and process payment status updates from Xendit",
2426
  "consumes": [
2427
  "application/json"
2428
  ],
 
2430
  "application/json"
2431
  ],
2432
  "tags": [
2433
+ "Payment"
2434
  ],
2435
+ "summary": "Handle Xendit Payment Callback",
2436
  "parameters": [
2437
  {
2438
+ "description": "Xendit Callback Payload",
2439
  "name": "request",
2440
  "in": "body",
2441
  "required": true,
2442
  "schema": {
2443
  "type": "object",
2444
+ "additionalProperties": true
 
 
 
 
2445
  }
2446
  }
2447
  ],
 
2449
  "200": {
2450
  "description": "OK",
2451
  "schema": {
2452
+ "$ref": "#/definitions/dto.SuccessResponse-any"
2453
  }
2454
  },
2455
  "400": {
 
2461
  }
2462
  }
2463
  },
2464
+ "/api/v1/super-admin/users": {
2465
  "get": {
2466
+ "security": [
2467
+ {
2468
+ "BearerAuth": []
2469
+ }
2470
+ ],
2471
+ "description": "Retrieve a list of all users in the system",
2472
  "consumes": [
2473
  "application/json"
2474
  ],
 
2476
  "application/json"
2477
  ],
2478
  "tags": [
2479
+ "Admin Users"
2480
  ],
2481
+ "summary": "List All Users",
2482
  "responses": {
2483
  "200": {
2484
  "description": "OK",
2485
  "schema": {
2486
+ "$ref": "#/definitions/dto.SuccessResponse-array_dto_UserResponse"
2487
  }
2488
  },
2489
+ "401": {
2490
+ "description": "Unauthorized",
2491
+ "schema": {
2492
+ "$ref": "#/definitions/dto.ErrorResponse"
2493
+ }
2494
+ },
2495
+ "403": {
2496
+ "description": "Forbidden",
2497
  "schema": {
2498
  "$ref": "#/definitions/dto.ErrorResponse"
2499
  }
2500
  }
2501
  }
2502
+ },
 
 
2503
  "post": {
2504
+ "security": [
2505
+ {
2506
+ "BearerAuth": []
2507
+ }
2508
+ ],
2509
+ "description": "Create a new user account by providing user details",
2510
  "consumes": [
2511
  "application/json"
2512
  ],
 
2514
  "application/json"
2515
  ],
2516
  "tags": [
2517
+ "Admin Users"
2518
  ],
2519
+ "summary": "Create Single User",
2520
  "parameters": [
2521
  {
2522
+ "description": "Create User Request",
2523
  "name": "request",
2524
  "in": "body",
2525
  "required": true,
2526
  "schema": {
2527
+ "$ref": "#/definitions/dto.CreateUserRequest"
 
 
 
2528
  }
2529
  }
2530
  ],
 
2532
  "200": {
2533
  "description": "OK",
2534
  "schema": {
2535
+ "$ref": "#/definitions/dto.SuccessResponse-dto_UserResponse"
2536
  }
2537
  },
2538
  "400": {
 
2540
  "schema": {
2541
  "$ref": "#/definitions/dto.ErrorResponse"
2542
  }
2543
+ },
2544
+ "401": {
2545
+ "description": "Unauthorized",
2546
+ "schema": {
2547
+ "$ref": "#/definitions/dto.ErrorResponse"
2548
+ }
2549
+ },
2550
+ "403": {
2551
+ "description": "Forbidden",
2552
+ "schema": {
2553
+ "$ref": "#/definitions/dto.ErrorResponse"
2554
+ }
2555
  }
2556
  }
2557
  }
2558
  },
2559
+ "/api/v1/super-admin/users/bulk": {
2560
  "post": {
2561
+ "security": [
2562
+ {
2563
+ "BearerAuth": []
2564
+ }
2565
+ ],
2566
+ "description": "Create multiple user accounts at once",
2567
  "consumes": [
2568
  "application/json"
2569
  ],
 
2571
  "application/json"
2572
  ],
2573
  "tags": [
2574
+ "Admin Users"
2575
  ],
2576
+ "summary": "Bulk Create Users",
2577
  "parameters": [
2578
  {
2579
+ "description": "Bulk Create User Requests",
2580
+ "name": "requests",
2581
  "in": "body",
2582
  "required": true,
2583
  "schema": {
2584
  "type": "array",
2585
  "items": {
2586
+ "$ref": "#/definitions/dto.CreateUserRequest"
2587
  }
2588
  }
2589
  }
 
2592
  "200": {
2593
  "description": "OK",
2594
  "schema": {
2595
+ "$ref": "#/definitions/dto.SuccessResponse-dto_CreateUserRequest"
2596
  }
2597
  },
2598
  "400": {
 
2600
  "schema": {
2601
  "$ref": "#/definitions/dto.ErrorResponse"
2602
  }
2603
+ },
2604
+ "401": {
2605
+ "description": "Unauthorized",
2606
+ "schema": {
2607
+ "$ref": "#/definitions/dto.ErrorResponse"
2608
+ }
2609
+ },
2610
+ "403": {
2611
+ "description": "Forbidden",
2612
+ "schema": {
2613
+ "$ref": "#/definitions/dto.ErrorResponse"
2614
+ }
2615
  }
2616
  }
2617
  }
2618
  },
2619
+ "/api/v1/super-admin/users/{id}": {
2620
+ "put": {
2621
+ "security": [
2622
+ {
2623
+ "BearerAuth": []
2624
+ }
2625
+ ],
2626
+ "description": "Update user information by ID",
2627
  "consumes": [
2628
  "application/json"
2629
  ],
 
2631
  "application/json"
2632
  ],
2633
  "tags": [
2634
+ "Admin Users"
2635
  ],
2636
+ "summary": "Edit User",
2637
  "parameters": [
2638
  {
2639
+ "type": "string",
2640
+ "description": "User ID",
2641
+ "name": "id",
2642
+ "in": "path",
2643
+ "required": true
2644
+ },
2645
+ {
2646
+ "description": "Update User Request",
2647
  "name": "request",
2648
  "in": "body",
2649
  "required": true,
2650
  "schema": {
2651
+ "$ref": "#/definitions/dto.UpdateUserRequest"
2652
+ }
2653
+ }
2654
+ ],
2655
+ "responses": {
2656
+ "200": {
2657
+ "description": "OK",
2658
+ "schema": {
2659
+ "$ref": "#/definitions/dto.SuccessResponse-dto_UserResponse"
2660
+ }
2661
+ },
2662
+ "400": {
2663
+ "description": "Bad Request",
2664
+ "schema": {
2665
+ "$ref": "#/definitions/dto.ErrorResponse"
2666
+ }
2667
+ },
2668
+ "401": {
2669
+ "description": "Unauthorized",
2670
+ "schema": {
2671
+ "$ref": "#/definitions/dto.ErrorResponse"
2672
+ }
2673
+ },
2674
+ "403": {
2675
+ "description": "Forbidden",
2676
+ "schema": {
2677
+ "$ref": "#/definitions/dto.ErrorResponse"
2678
+ }
2679
+ },
2680
+ "404": {
2681
+ "description": "Not Found",
2682
+ "schema": {
2683
+ "$ref": "#/definitions/dto.ErrorResponse"
2684
  }
2685
  }
2686
+ }
2687
+ },
2688
+ "delete": {
2689
+ "security": [
2690
+ {
2691
+ "BearerAuth": []
2692
+ }
2693
+ ],
2694
+ "description": "Delete a user account by ID",
2695
+ "consumes": [
2696
+ "application/json"
2697
+ ],
2698
+ "produces": [
2699
+ "application/json"
2700
+ ],
2701
+ "tags": [
2702
+ "Admin Users"
2703
+ ],
2704
+ "summary": "Delete User",
2705
+ "parameters": [
2706
+ {
2707
+ "type": "string",
2708
+ "description": "User ID",
2709
+ "name": "id",
2710
+ "in": "path",
2711
+ "required": true
2712
+ }
2713
  ],
2714
  "responses": {
2715
  "200": {
 
2723
  "schema": {
2724
  "$ref": "#/definitions/dto.ErrorResponse"
2725
  }
2726
+ },
2727
+ "401": {
2728
+ "description": "Unauthorized",
2729
+ "schema": {
2730
+ "$ref": "#/definitions/dto.ErrorResponse"
2731
+ }
2732
+ },
2733
+ "403": {
2734
+ "description": "Forbidden",
2735
+ "schema": {
2736
+ "$ref": "#/definitions/dto.ErrorResponse"
2737
+ }
2738
+ },
2739
+ "404": {
2740
+ "description": "Not Found",
2741
+ "schema": {
2742
+ "$ref": "#/definitions/dto.ErrorResponse"
2743
+ }
2744
  }
2745
  }
2746
  }
 
4726
  Version: "1.0.0",
4727
  Host: "localhost:8000",
4728
  BasePath: "/",
4729
+ Schemes: []string{"https"},
4730
  Title: "Go Boilerplate API",
4731
  Description: "Backend API documentation",
4732
  InfoInstanceName: "swagger",
swagger/docs/swagger.json CHANGED
@@ -1,6 +1,5 @@
1
  {
2
  "schemes": [
3
- "http",
4
  "https"
5
  ],
6
  "swagger": "2.0",
@@ -1486,290 +1485,6 @@
1486
  }
1487
  }
1488
  },
1489
- "/api/v1/admin/users": {
1490
- "get": {
1491
- "security": [
1492
- {
1493
- "BearerAuth": []
1494
- }
1495
- ],
1496
- "description": "Retrieve a list of all users in the system",
1497
- "consumes": [
1498
- "application/json"
1499
- ],
1500
- "produces": [
1501
- "application/json"
1502
- ],
1503
- "tags": [
1504
- "Admin Users"
1505
- ],
1506
- "summary": "List All Users",
1507
- "responses": {
1508
- "200": {
1509
- "description": "OK",
1510
- "schema": {
1511
- "$ref": "#/definitions/dto.SuccessResponse-array_dto_UserResponse"
1512
- }
1513
- },
1514
- "401": {
1515
- "description": "Unauthorized",
1516
- "schema": {
1517
- "$ref": "#/definitions/dto.ErrorResponse"
1518
- }
1519
- },
1520
- "403": {
1521
- "description": "Forbidden",
1522
- "schema": {
1523
- "$ref": "#/definitions/dto.ErrorResponse"
1524
- }
1525
- }
1526
- }
1527
- },
1528
- "post": {
1529
- "security": [
1530
- {
1531
- "BearerAuth": []
1532
- }
1533
- ],
1534
- "description": "Create a new user account by providing user details",
1535
- "consumes": [
1536
- "application/json"
1537
- ],
1538
- "produces": [
1539
- "application/json"
1540
- ],
1541
- "tags": [
1542
- "Admin Users"
1543
- ],
1544
- "summary": "Create Single User",
1545
- "parameters": [
1546
- {
1547
- "description": "Create User Request",
1548
- "name": "request",
1549
- "in": "body",
1550
- "required": true,
1551
- "schema": {
1552
- "$ref": "#/definitions/dto.CreateUserRequest"
1553
- }
1554
- }
1555
- ],
1556
- "responses": {
1557
- "200": {
1558
- "description": "OK",
1559
- "schema": {
1560
- "$ref": "#/definitions/dto.SuccessResponse-dto_UserResponse"
1561
- }
1562
- },
1563
- "400": {
1564
- "description": "Bad Request",
1565
- "schema": {
1566
- "$ref": "#/definitions/dto.ErrorResponse"
1567
- }
1568
- },
1569
- "401": {
1570
- "description": "Unauthorized",
1571
- "schema": {
1572
- "$ref": "#/definitions/dto.ErrorResponse"
1573
- }
1574
- },
1575
- "403": {
1576
- "description": "Forbidden",
1577
- "schema": {
1578
- "$ref": "#/definitions/dto.ErrorResponse"
1579
- }
1580
- }
1581
- }
1582
- }
1583
- },
1584
- "/api/v1/admin/users/bulk": {
1585
- "post": {
1586
- "security": [
1587
- {
1588
- "BearerAuth": []
1589
- }
1590
- ],
1591
- "description": "Create multiple user accounts at once",
1592
- "consumes": [
1593
- "application/json"
1594
- ],
1595
- "produces": [
1596
- "application/json"
1597
- ],
1598
- "tags": [
1599
- "Admin Users"
1600
- ],
1601
- "summary": "Bulk Create Users",
1602
- "parameters": [
1603
- {
1604
- "description": "Bulk Create User Requests",
1605
- "name": "requests",
1606
- "in": "body",
1607
- "required": true,
1608
- "schema": {
1609
- "type": "array",
1610
- "items": {
1611
- "$ref": "#/definitions/dto.CreateUserRequest"
1612
- }
1613
- }
1614
- }
1615
- ],
1616
- "responses": {
1617
- "200": {
1618
- "description": "OK",
1619
- "schema": {
1620
- "$ref": "#/definitions/dto.SuccessResponse-dto_CreateUserRequest"
1621
- }
1622
- },
1623
- "400": {
1624
- "description": "Bad Request",
1625
- "schema": {
1626
- "$ref": "#/definitions/dto.ErrorResponse"
1627
- }
1628
- },
1629
- "401": {
1630
- "description": "Unauthorized",
1631
- "schema": {
1632
- "$ref": "#/definitions/dto.ErrorResponse"
1633
- }
1634
- },
1635
- "403": {
1636
- "description": "Forbidden",
1637
- "schema": {
1638
- "$ref": "#/definitions/dto.ErrorResponse"
1639
- }
1640
- }
1641
- }
1642
- }
1643
- },
1644
- "/api/v1/admin/users/{id}": {
1645
- "put": {
1646
- "security": [
1647
- {
1648
- "BearerAuth": []
1649
- }
1650
- ],
1651
- "description": "Update user information by ID",
1652
- "consumes": [
1653
- "application/json"
1654
- ],
1655
- "produces": [
1656
- "application/json"
1657
- ],
1658
- "tags": [
1659
- "Admin Users"
1660
- ],
1661
- "summary": "Edit User",
1662
- "parameters": [
1663
- {
1664
- "type": "string",
1665
- "description": "User ID",
1666
- "name": "id",
1667
- "in": "path",
1668
- "required": true
1669
- },
1670
- {
1671
- "description": "Update User Request",
1672
- "name": "request",
1673
- "in": "body",
1674
- "required": true,
1675
- "schema": {
1676
- "$ref": "#/definitions/dto.UpdateUserRequest"
1677
- }
1678
- }
1679
- ],
1680
- "responses": {
1681
- "200": {
1682
- "description": "OK",
1683
- "schema": {
1684
- "$ref": "#/definitions/dto.SuccessResponse-dto_UserResponse"
1685
- }
1686
- },
1687
- "400": {
1688
- "description": "Bad Request",
1689
- "schema": {
1690
- "$ref": "#/definitions/dto.ErrorResponse"
1691
- }
1692
- },
1693
- "401": {
1694
- "description": "Unauthorized",
1695
- "schema": {
1696
- "$ref": "#/definitions/dto.ErrorResponse"
1697
- }
1698
- },
1699
- "403": {
1700
- "description": "Forbidden",
1701
- "schema": {
1702
- "$ref": "#/definitions/dto.ErrorResponse"
1703
- }
1704
- },
1705
- "404": {
1706
- "description": "Not Found",
1707
- "schema": {
1708
- "$ref": "#/definitions/dto.ErrorResponse"
1709
- }
1710
- }
1711
- }
1712
- },
1713
- "delete": {
1714
- "security": [
1715
- {
1716
- "BearerAuth": []
1717
- }
1718
- ],
1719
- "description": "Delete a user account by ID",
1720
- "consumes": [
1721
- "application/json"
1722
- ],
1723
- "produces": [
1724
- "application/json"
1725
- ],
1726
- "tags": [
1727
- "Admin Users"
1728
- ],
1729
- "summary": "Delete User",
1730
- "parameters": [
1731
- {
1732
- "type": "string",
1733
- "description": "User ID",
1734
- "name": "id",
1735
- "in": "path",
1736
- "required": true
1737
- }
1738
- ],
1739
- "responses": {
1740
- "200": {
1741
- "description": "OK",
1742
- "schema": {
1743
- "$ref": "#/definitions/dto.SuccessResponse-any"
1744
- }
1745
- },
1746
- "400": {
1747
- "description": "Bad Request",
1748
- "schema": {
1749
- "$ref": "#/definitions/dto.ErrorResponse"
1750
- }
1751
- },
1752
- "401": {
1753
- "description": "Unauthorized",
1754
- "schema": {
1755
- "$ref": "#/definitions/dto.ErrorResponse"
1756
- }
1757
- },
1758
- "403": {
1759
- "description": "Forbidden",
1760
- "schema": {
1761
- "$ref": "#/definitions/dto.ErrorResponse"
1762
- }
1763
- },
1764
- "404": {
1765
- "description": "Not Found",
1766
- "schema": {
1767
- "$ref": "#/definitions/dto.ErrorResponse"
1768
- }
1769
- }
1770
- }
1771
- }
1772
- },
1773
  "/api/v1/authentication/external-login": {
1774
  "post": {
1775
  "description": "Authenticate user using external OAuth provider",
@@ -2461,9 +2176,164 @@
2461
  }
2462
  }
2463
  },
2464
- "/api/v1/options/create": {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2465
  "post": {
2466
- "description": "Create multiple options in bulk",
2467
  "consumes": [
2468
  "application/json"
2469
  ],
@@ -2471,19 +2341,19 @@
2471
  "application/json"
2472
  ],
2473
  "tags": [
2474
- "Option"
2475
  ],
2476
- "summary": "Create Bulk Options",
2477
  "parameters": [
2478
  {
2479
- "description": "Bulk Options Request",
2480
  "name": "request",
2481
  "in": "body",
2482
  "required": true,
2483
  "schema": {
2484
  "type": "array",
2485
  "items": {
2486
- "$ref": "#/definitions/dto.OptionsRequest"
2487
  }
2488
  }
2489
  }
@@ -2492,7 +2362,7 @@
2492
  "200": {
2493
  "description": "OK",
2494
  "schema": {
2495
- "$ref": "#/definitions/dto.SuccessResponse-any"
2496
  }
2497
  },
2498
  "400": {
@@ -2504,9 +2374,9 @@
2504
  }
2505
  }
2506
  },
2507
- "/api/v1/options/list/{slug}": {
2508
- "get": {
2509
- "description": "Retrieve option details using its slug",
2510
  "consumes": [
2511
  "application/json"
2512
  ],
@@ -2514,23 +2384,28 @@
2514
  "application/json"
2515
  ],
2516
  "tags": [
2517
- "Option"
2518
  ],
2519
- "summary": "Get Option by Slug",
2520
  "parameters": [
2521
  {
2522
- "type": "string",
2523
- "description": "Option Slug",
2524
- "name": "slug",
2525
- "in": "path",
2526
- "required": true
 
 
 
 
 
2527
  }
2528
  ],
2529
  "responses": {
2530
  "200": {
2531
  "description": "OK",
2532
  "schema": {
2533
- "$ref": "#/definitions/dto.SuccessResponse-models_Options"
2534
  }
2535
  },
2536
  "400": {
@@ -2542,9 +2417,9 @@
2542
  }
2543
  }
2544
  },
2545
- "/api/v1/options/region/cities": {
2546
- "get": {
2547
- "description": "Retrieve a list of cities within a specific province",
2548
  "consumes": [
2549
  "application/json"
2550
  ],
@@ -2552,22 +2427,18 @@
2552
  "application/json"
2553
  ],
2554
  "tags": [
2555
- "Region"
2556
  ],
2557
- "summary": "List Cities by Province",
2558
  "parameters": [
2559
  {
2560
- "description": "Province ID",
2561
  "name": "request",
2562
  "in": "body",
2563
  "required": true,
2564
  "schema": {
2565
  "type": "object",
2566
- "properties": {
2567
- "province_id": {
2568
- "type": "integer"
2569
- }
2570
- }
2571
  }
2572
  }
2573
  ],
@@ -2575,7 +2446,7 @@
2575
  "200": {
2576
  "description": "OK",
2577
  "schema": {
2578
- "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionCity"
2579
  }
2580
  },
2581
  "400": {
@@ -2587,9 +2458,14 @@
2587
  }
2588
  }
2589
  },
2590
- "/api/v1/options/region/provinces": {
2591
  "get": {
2592
- "description": "Retrieve a list of all provinces",
 
 
 
 
 
2593
  "consumes": [
2594
  "application/json"
2595
  ],
@@ -2597,28 +2473,37 @@
2597
  "application/json"
2598
  ],
2599
  "tags": [
2600
- "Region"
2601
  ],
2602
- "summary": "List Provinces",
2603
  "responses": {
2604
  "200": {
2605
  "description": "OK",
2606
  "schema": {
2607
- "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionProvince"
2608
  }
2609
  },
2610
- "400": {
2611
- "description": "Bad Request",
 
 
 
 
 
 
2612
  "schema": {
2613
  "$ref": "#/definitions/dto.ErrorResponse"
2614
  }
2615
  }
2616
  }
2617
- }
2618
- },
2619
- "/api/v1/options/region/seed-cities": {
2620
  "post": {
2621
- "description": "Seed multiple cities into the system",
 
 
 
 
 
2622
  "consumes": [
2623
  "application/json"
2624
  ],
@@ -2626,20 +2511,17 @@
2626
  "application/json"
2627
  ],
2628
  "tags": [
2629
- "Region"
2630
  ],
2631
- "summary": "Seed Cities",
2632
  "parameters": [
2633
  {
2634
- "description": "Seed Cities Request",
2635
  "name": "request",
2636
  "in": "body",
2637
  "required": true,
2638
  "schema": {
2639
- "type": "array",
2640
- "items": {
2641
- "$ref": "#/definitions/models.RegionCity"
2642
- }
2643
  }
2644
  }
2645
  ],
@@ -2647,7 +2529,7 @@
2647
  "200": {
2648
  "description": "OK",
2649
  "schema": {
2650
- "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionCity"
2651
  }
2652
  },
2653
  "400": {
@@ -2655,13 +2537,30 @@
2655
  "schema": {
2656
  "$ref": "#/definitions/dto.ErrorResponse"
2657
  }
 
 
 
 
 
 
 
 
 
 
 
 
2658
  }
2659
  }
2660
  }
2661
  },
2662
- "/api/v1/options/region/seed-provinces": {
2663
  "post": {
2664
- "description": "Seed multiple provinces into the system",
 
 
 
 
 
2665
  "consumes": [
2666
  "application/json"
2667
  ],
@@ -2669,19 +2568,19 @@
2669
  "application/json"
2670
  ],
2671
  "tags": [
2672
- "Region"
2673
  ],
2674
- "summary": "Seed Provinces",
2675
  "parameters": [
2676
  {
2677
- "description": "Seed Provinces Request",
2678
- "name": "request",
2679
  "in": "body",
2680
  "required": true,
2681
  "schema": {
2682
  "type": "array",
2683
  "items": {
2684
- "$ref": "#/definitions/models.RegionProvince"
2685
  }
2686
  }
2687
  }
@@ -2690,7 +2589,7 @@
2690
  "200": {
2691
  "description": "OK",
2692
  "schema": {
2693
- "$ref": "#/definitions/dto.SuccessResponse-any"
2694
  }
2695
  },
2696
  "400": {
@@ -2698,13 +2597,30 @@
2698
  "schema": {
2699
  "$ref": "#/definitions/dto.ErrorResponse"
2700
  }
 
 
 
 
 
 
 
 
 
 
 
 
2701
  }
2702
  }
2703
  }
2704
  },
2705
- "/api/v1/payment/callback": {
2706
- "post": {
2707
- "description": "Receive and process payment status updates from Xendit",
 
 
 
 
 
2708
  "consumes": [
2709
  "application/json"
2710
  ],
@@ -2712,20 +2628,85 @@
2712
  "application/json"
2713
  ],
2714
  "tags": [
2715
- "Payment"
2716
  ],
2717
- "summary": "Handle Xendit Payment Callback",
2718
  "parameters": [
2719
  {
2720
- "description": "Xendit Callback Payload",
 
 
 
 
 
 
 
2721
  "name": "request",
2722
  "in": "body",
2723
  "required": true,
2724
  "schema": {
2725
- "type": "object",
2726
- "additionalProperties": true
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2727
  }
2728
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2729
  ],
2730
  "responses": {
2731
  "200": {
@@ -2739,6 +2720,24 @@
2739
  "schema": {
2740
  "$ref": "#/definitions/dto.ErrorResponse"
2741
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2742
  }
2743
  }
2744
  }
 
1
  {
2
  "schemes": [
 
3
  "https"
4
  ],
5
  "swagger": "2.0",
 
1485
  }
1486
  }
1487
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1488
  "/api/v1/authentication/external-login": {
1489
  "post": {
1490
  "description": "Authenticate user using external OAuth provider",
 
2176
  }
2177
  }
2178
  },
2179
+ "/api/v1/options/create": {
2180
+ "post": {
2181
+ "description": "Create multiple options in bulk",
2182
+ "consumes": [
2183
+ "application/json"
2184
+ ],
2185
+ "produces": [
2186
+ "application/json"
2187
+ ],
2188
+ "tags": [
2189
+ "Option"
2190
+ ],
2191
+ "summary": "Create Bulk Options",
2192
+ "parameters": [
2193
+ {
2194
+ "description": "Bulk Options Request",
2195
+ "name": "request",
2196
+ "in": "body",
2197
+ "required": true,
2198
+ "schema": {
2199
+ "type": "array",
2200
+ "items": {
2201
+ "$ref": "#/definitions/dto.OptionsRequest"
2202
+ }
2203
+ }
2204
+ }
2205
+ ],
2206
+ "responses": {
2207
+ "200": {
2208
+ "description": "OK",
2209
+ "schema": {
2210
+ "$ref": "#/definitions/dto.SuccessResponse-any"
2211
+ }
2212
+ },
2213
+ "400": {
2214
+ "description": "Bad Request",
2215
+ "schema": {
2216
+ "$ref": "#/definitions/dto.ErrorResponse"
2217
+ }
2218
+ }
2219
+ }
2220
+ }
2221
+ },
2222
+ "/api/v1/options/list/{slug}": {
2223
+ "get": {
2224
+ "description": "Retrieve option details using its slug",
2225
+ "consumes": [
2226
+ "application/json"
2227
+ ],
2228
+ "produces": [
2229
+ "application/json"
2230
+ ],
2231
+ "tags": [
2232
+ "Option"
2233
+ ],
2234
+ "summary": "Get Option by Slug",
2235
+ "parameters": [
2236
+ {
2237
+ "type": "string",
2238
+ "description": "Option Slug",
2239
+ "name": "slug",
2240
+ "in": "path",
2241
+ "required": true
2242
+ }
2243
+ ],
2244
+ "responses": {
2245
+ "200": {
2246
+ "description": "OK",
2247
+ "schema": {
2248
+ "$ref": "#/definitions/dto.SuccessResponse-models_Options"
2249
+ }
2250
+ },
2251
+ "400": {
2252
+ "description": "Bad Request",
2253
+ "schema": {
2254
+ "$ref": "#/definitions/dto.ErrorResponse"
2255
+ }
2256
+ }
2257
+ }
2258
+ }
2259
+ },
2260
+ "/api/v1/options/region/cities": {
2261
+ "get": {
2262
+ "description": "Retrieve a list of cities within a specific province",
2263
+ "consumes": [
2264
+ "application/json"
2265
+ ],
2266
+ "produces": [
2267
+ "application/json"
2268
+ ],
2269
+ "tags": [
2270
+ "Region"
2271
+ ],
2272
+ "summary": "List Cities by Province",
2273
+ "parameters": [
2274
+ {
2275
+ "description": "Province ID",
2276
+ "name": "request",
2277
+ "in": "body",
2278
+ "required": true,
2279
+ "schema": {
2280
+ "type": "object",
2281
+ "properties": {
2282
+ "province_id": {
2283
+ "type": "integer"
2284
+ }
2285
+ }
2286
+ }
2287
+ }
2288
+ ],
2289
+ "responses": {
2290
+ "200": {
2291
+ "description": "OK",
2292
+ "schema": {
2293
+ "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionCity"
2294
+ }
2295
+ },
2296
+ "400": {
2297
+ "description": "Bad Request",
2298
+ "schema": {
2299
+ "$ref": "#/definitions/dto.ErrorResponse"
2300
+ }
2301
+ }
2302
+ }
2303
+ }
2304
+ },
2305
+ "/api/v1/options/region/provinces": {
2306
+ "get": {
2307
+ "description": "Retrieve a list of all provinces",
2308
+ "consumes": [
2309
+ "application/json"
2310
+ ],
2311
+ "produces": [
2312
+ "application/json"
2313
+ ],
2314
+ "tags": [
2315
+ "Region"
2316
+ ],
2317
+ "summary": "List Provinces",
2318
+ "responses": {
2319
+ "200": {
2320
+ "description": "OK",
2321
+ "schema": {
2322
+ "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionProvince"
2323
+ }
2324
+ },
2325
+ "400": {
2326
+ "description": "Bad Request",
2327
+ "schema": {
2328
+ "$ref": "#/definitions/dto.ErrorResponse"
2329
+ }
2330
+ }
2331
+ }
2332
+ }
2333
+ },
2334
+ "/api/v1/options/region/seed-cities": {
2335
  "post": {
2336
+ "description": "Seed multiple cities into the system",
2337
  "consumes": [
2338
  "application/json"
2339
  ],
 
2341
  "application/json"
2342
  ],
2343
  "tags": [
2344
+ "Region"
2345
  ],
2346
+ "summary": "Seed Cities",
2347
  "parameters": [
2348
  {
2349
+ "description": "Seed Cities Request",
2350
  "name": "request",
2351
  "in": "body",
2352
  "required": true,
2353
  "schema": {
2354
  "type": "array",
2355
  "items": {
2356
+ "$ref": "#/definitions/models.RegionCity"
2357
  }
2358
  }
2359
  }
 
2362
  "200": {
2363
  "description": "OK",
2364
  "schema": {
2365
+ "$ref": "#/definitions/dto.SuccessResponse-array_models_RegionCity"
2366
  }
2367
  },
2368
  "400": {
 
2374
  }
2375
  }
2376
  },
2377
+ "/api/v1/options/region/seed-provinces": {
2378
+ "post": {
2379
+ "description": "Seed multiple provinces into the system",
2380
  "consumes": [
2381
  "application/json"
2382
  ],
 
2384
  "application/json"
2385
  ],
2386
  "tags": [
2387
+ "Region"
2388
  ],
2389
+ "summary": "Seed Provinces",
2390
  "parameters": [
2391
  {
2392
+ "description": "Seed Provinces Request",
2393
+ "name": "request",
2394
+ "in": "body",
2395
+ "required": true,
2396
+ "schema": {
2397
+ "type": "array",
2398
+ "items": {
2399
+ "$ref": "#/definitions/models.RegionProvince"
2400
+ }
2401
+ }
2402
  }
2403
  ],
2404
  "responses": {
2405
  "200": {
2406
  "description": "OK",
2407
  "schema": {
2408
+ "$ref": "#/definitions/dto.SuccessResponse-any"
2409
  }
2410
  },
2411
  "400": {
 
2417
  }
2418
  }
2419
  },
2420
+ "/api/v1/payment/callback": {
2421
+ "post": {
2422
+ "description": "Receive and process payment status updates from Xendit",
2423
  "consumes": [
2424
  "application/json"
2425
  ],
 
2427
  "application/json"
2428
  ],
2429
  "tags": [
2430
+ "Payment"
2431
  ],
2432
+ "summary": "Handle Xendit Payment Callback",
2433
  "parameters": [
2434
  {
2435
+ "description": "Xendit Callback Payload",
2436
  "name": "request",
2437
  "in": "body",
2438
  "required": true,
2439
  "schema": {
2440
  "type": "object",
2441
+ "additionalProperties": true
 
 
 
 
2442
  }
2443
  }
2444
  ],
 
2446
  "200": {
2447
  "description": "OK",
2448
  "schema": {
2449
+ "$ref": "#/definitions/dto.SuccessResponse-any"
2450
  }
2451
  },
2452
  "400": {
 
2458
  }
2459
  }
2460
  },
2461
+ "/api/v1/super-admin/users": {
2462
  "get": {
2463
+ "security": [
2464
+ {
2465
+ "BearerAuth": []
2466
+ }
2467
+ ],
2468
+ "description": "Retrieve a list of all users in the system",
2469
  "consumes": [
2470
  "application/json"
2471
  ],
 
2473
  "application/json"
2474
  ],
2475
  "tags": [
2476
+ "Admin Users"
2477
  ],
2478
+ "summary": "List All Users",
2479
  "responses": {
2480
  "200": {
2481
  "description": "OK",
2482
  "schema": {
2483
+ "$ref": "#/definitions/dto.SuccessResponse-array_dto_UserResponse"
2484
  }
2485
  },
2486
+ "401": {
2487
+ "description": "Unauthorized",
2488
+ "schema": {
2489
+ "$ref": "#/definitions/dto.ErrorResponse"
2490
+ }
2491
+ },
2492
+ "403": {
2493
+ "description": "Forbidden",
2494
  "schema": {
2495
  "$ref": "#/definitions/dto.ErrorResponse"
2496
  }
2497
  }
2498
  }
2499
+ },
 
 
2500
  "post": {
2501
+ "security": [
2502
+ {
2503
+ "BearerAuth": []
2504
+ }
2505
+ ],
2506
+ "description": "Create a new user account by providing user details",
2507
  "consumes": [
2508
  "application/json"
2509
  ],
 
2511
  "application/json"
2512
  ],
2513
  "tags": [
2514
+ "Admin Users"
2515
  ],
2516
+ "summary": "Create Single User",
2517
  "parameters": [
2518
  {
2519
+ "description": "Create User Request",
2520
  "name": "request",
2521
  "in": "body",
2522
  "required": true,
2523
  "schema": {
2524
+ "$ref": "#/definitions/dto.CreateUserRequest"
 
 
 
2525
  }
2526
  }
2527
  ],
 
2529
  "200": {
2530
  "description": "OK",
2531
  "schema": {
2532
+ "$ref": "#/definitions/dto.SuccessResponse-dto_UserResponse"
2533
  }
2534
  },
2535
  "400": {
 
2537
  "schema": {
2538
  "$ref": "#/definitions/dto.ErrorResponse"
2539
  }
2540
+ },
2541
+ "401": {
2542
+ "description": "Unauthorized",
2543
+ "schema": {
2544
+ "$ref": "#/definitions/dto.ErrorResponse"
2545
+ }
2546
+ },
2547
+ "403": {
2548
+ "description": "Forbidden",
2549
+ "schema": {
2550
+ "$ref": "#/definitions/dto.ErrorResponse"
2551
+ }
2552
  }
2553
  }
2554
  }
2555
  },
2556
+ "/api/v1/super-admin/users/bulk": {
2557
  "post": {
2558
+ "security": [
2559
+ {
2560
+ "BearerAuth": []
2561
+ }
2562
+ ],
2563
+ "description": "Create multiple user accounts at once",
2564
  "consumes": [
2565
  "application/json"
2566
  ],
 
2568
  "application/json"
2569
  ],
2570
  "tags": [
2571
+ "Admin Users"
2572
  ],
2573
+ "summary": "Bulk Create Users",
2574
  "parameters": [
2575
  {
2576
+ "description": "Bulk Create User Requests",
2577
+ "name": "requests",
2578
  "in": "body",
2579
  "required": true,
2580
  "schema": {
2581
  "type": "array",
2582
  "items": {
2583
+ "$ref": "#/definitions/dto.CreateUserRequest"
2584
  }
2585
  }
2586
  }
 
2589
  "200": {
2590
  "description": "OK",
2591
  "schema": {
2592
+ "$ref": "#/definitions/dto.SuccessResponse-dto_CreateUserRequest"
2593
  }
2594
  },
2595
  "400": {
 
2597
  "schema": {
2598
  "$ref": "#/definitions/dto.ErrorResponse"
2599
  }
2600
+ },
2601
+ "401": {
2602
+ "description": "Unauthorized",
2603
+ "schema": {
2604
+ "$ref": "#/definitions/dto.ErrorResponse"
2605
+ }
2606
+ },
2607
+ "403": {
2608
+ "description": "Forbidden",
2609
+ "schema": {
2610
+ "$ref": "#/definitions/dto.ErrorResponse"
2611
+ }
2612
  }
2613
  }
2614
  }
2615
  },
2616
+ "/api/v1/super-admin/users/{id}": {
2617
+ "put": {
2618
+ "security": [
2619
+ {
2620
+ "BearerAuth": []
2621
+ }
2622
+ ],
2623
+ "description": "Update user information by ID",
2624
  "consumes": [
2625
  "application/json"
2626
  ],
 
2628
  "application/json"
2629
  ],
2630
  "tags": [
2631
+ "Admin Users"
2632
  ],
2633
+ "summary": "Edit User",
2634
  "parameters": [
2635
  {
2636
+ "type": "string",
2637
+ "description": "User ID",
2638
+ "name": "id",
2639
+ "in": "path",
2640
+ "required": true
2641
+ },
2642
+ {
2643
+ "description": "Update User Request",
2644
  "name": "request",
2645
  "in": "body",
2646
  "required": true,
2647
  "schema": {
2648
+ "$ref": "#/definitions/dto.UpdateUserRequest"
2649
+ }
2650
+ }
2651
+ ],
2652
+ "responses": {
2653
+ "200": {
2654
+ "description": "OK",
2655
+ "schema": {
2656
+ "$ref": "#/definitions/dto.SuccessResponse-dto_UserResponse"
2657
+ }
2658
+ },
2659
+ "400": {
2660
+ "description": "Bad Request",
2661
+ "schema": {
2662
+ "$ref": "#/definitions/dto.ErrorResponse"
2663
+ }
2664
+ },
2665
+ "401": {
2666
+ "description": "Unauthorized",
2667
+ "schema": {
2668
+ "$ref": "#/definitions/dto.ErrorResponse"
2669
+ }
2670
+ },
2671
+ "403": {
2672
+ "description": "Forbidden",
2673
+ "schema": {
2674
+ "$ref": "#/definitions/dto.ErrorResponse"
2675
+ }
2676
+ },
2677
+ "404": {
2678
+ "description": "Not Found",
2679
+ "schema": {
2680
+ "$ref": "#/definitions/dto.ErrorResponse"
2681
  }
2682
  }
2683
+ }
2684
+ },
2685
+ "delete": {
2686
+ "security": [
2687
+ {
2688
+ "BearerAuth": []
2689
+ }
2690
+ ],
2691
+ "description": "Delete a user account by ID",
2692
+ "consumes": [
2693
+ "application/json"
2694
+ ],
2695
+ "produces": [
2696
+ "application/json"
2697
+ ],
2698
+ "tags": [
2699
+ "Admin Users"
2700
+ ],
2701
+ "summary": "Delete User",
2702
+ "parameters": [
2703
+ {
2704
+ "type": "string",
2705
+ "description": "User ID",
2706
+ "name": "id",
2707
+ "in": "path",
2708
+ "required": true
2709
+ }
2710
  ],
2711
  "responses": {
2712
  "200": {
 
2720
  "schema": {
2721
  "$ref": "#/definitions/dto.ErrorResponse"
2722
  }
2723
+ },
2724
+ "401": {
2725
+ "description": "Unauthorized",
2726
+ "schema": {
2727
+ "$ref": "#/definitions/dto.ErrorResponse"
2728
+ }
2729
+ },
2730
+ "403": {
2731
+ "description": "Forbidden",
2732
+ "schema": {
2733
+ "$ref": "#/definitions/dto.ErrorResponse"
2734
+ }
2735
+ },
2736
+ "404": {
2737
+ "description": "Not Found",
2738
+ "schema": {
2739
+ "$ref": "#/definitions/dto.ErrorResponse"
2740
+ }
2741
  }
2742
  }
2743
  }
swagger/docs/swagger.yaml CHANGED
@@ -2267,187 +2267,6 @@ paths:
2267
  summary: Update Proctoring Log
2268
  tags:
2269
  - Event Exam Proctoring
2270
- /api/v1/admin/users:
2271
- get:
2272
- consumes:
2273
- - application/json
2274
- description: Retrieve a list of all users in the system
2275
- produces:
2276
- - application/json
2277
- responses:
2278
- "200":
2279
- description: OK
2280
- schema:
2281
- $ref: '#/definitions/dto.SuccessResponse-array_dto_UserResponse'
2282
- "401":
2283
- description: Unauthorized
2284
- schema:
2285
- $ref: '#/definitions/dto.ErrorResponse'
2286
- "403":
2287
- description: Forbidden
2288
- schema:
2289
- $ref: '#/definitions/dto.ErrorResponse'
2290
- security:
2291
- - BearerAuth: []
2292
- summary: List All Users
2293
- tags:
2294
- - Admin Users
2295
- post:
2296
- consumes:
2297
- - application/json
2298
- description: Create a new user account by providing user details
2299
- parameters:
2300
- - description: Create User Request
2301
- in: body
2302
- name: request
2303
- required: true
2304
- schema:
2305
- $ref: '#/definitions/dto.CreateUserRequest'
2306
- produces:
2307
- - application/json
2308
- responses:
2309
- "200":
2310
- description: OK
2311
- schema:
2312
- $ref: '#/definitions/dto.SuccessResponse-dto_UserResponse'
2313
- "400":
2314
- description: Bad Request
2315
- schema:
2316
- $ref: '#/definitions/dto.ErrorResponse'
2317
- "401":
2318
- description: Unauthorized
2319
- schema:
2320
- $ref: '#/definitions/dto.ErrorResponse'
2321
- "403":
2322
- description: Forbidden
2323
- schema:
2324
- $ref: '#/definitions/dto.ErrorResponse'
2325
- security:
2326
- - BearerAuth: []
2327
- summary: Create Single User
2328
- tags:
2329
- - Admin Users
2330
- /api/v1/admin/users/{id}:
2331
- delete:
2332
- consumes:
2333
- - application/json
2334
- description: Delete a user account by ID
2335
- parameters:
2336
- - description: User ID
2337
- in: path
2338
- name: id
2339
- required: true
2340
- type: string
2341
- produces:
2342
- - application/json
2343
- responses:
2344
- "200":
2345
- description: OK
2346
- schema:
2347
- $ref: '#/definitions/dto.SuccessResponse-any'
2348
- "400":
2349
- description: Bad Request
2350
- schema:
2351
- $ref: '#/definitions/dto.ErrorResponse'
2352
- "401":
2353
- description: Unauthorized
2354
- schema:
2355
- $ref: '#/definitions/dto.ErrorResponse'
2356
- "403":
2357
- description: Forbidden
2358
- schema:
2359
- $ref: '#/definitions/dto.ErrorResponse'
2360
- "404":
2361
- description: Not Found
2362
- schema:
2363
- $ref: '#/definitions/dto.ErrorResponse'
2364
- security:
2365
- - BearerAuth: []
2366
- summary: Delete User
2367
- tags:
2368
- - Admin Users
2369
- put:
2370
- consumes:
2371
- - application/json
2372
- description: Update user information by ID
2373
- parameters:
2374
- - description: User ID
2375
- in: path
2376
- name: id
2377
- required: true
2378
- type: string
2379
- - description: Update User Request
2380
- in: body
2381
- name: request
2382
- required: true
2383
- schema:
2384
- $ref: '#/definitions/dto.UpdateUserRequest'
2385
- produces:
2386
- - application/json
2387
- responses:
2388
- "200":
2389
- description: OK
2390
- schema:
2391
- $ref: '#/definitions/dto.SuccessResponse-dto_UserResponse'
2392
- "400":
2393
- description: Bad Request
2394
- schema:
2395
- $ref: '#/definitions/dto.ErrorResponse'
2396
- "401":
2397
- description: Unauthorized
2398
- schema:
2399
- $ref: '#/definitions/dto.ErrorResponse'
2400
- "403":
2401
- description: Forbidden
2402
- schema:
2403
- $ref: '#/definitions/dto.ErrorResponse'
2404
- "404":
2405
- description: Not Found
2406
- schema:
2407
- $ref: '#/definitions/dto.ErrorResponse'
2408
- security:
2409
- - BearerAuth: []
2410
- summary: Edit User
2411
- tags:
2412
- - Admin Users
2413
- /api/v1/admin/users/bulk:
2414
- post:
2415
- consumes:
2416
- - application/json
2417
- description: Create multiple user accounts at once
2418
- parameters:
2419
- - description: Bulk Create User Requests
2420
- in: body
2421
- name: requests
2422
- required: true
2423
- schema:
2424
- items:
2425
- $ref: '#/definitions/dto.CreateUserRequest'
2426
- type: array
2427
- produces:
2428
- - application/json
2429
- responses:
2430
- "200":
2431
- description: OK
2432
- schema:
2433
- $ref: '#/definitions/dto.SuccessResponse-dto_CreateUserRequest'
2434
- "400":
2435
- description: Bad Request
2436
- schema:
2437
- $ref: '#/definitions/dto.ErrorResponse'
2438
- "401":
2439
- description: Unauthorized
2440
- schema:
2441
- $ref: '#/definitions/dto.ErrorResponse'
2442
- "403":
2443
- description: Forbidden
2444
- schema:
2445
- $ref: '#/definitions/dto.ErrorResponse'
2446
- security:
2447
- - BearerAuth: []
2448
- summary: Bulk Create Users
2449
- tags:
2450
- - Admin Users
2451
  /api/v1/authentication/external-login:
2452
  post:
2453
  consumes:
@@ -3090,8 +2909,188 @@ paths:
3090
  summary: Handle Xendit Payment Callback
3091
  tags:
3092
  - Payment
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3093
  schemes:
3094
- - http
3095
  - https
3096
  securityDefinitions:
3097
  BearerAuth:
 
2267
  summary: Update Proctoring Log
2268
  tags:
2269
  - Event Exam Proctoring
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2270
  /api/v1/authentication/external-login:
2271
  post:
2272
  consumes:
 
2909
  summary: Handle Xendit Payment Callback
2910
  tags:
2911
  - Payment
2912
+ /api/v1/super-admin/users:
2913
+ get:
2914
+ consumes:
2915
+ - application/json
2916
+ description: Retrieve a list of all users in the system
2917
+ produces:
2918
+ - application/json
2919
+ responses:
2920
+ "200":
2921
+ description: OK
2922
+ schema:
2923
+ $ref: '#/definitions/dto.SuccessResponse-array_dto_UserResponse'
2924
+ "401":
2925
+ description: Unauthorized
2926
+ schema:
2927
+ $ref: '#/definitions/dto.ErrorResponse'
2928
+ "403":
2929
+ description: Forbidden
2930
+ schema:
2931
+ $ref: '#/definitions/dto.ErrorResponse'
2932
+ security:
2933
+ - BearerAuth: []
2934
+ summary: List All Users
2935
+ tags:
2936
+ - Admin Users
2937
+ post:
2938
+ consumes:
2939
+ - application/json
2940
+ description: Create a new user account by providing user details
2941
+ parameters:
2942
+ - description: Create User Request
2943
+ in: body
2944
+ name: request
2945
+ required: true
2946
+ schema:
2947
+ $ref: '#/definitions/dto.CreateUserRequest'
2948
+ produces:
2949
+ - application/json
2950
+ responses:
2951
+ "200":
2952
+ description: OK
2953
+ schema:
2954
+ $ref: '#/definitions/dto.SuccessResponse-dto_UserResponse'
2955
+ "400":
2956
+ description: Bad Request
2957
+ schema:
2958
+ $ref: '#/definitions/dto.ErrorResponse'
2959
+ "401":
2960
+ description: Unauthorized
2961
+ schema:
2962
+ $ref: '#/definitions/dto.ErrorResponse'
2963
+ "403":
2964
+ description: Forbidden
2965
+ schema:
2966
+ $ref: '#/definitions/dto.ErrorResponse'
2967
+ security:
2968
+ - BearerAuth: []
2969
+ summary: Create Single User
2970
+ tags:
2971
+ - Admin Users
2972
+ /api/v1/super-admin/users/{id}:
2973
+ delete:
2974
+ consumes:
2975
+ - application/json
2976
+ description: Delete a user account by ID
2977
+ parameters:
2978
+ - description: User ID
2979
+ in: path
2980
+ name: id
2981
+ required: true
2982
+ type: string
2983
+ produces:
2984
+ - application/json
2985
+ responses:
2986
+ "200":
2987
+ description: OK
2988
+ schema:
2989
+ $ref: '#/definitions/dto.SuccessResponse-any'
2990
+ "400":
2991
+ description: Bad Request
2992
+ schema:
2993
+ $ref: '#/definitions/dto.ErrorResponse'
2994
+ "401":
2995
+ description: Unauthorized
2996
+ schema:
2997
+ $ref: '#/definitions/dto.ErrorResponse'
2998
+ "403":
2999
+ description: Forbidden
3000
+ schema:
3001
+ $ref: '#/definitions/dto.ErrorResponse'
3002
+ "404":
3003
+ description: Not Found
3004
+ schema:
3005
+ $ref: '#/definitions/dto.ErrorResponse'
3006
+ security:
3007
+ - BearerAuth: []
3008
+ summary: Delete User
3009
+ tags:
3010
+ - Admin Users
3011
+ put:
3012
+ consumes:
3013
+ - application/json
3014
+ description: Update user information by ID
3015
+ parameters:
3016
+ - description: User ID
3017
+ in: path
3018
+ name: id
3019
+ required: true
3020
+ type: string
3021
+ - description: Update User Request
3022
+ in: body
3023
+ name: request
3024
+ required: true
3025
+ schema:
3026
+ $ref: '#/definitions/dto.UpdateUserRequest'
3027
+ produces:
3028
+ - application/json
3029
+ responses:
3030
+ "200":
3031
+ description: OK
3032
+ schema:
3033
+ $ref: '#/definitions/dto.SuccessResponse-dto_UserResponse'
3034
+ "400":
3035
+ description: Bad Request
3036
+ schema:
3037
+ $ref: '#/definitions/dto.ErrorResponse'
3038
+ "401":
3039
+ description: Unauthorized
3040
+ schema:
3041
+ $ref: '#/definitions/dto.ErrorResponse'
3042
+ "403":
3043
+ description: Forbidden
3044
+ schema:
3045
+ $ref: '#/definitions/dto.ErrorResponse'
3046
+ "404":
3047
+ description: Not Found
3048
+ schema:
3049
+ $ref: '#/definitions/dto.ErrorResponse'
3050
+ security:
3051
+ - BearerAuth: []
3052
+ summary: Edit User
3053
+ tags:
3054
+ - Admin Users
3055
+ /api/v1/super-admin/users/bulk:
3056
+ post:
3057
+ consumes:
3058
+ - application/json
3059
+ description: Create multiple user accounts at once
3060
+ parameters:
3061
+ - description: Bulk Create User Requests
3062
+ in: body
3063
+ name: requests
3064
+ required: true
3065
+ schema:
3066
+ items:
3067
+ $ref: '#/definitions/dto.CreateUserRequest'
3068
+ type: array
3069
+ produces:
3070
+ - application/json
3071
+ responses:
3072
+ "200":
3073
+ description: OK
3074
+ schema:
3075
+ $ref: '#/definitions/dto.SuccessResponse-dto_CreateUserRequest'
3076
+ "400":
3077
+ description: Bad Request
3078
+ schema:
3079
+ $ref: '#/definitions/dto.ErrorResponse'
3080
+ "401":
3081
+ description: Unauthorized
3082
+ schema:
3083
+ $ref: '#/definitions/dto.ErrorResponse'
3084
+ "403":
3085
+ description: Forbidden
3086
+ schema:
3087
+ $ref: '#/definitions/dto.ErrorResponse'
3088
+ security:
3089
+ - BearerAuth: []
3090
+ summary: Bulk Create Users
3091
+ tags:
3092
+ - Admin Users
3093
  schemes:
 
3094
  - https
3095
  securityDefinitions:
3096
  BearerAuth:
swagger/swagger_info.go CHANGED
@@ -16,7 +16,7 @@ package swagger
16
 
17
  // @host localhost:8000
18
  // @BasePath /
19
- // @schemes http https
20
 
21
  // =====================
22
  // Security
 
16
 
17
  // @host localhost:8000
18
  // @BasePath /
19
+ // @schemes https
20
 
21
  // =====================
22
  // Security