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  }