package course_management import ( "context" "Yimaru-Backend/internal/config" "Yimaru-Backend/internal/domain" "Yimaru-Backend/internal/ports" notificationservice "Yimaru-Backend/internal/services/notification" ) type Service struct { userStore ports.UserStore courseStore ports.CourseStore notificationSvc *notificationservice.Service // messengerSvc *messenger.Service config *config.Config } func NewService( userStore ports.UserStore, courseStore ports.CourseStore, notificationSvc *notificationservice.Service, // messengerSvc *messenger.Service, cfg *config.Config, ) *Service { return &Service{ userStore: userStore, courseStore: courseStore, notificationSvc: notificationSvc, // messengerSvc: messengerSvc, config: cfg, } } // Course category methods func (s *Service) CreateCourseCategory(ctx context.Context, name string) (domain.CourseCategory, error) { return s.courseStore.CreateCourseCategory(ctx, name) } func (s *Service) GetCourseCategoryByID(ctx context.Context, id int64) (domain.CourseCategory, error) { return s.courseStore.GetCourseCategoryByID(ctx, id) } func (s *Service) ListActiveCourseCategories(ctx context.Context) ([]domain.CourseCategory, error) { return s.courseStore.ListActiveCourseCategories(ctx) } func (s *Service) UpdateCourseCategory(ctx context.Context, id int64, name string, isActive bool) (domain.CourseCategory, error) { return s.courseStore.UpdateCourseCategory(ctx, id, name, isActive) } func (s *Service) DeactivateCourseCategory(ctx context.Context, id int64) error { return s.courseStore.DeactivateCourseCategory(ctx, id) } // Courses func (s *Service) CreateCourse(ctx context.Context, c domain.Course) (domain.Course, error) { return s.courseStore.CreateCourse(ctx, c) } func (s *Service) GetCourseByID(ctx context.Context, id int64) (domain.Course, error) { return s.courseStore.GetCourseByID(ctx, id) } func (s *Service) ListCoursesByCategory(ctx context.Context, categoryID int64) ([]domain.Course, error) { return s.courseStore.ListCoursesByCategory(ctx, categoryID) } func (s *Service) ListActiveCourses(ctx context.Context) ([]domain.Course, error) { return s.courseStore.ListActiveCourses(ctx) } func (s *Service) UpdateCourse(ctx context.Context, c domain.Course) (domain.Course, error) { return s.courseStore.UpdateCourse(ctx, c) } func (s *Service) DeactivateCourse(ctx context.Context, id int64) error { return s.courseStore.DeactivateCourse(ctx, id) } // Programs func (s *Service) CreateProgram(ctx context.Context, p domain.Program) (domain.Program, error) { return s.courseStore.CreateProgram(ctx, p) } func (s *Service) GetProgramByID(ctx context.Context, id int64) (domain.Program, error) { return s.courseStore.GetProgramByID(ctx, id) } func (s *Service) ListProgramsByCourse(ctx context.Context, courseID int64) ([]domain.Program, error) { return s.courseStore.ListProgramsByCourse(ctx, courseID) } func (s *Service) ListActivePrograms(ctx context.Context) ([]domain.Program, error) { return s.courseStore.ListActivePrograms(ctx) } func (s *Service) UpdateProgram(ctx context.Context, p domain.Program) (domain.Program, error) { return s.courseStore.UpdateProgram(ctx, p) } func (s *Service) DeactivateProgram(ctx context.Context, id int64) error { return s.courseStore.DeactivateProgram(ctx, id) } // Modules func (s *Service) CreateModule(ctx context.Context, m domain.Module) (domain.Module, error) { return s.courseStore.CreateModule(ctx, m) } func (s *Service) GetModuleByID(ctx context.Context, id int64) (domain.Module, error) { return s.courseStore.GetModuleByID(ctx, id) } func (s *Service) ListModulesByLevel(ctx context.Context, levelID int64) ([]domain.Module, error) { return s.courseStore.ListModulesByLevel(ctx, levelID) } func (s *Service) UpdateModule(ctx context.Context, m domain.Module) (domain.Module, error) { return s.courseStore.UpdateModule(ctx, m) } func (s *Service) DeactivateModule(ctx context.Context, id int64) error { return s.courseStore.DeactivateModule(ctx, id) } // Module videos func (s *Service) CreateModuleVideo(ctx context.Context, v domain.ModuleVideo) (domain.ModuleVideo, error) { return s.courseStore.CreateModuleVideo(ctx, v) } func (s *Service) GetModuleVideoByID(ctx context.Context, id int64) (domain.ModuleVideo, error) { return s.courseStore.GetModuleVideoByID(ctx, id) } func (s *Service) ListAllVideosByModule(ctx context.Context, moduleID int64) ([]domain.ModuleVideo, error) { return s.courseStore.ListAllVideosByModule(ctx, moduleID) } func (s *Service) ListPublishedVideosByModule(ctx context.Context, moduleID int64) ([]domain.ModuleVideo, error) { return s.courseStore.ListPublishedVideosByModule(ctx, moduleID) } func (s *Service) UpdateModuleVideo(ctx context.Context, v domain.ModuleVideo) (domain.ModuleVideo, error) { return s.courseStore.UpdateModuleVideo(ctx, v) } func (s *Service) DeactivateModuleVideo(ctx context.Context, id int64) error { return s.courseStore.DeactivateModuleVideo(ctx, id) } // Practices func (s *Service) CreatePractice(ctx context.Context, p domain.Practice) (domain.Practice, error) { return s.courseStore.CreatePractice(ctx, p) } func (s *Service) GetPracticeByID(ctx context.Context, id int64) (domain.Practice, error) { return s.courseStore.GetPracticeByID(ctx, id) } func (s *Service) ListPracticesByOwner(ctx context.Context, ownerType string, ownerID int64) ([]domain.Practice, error) { return s.courseStore.ListPracticesByOwner(ctx, ownerType, ownerID) } func (s *Service) UpdatePractice(ctx context.Context, p domain.Practice) (domain.Practice, error) { return s.courseStore.UpdatePractice(ctx, p) } func (s *Service) DeactivatePractice(ctx context.Context, id int64) error { return s.courseStore.DeactivatePractice(ctx, id) } // Practice questions func (s *Service) CreatePracticeQuestion(ctx context.Context, qn domain.PracticeQuestion) (domain.PracticeQuestion, error) { return s.courseStore.CreatePracticeQuestion(ctx, qn) } func (s *Service) GetPracticeQuestionByID(ctx context.Context, id int64) (domain.PracticeQuestion, error) { return s.courseStore.GetPracticeQuestionByID(ctx, id) } func (s *Service) ListPracticeQuestions(ctx context.Context, practiceID int64) ([]domain.PracticeQuestion, error) { return s.courseStore.ListPracticeQuestions(ctx, practiceID) } func (s *Service) UpdatePracticeQuestion(ctx context.Context, qn domain.PracticeQuestion) (domain.PracticeQuestion, error) { return s.courseStore.UpdatePracticeQuestion(ctx, qn) } func (s *Service) DeletePracticeQuestion(ctx context.Context, id int64) error { return s.courseStore.DeletePracticeQuestion(ctx, id) } // Levels func (s *Service) CreateLevel(ctx context.Context, l domain.Level) (domain.Level, error) { return s.courseStore.CreateLevel(ctx, l) } func (s *Service) GetLevelByID(ctx context.Context, id int64) (domain.Level, error) { return s.courseStore.GetLevelByID(ctx, id) } func (s *Service) ListLevelsByProgram(ctx context.Context, programID int64) ([]domain.Level, error) { return s.courseStore.ListLevelsByProgram(ctx, programID) } func (s *Service) UpdateLevel(ctx context.Context, l domain.Level) (domain.Level, error) { return s.courseStore.UpdateLevel(ctx, l) } func (s *Service) DeactivateLevel(ctx context.Context, id int64) error { return s.courseStore.DeactivateLevel(ctx, id) }