Yimaru-BackEnd/internal/ports/lms_practice.go
Yared Yemane 12ad59c409 Add draft vs published status for LMS and exam-prep practices.
Expose publish_status on create/update, filter learner-facing lists and gates, and add migration 000060.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 03:57:43 -07:00

34 lines
1.5 KiB
Go

package ports
import (
"Yimaru-Backend/internal/domain"
"context"
)
// QuestionSetByID is implemented by the questions store.
type QuestionSetByID interface {
GetQuestionSetByID(ctx context.Context, id int64) (domain.QuestionSet, error)
}
// UserByID is implemented by the user store.
type UserByID interface {
GetUserByID(ctx context.Context, id int64) (domain.User, error)
}
type LmsPracticeStore interface {
// courseID, moduleID, lessonID: exactly one non-nil, matching in.ParentKind / in.ParentID.
CreateLmsPractice(
ctx context.Context,
in domain.CreatePracticeInput,
courseID, moduleID, lessonID *int64,
) (domain.Practice, error)
GetLmsPracticeByID(ctx context.Context, id int64) (domain.Practice, error)
// TryGetLmsPracticeByQuestionSetID returns false when no LMS practice row references the question set.
TryGetLmsPracticeByQuestionSetID(ctx context.Context, questionSetID int64) (domain.Practice, bool, error)
ListLmsPracticesByCourseID(ctx context.Context, courseID int64, publishedOnly bool, limit, offset int32) ([]domain.Practice, int64, error)
ListLmsPracticesByModuleID(ctx context.Context, moduleID int64, publishedOnly bool, limit, offset int32) ([]domain.Practice, int64, error)
ListLmsPracticesByLessonID(ctx context.Context, lessonID int64, publishedOnly bool, limit, offset int32) ([]domain.Practice, int64, error)
UpdateLmsPractice(ctx context.Context, id int64, input domain.UpdatePracticeInput) (domain.Practice, error)
DeleteLmsPractice(ctx context.Context, id int64) error
}