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 }