quzuu-api-test / swagger /docs /swagger.yaml
lifedebugger's picture
Deploy files from GitHub repository
d984631
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:
- email
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:
- email
- 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:
- email
- 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:
- email
- 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"