Yimaru-BackEnd/internal/domain/practice_full_update.go
Yared Yemane 22464479ae feat: add full practice update endpoints for LMS and exam prep
PUT /practices/:id/full and PUT /exam-prep/practices/:id/full sync practice shell, question set settings, and questions in one request.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 02:43:34 -07:00

62 lines
3.5 KiB
Go

package domain
// FullUpdatePracticeInput updates a practice shell, its linked question set, and set questions in one request.
type FullUpdatePracticeInput struct {
Practice *FullUpdatePracticeShellInput `json:"practice,omitempty"`
QuestionSet *FullUpdateQuestionSetInput `json:"question_set,omitempty"`
Questions []FullUpdatePracticeQuestionItem `json:"questions,omitempty"`
}
// FullUpdatePracticeShellInput updates LMS or exam-prep practice metadata (parent is immutable).
type FullUpdatePracticeShellInput struct {
Title *string `json:"title,omitempty"`
StoryDescription *string `json:"story_description,omitempty"`
StoryImage *string `json:"story_image,omitempty"`
PersonaID *int64 `json:"persona_id,omitempty"`
QuestionSetID *int64 `json:"question_set_id,omitempty"`
QuickTips *string `json:"quick_tips,omitempty"`
PublishStatus *string `json:"publish_status,omitempty"`
}
// FullUpdateQuestionSetInput updates settings on the practice's linked question set.
type FullUpdateQuestionSetInput struct {
Title *string `json:"title,omitempty"`
Description *string `json:"description,omitempty"`
BannerImage *string `json:"banner_image,omitempty"`
Persona *string `json:"persona,omitempty"`
TimeLimitMinutes *int32 `json:"time_limit_minutes,omitempty"`
PassingScore *int32 `json:"passing_score,omitempty"`
ShuffleQuestions *bool `json:"shuffle_questions,omitempty"`
Status *string `json:"status,omitempty"`
IntroVideoURL *string `json:"intro_video_url,omitempty"`
}
// FullUpdatePracticeQuestionItem creates or updates a question and its membership in the practice question set.
// Omit id to create a new question. display_order defaults to the item's position in the questions array (1-based).
type FullUpdatePracticeQuestionItem struct {
ID *int64 `json:"id,omitempty"`
DisplayOrder *int32 `json:"display_order,omitempty"`
QuestionText *string `json:"question_text,omitempty"`
QuestionType *string `json:"question_type,omitempty"`
QuestionTypeDefinitionID *int64 `json:"question_type_definition_id,omitempty"`
DynamicPayload *DynamicQuestionPayload `json:"dynamic_payload,omitempty"`
DifficultyLevel *string `json:"difficulty_level,omitempty"`
Points *int32 `json:"points,omitempty"`
Explanation *string `json:"explanation,omitempty"`
Tips *string `json:"tips,omitempty"`
VoicePrompt *string `json:"voice_prompt,omitempty"`
SampleAnswerVoicePrompt *string `json:"sample_answer_voice_prompt,omitempty"`
ImageURL *string `json:"image_url,omitempty"`
Status *string `json:"status,omitempty"`
Options []CreateQuestionOptionInput `json:"options,omitempty"`
ShortAnswers []CreateShortAnswerInput `json:"short_answers,omitempty"`
AudioCorrectAnswerText *string `json:"audio_correct_answer_text,omitempty"`
}
// FullUpdatePracticeResult is returned after a successful full practice update.
type FullUpdatePracticeResult struct {
Practice interface{} `json:"practice"`
QuestionSet QuestionSet `json:"question_set"`
Questions []QuestionWithDetails `json:"questions"`
}