From 3b5660dba46fdc89f4e955f686521cb5a3c6dade Mon Sep 17 00:00:00 2001 From: AlvISsReimu Date: Fri, 10 Nov 2023 23:18:44 -0800 Subject: [PATCH 1/2] fix: add times to drop report for export --- internal/model/export.go | 1 + internal/service/export.go | 1 + 2 files changed, 2 insertions(+) diff --git a/internal/model/export.go b/internal/model/export.go index df59e170..57d73988 100644 --- a/internal/model/export.go +++ b/internal/model/export.go @@ -6,6 +6,7 @@ type ExportDropReportsAndPatternsResult struct { } type DropReportForExport struct { + Times int `json:"times"` PatternID int `json:"pattern_id"` CreatedAt int64 `json:"created_at"` AccountID int `json:"account_id"` diff --git a/internal/service/export.go b/internal/service/export.go index dd23de55..d0c10a97 100644 --- a/internal/service/export.go +++ b/internal/service/export.go @@ -50,6 +50,7 @@ func (s *Export) ExportDropReportsAndPatterns( dropReportForExportList := make([]*model.DropReportForExport, 0) for _, dropReport := range dropReports { dropReportForExportList = append(dropReportForExportList, &model.DropReportForExport{ + Times: dropReport.Times, PatternID: dropReport.PatternID, CreatedAt: dropReport.CreatedAt.UnixMilli(), AccountID: dropReport.AccountID, From 3575923d2e5e2747bdd085f6ea47e6851c36bc36 Mon Sep 17 00:00:00 2001 From: AlvISsReimu Date: Sat, 11 Nov 2023 00:04:20 -0800 Subject: [PATCH 2/2] feat: add filter on times for drop report export --- internal/controller/meta/admin.go | 12 +++++++++++- internal/model/drop_report_query_context.go | 1 + internal/repo/drop_report.go | 8 +++++++- internal/service/export.go | 5 +++-- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/internal/controller/meta/admin.go b/internal/controller/meta/admin.go index 922ebbc8..122702c6 100644 --- a/internal/controller/meta/admin.go +++ b/internal/controller/meta/admin.go @@ -622,6 +622,7 @@ func (c *AdminController) ExportDropReport(ctx *fiber.Ctx) error { SourceCategory string `json:"sourceCategory" validate:"omitempty,sourcecategory"` StartTime int64 `json:"start" swaggertype:"integer"` EndTime int64 `json:"end" validate:"omitempty,gtfield=StartTime" swaggertype:"integer"` + Times int `json:"times" validate:"gte=0,lte=6"` } var request exportDropReportRequest if err := rekuest.ValidBody(ctx, &request); err != nil { @@ -675,7 +676,16 @@ func (c *AdminController) ExportDropReport(ctx *fiber.Ctx) error { sourceCategory = constant.SourceCategoryAll } - result, err := c.ExportService.ExportDropReportsAndPatterns(ctx.UserContext(), request.Server, &startTime, &endTime, stage.StageID, itemIds, accountId, request.SourceCategory) + // handle times, 0 means no filter on times + var times null.Int + if request.Times != 0 { + times.Int64 = int64(request.Times) + times.Valid = true + } else { + times.Valid = false + } + + result, err := c.ExportService.ExportDropReportsAndPatterns(ctx.UserContext(), request.Server, &startTime, &endTime, times, stage.StageID, itemIds, accountId, request.SourceCategory) if err != nil { return err } diff --git a/internal/model/drop_report_query_context.go b/internal/model/drop_report_query_context.go index dd6d7c49..7d711e27 100644 --- a/internal/model/drop_report_query_context.go +++ b/internal/model/drop_report_query_context.go @@ -14,6 +14,7 @@ type DropReportQueryContext struct { StageItemFilter *map[int][]int `json:"stageItemFilter"` SourceCategory string `json:"sourceCategory"` ExcludeNonOneTimes bool `json:"excludeNonOneTimes"` + Times null.Int `json:"times"` } func (queryCtx *DropReportQueryContext) GetStageIds() []int { diff --git a/internal/repo/drop_report.go b/internal/repo/drop_report.go index 402a2991..2169b788 100644 --- a/internal/repo/drop_report.go +++ b/internal/repo/drop_report.go @@ -280,7 +280,7 @@ func (s *DropReport) GetDropReports(ctx context.Context, queryCtx *model.DropRep results := make([]*model.DropReport, 0) query := s.DB.NewSelect(). TableExpr("drop_reports AS dr"). - Column("pattern_id", "created_at", "account_id", "source_name", "version"). + Column("pattern_id", "created_at", "account_id", "source_name", "version", "times"). Order("created_at") s.handleServer(query, queryCtx.Server) s.handleCreatedAtWithTime(query, queryCtx.StartTime, queryCtx.EndTime) @@ -295,6 +295,12 @@ func (s *DropReport) GetDropReports(ctx context.Context, queryCtx *model.DropRep s.handleAccountAndReliability(query, queryCtx.AccountID) s.handleSourceName(query, queryCtx.SourceCategory) + if queryCtx.ExcludeNonOneTimes { + s.handleTimes(query, 1) + } else if queryCtx.Times.Valid { + s.handleTimes(query, int(queryCtx.Times.Int64)) + } + if err := query. Scan(ctx, &results); err != nil { return nil, err diff --git a/internal/service/export.go b/internal/service/export.go index d0c10a97..7e3aa5ca 100644 --- a/internal/service/export.go +++ b/internal/service/export.go @@ -28,7 +28,7 @@ func NewExport( } func (s *Export) ExportDropReportsAndPatterns( - ctx context.Context, server string, startTime *time.Time, endTime *time.Time, stageId int, itemIds []int, accountId null.Int, sourceCategory string, + ctx context.Context, server string, startTime *time.Time, endTime *time.Time, times null.Int, stageId int, itemIds []int, accountId null.Int, sourceCategory string, ) (*model.ExportDropReportsAndPatternsResult, error) { stageIdItemIdMap := make(map[int][]int) stageIdItemIdMap[stageId] = itemIds @@ -39,7 +39,8 @@ func (s *Export) ExportDropReportsAndPatterns( AccountID: accountId, StageItemFilter: &stageIdItemIdMap, SourceCategory: sourceCategory, - ExcludeNonOneTimes: true, + ExcludeNonOneTimes: false, + Times: times, } dropReports, err := s.DropReportService.GetDropReports(ctx, queryCtx) if err != nil {