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  }