Compare commits

2 Commits

Author SHA1 Message Date
liuyuanchuang
d1a56a2ab3 fix: panic 2026-01-27 23:23:42 +08:00
liuyuanchuang
41df42dea4 feat: decode uid 2026-01-27 22:28:13 +08:00
2 changed files with 11 additions and 18 deletions

View File

@@ -37,12 +37,7 @@ func (h *AnalyticsHandler) TrackEvent(c *gin.Context) {
return
}
userID, err := common.GetUserIDFromContext(c)
if err != nil {
log.Error(c.Request.Context(), "get user id failed", "error", err)
c.JSON(http.StatusOK, common.ErrorResponse(c, common.CodeUnauthorized, "unauthorized"))
return
}
userID := common.GetUserIDFromContext(c)
req.UserID = userID
if err := h.analyticsService.TrackEvent(c.Request.Context(), &req); err != nil {

View File

@@ -10,11 +10,9 @@ import (
"gitea.com/texpixel/document_ai/internal/storage/dao"
"gitea.com/texpixel/document_ai/pkg/log"
"gorm.io/datatypes"
"gorm.io/gorm"
)
type AnalyticsService struct {
db *gorm.DB
eventDao *dao.AnalyticsEventDao
}
@@ -54,7 +52,7 @@ func (s *AnalyticsService) TrackEvent(ctx context.Context, req *analytics.TrackE
CreatedAt: time.Now(),
}
if err := s.eventDao.Create(s.db, event); err != nil {
if err := s.eventDao.Create(dao.DB.WithContext(ctx), event); err != nil {
log.Error(ctx, "create analytics event failed", "error", err)
return fmt.Errorf("failed to track event")
}
@@ -105,7 +103,7 @@ func (s *AnalyticsService) BatchTrackEvents(ctx context.Context, req *analytics.
return fmt.Errorf("no valid events to track")
}
if err := s.eventDao.BatchCreate(s.db, events); err != nil {
if err := s.eventDao.BatchCreate(dao.DB.WithContext(ctx), events); err != nil {
log.Error(ctx, "batch create analytics events failed", "error", err)
return fmt.Errorf("failed to batch track events")
}
@@ -123,16 +121,16 @@ func (s *AnalyticsService) QueryEvents(ctx context.Context, req *analytics.Query
// 根据不同条件查询
if req.UserID != nil && req.EventName != "" {
// 查询用户的指定事件
events, total, err = s.eventDao.GetUserEventsByName(s.db, *req.UserID, req.EventName, req.Page, req.PageSize)
events, total, err = s.eventDao.GetUserEventsByName(dao.DB.WithContext(ctx), *req.UserID, req.EventName, req.Page, req.PageSize)
} else if req.UserID != nil {
// 查询用户的所有事件
events, total, err = s.eventDao.GetUserEvents(s.db, *req.UserID, req.Page, req.PageSize)
events, total, err = s.eventDao.GetUserEvents(dao.DB.WithContext(ctx), *req.UserID, req.Page, req.PageSize)
} else if req.EventName != "" {
// 查询指定事件
events, total, err = s.eventDao.GetEventsByName(s.db, req.EventName, req.Page, req.PageSize)
events, total, err = s.eventDao.GetEventsByName(dao.DB.WithContext(ctx), req.EventName, req.Page, req.PageSize)
} else if req.StartTime != nil && req.EndTime != nil {
// 查询时间范围内的事件
events, total, err = s.eventDao.GetEventsByTimeRange(s.db, *req.StartTime, *req.EndTime, req.Page, req.PageSize)
events, total, err = s.eventDao.GetEventsByTimeRange(dao.DB.WithContext(ctx), *req.StartTime, *req.EndTime, req.Page, req.PageSize)
} else {
return nil, fmt.Errorf("invalid query parameters")
}
@@ -178,7 +176,7 @@ func (s *AnalyticsService) QueryEvents(ctx context.Context, req *analytics.Query
// GetEventStats 获取事件统计
func (s *AnalyticsService) GetEventStats(ctx context.Context, req *analytics.EventStatsRequest) (*analytics.EventStatsListResponse, error) {
results, err := s.eventDao.GetEventStats(s.db, req.StartTime, req.EndTime)
results, err := s.eventDao.GetEventStats(dao.DB.WithContext(ctx), req.StartTime, req.EndTime)
if err != nil {
log.Error(ctx, "get event stats failed", "error", err)
return nil, fmt.Errorf("failed to get event stats")
@@ -202,7 +200,7 @@ func (s *AnalyticsService) GetEventStats(ctx context.Context, req *analytics.Eve
// CountUserEvents 统计用户事件数量
func (s *AnalyticsService) CountUserEvents(ctx context.Context, userID int64) (int64, error) {
count, err := s.eventDao.CountUserEvents(s.db, userID)
count, err := s.eventDao.CountUserEvents(dao.DB.WithContext(ctx), userID)
if err != nil {
log.Error(ctx, "count user events failed", "error", err, "user_id", userID)
return 0, fmt.Errorf("failed to count user events")
@@ -212,7 +210,7 @@ func (s *AnalyticsService) CountUserEvents(ctx context.Context, userID int64) (i
// CountEventsByName 统计指定事件的数量
func (s *AnalyticsService) CountEventsByName(ctx context.Context, eventName string) (int64, error) {
count, err := s.eventDao.CountEventsByName(s.db, eventName)
count, err := s.eventDao.CountEventsByName(dao.DB.WithContext(ctx), eventName)
if err != nil {
log.Error(ctx, "count events by name failed", "error", err, "event_name", eventName)
return 0, fmt.Errorf("failed to count events")
@@ -224,7 +222,7 @@ func (s *AnalyticsService) CountEventsByName(ctx context.Context, eventName stri
func (s *AnalyticsService) CleanOldEvents(ctx context.Context, retentionDays int) error {
beforeTime := time.Now().AddDate(0, 0, -retentionDays)
if err := s.eventDao.DeleteOldEvents(s.db, beforeTime); err != nil {
if err := s.eventDao.DeleteOldEvents(dao.DB.WithContext(ctx), beforeTime); err != nil {
log.Error(ctx, "clean old events failed", "error", err, "before_time", beforeTime)
return fmt.Errorf("failed to clean old events")
}