feat: create session. (also print the x-rid into the log)
This commit is contained in:
		@ -33,6 +33,7 @@ type Context interface {
 | 
			
		||||
 | 
			
		||||
	// Request
 | 
			
		||||
	Bind(obj any) error
 | 
			
		||||
	GetHeader(key string) string
 | 
			
		||||
 | 
			
		||||
	// Response
 | 
			
		||||
	JSON(code int, obj any)
 | 
			
		||||
 | 
			
		||||
@ -26,6 +26,8 @@ import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"git.vinchent.xyz/vinchent/howmuch/internal/pkg/core"
 | 
			
		||||
	"git.vinchent.xyz/vinchent/howmuch/internal/pkg/middleware"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"go.uber.org/zap/zapcore"
 | 
			
		||||
)
 | 
			
		||||
@ -100,6 +102,26 @@ func NewLogger(opts *Options) *zapLogger {
 | 
			
		||||
	return &zapLogger{z: z}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CtxLog writes context's information into the log
 | 
			
		||||
func CtxLog(ctx core.Context) *zapLogger {
 | 
			
		||||
	return std.CtxLog(ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (z *zapLogger) CtxLog(ctx core.Context) *zapLogger {
 | 
			
		||||
	zz := z.clone()
 | 
			
		||||
 | 
			
		||||
	if rid := ctx.GetHeader(middleware.XRequestID); rid != "" {
 | 
			
		||||
		zz.z = zz.z.With(zap.Any(middleware.XRequestID, rid))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return zz
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (z *zapLogger) clone() *zapLogger {
 | 
			
		||||
	zz := *z
 | 
			
		||||
	return &zz
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (z *zapLogger) FatalLog(msg string, keyValues ...interface{}) {
 | 
			
		||||
	z.z.Sugar().Fatalw(msg, keyValues...)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -27,20 +27,20 @@ import (
 | 
			
		||||
	"github.com/google/uuid"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const requestID = "X-Request-Id"
 | 
			
		||||
const XRequestID = "X-Request-Id"
 | 
			
		||||
 | 
			
		||||
func RequestID() gin.HandlerFunc {
 | 
			
		||||
	return func(ctx *gin.Context) {
 | 
			
		||||
		var rid string
 | 
			
		||||
 | 
			
		||||
		if rid = ctx.GetHeader(requestID); rid != "" {
 | 
			
		||||
			ctx.Request.Header.Add(requestID, rid)
 | 
			
		||||
		if rid = ctx.GetHeader(XRequestID); rid != "" {
 | 
			
		||||
			ctx.Request.Header.Add(XRequestID, rid)
 | 
			
		||||
			ctx.Next()
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		rid = uuid.NewString()
 | 
			
		||||
		ctx.Request.Header.Add(requestID, rid)
 | 
			
		||||
		ctx.Header(requestID, rid)
 | 
			
		||||
		ctx.Request.Header.Add(XRequestID, rid)
 | 
			
		||||
		ctx.Header(XRequestID, rid)
 | 
			
		||||
		ctx.Next()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -58,21 +58,21 @@ func TestRequestID(t *testing.T) {
 | 
			
		||||
	wanted := "123"
 | 
			
		||||
 | 
			
		||||
	r.GET("/example", func(c *gin.Context) {
 | 
			
		||||
		got = c.GetHeader(requestID)
 | 
			
		||||
		got = c.GetHeader(XRequestID)
 | 
			
		||||
		c.Status(http.StatusOK)
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	r.POST("/example", func(c *gin.Context) {
 | 
			
		||||
		got = c.GetHeader(requestID)
 | 
			
		||||
		got = c.GetHeader(XRequestID)
 | 
			
		||||
		c.String(http.StatusAccepted, "ok")
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	// Test with Request ID
 | 
			
		||||
	_ = performRequest(r, "GET", "/example?a=100", header{requestID, wanted})
 | 
			
		||||
	_ = performRequest(r, "GET", "/example?a=100", header{XRequestID, wanted})
 | 
			
		||||
	assert.Equal(t, "123", got)
 | 
			
		||||
 | 
			
		||||
	res := performRequest(r, "GET", "/example?a=100")
 | 
			
		||||
	assert.NotEqual(t, "", got)
 | 
			
		||||
	assert.NoError(t, uuid.Validate(got))
 | 
			
		||||
	assert.Equal(t, res.Header()[requestID][0], got)
 | 
			
		||||
	assert.Equal(t, res.Header()[XRequestID][0], got)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user