74 lines
2.9 KiB
Go
74 lines
2.9 KiB
Go
package course_management
|
|
|
|
import (
|
|
"Yimaru-Backend/internal/domain"
|
|
"context"
|
|
)
|
|
|
|
// --- Prerequisites (admin) ---
|
|
|
|
func (s *Service) AddSubCoursePrerequisite(ctx context.Context, subCourseID, prerequisiteSubCourseID int64) error {
|
|
if subCourseID == prerequisiteSubCourseID {
|
|
return domain.ErrSelfPrerequisite
|
|
}
|
|
return s.progressionStore.AddSubCoursePrerequisite(ctx, subCourseID, prerequisiteSubCourseID)
|
|
}
|
|
|
|
func (s *Service) RemoveSubCoursePrerequisite(ctx context.Context, subCourseID, prerequisiteSubCourseID int64) error {
|
|
return s.progressionStore.RemoveSubCoursePrerequisite(ctx, subCourseID, prerequisiteSubCourseID)
|
|
}
|
|
|
|
func (s *Service) GetSubCoursePrerequisites(ctx context.Context, subCourseID int64) ([]domain.SubCoursePrerequisite, error) {
|
|
return s.progressionStore.GetSubCoursePrerequisites(ctx, subCourseID)
|
|
}
|
|
|
|
func (s *Service) GetSubCourseDependents(ctx context.Context, prerequisiteSubCourseID int64) ([]domain.SubCourseDependent, error) {
|
|
return s.progressionStore.GetSubCourseDependents(ctx, prerequisiteSubCourseID)
|
|
}
|
|
|
|
// --- User progress ---
|
|
|
|
func (s *Service) CheckSubCourseAccess(ctx context.Context, userID, subCourseID int64) (bool, error) {
|
|
unmet, err := s.progressionStore.CountUnmetPrerequisites(ctx, subCourseID, userID)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return unmet == 0, nil
|
|
}
|
|
|
|
func (s *Service) StartSubCourse(ctx context.Context, userID, subCourseID int64) (domain.UserSubCourseProgress, error) {
|
|
accessible, err := s.CheckSubCourseAccess(ctx, userID, subCourseID)
|
|
if err != nil {
|
|
return domain.UserSubCourseProgress{}, err
|
|
}
|
|
if !accessible {
|
|
return domain.UserSubCourseProgress{}, domain.ErrPrerequisiteNotMet
|
|
}
|
|
|
|
return s.progressionStore.StartSubCourseProgress(ctx, userID, subCourseID)
|
|
}
|
|
|
|
func (s *Service) UpdateSubCourseProgress(ctx context.Context, userID, subCourseID int64, percentage int16) error {
|
|
return s.progressionStore.UpdateSubCourseProgress(ctx, userID, subCourseID, percentage)
|
|
}
|
|
|
|
func (s *Service) CompleteSubCourse(ctx context.Context, userID, subCourseID int64) error {
|
|
return s.progressionStore.CompleteSubCourse(ctx, userID, subCourseID)
|
|
}
|
|
|
|
func (s *Service) RecalculateSubCourseProgress(ctx context.Context, userID, subCourseID int64) error {
|
|
return s.progressionStore.RecalculateSubCourseProgress(ctx, userID, subCourseID)
|
|
}
|
|
|
|
func (s *Service) GetUserSubCourseProgress(ctx context.Context, userID, subCourseID int64) (domain.UserSubCourseProgress, error) {
|
|
return s.progressionStore.GetUserSubCourseProgress(ctx, userID, subCourseID)
|
|
}
|
|
|
|
func (s *Service) GetUserCourseProgress(ctx context.Context, userID, courseID int64) ([]domain.UserCourseProgressItem, error) {
|
|
return s.progressionStore.GetUserCourseProgress(ctx, userID, courseID)
|
|
}
|
|
|
|
func (s *Service) GetSubCoursesWithProgress(ctx context.Context, userID, courseID int64) ([]domain.SubCourseWithProgress, error) {
|
|
return s.progressionStore.GetSubCoursesWithProgressByCourse(ctx, userID, courseID)
|
|
}
|