Spaces:
Sleeping
Sleeping
| basePath: / | |
| definitions: | |
| dto.AcademyMiniDetailResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.Academy' | |
| payment: | |
| $ref: '#/definitions/models.AcademyPaymentTransaction' | |
| register_status: | |
| type: integer | |
| required: | |
| - register_status | |
| type: object | |
| dto.AccountDetailResponse: | |
| properties: | |
| account: | |
| $ref: '#/definitions/models.Account' | |
| details: | |
| $ref: '#/definitions/models.AccountDetail' | |
| type: object | |
| dto.AddParticipantRequest: | |
| properties: | |
| user_id: | |
| type: string | |
| required: | |
| - user_id | |
| type: object | |
| dto.AdminEventResponse: | |
| properties: | |
| created_at: | |
| type: string | |
| deleted_at: | |
| type: string | |
| end_event: | |
| type: string | |
| event_code: | |
| type: string | |
| exam_count: | |
| type: integer | |
| id_event: | |
| type: string | |
| img_banner: | |
| type: string | |
| is_public: | |
| type: boolean | |
| overview: | |
| type: string | |
| participant_count: | |
| type: integer | |
| price: | |
| type: number | |
| register_status: | |
| type: integer | |
| slug: | |
| type: string | |
| start_event: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| dto.AdminExamResponse: | |
| properties: | |
| academy_count: | |
| type: integer | |
| configuration: | |
| $ref: '#/definitions/models.ExamConfiguration' | |
| created_at: | |
| type: string | |
| deleted_at: | |
| type: string | |
| description: | |
| type: string | |
| duration: | |
| $ref: '#/definitions/time.Duration' | |
| event_count: | |
| type: integer | |
| id_exam: | |
| type: string | |
| proctoring: | |
| $ref: '#/definitions/models.ExamProctoring' | |
| randomize: | |
| type: integer | |
| slug: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| dto.AdminExamReviewAnswer: | |
| properties: | |
| answer: | |
| items: | |
| type: string | |
| type: array | |
| question: | |
| $ref: '#/definitions/dto.AdminExamReviewQuestion' | |
| question_id: | |
| type: string | |
| score: | |
| type: number | |
| type: object | |
| dto.AdminExamReviewQuestion: | |
| properties: | |
| ans_key: | |
| items: | |
| type: string | |
| type: array | |
| id: | |
| type: string | |
| options: | |
| items: | |
| type: string | |
| type: array | |
| question: | |
| type: string | |
| solution: | |
| type: string | |
| type: | |
| type: string | |
| type: object | |
| dto.AdminExamReviewResponse: | |
| properties: | |
| academy_id: | |
| type: string | |
| answers: | |
| items: | |
| $ref: '#/definitions/dto.AdminExamReviewAnswer' | |
| type: array | |
| attempt_id: | |
| type: string | |
| created_at: | |
| type: string | |
| due_at: | |
| type: string | |
| event_id: | |
| type: string | |
| exam_id: | |
| type: string | |
| exam_title: | |
| type: string | |
| full_name: | |
| type: string | |
| score: | |
| type: number | |
| status: | |
| type: string | |
| submitted: | |
| type: boolean | |
| time_remaining: | |
| type: integer | |
| user_id: | |
| type: string | |
| username: | |
| type: string | |
| type: object | |
| dto.AdminStatisticMonthlyGrowth: | |
| properties: | |
| month: | |
| type: string | |
| new_academies: | |
| type: integer | |
| new_events: | |
| type: integer | |
| new_exams: | |
| type: integer | |
| new_problemsets: | |
| type: integer | |
| new_users: | |
| type: integer | |
| type: object | |
| dto.AdminStatisticMonthlyGrowthResponse: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/dto.AdminStatisticMonthlyGrowth' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.AdminStatisticSummary: | |
| properties: | |
| avg_exams_per_event: | |
| type: number | |
| avg_participants_per_event: | |
| type: number | |
| paid_academy_revenue: | |
| type: number | |
| paid_event_revenue: | |
| type: number | |
| total_academies: | |
| type: integer | |
| total_academy_exam_assignments: | |
| type: integer | |
| total_academy_exam_attempts: | |
| type: integer | |
| total_academy_participants: | |
| type: integer | |
| total_academy_results: | |
| type: integer | |
| total_admins: | |
| type: integer | |
| total_event_exam_assignments: | |
| type: integer | |
| total_event_exam_attempts: | |
| type: integer | |
| total_event_participants: | |
| type: integer | |
| total_event_results: | |
| type: integer | |
| total_events: | |
| type: integer | |
| total_exams: | |
| type: integer | |
| total_paid_academy_transactions: | |
| type: integer | |
| total_paid_event_transactions: | |
| type: integer | |
| total_paid_revenue: | |
| type: number | |
| total_problemsets: | |
| type: integer | |
| total_questions: | |
| type: integer | |
| total_super_admins: | |
| type: integer | |
| total_users: | |
| type: integer | |
| type: object | |
| dto.AdminStatisticSummaryResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.AdminStatisticSummary' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.AnswerEventExamRequest: | |
| properties: | |
| answer: | |
| items: | |
| type: string | |
| type: array | |
| question_id: | |
| type: string | |
| required: | |
| - question_id | |
| type: object | |
| dto.AssignRequest: | |
| properties: | |
| academy_id: | |
| type: string | |
| account_id: | |
| type: string | |
| type: object | |
| dto.AuthenticatedUser: | |
| properties: | |
| account: | |
| $ref: '#/definitions/models.Account' | |
| refresh_token: | |
| type: string | |
| token: | |
| type: string | |
| type: object | |
| dto.BulkCreateQuestionsRequest: | |
| properties: | |
| questions: | |
| items: | |
| $ref: '#/definitions/dto.CreateQuestionRequest' | |
| minItems: 1 | |
| type: array | |
| required: | |
| - questions | |
| type: object | |
| dto.BulkUpdateQuestionItemRequest: | |
| properties: | |
| ans_key: | |
| items: | |
| type: string | |
| type: array | |
| corr_mark: | |
| type: number | |
| id_question: | |
| type: string | |
| incorr_mark: | |
| type: number | |
| null_mark: | |
| type: number | |
| options: | |
| items: | |
| type: string | |
| type: array | |
| question: | |
| type: string | |
| solution: | |
| type: string | |
| type: | |
| type: string | |
| required: | |
| - id_question | |
| type: object | |
| dto.BulkUpdateQuestionsRequest: | |
| properties: | |
| questions: | |
| items: | |
| $ref: '#/definitions/dto.BulkUpdateQuestionItemRequest' | |
| minItems: 1 | |
| type: array | |
| required: | |
| - questions | |
| type: object | |
| dto.ChangePasswordRequest: | |
| properties: | |
| new_password: | |
| type: string | |
| old_password: | |
| type: string | |
| required: | |
| - new_password | |
| - old_password | |
| type: object | |
| dto.ContentDetailResponse: | |
| properties: | |
| id: | |
| type: string | |
| order: | |
| type: integer | |
| status: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| dto.CreateAcademyRequest: | |
| properties: | |
| code: | |
| type: string | |
| description: | |
| type: string | |
| image_url: | |
| type: string | |
| is_public: | |
| type: boolean | |
| price: | |
| type: number | |
| slug: | |
| type: string | |
| title: | |
| type: string | |
| required: | |
| - title | |
| type: object | |
| dto.CreateContentRequest: | |
| properties: | |
| contents: | |
| type: string | |
| material_id: | |
| type: string | |
| title: | |
| type: string | |
| required: | |
| - material_id | |
| - title | |
| type: object | |
| dto.CreateEmailVerificationRequest: | |
| properties: | |
| email: | |
| type: string | |
| required: | |
| type: object | |
| dto.CreateEmailVerificationResponse: | |
| properties: | |
| email: | |
| type: string | |
| expired_at: | |
| type: string | |
| type: object | |
| dto.CreateEventRequest: | |
| properties: | |
| end_event: | |
| type: string | |
| event_code: | |
| type: string | |
| img_banner: | |
| type: string | |
| is_public: | |
| type: boolean | |
| overview: | |
| type: string | |
| price: | |
| type: number | |
| start_event: | |
| type: string | |
| title: | |
| type: string | |
| required: | |
| - end_event | |
| - img_banner | |
| - overview | |
| - start_event | |
| - title | |
| type: object | |
| dto.CreateExamRequest: | |
| properties: | |
| allow_retake: | |
| type: boolean | |
| allow_review: | |
| type: boolean | |
| description: | |
| type: string | |
| disable_copy_paste: | |
| type: boolean | |
| duration: | |
| $ref: '#/definitions/time.Duration' | |
| enable_exam_browser: | |
| type: boolean | |
| enable_eye_tracking: | |
| type: boolean | |
| enable_full_screen: | |
| type: boolean | |
| enable_tab_block: | |
| type: boolean | |
| enable_timer: | |
| type: boolean | |
| enable_vad: | |
| type: boolean | |
| enable_webcam: | |
| type: boolean | |
| randomize: | |
| type: integer | |
| slug: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| dto.CreateMaterialRequest: | |
| properties: | |
| academy_id: | |
| type: string | |
| description: | |
| type: string | |
| slug: | |
| type: string | |
| title: | |
| type: string | |
| required: | |
| - academy_id | |
| - title | |
| type: object | |
| dto.CreateProblemSetRequest: | |
| properties: | |
| description: | |
| type: string | |
| title: | |
| type: string | |
| required: | |
| - title | |
| type: object | |
| dto.CreateQuestionRequest: | |
| properties: | |
| ans_key: | |
| items: | |
| type: string | |
| type: array | |
| corr_mark: | |
| type: number | |
| incorr_mark: | |
| type: number | |
| null_mark: | |
| type: number | |
| options: | |
| items: | |
| type: string | |
| type: array | |
| question: | |
| type: string | |
| solution: | |
| type: string | |
| type: | |
| type: string | |
| required: | |
| - question | |
| - type | |
| type: object | |
| dto.CreateUserRequest: | |
| properties: | |
| email: | |
| type: string | |
| name: | |
| type: string | |
| password: | |
| type: string | |
| role: | |
| type: string | |
| username: | |
| type: string | |
| required: | |
| - name | |
| - password | |
| - role | |
| - username | |
| type: object | |
| dto.DeleteEmailVerificationRequest: | |
| properties: | |
| token: | |
| type: integer | |
| required: | |
| - token | |
| type: object | |
| dto.ErrorResponse: | |
| properties: | |
| errors: | |
| type: string | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.EventDetailResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.Events' | |
| event_payment: | |
| $ref: '#/definitions/models.EventPaymentTransaction' | |
| register_status: | |
| type: integer | |
| type: object | |
| dto.EventScoreboardItem: | |
| properties: | |
| full_name: | |
| type: string | |
| total_score: | |
| type: number | |
| username: | |
| type: string | |
| type: object | |
| dto.ExamScoreboardItem: | |
| properties: | |
| duration: | |
| type: string | |
| full_name: | |
| type: string | |
| score: | |
| type: number | |
| username: | |
| type: string | |
| type: object | |
| dto.ExternalAuthRequest: | |
| properties: | |
| oauth_id: | |
| type: string | |
| oauth_provider: | |
| type: string | |
| required: | |
| - oauth_id | |
| - oauth_provider | |
| type: object | |
| dto.FileResponse: | |
| properties: | |
| created_at: | |
| type: string | |
| id: | |
| type: string | |
| mime_type: | |
| type: string | |
| original_name: | |
| type: string | |
| size: | |
| type: integer | |
| url: | |
| type: string | |
| type: object | |
| dto.FileResponseSingle: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.FileResponse' | |
| message: | |
| type: string | |
| status: | |
| type: string | |
| type: object | |
| dto.FileUploadResponse: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/dto.FileResponse' | |
| type: array | |
| message: | |
| type: string | |
| status: | |
| type: string | |
| type: object | |
| dto.JoinAcademyByCodeRequest: | |
| properties: | |
| code: | |
| type: string | |
| required: | |
| - code | |
| type: object | |
| dto.JoinEventRequest: | |
| properties: | |
| event_code: | |
| type: string | |
| required: | |
| - event_code | |
| type: object | |
| dto.MaterialDetailResponse: | |
| properties: | |
| academy_id: | |
| type: string | |
| contents: | |
| items: | |
| $ref: '#/definitions/dto.ContentDetailResponse' | |
| type: array | |
| contents_count: | |
| type: integer | |
| description: | |
| type: string | |
| id: | |
| type: string | |
| meta: | |
| additionalProperties: | |
| type: string | |
| type: object | |
| order: | |
| type: integer | |
| progress: | |
| $ref: '#/definitions/dto.MaterialProgressResponse' | |
| slug: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| dto.MaterialProgressResponse: | |
| properties: | |
| academy_id: | |
| type: string | |
| account_id: | |
| type: string | |
| completed_at: | |
| type: string | |
| id: | |
| type: string | |
| material_id: | |
| type: string | |
| progress: | |
| type: number | |
| status: | |
| type: string | |
| total_completed_contents: | |
| type: integer | |
| type: object | |
| dto.OptionsRequest: | |
| properties: | |
| option_name: | |
| type: string | |
| option_values: | |
| items: | |
| type: string | |
| type: array | |
| required: | |
| - option_name | |
| - option_values | |
| type: object | |
| dto.ProblemSetInjectResponse: | |
| properties: | |
| file: | |
| type: string | |
| problem_sets: | |
| items: | |
| $ref: '#/definitions/dto.ProblemSetInjectSummary' | |
| type: array | |
| problem_sets_created: | |
| type: integer | |
| questions_created: | |
| type: integer | |
| total_rows: | |
| type: integer | |
| type: object | |
| dto.ProblemSetInjectSummary: | |
| properties: | |
| id_problem_set: | |
| type: string | |
| question_count: | |
| type: integer | |
| title: | |
| type: string | |
| type: object | |
| dto.RefreshTokenRequest: | |
| properties: | |
| refresh_token: | |
| type: string | |
| required: | |
| - refresh_token | |
| type: object | |
| dto.RegisterAcademyPaymentActionRequiredData: | |
| properties: | |
| academy_id: | |
| type: string | |
| account_id: | |
| type: string | |
| amount: | |
| type: number | |
| expired_at: | |
| type: string | |
| id: | |
| type: string | |
| invoice_id: | |
| type: string | |
| invoice_url: | |
| type: string | |
| mayar_transaction_id: | |
| type: string | |
| status: | |
| type: string | |
| transaction_at: | |
| type: string | |
| type: object | |
| dto.RegisterAcademyPaymentActionRequiredResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.RegisterAcademyPaymentActionRequiredData' | |
| message: | |
| type: string | |
| meta_data: | |
| type: string | |
| status: | |
| type: string | |
| type: object | |
| dto.RegisterEventPaymentActionRequiredData: | |
| properties: | |
| account_id: | |
| type: string | |
| amount: | |
| type: number | |
| event_id: | |
| type: string | |
| expired_at: | |
| type: string | |
| id: | |
| type: string | |
| invoice_id: | |
| type: string | |
| invoice_url: | |
| type: string | |
| mayar_transaction_id: | |
| type: string | |
| status: | |
| type: string | |
| transaction_at: | |
| type: string | |
| type: object | |
| dto.RegisterEventPaymentActionRequiredResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.RegisterEventPaymentActionRequiredData' | |
| message: | |
| type: string | |
| meta_data: | |
| type: string | |
| status: | |
| type: string | |
| type: object | |
| dto.RepairProblemSetNamingMigrateRequest: | |
| properties: | |
| end_date: | |
| type: string | |
| prefix: | |
| type: string | |
| start_date: | |
| type: string | |
| required: | |
| - end_date | |
| - start_date | |
| type: object | |
| dto.RepairProblemSetNamingMigrateResponse: | |
| properties: | |
| updated_rows: | |
| type: integer | |
| type: object | |
| dto.RepairQuestionStoragePathResponse: | |
| properties: | |
| updated_rows: | |
| type: integer | |
| type: object | |
| dto.ResetPasswordRequest: | |
| properties: | |
| new_password: | |
| type: string | |
| token: | |
| type: integer | |
| required: | |
| - new_password | |
| - token | |
| type: object | |
| dto.ReuseExamsRequest: | |
| properties: | |
| exam_ids: | |
| items: | |
| type: string | |
| type: array | |
| required: | |
| - exam_ids | |
| type: object | |
| dto.ReuseMaterialsRequest: | |
| properties: | |
| material_ids: | |
| items: | |
| type: string | |
| type: array | |
| required: | |
| - material_ids | |
| type: object | |
| dto.SignInRequest: | |
| properties: | |
| email_or_username: | |
| type: string | |
| password: | |
| type: string | |
| required: | |
| - email_or_username | |
| - password | |
| type: object | |
| dto.SignUpRequest: | |
| properties: | |
| email: | |
| type: string | |
| name: | |
| type: string | |
| password: | |
| type: string | |
| username: | |
| type: string | |
| required: | |
| - password | |
| - username | |
| type: object | |
| dto.SuccessResponse-any: | |
| properties: | |
| data: {} | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_dto_AdminEventResponse: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/dto.AdminEventResponse' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_dto_AdminExamResponse: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/dto.AdminExamResponse' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_dto_EventScoreboardItem: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/dto.EventScoreboardItem' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_dto_ExamScoreboardItem: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/dto.ExamScoreboardItem' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_dto_UserResponse: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/dto.UserResponse' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_Academy: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.Academy' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_AcademyAssign: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.AcademyAssign' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_AcademyContent: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.AcademyContent' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_AcademyExamAssign: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.AcademyExamAssign' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_AcademyMaterial: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.AcademyMaterial' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_Account: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.Account' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_EventAssign: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.EventAssign' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_EventExamAssign: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.EventExamAssign' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_EventExamProctoringLogs: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.EventExamProctoringLogs' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_Events: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.Events' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_Exam: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.Exam' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_RegionCity: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.RegionCity' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_RegionProvince: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.RegionProvince' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-array_models_Result: | |
| properties: | |
| data: | |
| items: | |
| $ref: '#/definitions/models.Result' | |
| type: array | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_AcademyMiniDetailResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.AcademyMiniDetailResponse' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_AccountDetailResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.AccountDetailResponse' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_AdminExamReviewResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.AdminExamReviewResponse' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_AnswerEventExamRequest: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.AnswerEventExamRequest' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_AuthenticatedUser: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.AuthenticatedUser' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_CreateEmailVerificationResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.CreateEmailVerificationResponse' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_CreateUserRequest: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.CreateUserRequest' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_EventDetailResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.EventDetailResponse' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_MaterialDetailResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.MaterialDetailResponse' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_ProblemSetInjectResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.ProblemSetInjectResponse' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_RepairProblemSetNamingMigrateResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.RepairProblemSetNamingMigrateResponse' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_RepairQuestionStoragePathResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.RepairQuestionStoragePathResponse' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_UserResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.UserResponse' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-dto_ZipInjectResponse: | |
| properties: | |
| data: | |
| $ref: '#/definitions/dto.ZipInjectResponse' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-map_string_bool: | |
| properties: | |
| data: | |
| $ref: '#/definitions/map_string_bool' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_Academy: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.Academy' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_AcademyAssign: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.AcademyAssign' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_AcademyContent: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.AcademyContent' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_AcademyExamAttempt: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.AcademyExamAttempt' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_AcademyMaterial: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.AcademyMaterial' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_Account: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.Account' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_EventAssign: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.EventAssign' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_EventExamAttempt: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.EventExamAttempt' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_EventExamProctoringLogs: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.EventExamProctoringLogs' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_Events: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.Events' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_Exam: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.Exam' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_Options: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.Options' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-models_Result: | |
| properties: | |
| data: | |
| $ref: '#/definitions/models.Result' | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.SuccessResponse-string: | |
| properties: | |
| data: | |
| type: string | |
| message: {} | |
| meta_data: {} | |
| status: | |
| type: string | |
| type: object | |
| dto.UpdateAcademyRequest: | |
| properties: | |
| description: | |
| type: string | |
| image_url: | |
| type: string | |
| is_public: | |
| type: boolean | |
| price: | |
| type: number | |
| slug: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| dto.UpdateAccountDetailRequest: | |
| properties: | |
| avatar: | |
| type: string | |
| city: | |
| type: string | |
| full_name: | |
| type: string | |
| phone_number: | |
| type: string | |
| province: | |
| type: string | |
| school_name: | |
| type: string | |
| type: object | |
| dto.UpdateContentRequest: | |
| properties: | |
| contents: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| dto.UpdateEventRequest: | |
| properties: | |
| end_event: | |
| type: string | |
| img_banner: | |
| type: string | |
| is_public: | |
| type: boolean | |
| overview: | |
| type: string | |
| price: | |
| type: number | |
| start_event: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| dto.UpdateMaterialRequest: | |
| properties: | |
| description: | |
| type: string | |
| slug: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| dto.UpdateProblemSetRequest: | |
| properties: | |
| description: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| dto.UpdateQuestionRequest: | |
| properties: | |
| ans_key: | |
| items: | |
| type: string | |
| type: array | |
| corr_mark: | |
| type: number | |
| incorr_mark: | |
| type: number | |
| null_mark: | |
| type: number | |
| options: | |
| items: | |
| type: string | |
| type: array | |
| question: | |
| type: string | |
| solution: | |
| type: string | |
| type: | |
| type: string | |
| type: object | |
| dto.UpdateResultRequest: | |
| properties: | |
| final_score: | |
| type: number | |
| required: | |
| - final_score | |
| type: object | |
| dto.UpdateUserRequest: | |
| properties: | |
| email: | |
| type: string | |
| password: | |
| type: string | |
| role: | |
| type: string | |
| username: | |
| type: string | |
| type: object | |
| dto.UpdateUserRoleRequest: | |
| properties: | |
| role: | |
| type: string | |
| required: | |
| - role | |
| type: object | |
| dto.UserResponse: | |
| properties: | |
| created_at: {} | |
| email: | |
| type: string | |
| full_name: | |
| type: string | |
| id: | |
| type: string | |
| is_detail_completed: | |
| type: boolean | |
| is_email_verified: | |
| type: boolean | |
| role: | |
| type: string | |
| username: | |
| type: string | |
| type: object | |
| dto.ValidateVerifyEmailRequest: | |
| properties: | |
| email: | |
| type: string | |
| token: | |
| type: integer | |
| required: | |
| - token | |
| type: object | |
| dto.ZipInjectResponse: | |
| properties: | |
| base_path: | |
| type: string | |
| file: | |
| type: string | |
| skipped_entries: | |
| type: integer | |
| total_entries: | |
| type: integer | |
| uploaded_files: | |
| type: integer | |
| type: object | |
| map_string_bool: | |
| additionalProperties: | |
| type: boolean | |
| type: object | |
| models.Academy: | |
| properties: | |
| academy_progress: | |
| $ref: '#/definitions/models.AcademyProgress' | |
| code: | |
| type: string | |
| created_at: | |
| type: string | |
| deleted_at: | |
| type: string | |
| description: | |
| type: string | |
| id: | |
| type: string | |
| image_url: | |
| type: string | |
| is_public: | |
| type: boolean | |
| materials: | |
| items: | |
| $ref: '#/definitions/models.AcademyMaterial' | |
| type: array | |
| materials_count: | |
| type: integer | |
| price: | |
| type: number | |
| register_status: | |
| type: integer | |
| slug: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| models.AcademyAssign: | |
| properties: | |
| academy: | |
| $ref: '#/definitions/models.Academy' | |
| academy_id: | |
| type: string | |
| account: | |
| $ref: '#/definitions/models.Account' | |
| account_id: | |
| type: string | |
| created_at: | |
| type: string | |
| id: | |
| type: string | |
| type: object | |
| models.AcademyContent: | |
| properties: | |
| academy_content_progress: | |
| $ref: '#/definitions/models.AcademyContentProgress' | |
| contents: | |
| type: string | |
| created_at: | |
| type: string | |
| deleted_at: | |
| type: string | |
| id: | |
| type: string | |
| material_id: | |
| type: string | |
| order: | |
| type: integer | |
| title: | |
| type: string | |
| type: object | |
| models.AcademyContentProgress: | |
| properties: | |
| academy_id: | |
| type: string | |
| account_id: | |
| type: string | |
| completed_at: | |
| type: string | |
| content_id: | |
| type: string | |
| id: | |
| type: string | |
| material_id: | |
| type: string | |
| status: | |
| type: string | |
| type: object | |
| models.AcademyExamAnswer: | |
| properties: | |
| answer: | |
| items: | |
| type: string | |
| type: array | |
| created_at: | |
| type: string | |
| exam_attempt: | |
| $ref: '#/definitions/models.AcademyExamAttempt' | |
| id: | |
| type: string | |
| id_attempt: | |
| type: string | |
| id_question: | |
| type: string | |
| score: | |
| type: number | |
| updated_at: | |
| type: string | |
| type: object | |
| models.AcademyExamAssign: | |
| properties: | |
| academy: | |
| $ref: '#/definitions/models.Academy' | |
| exam: | |
| $ref: '#/definitions/models.Exam' | |
| id_academy: | |
| type: string | |
| id_exam: | |
| type: string | |
| id_exam_academy_assign: | |
| type: string | |
| type: object | |
| models.AcademyExamAttempt: | |
| properties: | |
| academy: | |
| $ref: '#/definitions/models.Academy' | |
| account: | |
| $ref: '#/definitions/models.Account' | |
| answers: | |
| items: | |
| $ref: '#/definitions/models.AcademyExamAnswer' | |
| type: array | |
| created_at: | |
| type: string | |
| due_at: | |
| type: string | |
| exam: | |
| $ref: '#/definitions/models.Exam' | |
| id_academy: | |
| type: string | |
| id_account: | |
| type: string | |
| id_attempt: | |
| type: string | |
| id_exam: | |
| type: string | |
| mark: | |
| type: number | |
| questions: | |
| items: | |
| $ref: '#/definitions/models.Questions' | |
| type: array | |
| remaining_time: | |
| type: integer | |
| submitted: | |
| type: boolean | |
| type: object | |
| models.AcademyMaterial: | |
| properties: | |
| academy_id: | |
| type: string | |
| academy_material_progress: | |
| $ref: '#/definitions/models.AcademyMaterialProgress' | |
| contents: | |
| items: | |
| $ref: '#/definitions/models.AcademyContent' | |
| type: array | |
| contents_count: | |
| type: integer | |
| created_at: | |
| type: string | |
| deleted_at: | |
| type: string | |
| description: | |
| type: string | |
| id: | |
| type: string | |
| order: | |
| type: integer | |
| slug: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| models.AcademyMaterialProgress: | |
| properties: | |
| academy_id: | |
| type: string | |
| account_id: | |
| type: string | |
| completed_at: | |
| type: string | |
| id: | |
| type: string | |
| material_id: | |
| type: string | |
| progress: | |
| type: number | |
| status: | |
| type: string | |
| total_completed_contents: | |
| type: integer | |
| type: object | |
| models.AcademyPaymentTransaction: | |
| properties: | |
| academy_id: | |
| type: string | |
| account_id: | |
| type: string | |
| amount: | |
| type: number | |
| expired_at: | |
| type: string | |
| external_transaction_id: | |
| type: string | |
| id: | |
| type: string | |
| invoice_id: | |
| type: string | |
| invoice_url: | |
| type: string | |
| status: | |
| type: string | |
| transaction_at: | |
| type: string | |
| type: object | |
| models.AcademyProgress: | |
| properties: | |
| academy_id: | |
| type: string | |
| account_id: | |
| type: string | |
| completed_at: | |
| type: string | |
| id: | |
| type: string | |
| progress: | |
| type: number | |
| status: | |
| type: string | |
| total_completed_materials: | |
| type: integer | |
| type: object | |
| models.Account: | |
| properties: | |
| created_at: | |
| type: string | |
| deleted_at: | |
| type: string | |
| email: | |
| type: string | |
| full_name: | |
| type: string | |
| id: | |
| type: string | |
| is_detail_completed: | |
| type: boolean | |
| is_email_verified: | |
| type: boolean | |
| role: | |
| type: string | |
| username: | |
| type: string | |
| type: object | |
| models.AccountDetail: | |
| properties: | |
| account: | |
| $ref: '#/definitions/models.Account' | |
| account_id: | |
| type: string | |
| avatar: | |
| type: string | |
| city: | |
| type: string | |
| full_name: | |
| type: string | |
| id: | |
| type: string | |
| phone_number: | |
| type: string | |
| province: | |
| type: string | |
| school_name: | |
| type: string | |
| type: object | |
| models.EventAssign: | |
| properties: | |
| account: | |
| $ref: '#/definitions/models.Account' | |
| assigned_at: | |
| type: string | |
| event: | |
| $ref: '#/definitions/models.Events' | |
| id_account: | |
| type: string | |
| id_assign: | |
| type: string | |
| id_event: | |
| type: string | |
| type: object | |
| models.EventExamAnswer: | |
| properties: | |
| answer: | |
| items: | |
| type: string | |
| type: array | |
| created_at: | |
| type: string | |
| exam_attempt: | |
| $ref: '#/definitions/models.EventExamAttempt' | |
| id: | |
| type: string | |
| id_attempt: | |
| type: string | |
| id_question: | |
| type: string | |
| score: | |
| type: number | |
| updated_at: | |
| type: string | |
| type: object | |
| models.EventExamAssign: | |
| properties: | |
| event: | |
| $ref: '#/definitions/models.Events' | |
| exam: | |
| $ref: '#/definitions/models.Exam' | |
| id_event: | |
| type: string | |
| id_exam: | |
| type: string | |
| id_exam_event_assign: | |
| type: string | |
| type: object | |
| models.EventExamAttempt: | |
| properties: | |
| account: | |
| $ref: '#/definitions/models.Account' | |
| answers: | |
| items: | |
| $ref: '#/definitions/models.EventExamAnswer' | |
| type: array | |
| created_at: | |
| type: string | |
| due_at: | |
| type: string | |
| event: | |
| $ref: '#/definitions/models.Events' | |
| exam: | |
| $ref: '#/definitions/models.Exam' | |
| id_account: | |
| type: string | |
| id_attempt: | |
| type: string | |
| id_event: | |
| type: string | |
| id_exam: | |
| type: string | |
| mark: | |
| type: number | |
| questions: | |
| items: | |
| $ref: '#/definitions/models.Questions' | |
| type: array | |
| remaining_time: | |
| type: integer | |
| submitted: | |
| type: boolean | |
| type: object | |
| models.EventExamProctoringLogs: | |
| properties: | |
| attachement: | |
| type: string | |
| created_at: | |
| type: string | |
| id_account: | |
| type: string | |
| id_event: | |
| type: string | |
| id_exam: | |
| type: string | |
| id_result: | |
| type: string | |
| violation_category: | |
| type: string | |
| violation_score: | |
| type: integer | |
| type: object | |
| models.EventPaymentTransaction: | |
| properties: | |
| account_id: | |
| type: string | |
| amount: | |
| type: number | |
| event_id: | |
| type: string | |
| expired_at: | |
| type: string | |
| external_transaction_id: | |
| type: string | |
| id: | |
| type: string | |
| invoice_id: | |
| type: string | |
| invoice_url: | |
| type: string | |
| status: | |
| type: string | |
| transaction_at: | |
| type: string | |
| type: object | |
| models.Events: | |
| properties: | |
| created_at: | |
| type: string | |
| deleted_at: | |
| type: string | |
| end_event: | |
| type: string | |
| event_code: | |
| type: string | |
| id_event: | |
| type: string | |
| img_banner: | |
| type: string | |
| is_public: | |
| type: boolean | |
| overview: | |
| type: string | |
| price: | |
| type: number | |
| register_status: | |
| type: integer | |
| slug: | |
| type: string | |
| start_event: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| models.Exam: | |
| properties: | |
| configuration: | |
| $ref: '#/definitions/models.ExamConfiguration' | |
| created_at: | |
| type: string | |
| deleted_at: | |
| type: string | |
| description: | |
| type: string | |
| duration: | |
| $ref: '#/definitions/time.Duration' | |
| id_exam: | |
| type: string | |
| proctoring: | |
| $ref: '#/definitions/models.ExamProctoring' | |
| randomize: | |
| type: integer | |
| slug: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| models.ExamConfiguration: | |
| properties: | |
| allow_retake: | |
| type: boolean | |
| allow_review: | |
| type: boolean | |
| enable_timer: | |
| type: boolean | |
| id_exam: | |
| type: string | |
| id_result: | |
| type: string | |
| type: object | |
| models.ExamProctoring: | |
| properties: | |
| disable_copy_paste: | |
| type: boolean | |
| enable_exam_browser: | |
| type: boolean | |
| enable_eye_tracking: | |
| type: boolean | |
| enable_full_screen: | |
| type: boolean | |
| enable_tab_block: | |
| type: boolean | |
| enable_vad: | |
| type: boolean | |
| enable_webcam: | |
| type: boolean | |
| id_exam: | |
| type: string | |
| id_result: | |
| type: string | |
| type: object | |
| models.OptionCategory: | |
| properties: | |
| id: | |
| type: integer | |
| option_name: | |
| type: string | |
| option_slug: | |
| type: string | |
| type: object | |
| models.OptionValues: | |
| properties: | |
| id: | |
| type: integer | |
| option_category_id: | |
| type: integer | |
| option_value: | |
| type: string | |
| type: object | |
| models.Options: | |
| properties: | |
| option_category: | |
| $ref: '#/definitions/models.OptionCategory' | |
| option_values: | |
| items: | |
| $ref: '#/definitions/models.OptionValues' | |
| type: array | |
| type: object | |
| models.ProblemSet: | |
| properties: | |
| created_at: | |
| type: string | |
| deleted_at: | |
| type: string | |
| description: | |
| type: string | |
| id_problem_set: | |
| type: string | |
| title: | |
| type: string | |
| type: object | |
| models.Questions: | |
| properties: | |
| ans_key: | |
| items: | |
| type: string | |
| type: array | |
| corr_mark: | |
| type: number | |
| created_at: | |
| type: string | |
| id_problem_set: | |
| type: string | |
| id_question: | |
| type: string | |
| incorr_mark: | |
| type: number | |
| null_mark: | |
| type: number | |
| options: | |
| items: | |
| type: string | |
| type: array | |
| problem_set: | |
| $ref: '#/definitions/models.ProblemSet' | |
| question: | |
| type: string | |
| solution: | |
| type: string | |
| type: | |
| type: string | |
| type: object | |
| models.RegionCity: | |
| properties: | |
| code: | |
| type: string | |
| full_code: | |
| type: string | |
| id: | |
| type: integer | |
| name: | |
| type: string | |
| province_id: | |
| type: integer | |
| type: | |
| type: string | |
| type: object | |
| models.RegionProvince: | |
| properties: | |
| code: | |
| type: string | |
| id: | |
| type: integer | |
| name: | |
| type: string | |
| type: object | |
| models.Result: | |
| properties: | |
| exam_attempt: | |
| $ref: '#/definitions/models.EventExamAttempt' | |
| final_score: | |
| type: number | |
| id_attempt: | |
| type: string | |
| id_result: | |
| type: string | |
| type: object | |
| time.Duration: | |
| enum: | |
| - -9223372036854775808 | |
| - 9223372036854775807 | |
| - 1 | |
| - 1000 | |
| - 1000000 | |
| - 1000000000 | |
| - 60000000000 | |
| - 3600000000000 | |
| format: int64 | |
| type: integer | |
| x-enum-varnames: | |
| - minDuration | |
| - maxDuration | |
| - Nanosecond | |
| - Microsecond | |
| - Millisecond | |
| - Second | |
| - Minute | |
| - Hour | |
| host: api.quzuu.id | |
| info: | |
| contact: | |
| email: admin@example.com | |
| name: Abdan Hafidz | |
| description: Backend API documentation | |
| license: | |
| name: MIT | |
| url: https://opensource.org/licenses/MIT | |
| title: Go Boilerplate API | |
| version: 1.0.0 | |
| paths: | |
| /api/v1/academy/{academy_slug}: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve academy details using its slug | |
| parameters: | |
| - description: Academy Slug | |
| in: path | |
| name: academy_slug | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Get Academy by Slug | |
| tags: | |
| - Academy | |
| /api/v1/academy/{academy_slug}/{material_slug}: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve material details using its slug | |
| parameters: | |
| - description: Academy Slug | |
| in: path | |
| name: academy_slug | |
| required: true | |
| type: string | |
| - description: Material Slug | |
| in: path | |
| name: material_slug | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_MaterialDetailResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Get Material by Slug | |
| tags: | |
| - Material | |
| /api/v1/academy/{academy_slug}/{material_slug}/{order}: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Update the progress of a content within a material | |
| parameters: | |
| - description: Academy Slug | |
| in: path | |
| name: academy_slug | |
| required: true | |
| type: string | |
| - description: Material Slug | |
| in: path | |
| name: material_slug | |
| required: true | |
| type: string | |
| - description: Content Order | |
| in: path | |
| name: order | |
| required: true | |
| type: integer | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Update Content Progress | |
| tags: | |
| - Progress | |
| /api/v1/academy/{academy_slug}/contents: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve a paginated list of all contents in a specific academy | |
| parameters: | |
| - description: Academy Slug | |
| in: path | |
| name: academy_slug | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by content title/body or material title | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, order, created_at, material_title) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: orderBy | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_AcademyContent' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: List Contents by Academy | |
| tags: | |
| - Content | |
| /api/v1/academy/{academy_slug}/exam/{exam_slug}/attempt: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Start an attempt for a specific exam in an academy | |
| parameters: | |
| - description: Academy Slug | |
| in: path | |
| name: academy_slug | |
| required: true | |
| type: string | |
| - description: Exam Slug | |
| in: path | |
| name: exam_slug | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_AcademyExamAttempt' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Attempt Academy Exam | |
| tags: | |
| - Academy Exam | |
| /api/v1/academy/join: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Join an academy using a unique code | |
| parameters: | |
| - description: Join Academy by Code Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.JoinAcademyByCodeRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_AcademyMiniDetailResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "402": | |
| description: Payment Required | |
| schema: | |
| $ref: '#/definitions/dto.RegisterAcademyPaymentActionRequiredResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Join Academy by Code | |
| tags: | |
| - Academy | |
| /api/v1/account/me: | |
| put: | |
| consumes: | |
| - application/json | |
| description: Update detailed information about the authenticated user's account | |
| parameters: | |
| - description: Update Account Detail Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.UpdateAccountDetailRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_AccountDetailResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Update Account Detail | |
| tags: | |
| - Account Detail | |
| /api/v1/admin/academy: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List all academies (private and public) | |
| parameters: | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by title / slug / code | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, slug, code, created_at, is_public) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: orderBy | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_Academy' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Academies' | |
| tags: | |
| - Admin Academy | |
| post: | |
| consumes: | |
| - application/json | |
| description: Create a new academy | |
| parameters: | |
| - description: Create Academy Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.CreateAcademyRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Create Academy | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/{academy_id}/attempts/{attempt_id}/{user_id}/review: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Review a specific participant attempt for an academy exam | |
| parameters: | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| - description: Attempt ID | |
| in: path | |
| name: attempt_id | |
| required: true | |
| type: string | |
| - description: User ID | |
| in: path | |
| name: user_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_AdminExamReviewResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Review Academy Exam Attempt' | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/assign: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Assign an account to an academy | |
| parameters: | |
| - description: Assign Account to Academy Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.AssignRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Assign Account to Academy | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/assign/{assignment_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Unassign an account from an academy | |
| parameters: | |
| - description: Assignment ID | |
| in: path | |
| name: assignment_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Unassign Account from Academy | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/candidates: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List accounts that are not yet assigned to an academy | |
| parameters: | |
| - description: Academy ID | |
| in: query | |
| name: academy_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by username / full name | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (username, full_name, created_at) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: orderBy | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_Account' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Academy Candidates' | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/contents: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Create a new content for a material | |
| parameters: | |
| - description: Create Content Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.CreateContentRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Create Content | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/contents/id/{content_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Delete an existing content | |
| parameters: | |
| - description: Content ID | |
| in: path | |
| name: content_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Delete Content | |
| tags: | |
| - Admin Academy | |
| put: | |
| consumes: | |
| - application/json | |
| description: Update an existing content | |
| parameters: | |
| - description: Content ID | |
| in: path | |
| name: content_id | |
| required: true | |
| type: string | |
| - description: Update Content Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.UpdateContentRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Update Content | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/contents/id/{content_id}/detail: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve detailed content information using its ID | |
| parameters: | |
| - description: Content ID | |
| in: path | |
| name: content_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Get Content Detail by ID | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/id/{academy_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Delete an existing academy | |
| parameters: | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Delete Academy | |
| tags: | |
| - Admin Academy | |
| put: | |
| consumes: | |
| - application/json | |
| description: Update an existing academy | |
| parameters: | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| - description: Update Academy Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.UpdateAcademyRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Update Academy | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/id/{academy_id}/contents: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List all contents in a specific academy | |
| parameters: | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by title / contents / material_title | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, order, created_at, material_title) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: orderBy | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_AcademyContent' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Contents by Academy' | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/id/{academy_id}/detail: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve detailed academy information using its ID | |
| parameters: | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Get Academy Detail by ID | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/id/{academy_id}/exam/candidates: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List all exams NOT assigned to a specific academy | |
| parameters: | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by title / slug / description | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, slug, duration, created_at) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: orderBy | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_Exam' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Exam Candidates by Academy' | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/id/{academy_id}/exams: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List all exams assigned to a specific academy | |
| parameters: | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by title / slug / description | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, slug, duration, created_at) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: orderBy | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_Exam' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Exams by Academy' | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/id/{academy_id}/exams/reuse: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Assign existing exams to an academy | |
| parameters: | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| - description: Reuse Exams Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.ReuseExamsRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Reuse Exams | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/id/{academy_id}/materials: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve a list of materials for a specific academy | |
| parameters: | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by title / slug / description | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, slug, order, created_at) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: orderBy | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: List Materials by Academy | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/id/{academy_id}/materials/reuse: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Duplicate materials (and their contents) and assign them to an | |
| academy | |
| parameters: | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| - description: Reuse Materials Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.ReuseMaterialsRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_AcademyMaterial' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Reuse Materials | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/materials: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Create a new material for an academy | |
| parameters: | |
| - description: Create Material Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.CreateMaterialRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Create Material | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/materials/id/{material_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Delete an existing material | |
| parameters: | |
| - description: Material ID | |
| in: path | |
| name: material_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Delete Material | |
| tags: | |
| - Admin Academy | |
| put: | |
| consumes: | |
| - application/json | |
| description: Update an existing material | |
| parameters: | |
| - description: Material ID | |
| in: path | |
| name: material_id | |
| required: true | |
| type: string | |
| - description: Update Material Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.UpdateMaterialRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Update Material | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/materials/id/{material_id}/contents: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve a list of contents for a specific material | |
| parameters: | |
| - description: Material ID | |
| in: path | |
| name: material_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by title / contents | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, order, created_at) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: orderBy | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: List Contents by Material | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/materials/id/{material_id}/detail: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve detailed material information using its ID | |
| parameters: | |
| - description: Material ID | |
| in: path | |
| name: material_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Get Material Detail by ID | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/academy/participants: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List all participants assigned to an academy | |
| parameters: | |
| - description: Academy ID | |
| in: query | |
| name: academy_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by username / full name | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (created_at, username, email, full_name) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: orderBy | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_AcademyAssign' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Academy Participants' | |
| tags: | |
| - Admin Academy | |
| /api/v1/admin/authentication/{account_id}/assign: | |
| put: | |
| consumes: | |
| - application/json | |
| description: Update the role of a user account | |
| parameters: | |
| - description: Account ID | |
| in: path | |
| name: accountId | |
| required: true | |
| type: string | |
| - description: Update User Role Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.UpdateUserRoleRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_Account' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Update User Role | |
| tags: | |
| - Authentication | |
| /api/v1/admin/events: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Admin view of all events with participant count, exam count and | |
| optional filters/pagination | |
| parameters: | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by title / slug / event code | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, start_event, end_event, created_at, participant_count, | |
| exam_count) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: order | |
| type: string | |
| - description: Filter by status (UPCOMING, ONGOING, ENDED) | |
| in: query | |
| name: status | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_dto_AdminEventResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Events' | |
| tags: | |
| - AdminEvent | |
| post: | |
| consumes: | |
| - application/json | |
| description: Create a new event | |
| parameters: | |
| - description: Create Event Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.CreateEventRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_Events' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Create Event' | |
| tags: | |
| - AdminEvent | |
| /api/v1/admin/events/{event_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Delete an event by ID | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-map_string_bool' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Delete Event' | |
| tags: | |
| - AdminEvent | |
| put: | |
| consumes: | |
| - application/json | |
| description: Update an existing event by ID | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - description: Update Event Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.UpdateEventRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_Events' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Update Event' | |
| tags: | |
| - AdminEvent | |
| /api/v1/admin/events/{event_id}/attempts/{attempt_id}/{user_id}/review: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Review a specific participant attempt for an event exam | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - description: Attempt ID | |
| in: path | |
| name: attempt_id | |
| required: true | |
| type: string | |
| - description: User ID | |
| in: path | |
| name: user_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_AdminExamReviewResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Review Exam Attempt' | |
| tags: | |
| - AdminEvent | |
| /api/v1/admin/events/{event_id}/candidate: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List accounts that are not yet assigned to the event | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by username / full name | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (username, full_name, created_at) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: orderBy | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_Account' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List of Event Candidates' | |
| tags: | |
| - AdminEvent | |
| /api/v1/admin/events/{event_id}/exams: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List all exams assigned to an event | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by exam title / slug | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, slug, created_at, duration) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: order | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_EventExamAssign' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Event Exams' | |
| tags: | |
| - AdminEvent | |
| /api/v1/admin/events/{event_id}/exams/{exam_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Unassign an exam from an event | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-map_string_bool' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Remove Exam from Event' | |
| tags: | |
| - AdminEvent | |
| /api/v1/admin/events/{event_id}/exams/{exam_id}/results: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve all participant results for a specific exam within an | |
| event | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by username / full name | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (final_score, created_at, username, full_name) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: order | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_Result' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Exam Results for an Event' | |
| tags: | |
| - AdminEvent | |
| /api/v1/admin/events/{event_id}/exams/{exam_id}/results/{result_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Delete a participant's exam result | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - description: Result ID | |
| in: path | |
| name: result_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-map_string_bool' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Delete Exam Result' | |
| tags: | |
| - AdminEvent | |
| put: | |
| consumes: | |
| - application/json | |
| description: Edit the final score of a participant's exam result | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - description: Result ID | |
| in: path | |
| name: result_id | |
| required: true | |
| type: string | |
| - description: Update Result Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.UpdateResultRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_Result' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Update Exam Result' | |
| tags: | |
| - AdminEvent | |
| /api/v1/admin/events/{event_id}/exams/candidate: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List exams that are not yet assigned to the event | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by exam title / slug | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, slug, created_at, duration) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: orderBy | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_Exam' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Exam Candidates for Event' | |
| tags: | |
| - AdminEvent | |
| /api/v1/admin/events/{event_id}/participants: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List all participants assigned to an event | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by username / full name | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (assigned_at, username, email, full_name) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: order | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_EventAssign' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Event Participants' | |
| tags: | |
| - AdminEvent | |
| post: | |
| consumes: | |
| - application/json | |
| description: Manually assign a user to an event (bypasses payment) | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - description: Add Participant Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.AddParticipantRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_EventAssign' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Add Participant to Event' | |
| tags: | |
| - AdminEvent | |
| /api/v1/admin/events/{event_id}/participants/{user_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Unassign a user from an event | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| - description: User ID | |
| in: path | |
| name: user_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-map_string_bool' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Remove Participant from Event' | |
| tags: | |
| - AdminEvent | |
| /api/v1/admin/exams: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve a paginated list of exams with event and academy assignment | |
| counts | |
| parameters: | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by title or slug | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, slug, created_at, duration, event_count, academy_count) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: order | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_dto_AdminExamResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Exams' | |
| tags: | |
| - AdminExam | |
| post: | |
| consumes: | |
| - application/json | |
| description: Create a new exam with configuration and proctoring settings | |
| parameters: | |
| - description: Create Exam Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.CreateExamRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_Exam' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Create Exam' | |
| tags: | |
| - AdminExam | |
| /api/v1/admin/exams/{exam_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Soft delete an exam by ID | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-map_string_bool' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Delete Exam' | |
| tags: | |
| - AdminExam | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve full exam details including configuration and proctoring | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_Exam' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Exam Detail' | |
| tags: | |
| - AdminExam | |
| put: | |
| consumes: | |
| - application/json | |
| description: Update an existing exam including configuration and proctoring | |
| settings | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - description: Update Exam Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.CreateExamRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_Exam' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Update Exam' | |
| tags: | |
| - AdminExam | |
| /api/v1/admin/exams/{exam_id}/academies: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List all academies that have this exam assigned | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by academy title / slug / code | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, slug, code, created_at) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: order | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_AcademyExamAssign' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Academies by Exam' | |
| tags: | |
| - AdminExam | |
| /api/v1/admin/exams/{exam_id}/academies/{academy_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Remove an exam assignment from an academy | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-map_string_bool' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Unassign Exam from Academy' | |
| tags: | |
| - AdminExam | |
| post: | |
| consumes: | |
| - application/json | |
| description: Assign an exam to an academy | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-map_string_bool' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Assign Exam to Academy' | |
| tags: | |
| - AdminExam | |
| /api/v1/admin/exams/{exam_id}/events: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List all events that have this exam assigned | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search by event title / slug / event code | |
| in: query | |
| name: search | |
| type: string | |
| - description: Sort field (title, slug, event_code, start_event, end_event, | |
| created_at) | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort direction (asc / desc) | |
| in: query | |
| name: order | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_EventExamAssign' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Events by Exam' | |
| tags: | |
| - AdminExam | |
| /api/v1/admin/exams/{exam_id}/events/{event_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Remove an exam assignment from an event | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-map_string_bool' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Unassign Exam from Event' | |
| tags: | |
| - AdminExam | |
| post: | |
| consumes: | |
| - application/json | |
| description: Assign an exam to an event | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-map_string_bool' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Assign Exam to Event' | |
| tags: | |
| - AdminExam | |
| /api/v1/admin/exams/{exam_id}/problemsets: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List problem sets assigned to an exam | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Problem Sets by Exam' | |
| tags: | |
| - Admin ProblemSet | |
| /api/v1/admin/exams/{exam_id}/problemsets/{problemset_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Remove a problem set assignment from an exam | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - description: Problem Set ID | |
| in: path | |
| name: problemset_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Unassign Problem Set from Exam' | |
| tags: | |
| - Admin ProblemSet | |
| post: | |
| consumes: | |
| - application/json | |
| description: Assign a problem set to an exam | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| - description: Problem Set ID | |
| in: path | |
| name: problemset_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Assign Problem Set to Exam' | |
| tags: | |
| - Admin ProblemSet | |
| /api/v1/admin/exams/{exam_id}/problemsets/candidate: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List problem sets that can be assigned to an exam | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Candidate Problem Sets by Exam' | |
| tags: | |
| - Admin ProblemSet | |
| /api/v1/admin/problemsets: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List all problem sets | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Problem Sets' | |
| tags: | |
| - Admin ProblemSet | |
| post: | |
| consumes: | |
| - application/json | |
| description: Create a new problem set | |
| parameters: | |
| - description: Create Problem Set Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.CreateProblemSetRequest' | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Create Problem Set' | |
| tags: | |
| - Admin ProblemSet | |
| /api/v1/admin/problemsets/{id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Delete a problem set | |
| parameters: | |
| - description: Problem Set ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Delete Problem Set' | |
| tags: | |
| - Admin ProblemSet | |
| put: | |
| consumes: | |
| - application/json | |
| description: Update an existing problem set | |
| parameters: | |
| - description: Problem Set ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| - description: Update Problem Set Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.UpdateProblemSetRequest' | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Update Problem Set' | |
| tags: | |
| - Admin ProblemSet | |
| /api/v1/admin/problemsets/{id}/questions: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List questions that belong to a problem set | |
| parameters: | |
| - description: Problem Set ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: List Questions in Problem Set' | |
| tags: | |
| - Admin ProblemSet | |
| post: | |
| consumes: | |
| - application/json | |
| description: Create a question inside a problem set | |
| parameters: | |
| - description: Problem Set ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| - description: Create Question Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.CreateQuestionRequest' | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Add Question to Problem Set' | |
| tags: | |
| - Admin ProblemSet | |
| /api/v1/admin/problemsets/{id}/questions/{question_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Delete a question from a problem set | |
| parameters: | |
| - description: Problem Set ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| - description: Question ID | |
| in: path | |
| name: question_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Delete Question from Problem Set' | |
| tags: | |
| - Admin ProblemSet | |
| get: | |
| consumes: | |
| - application/json | |
| description: Get a single question from a problem set | |
| parameters: | |
| - description: Problem Set ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| - description: Question ID | |
| in: path | |
| name: question_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Question Detail in Problem Set' | |
| tags: | |
| - Admin ProblemSet | |
| put: | |
| consumes: | |
| - application/json | |
| description: Update a question in a problem set | |
| parameters: | |
| - description: Problem Set ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| - description: Question ID | |
| in: path | |
| name: question_id | |
| required: true | |
| type: string | |
| - description: Update Question Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.UpdateQuestionRequest' | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Update Question in Problem Set' | |
| tags: | |
| - Admin ProblemSet | |
| /api/v1/admin/problemsets/{id}/questions/bulk: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Create multiple questions inside a problem set | |
| parameters: | |
| - description: Problem Set ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| - description: Bulk Create Questions Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.BulkCreateQuestionsRequest' | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Bulk Add Questions to Problem Set' | |
| tags: | |
| - Admin ProblemSet | |
| put: | |
| consumes: | |
| - application/json | |
| description: Update multiple questions in a problem set | |
| parameters: | |
| - description: Problem Set ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| - description: Bulk Update Questions Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.BulkUpdateQuestionsRequest' | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Bulk Update Questions in Problem Set' | |
| tags: | |
| - Admin ProblemSet | |
| /api/v1/admin/proctoring/events/{event_slug}/exam/{exam_slug}/proctoring: | |
| get: | |
| consumes: | |
| - application/json | |
| description: List proctoring logs by account, exam, or event | |
| parameters: | |
| - description: Event Slug | |
| in: path | |
| name: event_slug | |
| required: true | |
| type: string | |
| - description: Exam Slug | |
| in: path | |
| name: exam_slug | |
| required: true | |
| type: string | |
| - description: Account ID | |
| in: query | |
| name: account_id | |
| type: string | |
| - description: Exam ID | |
| in: query | |
| name: exam_id | |
| type: string | |
| - description: Event ID | |
| in: query | |
| name: event_id | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_EventExamProctoringLogs' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: List Proctoring Logs | |
| tags: | |
| - Event Exam Proctoring | |
| /api/v1/admin/proctoring/events/{event_slug}/exam/{exam_slug}/proctoring/{log_id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Delete a proctoring log entry | |
| parameters: | |
| - description: Event Slug | |
| in: path | |
| name: event_slug | |
| required: true | |
| type: string | |
| - description: Exam Slug | |
| in: path | |
| name: exam_slug | |
| required: true | |
| type: string | |
| - description: Log ID | |
| in: path | |
| name: log_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-string' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "404": | |
| description: Not Found | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Delete Proctoring Log | |
| tags: | |
| - Event Exam Proctoring | |
| get: | |
| consumes: | |
| - application/json | |
| description: Get details of a specific proctoring log | |
| parameters: | |
| - description: Event Slug | |
| in: path | |
| name: event_slug | |
| required: true | |
| type: string | |
| - description: Exam Slug | |
| in: path | |
| name: exam_slug | |
| required: true | |
| type: string | |
| - description: Log ID | |
| in: path | |
| name: log_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_EventExamProctoringLogs' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "404": | |
| description: Not Found | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Get Proctoring Log By ID | |
| tags: | |
| - Event Exam Proctoring | |
| put: | |
| consumes: | |
| - multipart/form-data | |
| description: Update an existing proctoring log | |
| parameters: | |
| - description: Event Slug | |
| in: path | |
| name: event_slug | |
| required: true | |
| type: string | |
| - description: Exam Slug | |
| in: path | |
| name: exam_slug | |
| required: true | |
| type: string | |
| - description: Log ID | |
| in: path | |
| name: log_id | |
| required: true | |
| type: string | |
| - description: Violation Score | |
| in: formData | |
| name: violation_score | |
| type: integer | |
| - description: Violation Category | |
| in: formData | |
| name: violation_category | |
| type: string | |
| - description: Attachment File | |
| in: formData | |
| name: file | |
| type: file | |
| - description: Account ID (required for upload context) | |
| in: formData | |
| name: id_account | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-string' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "404": | |
| description: Not Found | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Update Proctoring Log | |
| tags: | |
| - Event Exam Proctoring | |
| /api/v1/admin/statistics/academy: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Aggregate statistics for all academies | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Academy Statistics Overview' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/admin/statistics/academy/{academy_id}: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Aggregate statistics for a single academy | |
| parameters: | |
| - description: Academy ID | |
| in: path | |
| name: academy_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Academy Statistics Detail' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/admin/statistics/event: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Aggregate statistics for all events | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Event Statistics Overview' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/admin/statistics/event/{event_id}: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Aggregate statistics for a single event | |
| parameters: | |
| - description: Event ID | |
| in: path | |
| name: event_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Event Statistics Detail' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/admin/statistics/exam: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Aggregate statistics for all exams | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Exam Statistics Overview' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/admin/statistics/exam/{exam_id}: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Aggregate statistics for a single exam | |
| parameters: | |
| - description: Exam ID | |
| in: path | |
| name: exam_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Exam Statistics Detail' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/admin/statistics/monthly-growth: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve monthly growth trend for users, academies, events, exams, | |
| and problemsets | |
| parameters: | |
| - default: 6 | |
| description: How many months to include | |
| in: query | |
| name: months | |
| type: integer | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.AdminStatisticMonthlyGrowthResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Monthly Growth Statistics' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/admin/statistics/problemset: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Aggregate statistics for all problemsets | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get ProblemSet Statistics Overview' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/admin/statistics/problemset/{problemset_id}: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Aggregate statistics for a single problemset | |
| parameters: | |
| - description: ProblemSet ID | |
| in: path | |
| name: problemset_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get ProblemSet Statistics Detail' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/admin/statistics/question: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Aggregate statistics for all questions | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Question Statistics Overview' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/admin/statistics/question/{question_id}: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Aggregate statistics for a single question | |
| parameters: | |
| - description: Question ID | |
| in: path | |
| name: question_id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: {} | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Question Statistics Detail' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/admin/statistics/summary: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve aggregate statistics for dashboard cards such as users, | |
| academies, events, exams, problemsets, attempts, and payment metrics | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.AdminStatisticSummaryResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Admin: Get Statistics Summary' | |
| tags: | |
| - AdminStatistic | |
| /api/v1/authentication/change-password: | |
| put: | |
| consumes: | |
| - application/json | |
| description: Change the password of the authenticated user | |
| parameters: | |
| - description: Change Password Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.ChangePasswordRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_AuthenticatedUser' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Change User Password | |
| tags: | |
| - Authentication | |
| /api/v1/authentication/external-login: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Authenticate user using external OAuth provider | |
| parameters: | |
| - description: External Auth Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.ExternalAuthRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_AuthenticatedUser' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: External Authentication | |
| tags: | |
| - Authentication | |
| /api/v1/authentication/login: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Authenticate user and obtain access token | |
| parameters: | |
| - description: Sign In Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.SignInRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_AuthenticatedUser' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: User Login | |
| tags: | |
| - Authentication | |
| /api/v1/authentication/refresh: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Refresh the access token using a valid refresh token | |
| parameters: | |
| - description: Refresh Token Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.RefreshTokenRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_AuthenticatedUser' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Refresh Access Token | |
| tags: | |
| - Authentication | |
| /api/v1/authentication/register: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Register a new user account | |
| parameters: | |
| - description: Sign Up Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.SignUpRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_Account' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: User Registration | |
| tags: | |
| - Authentication | |
| /api/v1/authentication/seed-superadmin: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Seed a super admin account using predefined credentials | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Seed Super Admin | |
| tags: | |
| - Authentication | |
| /api/v1/email/create-verification: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Generate a verification token and send it to the specified email | |
| address | |
| parameters: | |
| - description: Create Email Verification Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.CreateEmailVerificationRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_CreateEmailVerificationResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Create Email Verification Token | |
| tags: | |
| - Email Verification | |
| /api/v1/email/verify: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Validate the provided verification token for the specified email | |
| address | |
| parameters: | |
| - description: Validate Verify Email Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.ValidateVerifyEmailRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Validate Email Verification Token | |
| tags: | |
| - Email Verification | |
| /api/v1/events: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve a paginated list of events with optional filters | |
| parameters: | |
| - default: 10 | |
| description: Number of items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search term for event titles | |
| in: query | |
| name: search | |
| type: string | |
| - description: Field to sort by (e.g., 'date', 'title') | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: Sort order ('asc' or 'desc') | |
| in: query | |
| name: order | |
| type: string | |
| - description: Filter by registration status | |
| in: query | |
| name: registerStatus | |
| type: integer | |
| - description: Filter by event status (upcoming, ongoing, ended) | |
| in: query | |
| name: status | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_Events' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: List Events | |
| tags: | |
| - Event | |
| /api/v1/events/{event_slug}: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve detailed information about a specific event using its | |
| slug | |
| parameters: | |
| - description: Event Slug | |
| in: path | |
| name: event_slug | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_EventDetailResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Get Event Detail by Slug | |
| tags: | |
| - Event | |
| /api/v1/events/{event_slug}/{exam_slug}/scoreboard: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve a paginated scoreboard of participants ranked by their | |
| performance in a specific exam within an event | |
| parameters: | |
| - description: Event Slug | |
| in: path | |
| name: event_slug | |
| required: true | |
| type: string | |
| - description: Exam Slug | |
| in: path | |
| name: exam_slug | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Number of items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search keyword | |
| in: query | |
| name: search | |
| type: string | |
| - description: 'Sort field: ''score'' (default) or ''duration''' | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: 'Sort order: ''asc'' or ''desc''' | |
| in: query | |
| name: orderBy | |
| type: string | |
| - description: 'Sort order alias: ''asc'' or ''desc''' | |
| in: query | |
| name: order | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_dto_ExamScoreboardItem' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Exam Scoreboard | |
| tags: | |
| - Exam Event | |
| /api/v1/events/{event_slug}/exam: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve a list of exams associated with a specific event | |
| parameters: | |
| - description: Event Slug | |
| in: path | |
| name: event_slug | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_Exam' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: List Exams by Event | |
| tags: | |
| - Exam Event | |
| /api/v1/events/{event_slug}/exam/{attempt_id}/answer_question: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Submit an answer for a specific question in an exam attempt | |
| parameters: | |
| - description: Event Slug | |
| in: path | |
| name: event_slug | |
| required: true | |
| type: string | |
| - description: Exam Attempt ID | |
| in: path | |
| name: attempt_id | |
| required: true | |
| type: string | |
| - description: Answer Exam Event Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.AnswerEventExamRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_AnswerEventExamRequest' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Answer Exam Event Question | |
| tags: | |
| - Exam Event | |
| /api/v1/events/{event_slug}/exam/{exam_slug}/attempt: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Start an attempt for a specific exam in an event | |
| parameters: | |
| - description: Event Slug | |
| in: path | |
| name: event_slug | |
| required: true | |
| type: string | |
| - description: Exam Slug | |
| in: path | |
| name: exam_slug | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_EventExamAttempt' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Attempt Exam Event | |
| tags: | |
| - Exam Event | |
| /api/v1/events/{event_slug}/scoreboard: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve a paginated scoreboard of participants based on total | |
| score across all exams in an event | |
| parameters: | |
| - description: Event Slug | |
| in: path | |
| name: event_slug | |
| required: true | |
| type: string | |
| - default: 10 | |
| description: Number of items per page | |
| in: query | |
| name: limit | |
| type: integer | |
| - default: 1 | |
| description: Page number | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Search keyword | |
| in: query | |
| name: search | |
| type: string | |
| - description: 'Sort field: ''total_score'' (default), ''username'', or ''full_name''' | |
| in: query | |
| name: sortBy | |
| type: string | |
| - description: 'Sort order: ''asc'' or ''desc''' | |
| in: query | |
| name: orderBy | |
| type: string | |
| - description: 'Sort order alias: ''asc'' or ''desc''' | |
| in: query | |
| name: order | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_dto_EventScoreboardItem' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Event Scoreboard | |
| tags: | |
| - Exam Event | |
| /api/v1/events/logs/{event_slug}/exam/{exam_slug}/proctoring: | |
| post: | |
| consumes: | |
| - multipart/form-data | |
| description: Create a new proctoring log entry with optional file attachment | |
| parameters: | |
| - description: Event ID | |
| in: formData | |
| name: id_event | |
| required: true | |
| type: string | |
| - description: Exam ID | |
| in: formData | |
| name: id_exam | |
| required: true | |
| type: string | |
| - description: Account ID | |
| in: formData | |
| name: id_account | |
| required: true | |
| type: string | |
| - description: Violation Score | |
| in: formData | |
| name: violation_score | |
| required: true | |
| type: integer | |
| - description: Violation Category | |
| in: formData | |
| name: violation_category | |
| required: true | |
| type: string | |
| - description: Attachment File | |
| in: formData | |
| name: file | |
| type: file | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-string' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Create Proctoring Log | |
| tags: | |
| - Event Exam Proctoring | |
| /api/v1/events/register-event: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Register the authenticated user for an event using an event code | |
| parameters: | |
| - description: Join Event Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.JoinEventRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_EventDetailResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "402": | |
| description: Payment Required | |
| schema: | |
| $ref: '#/definitions/dto.RegisterEventPaymentActionRequiredResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Join Event | |
| tags: | |
| - Event | |
| /api/v1/files: | |
| post: | |
| consumes: | |
| - multipart/form-data | |
| description: Upload one or more files to the server | |
| parameters: | |
| - description: Upload Context (e.g., image, submission, material) | |
| in: formData | |
| name: context | |
| type: string | |
| - description: Files to upload (multiple allowed) | |
| in: formData | |
| name: files | |
| required: true | |
| type: file | |
| produces: | |
| - application/json | |
| responses: | |
| "201": | |
| description: Created | |
| schema: | |
| $ref: '#/definitions/dto.FileUploadResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "422": | |
| description: Unprocessable Entity | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Upload Files | |
| tags: | |
| - Upload | |
| /api/v1/files/{id}: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve file details using its ID | |
| parameters: | |
| - description: File ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.FileResponseSingle' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "404": | |
| description: Not Found | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Get File by ID | |
| tags: | |
| - Upload | |
| /api/v1/options/create: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Create multiple options in bulk | |
| parameters: | |
| - description: Bulk Options Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| items: | |
| $ref: '#/definitions/dto.OptionsRequest' | |
| type: array | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Create Bulk Options | |
| tags: | |
| - Option | |
| /api/v1/options/list/{slug}: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve option details using its slug | |
| parameters: | |
| - description: Option Slug | |
| in: path | |
| name: slug | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-models_Options' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Get Option by Slug | |
| tags: | |
| - Option | |
| /api/v1/options/region/cities: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve a list of cities within a specific province | |
| parameters: | |
| - description: Province ID | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| properties: | |
| province_id: | |
| type: integer | |
| type: object | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_RegionCity' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: List Cities by Province | |
| tags: | |
| - Region | |
| /api/v1/options/region/provinces: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve a list of all provinces | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_RegionProvince' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: List Provinces | |
| tags: | |
| - Region | |
| /api/v1/options/region/seed-cities: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Seed multiple cities into the system | |
| parameters: | |
| - description: Seed Cities Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| items: | |
| $ref: '#/definitions/models.RegionCity' | |
| type: array | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_models_RegionCity' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Seed Cities | |
| tags: | |
| - Region | |
| /api/v1/options/region/seed-provinces: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Seed multiple provinces into the system | |
| parameters: | |
| - description: Seed Provinces Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| items: | |
| $ref: '#/definitions/models.RegionProvince' | |
| type: array | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| summary: Seed Provinces | |
| tags: | |
| - Region | |
| /api/v1/super-admin/inject/probset: | |
| post: | |
| consumes: | |
| - multipart/form-data | |
| description: Inject problem sets and questions from an uploaded CSV (normalized_questions.csv | |
| format) | |
| parameters: | |
| - description: CSV file (normalized_questions.csv format) | |
| in: formData | |
| name: file | |
| required: true | |
| type: file | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_ProblemSetInjectResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "404": | |
| description: Not Found | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "409": | |
| description: Conflict | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Super Admin: Inject Problem Sets from CSV Upload' | |
| tags: | |
| - Super Admin Inject | |
| /api/v1/super-admin/inject/zip: | |
| post: | |
| consumes: | |
| - multipart/form-data | |
| description: Upload a zip file and mirror its directory structure to storage | |
| parameters: | |
| - description: Zip file | |
| in: formData | |
| name: file | |
| required: true | |
| type: file | |
| - description: Base path prefix in storage | |
| in: formData | |
| name: base_path | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_ZipInjectResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Super Admin: Inject Zip to Storage' | |
| tags: | |
| - Super Admin Inject | |
| /api/v1/super-admin/repair/problemset/naming/migrate: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Prefix problem set titles with a custom prefix by created_at range | |
| (defaults to [MIGRATED]) | |
| parameters: | |
| - description: Repair Problem Set Naming Migrate Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.RepairProblemSetNamingMigrateRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_RepairProblemSetNamingMigrateResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Super Admin: Repair Problem Set Naming Migrate' | |
| tags: | |
| - Super Admin Repair | |
| /api/v1/super-admin/repair/question/storage_path: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Replace @@PLUGINFILE@@ placeholders in questions with the storage | |
| URL and problem set ID | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_RepairQuestionStoragePathResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "500": | |
| description: Internal Server Error | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: 'Super Admin: Repair Question Storage Path' | |
| tags: | |
| - Super Admin Repair | |
| /api/v1/super-admin/users: | |
| get: | |
| consumes: | |
| - application/json | |
| description: Retrieve a paginated list of all users with optional role filter. | |
| Supports pagination parameters (page, limit) and can filter by user role. | |
| parameters: | |
| - description: Page number for pagination. Minimum value is 1. Default is 1. | |
| in: query | |
| name: page | |
| type: integer | |
| - description: Number of items per page. Minimum 1, Maximum 50. Default is 10. | |
| in: query | |
| name: limit | |
| type: integer | |
| - description: 'Filter users by role. Allowed values: user, admin, super_admin. | |
| Leave empty for no filter.' | |
| in: query | |
| name: role | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-array_dto_UserResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: List All Users with Pagination | |
| tags: | |
| - Super Admin Users Management | |
| post: | |
| consumes: | |
| - application/json | |
| description: Create a new user account by providing user details | |
| parameters: | |
| - description: Create User Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.CreateUserRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_UserResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Create Single User | |
| tags: | |
| - Super Admin Users Management | |
| /api/v1/super-admin/users/{id}: | |
| delete: | |
| consumes: | |
| - application/json | |
| description: Delete a user account by ID | |
| parameters: | |
| - description: User ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-any' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "404": | |
| description: Not Found | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Delete User | |
| tags: | |
| - Super Admin Users Management | |
| put: | |
| consumes: | |
| - application/json | |
| description: Update user information by ID | |
| parameters: | |
| - description: User ID | |
| in: path | |
| name: id | |
| required: true | |
| type: string | |
| - description: Update User Request | |
| in: body | |
| name: request | |
| required: true | |
| schema: | |
| $ref: '#/definitions/dto.UpdateUserRequest' | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_UserResponse' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "404": | |
| description: Not Found | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Edit User | |
| tags: | |
| - Super Admin Users Management | |
| /api/v1/super-admin/users/bulk: | |
| post: | |
| consumes: | |
| - application/json | |
| description: Create multiple user accounts at once | |
| parameters: | |
| - description: Bulk Create User Requests | |
| in: body | |
| name: requests | |
| required: true | |
| schema: | |
| items: | |
| $ref: '#/definitions/dto.CreateUserRequest' | |
| type: array | |
| produces: | |
| - application/json | |
| responses: | |
| "200": | |
| description: OK | |
| schema: | |
| $ref: '#/definitions/dto.SuccessResponse-dto_CreateUserRequest' | |
| "400": | |
| description: Bad Request | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "401": | |
| description: Unauthorized | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| "403": | |
| description: Forbidden | |
| schema: | |
| $ref: '#/definitions/dto.ErrorResponse' | |
| security: | |
| - BearerAuth: [] | |
| summary: Bulk Create Users | |
| tags: | |
| - Super Admin Users Management | |
| schemes: | |
| - https | |
| securityDefinitions: | |
| BearerAuth: | |
| in: header | |
| name: Authorization | |
| type: apiKey | |
| swagger: "2.0" | |