init push
This commit is contained in:
57
internal/shared/pkg/appctx/appctx.go
Normal file
57
internal/shared/pkg/appctx/appctx.go
Normal file
@@ -0,0 +1,57 @@
|
||||
package appctx
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"wucher/internal/shared/pkg/uuidv7"
|
||||
)
|
||||
|
||||
type contextKey string
|
||||
|
||||
const userIDKey contextKey = "appctx-user-id"
|
||||
|
||||
func WithUserID(ctx context.Context, userID []byte) context.Context {
|
||||
if len(userID) == 0 {
|
||||
return ctx
|
||||
}
|
||||
|
||||
copyID := make([]byte, len(userID))
|
||||
copy(copyID, userID)
|
||||
return context.WithValue(ctx, userIDKey, copyID)
|
||||
}
|
||||
|
||||
func GetUserID(ctx context.Context) []byte {
|
||||
if ctx == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
raw := ctx.Value(userIDKey)
|
||||
if raw == nil {
|
||||
if getter, ok := any(ctx).(interface{ UserValue(any) any }); ok {
|
||||
raw = getter.UserValue("user_id")
|
||||
}
|
||||
}
|
||||
|
||||
switch v := raw.(type) {
|
||||
case []byte:
|
||||
if len(v) == 0 {
|
||||
return nil
|
||||
}
|
||||
out := make([]byte, len(v))
|
||||
copy(out, v)
|
||||
return out
|
||||
case string:
|
||||
s := strings.TrimSpace(v)
|
||||
if s == "" {
|
||||
return nil
|
||||
}
|
||||
id, err := uuidv7.ParseString(s)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return id
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user