github.com/oinume/lekcije@v0.0.0-20231017100347-5b4c5eb6ab24/backend/context_data/context_data.go (about) 1 package context_data 2 3 import ( 4 "context" 5 6 "github.com/morikuni/failure" 7 8 "github.com/oinume/lekcije/backend/errors" 9 "github.com/oinume/lekcije/backend/model" 10 "github.com/oinume/lekcije/backend/model2" 11 ) 12 13 type ( 14 apiTokenKey struct{} 15 eventValuesKey struct{} 16 loggedInUserKey struct{} 17 trackingIDKey struct{} 18 ) 19 20 func GetLoggedInUser(ctx context.Context) (*model.User, error) { 21 value := ctx.Value(loggedInUserKey{}) 22 if user, ok := value.(*model.User); ok { 23 return user, nil 24 } 25 return nil, errors.NewNotFoundError(errors.WithMessage("Failed to get loggedInUser from context")) 26 } 27 28 func MustLoggedInUser(ctx context.Context) *model.User { 29 user, err := GetLoggedInUser(ctx) 30 if err != nil { 31 panic(err) 32 } 33 return user 34 } 35 36 func SetLoggedInUser(ctx context.Context, user *model.User) context.Context { 37 return context.WithValue(ctx, loggedInUserKey{}, user) 38 } 39 40 func SetTrackingID(ctx context.Context, trackingID string) context.Context { 41 return context.WithValue(ctx, trackingIDKey{}, trackingID) 42 } 43 44 func GetTrackingID(ctx context.Context) (string, error) { 45 value := ctx.Value(trackingIDKey{}) 46 if trackingID, ok := value.(string); ok { 47 return trackingID, nil 48 } 49 return "", errors.NewNotFoundError(errors.WithMessage("Failed to get trackingID from context")) 50 } 51 52 func MustTrackingID(ctx context.Context) string { 53 trackingID, err := GetTrackingID(ctx) 54 if err != nil { 55 panic(err) 56 } 57 return trackingID 58 } 59 60 func SetAPIToken(ctx context.Context, apiToken string) context.Context { 61 return context.WithValue(ctx, apiTokenKey{}, apiToken) 62 } 63 64 func GetAPIToken(ctx context.Context) (string, error) { 65 value := ctx.Value(apiTokenKey{}) 66 if apiToken, ok := value.(string); ok { 67 return apiToken, nil 68 } 69 return "", errors.NewNotFoundError(errors.WithMessage("failed to get api token from context")) 70 } 71 72 func SetGAMeasurementEvent(ctx context.Context, v *model2.GAMeasurementEvent) context.Context { 73 return context.WithValue(ctx, eventValuesKey{}, v) 74 } 75 76 func GetGAMeasurementEvent(ctx context.Context) (*model2.GAMeasurementEvent, error) { 77 v := ctx.Value(eventValuesKey{}) 78 if value, ok := v.(*model2.GAMeasurementEvent); ok { 79 return value, nil 80 } else { 81 return nil, failure.New(errors.Internal, failure.Message("failed get value from context")) 82 } 83 } 84 85 func MustGAMeasurementEvent(ctx context.Context) *model2.GAMeasurementEvent { 86 v, err := GetGAMeasurementEvent(ctx) 87 if err != nil { 88 panic(err) 89 } 90 return v 91 }