feat: add creator report overview export

This commit is contained in:
2026-01-13 11:44:29 +08:00
parent 4e35dff05c
commit 19b15bf20a
9 changed files with 1010 additions and 0 deletions

View File

@@ -69,6 +69,50 @@ func (c *Creator) CreateMemberInvite(
return services.Tenant.CreateInvite(ctx, tenantID, user.ID, form)
}
// Get report overview
//
// @Router /t/:tenantCode/v1/creator/reports/overview [get]
// @Summary Report overview
// @Description Get creator report overview
// @Tags CreatorCenter
// @Accept json
// @Produce json
// @Param start_at query string false "Start time (RFC3339)"
// @Param end_at query string false "End time (RFC3339)"
// @Param granularity query string false "Granularity (day)"
// @Success 200 {object} dto.ReportOverviewResponse
// @Bind user local key(__ctx_user)
// @Bind filter query
func (c *Creator) ReportOverview(
ctx fiber.Ctx,
user *models.User,
filter *dto.ReportOverviewFilter,
) (*dto.ReportOverviewResponse, error) {
tenantID := getTenantID(ctx)
return services.Creator.ReportOverview(ctx, tenantID, user.ID, filter)
}
// Export report overview
//
// @Router /t/:tenantCode/v1/creator/reports/export [post]
// @Summary Export report overview
// @Description Export creator report overview
// @Tags CreatorCenter
// @Accept json
// @Produce json
// @Param form body dto.ReportExportForm true "Export form"
// @Success 200 {object} dto.ReportExportResponse
// @Bind user local key(__ctx_user)
// @Bind form body
func (c *Creator) ExportReport(
ctx fiber.Ctx,
user *models.User,
form *dto.ReportExportForm,
) (*dto.ReportExportResponse, error) {
tenantID := getTenantID(ctx)
return services.Creator.ExportReport(ctx, tenantID, user.ID, form)
}
// Get creator dashboard stats
//
// @Router /t/:tenantCode/v1/creator/dashboard [get]

View File

@@ -0,0 +1,65 @@
package dto
type ReportOverviewFilter struct {
// StartAt 统计开始时间RFC3339可选默认当前时间往前 7 天)。
StartAt *string `query:"start_at"`
// EndAt 统计结束时间RFC3339可选默认当前时间
EndAt *string `query:"end_at"`
// Granularity 统计粒度day目前仅支持 day
Granularity *string `query:"granularity"`
}
type ReportOverviewResponse struct {
// Summary 汇总指标。
Summary ReportSummary `json:"summary"`
// Items 按日期拆分的趋势数据。
Items []ReportOverviewItem `json:"items"`
}
type ReportSummary struct {
// TotalViews 内容累计曝光(全量累计值,用于粗略换算)。
TotalViews int64 `json:"total_views"`
// PaidOrders 统计区间内已支付订单数。
PaidOrders int64 `json:"paid_orders"`
// PaidAmount 统计区间内已支付金额(单位元)。
PaidAmount float64 `json:"paid_amount"`
// RefundOrders 统计区间内退款订单数。
RefundOrders int64 `json:"refund_orders"`
// RefundAmount 统计区间内退款金额(单位元)。
RefundAmount float64 `json:"refund_amount"`
// ConversionRate 转化率(已支付订单数 / 累计曝光)。
ConversionRate float64 `json:"conversion_rate"`
}
type ReportOverviewItem struct {
// Date 日期YYYY-MM-DD
Date string `json:"date"`
// PaidOrders 当日已支付订单数。
PaidOrders int64 `json:"paid_orders"`
// PaidAmount 当日已支付金额(单位元)。
PaidAmount float64 `json:"paid_amount"`
// RefundOrders 当日退款订单数。
RefundOrders int64 `json:"refund_orders"`
// RefundAmount 当日退款金额(单位元)。
RefundAmount float64 `json:"refund_amount"`
}
type ReportExportForm struct {
// StartAt 统计开始时间RFC3339可选默认当前时间往前 7 天)。
StartAt *string `json:"start_at"`
// EndAt 统计结束时间RFC3339可选默认当前时间
EndAt *string `json:"end_at"`
// Granularity 统计粒度day目前仅支持 day
Granularity *string `json:"granularity"`
// Format 导出格式(仅支持 csv
Format string `json:"format"`
}
type ReportExportResponse struct {
// Filename 导出文件名。
Filename string `json:"filename"`
// MimeType 导出内容类型。
MimeType string `json:"mime_type"`
// Content 导出内容CSV 文本)。
Content string `json:"content"`
}

View File

@@ -191,6 +191,12 @@ func (r *Routes) Register(router fiber.Router) {
r.creator.ListPayoutAccounts,
Local[*models.User]("__ctx_user"),
))
r.log.Debugf("Registering route: Get /t/:tenantCode/v1/creator/reports/overview -> creator.ReportOverview")
router.Get("/t/:tenantCode/v1/creator/reports/overview"[len(r.Path()):], DataFunc2(
r.creator.ReportOverview,
Local[*models.User]("__ctx_user"),
Query[dto.ReportOverviewFilter]("filter"),
))
r.log.Debugf("Registering route: Get /t/:tenantCode/v1/creator/settings -> creator.GetSettings")
router.Get("/t/:tenantCode/v1/creator/settings"[len(r.Path()):], DataFunc1(
r.creator.GetSettings,
@@ -234,6 +240,12 @@ func (r *Routes) Register(router fiber.Router) {
Local[*models.User]("__ctx_user"),
Body[dto.PayoutAccount]("form"),
))
r.log.Debugf("Registering route: Post /t/:tenantCode/v1/creator/reports/export -> creator.ExportReport")
router.Post("/t/:tenantCode/v1/creator/reports/export"[len(r.Path()):], DataFunc2(
r.creator.ExportReport,
Local[*models.User]("__ctx_user"),
Body[dto.ReportExportForm]("form"),
))
r.log.Debugf("Registering route: Post /t/:tenantCode/v1/creator/withdraw -> creator.Withdraw")
router.Post("/t/:tenantCode/v1/creator/withdraw"[len(r.Path()):], Func2(
r.creator.Withdraw,