package grpc import ( pb "schedule_converter/proto/runner" "schedule_converter/models" "schedule_converter/parser" ) func convertCourses(courses []models.Course) []*pb.Course { result := make([]*pb.Course, len(courses)) for i, c := range courses { schedule := make([]*pb.ScheduleTime, len(c.Schedule)) for j, s := range c.Schedule { schedule[j] = &pb.ScheduleTime{ Day: s.Day, Sections: convertToInt32(s.Section), Weeks: convertToInt32(s.Weeks), } } result[i] = &pb.Course{ Name: c.Name, Teacher: c.Teacher, Room: c.Room, Schedule: schedule, } } return result } func convertToInt32(arr []int) []int32 { result := make([]int32, len(arr)) for i, v := range arr { result[i] = int32(v) } return result } func convertGrades(grades []parser.GradeEntry) []*pb.Grade { result := make([]*pb.Grade, 0, len(grades)) for _, g := range grades { result = append(result, &pb.Grade{ Term: g.Term, CourseCode: g.Code, CourseName: g.Name, Nature: g.Nature, Category: g.Category, Credit: g.Credit, Score: g.Score, GradePoint: g.GradePoint, IsExam: g.IsExam, IsRetake: g.IsRetake, }) } return result } func convertExams(exams []parser.ExamEntry) []*pb.Exam { result := make([]*pb.Exam, 0, len(exams)) for _, e := range exams { examTypeStr := "期末" switch e.Type { case parser.ExamTypeMidterm: examTypeStr = "期中" case parser.ExamTypeMakeup: examTypeStr = "补考" } result = append(result, &pb.Exam{ CourseName: e.Course, ExamType: examTypeStr, Date: e.Date, Time: e.Time, Week: e.Week, Weekday: e.Weekday, }) } return result } func convertEmptyClassrooms(entries []parser.EmptyClassroomEntry) []*pb.EmptyClassroomEntry { result := make([]*pb.EmptyClassroomEntry, 0, len(entries)) for _, e := range entries { result = append(result, &pb.EmptyClassroomEntry{ Classroom: e.Classroom, Weekday: e.Weekday, Periods: e.Periods, Term: e.Term, Weeks: e.Weeks, }) } return result } func convertCETStudentInfo(info parser.CETStudentInfo) *pb.CetStudentInfo { return &pb.CetStudentInfo{ StudentId: info.StudentID, Name: info.Name, Gender: info.Gender, IdCard: info.IDCard, Duration: info.Duration, Grade: info.Grade, College: info.College, Major: info.Major, } } func convertCETScores(scores []parser.CETScore) []*pb.CetScore { result := make([]*pb.CetScore, 0, len(scores)) for _, s := range scores { result = append(result, &pb.CetScore{ Level: s.Level, ExamTime: s.ExamTime, TicketNum: s.TicketNum, Score: s.Score, }) } return result }