package repositories import ( "context" "time" "tyapi-server/internal/domains/statistics/entities" ) // StatisticsRepository 统计指标仓储接口 type StatisticsRepository interface { // 基础CRUD操作 Save(ctx context.Context, metric *entities.StatisticsMetric) error FindByID(ctx context.Context, id string) (*entities.StatisticsMetric, error) FindByType(ctx context.Context, metricType string, limit, offset int) ([]*entities.StatisticsMetric, error) Update(ctx context.Context, metric *entities.StatisticsMetric) error Delete(ctx context.Context, id string) error // 按类型和日期范围查询 FindByTypeAndDateRange(ctx context.Context, metricType string, startDate, endDate time.Time) ([]*entities.StatisticsMetric, error) FindByTypeDimensionAndDateRange(ctx context.Context, metricType, dimension string, startDate, endDate time.Time) ([]*entities.StatisticsMetric, error) FindByTypeNameAndDateRange(ctx context.Context, metricType, metricName string, startDate, endDate time.Time) ([]*entities.StatisticsMetric, error) // 聚合查询 GetAggregatedMetrics(ctx context.Context, metricType, dimension string, startDate, endDate time.Time) (map[string]float64, error) GetMetricsByDimension(ctx context.Context, dimension string, startDate, endDate time.Time) ([]*entities.StatisticsMetric, error) // 统计查询 CountByType(ctx context.Context, metricType string) (int64, error) CountByTypeAndDateRange(ctx context.Context, metricType string, startDate, endDate time.Time) (int64, error) // 批量操作 BatchSave(ctx context.Context, metrics []*entities.StatisticsMetric) error BatchDelete(ctx context.Context, ids []string) error // 清理操作 DeleteByDateRange(ctx context.Context, startDate, endDate time.Time) error DeleteByTypeAndDateRange(ctx context.Context, metricType string, startDate, endDate time.Time) error } // StatisticsReportRepository 统计报告仓储接口 type StatisticsReportRepository interface { // 基础CRUD操作 Save(ctx context.Context, report *entities.StatisticsReport) error FindByID(ctx context.Context, id string) (*entities.StatisticsReport, error) FindByUser(ctx context.Context, userID string, limit, offset int) ([]*entities.StatisticsReport, error) FindByStatus(ctx context.Context, status string) ([]*entities.StatisticsReport, error) Update(ctx context.Context, report *entities.StatisticsReport) error Delete(ctx context.Context, id string) error // 按类型查询 FindByType(ctx context.Context, reportType string, limit, offset int) ([]*entities.StatisticsReport, error) FindByTypeAndPeriod(ctx context.Context, reportType, period string, limit, offset int) ([]*entities.StatisticsReport, error) // 按日期范围查询 FindByDateRange(ctx context.Context, startDate, endDate time.Time, limit, offset int) ([]*entities.StatisticsReport, error) FindByUserAndDateRange(ctx context.Context, userID string, startDate, endDate time.Time, limit, offset int) ([]*entities.StatisticsReport, error) // 统计查询 CountByUser(ctx context.Context, userID string) (int64, error) CountByType(ctx context.Context, reportType string) (int64, error) CountByStatus(ctx context.Context, status string) (int64, error) // 批量操作 BatchSave(ctx context.Context, reports []*entities.StatisticsReport) error BatchDelete(ctx context.Context, ids []string) error // 清理操作 DeleteExpiredReports(ctx context.Context, expiredBefore time.Time) error DeleteByStatus(ctx context.Context, status string) error } // StatisticsDashboardRepository 统计仪表板仓储接口 type StatisticsDashboardRepository interface { // 基础CRUD操作 Save(ctx context.Context, dashboard *entities.StatisticsDashboard) error FindByID(ctx context.Context, id string) (*entities.StatisticsDashboard, error) FindByUser(ctx context.Context, userID string, limit, offset int) ([]*entities.StatisticsDashboard, error) FindByUserRole(ctx context.Context, userRole string, limit, offset int) ([]*entities.StatisticsDashboard, error) Update(ctx context.Context, dashboard *entities.StatisticsDashboard) error Delete(ctx context.Context, id string) error // 按角色查询 FindByRole(ctx context.Context, userRole string, limit, offset int) ([]*entities.StatisticsDashboard, error) FindDefaultByRole(ctx context.Context, userRole string) (*entities.StatisticsDashboard, error) FindActiveByRole(ctx context.Context, userRole string, limit, offset int) ([]*entities.StatisticsDashboard, error) // 按状态查询 FindByStatus(ctx context.Context, isActive bool, limit, offset int) ([]*entities.StatisticsDashboard, error) FindByAccessLevel(ctx context.Context, accessLevel string, limit, offset int) ([]*entities.StatisticsDashboard, error) // 统计查询 CountByUser(ctx context.Context, userID string) (int64, error) CountByRole(ctx context.Context, userRole string) (int64, error) CountByStatus(ctx context.Context, isActive bool) (int64, error) // 批量操作 BatchSave(ctx context.Context, dashboards []*entities.StatisticsDashboard) error BatchDelete(ctx context.Context, ids []string) error // 特殊操作 SetDefaultDashboard(ctx context.Context, dashboardID string) error RemoveDefaultDashboard(ctx context.Context, userRole string) error ActivateDashboard(ctx context.Context, dashboardID string) error DeactivateDashboard(ctx context.Context, dashboardID string) error }