fix: panic
This commit is contained in:
@@ -10,11 +10,9 @@ import (
|
|||||||
"gitea.com/texpixel/document_ai/internal/storage/dao"
|
"gitea.com/texpixel/document_ai/internal/storage/dao"
|
||||||
"gitea.com/texpixel/document_ai/pkg/log"
|
"gitea.com/texpixel/document_ai/pkg/log"
|
||||||
"gorm.io/datatypes"
|
"gorm.io/datatypes"
|
||||||
"gorm.io/gorm"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type AnalyticsService struct {
|
type AnalyticsService struct {
|
||||||
db *gorm.DB
|
|
||||||
eventDao *dao.AnalyticsEventDao
|
eventDao *dao.AnalyticsEventDao
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,7 +52,7 @@ func (s *AnalyticsService) TrackEvent(ctx context.Context, req *analytics.TrackE
|
|||||||
CreatedAt: time.Now(),
|
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)
|
log.Error(ctx, "create analytics event failed", "error", err)
|
||||||
return fmt.Errorf("failed to track event")
|
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")
|
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)
|
log.Error(ctx, "batch create analytics events failed", "error", err)
|
||||||
return fmt.Errorf("failed to batch track events")
|
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 != "" {
|
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 {
|
} 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 != "" {
|
} 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 {
|
} 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 {
|
} else {
|
||||||
return nil, fmt.Errorf("invalid query parameters")
|
return nil, fmt.Errorf("invalid query parameters")
|
||||||
}
|
}
|
||||||
@@ -178,7 +176,7 @@ func (s *AnalyticsService) QueryEvents(ctx context.Context, req *analytics.Query
|
|||||||
|
|
||||||
// GetEventStats 获取事件统计
|
// GetEventStats 获取事件统计
|
||||||
func (s *AnalyticsService) GetEventStats(ctx context.Context, req *analytics.EventStatsRequest) (*analytics.EventStatsListResponse, error) {
|
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 {
|
if err != nil {
|
||||||
log.Error(ctx, "get event stats failed", "error", err)
|
log.Error(ctx, "get event stats failed", "error", err)
|
||||||
return nil, fmt.Errorf("failed to get event stats")
|
return nil, fmt.Errorf("failed to get event stats")
|
||||||
@@ -202,7 +200,7 @@ func (s *AnalyticsService) GetEventStats(ctx context.Context, req *analytics.Eve
|
|||||||
|
|
||||||
// CountUserEvents 统计用户事件数量
|
// CountUserEvents 统计用户事件数量
|
||||||
func (s *AnalyticsService) CountUserEvents(ctx context.Context, userID int64) (int64, error) {
|
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 {
|
if err != nil {
|
||||||
log.Error(ctx, "count user events failed", "error", err, "user_id", userID)
|
log.Error(ctx, "count user events failed", "error", err, "user_id", userID)
|
||||||
return 0, fmt.Errorf("failed to count user events")
|
return 0, fmt.Errorf("failed to count user events")
|
||||||
@@ -212,7 +210,7 @@ func (s *AnalyticsService) CountUserEvents(ctx context.Context, userID int64) (i
|
|||||||
|
|
||||||
// CountEventsByName 统计指定事件的数量
|
// CountEventsByName 统计指定事件的数量
|
||||||
func (s *AnalyticsService) CountEventsByName(ctx context.Context, eventName string) (int64, error) {
|
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 {
|
if err != nil {
|
||||||
log.Error(ctx, "count events by name failed", "error", err, "event_name", eventName)
|
log.Error(ctx, "count events by name failed", "error", err, "event_name", eventName)
|
||||||
return 0, fmt.Errorf("failed to count events")
|
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 {
|
func (s *AnalyticsService) CleanOldEvents(ctx context.Context, retentionDays int) error {
|
||||||
beforeTime := time.Now().AddDate(0, 0, -retentionDays)
|
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)
|
log.Error(ctx, "clean old events failed", "error", err, "before_time", beforeTime)
|
||||||
return fmt.Errorf("failed to clean old events")
|
return fmt.Errorf("failed to clean old events")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user