44 lines
977 B
Go
44 lines
977 B
Go
package repository
|
|
|
|
import (
|
|
"Yimaru-Backend/internal/domain"
|
|
"context"
|
|
)
|
|
|
|
func (s *Store) GetFullLearningTree(ctx context.Context) ([]domain.TreeCourse, error) {
|
|
rows, err := s.queries.GetFullLearningTree(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
coursesMap := make(map[int64]*domain.TreeCourse)
|
|
|
|
for _, row := range rows {
|
|
course, ok := coursesMap[row.CourseID]
|
|
if !ok {
|
|
course = &domain.TreeCourse{
|
|
ID: row.CourseID,
|
|
Title: row.CourseTitle,
|
|
SubCourses: []domain.TreeSubCourse{},
|
|
}
|
|
coursesMap[row.CourseID] = course
|
|
}
|
|
|
|
if row.SubCourseID.Valid {
|
|
subCourse := domain.TreeSubCourse{
|
|
ID: row.SubCourseID.Int64,
|
|
Title: row.SubCourseTitle.String,
|
|
Level: row.SubCourseLevel.String,
|
|
}
|
|
course.SubCourses = append(course.SubCourses, subCourse)
|
|
}
|
|
}
|
|
|
|
courses := make([]domain.TreeCourse, 0, len(coursesMap))
|
|
for _, course := range coursesMap {
|
|
courses = append(courses, *course)
|
|
}
|
|
|
|
return courses, nil
|
|
}
|