github.com/oinume/lekcije@v0.0.0-20231017100347-5b4c5eb6ab24/backend/interface/graphql/resolver/user.resolvers.go (about) 1 package resolver 2 3 // This file will be automatically regenerated based on the schema, any resolver implementations 4 // will be copied through when generating and any unknown code will be moved to the end. 5 // Code generated by github.com/99designs/gqlgen version v0.17.34 6 7 import ( 8 "context" 9 "fmt" 10 "strconv" 11 "time" 12 13 "github.com/morikuni/failure" 14 15 "github.com/oinume/lekcije/backend/interface/graphql/generated" 16 "github.com/oinume/lekcije/backend/interface/graphql/model" 17 "github.com/oinume/lekcije/backend/model2" 18 ) 19 20 // FollowingTeachers is the resolver for the followingTeachers field. 21 func (r *userResolver) FollowingTeachers(ctx context.Context, obj *model.User, first *int, after *string, last *int, before *string) (*model.FollowingTeacherConnection, error) { 22 userID, err := strconv.ParseUint(obj.ID, 10, 32) 23 if err != nil { 24 return nil, err 25 } 26 fts, err := r.followingTeacherRepo.FindByUserID(ctx, uint(userID)) 27 if err != nil { 28 return nil, err 29 } 30 followingTeachers := make([]*model.FollowingTeacher, len(fts)) 31 teacherIDs := make([]uint, len(fts)) 32 for i, ft := range fts { 33 teacherIDs[i] = ft.TeacherID 34 } 35 teachers, err := r.teacherRepo.FindByIDs(ctx, teacherIDs) 36 if err != nil { 37 return nil, err 38 } 39 teachersMap := make(map[uint]*model2.Teacher, len(teachers)) 40 for _, t := range teachers { 41 teachersMap[t.ID] = t 42 } 43 44 for i, ft := range fts { 45 t, ok := teachersMap[ft.TeacherID] 46 if !ok { 47 continue 48 } 49 followingTeachers[i] = &model.FollowingTeacher{ 50 ID: fmt.Sprintf("%d_%d", ft.UserID, ft.TeacherID), 51 Teacher: &model.Teacher{ 52 ID: fmt.Sprint(t.ID), 53 Name: t.Name, 54 }, 55 CreatedAt: ft.CreatedAt.String(), 56 } 57 } 58 59 return &model.FollowingTeacherConnection{ 60 Nodes: followingTeachers, 61 }, nil 62 } 63 64 // NotificationTimeSpans is the resolver for the notificationTimeSpans field. 65 func (r *userResolver) NotificationTimeSpans(ctx context.Context, obj *model.User) ([]*model.NotificationTimeSpan, error) { 66 userID, err := strconv.ParseUint(obj.ID, 10, 32) 67 if err != nil { 68 return nil, err 69 } 70 timeSpans, err := r.notificationTimeSpanRepo.FindByUserID(ctx, uint(userID)) 71 if err != nil { 72 return nil, err 73 } 74 75 gqlTimeSpans := make([]*model.NotificationTimeSpan, len(timeSpans)) 76 for i, nts := range timeSpans { 77 fromTime, err := time.Parse("15:04:05", nts.FromTime) 78 if err != nil { 79 return nil, failure.Wrap(err, failure.Messagef("invalid time format: FromTime=%v", nts.FromTime)) 80 } 81 toTime, err := time.Parse("15:04:05", nts.ToTime) 82 if err != nil { 83 return nil, failure.Wrap(err, failure.Messagef("invalid time format: ToTime=%v", nts.ToTime)) 84 } 85 gqlTimeSpans[i] = &model.NotificationTimeSpan{ 86 FromHour: fromTime.Hour(), 87 FromMinute: fromTime.Minute(), 88 ToHour: toTime.Hour(), 89 ToMinute: toTime.Minute(), 90 } 91 } 92 93 return gqlTimeSpans, nil 94 } 95 96 // User returns generated.UserResolver implementation. 97 func (r *Resolver) User() generated.UserResolver { return &userResolver{r} } 98 99 type userResolver struct{ *Resolver }