github.com/oinume/lekcije@v0.0.0-20231017100347-5b4c5eb6ab24/backend/interface/http/server.go (about) 1 package http 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 8 "github.com/jinzhu/gorm" 9 "go.uber.org/zap" 10 11 "github.com/oinume/lekcije/backend/context_data" 12 "github.com/oinume/lekcije/backend/infrastructure/ga_measurement" 13 interfaces "github.com/oinume/lekcije/backend/interface" 14 "github.com/oinume/lekcije/backend/usecase" 15 ) 16 17 type server struct { 18 accessLogger *zap.Logger 19 appLogger *zap.Logger 20 db *gorm.DB 21 errorRecorder *usecase.ErrorRecorder 22 senderHTTPClient *http.Client 23 gaMeasurementClient ga_measurement.Client 24 userAPITokenUsecase *usecase.UserAPIToken 25 } 26 27 func NewServer( 28 args *interfaces.ServerArgs, 29 errorRecorder *usecase.ErrorRecorder, 30 userAPITokenUsecase *usecase.UserAPIToken, 31 ) *server { 32 return &server{ 33 accessLogger: args.AccessLogger, 34 appLogger: args.AppLogger, 35 db: args.GormDB, 36 errorRecorder: errorRecorder, 37 senderHTTPClient: args.SenderHTTPClient, 38 gaMeasurementClient: args.GAMeasurementClient, 39 userAPITokenUsecase: userAPITokenUsecase, 40 } 41 } 42 43 func (s *server) sendGAMeasurementEvent( 44 ctx context.Context, 45 category, 46 action, 47 label string, 48 value int64, 49 userID uint32, 50 ) { 51 err := s.gaMeasurementClient.SendEvent( 52 ctx, 53 context_data.MustGAMeasurementEvent(ctx), 54 category, 55 action, 56 fmt.Sprint(userID), 57 0, 58 userID, 59 ) 60 if err != nil { 61 s.appLogger.Warn("SendEvent() failed", zap.Error(err)) 62 } 63 }