From 05a0d07dbb3b52c49d2e158918786f51f8a4d206 Mon Sep 17 00:00:00 2001 From: Rogee Date: Mon, 9 Feb 2026 06:54:04 +0800 Subject: [PATCH] feat: implement tenant-side creator audit feature and update related tests and documentation Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus --- backend/app/http/v1/creator.go | 30 + backend/app/http/v1/dto/creator_audit.go | 45 + backend/app/http/v1/routes.gen.go | 5 + backend/app/services/coupon_test.go | 136 + backend/app/services/creator.go | 153 ++ backend/app/services/creator_test.go | 83 + backend/app/services/order_test.go | 73 + backend/app/services/tenant_member_test.go | 169 +- backend/docs/docs.go | 2194 ++++++++++++++++- backend/docs/swagger.json | 2194 ++++++++++++++++- backend/docs/swagger.yaml | 1464 ++++++++++- docs/release-evidence/2026-02-08.md | 299 +++ .../2026-02-08/admin-audit-page-loaded.png | Bin 0 -> 97892 bytes .../2026-02-08/admin-filter-result.png | Bin 0 -> 84142 bytes .../2026-02-08/admin-page-2.png | Bin 0 -> 83989 bytes .../2026-02-08/member-denied-state.png | Bin 0 -> 80785 bytes frontend/portal/src/api/creator.js | 4 + frontend/portal/src/layout/LayoutCreator.vue | 10 + frontend/portal/src/router/index.js | 5 + .../portal/src/views/creator/AuditView.vue | 347 +++ frontend/portal/src/views/user/LikesView.vue | 96 +- frontend/superadmin/dist/index.html | 2 +- frontend/superadmin/src/router/index.js | 8 + 23 files changed, 7205 insertions(+), 112 deletions(-) create mode 100644 backend/app/http/v1/dto/creator_audit.go create mode 100644 docs/release-evidence/2026-02-08.md create mode 100644 docs/release-evidence/2026-02-08/admin-audit-page-loaded.png create mode 100644 docs/release-evidence/2026-02-08/admin-filter-result.png create mode 100644 docs/release-evidence/2026-02-08/admin-page-2.png create mode 100644 docs/release-evidence/2026-02-08/member-denied-state.png create mode 100644 frontend/portal/src/views/creator/AuditView.vue diff --git a/backend/app/http/v1/creator.go b/backend/app/http/v1/creator.go index 28e9e08..7e41dd7 100644 --- a/backend/app/http/v1/creator.go +++ b/backend/app/http/v1/creator.go @@ -186,6 +186,36 @@ func (c *Creator) ListOrders(ctx fiber.Ctx, filter *dto.CreatorOrderListFilter) return services.Creator.ListOrders(ctx, tenantID, userID, filter) } +// List creator audit logs +// +// @Router /v1/t/:tenantCode/creator/audit-logs [get] +// @Summary List creator audit logs +// @Description 查询当前租户创作者侧审计日志(仅管理员可见) +// @Tags CreatorCenter +// @Accept json +// @Produce json +// @Param page query int false "Page" +// @Param limit query int false "Limit" +// @Param operator_id query int false "Operator ID" +// @Param operator_name query string false "Operator name" +// @Param action query string false "Action" +// @Param target_id query string false "Target ID" +// @Param keyword query string false "Keyword" +// @Param created_at_from query string false "Created at from (RFC3339)" +// @Param created_at_to query string false "Created at to (RFC3339)" +// @Success 200 {object} requests.Pager{items=[]dto.CreatorAuditLogItem} +// @Bind filter query +func (c *Creator) ListAuditLogs(ctx fiber.Ctx, filter *dto.CreatorAuditLogListFilter) (*requests.Pager, error) { + if filter == nil { + filter = &dto.CreatorAuditLogListFilter{} + } + + tenantID := getTenantID(ctx) + userID := getUserID(ctx) + + return services.Creator.ListAuditLogs(ctx, tenantID, userID, filter) +} + // Process order refund // // @Router /v1/t/:tenantCode/creator/orders/:id/refund [post] diff --git a/backend/app/http/v1/dto/creator_audit.go b/backend/app/http/v1/dto/creator_audit.go new file mode 100644 index 0000000..e300fb6 --- /dev/null +++ b/backend/app/http/v1/dto/creator_audit.go @@ -0,0 +1,45 @@ +package dto + +import "quyun/v2/app/requests" + +// CreatorAuditLogListFilter 创作者侧审计日志列表过滤条件。 +type CreatorAuditLogListFilter struct { + // Pagination 分页参数(page/limit)。 + requests.Pagination + // OperatorID 操作者用户ID,精确匹配。 + OperatorID *int64 `query:"operator_id"` + // OperatorName 操作者用户名/昵称,模糊匹配。 + OperatorName *string `query:"operator_name"` + // Action 动作标识,精确匹配。 + Action *string `query:"action"` + // TargetID 目标ID,精确匹配。 + TargetID *string `query:"target_id"` + // Keyword 详情关键词,模糊匹配。 + Keyword *string `query:"keyword"` + // CreatedAtFrom 创建时间起始(RFC3339/2006-01-02)。 + CreatedAtFrom *string `query:"created_at_from"` + // CreatedAtTo 创建时间结束(RFC3339/2006-01-02)。 + CreatedAtTo *string `query:"created_at_to"` + // Asc 升序字段(id/created_at)。 + Asc *string `query:"asc"` + // Desc 降序字段(id/created_at)。 + Desc *string `query:"desc"` +} + +// CreatorAuditLogItem 创作者侧审计日志条目。 +type CreatorAuditLogItem struct { + // ID 审计日志ID。 + ID int64 `json:"id"` + // OperatorID 操作者用户ID。 + OperatorID int64 `json:"operator_id"` + // OperatorName 操作者用户名/昵称。 + OperatorName string `json:"operator_name"` + // Action 动作标识。 + Action string `json:"action"` + // TargetID 目标ID。 + TargetID string `json:"target_id"` + // Detail 操作详情。 + Detail string `json:"detail"` + // CreatedAt 创建时间(RFC3339)。 + CreatedAt string `json:"created_at"` +} diff --git a/backend/app/http/v1/routes.gen.go b/backend/app/http/v1/routes.gen.go index 444a4e8..6f97303 100644 --- a/backend/app/http/v1/routes.gen.go +++ b/backend/app/http/v1/routes.gen.go @@ -171,6 +171,11 @@ func (r *Routes) Register(router fiber.Router) { r.creator.RemovePayoutAccount, QueryParam[int64]("id"), )) + r.log.Debugf("Registering route: Get /v1/t/:tenantCode/creator/audit-logs -> creator.ListAuditLogs") + router.Get("/v1/t/:tenantCode/creator/audit-logs"[len(r.Path()):], DataFunc1( + r.creator.ListAuditLogs, + Query[dto.CreatorAuditLogListFilter]("filter"), + )) r.log.Debugf("Registering route: Get /v1/t/:tenantCode/creator/contents -> creator.ListContents") router.Get("/v1/t/:tenantCode/creator/contents"[len(r.Path()):], DataFunc1( r.creator.ListContents, diff --git a/backend/app/services/coupon_test.go b/backend/app/services/coupon_test.go index a1291b1..062333b 100644 --- a/backend/app/services/coupon_test.go +++ b/backend/app/services/coupon_test.go @@ -2,9 +2,11 @@ package services import ( "database/sql" + "errors" "testing" "quyun/v2/app/commands/testx" + "quyun/v2/app/errorx" order_dto "quyun/v2/app/http/v1/dto" "quyun/v2/database" "quyun/v2/database/models" @@ -196,3 +198,137 @@ func (s *CouponTestSuite) Test_ListAvailable() { So(list[0].CouponID, ShouldEqual, cp.ID) }) } + +func (s *CouponTestSuite) Test_Validate_DenyCrossTenantCoupon() { + Convey("Validate should deny cross-tenant coupon", s.T(), func() { + ctx := s.T().Context() + database.Truncate( + ctx, + s.DB, + models.TableNameCoupon, + models.TableNameUserCoupon, + models.TableNameUser, + ) + + user := &models.User{Username: "coupon_cross_validate", Phone: "13800000011"} + So(models.UserQuery.WithContext(ctx).Create(user), ShouldBeNil) + + tenantA := int64(11) + tenantB := int64(22) + coupon := &models.Coupon{ + TenantID: tenantA, + Title: "Tenant A Coupon", + Type: consts.CouponTypeFixAmount, + Value: 200, + MinOrderAmount: 0, + } + So(models.CouponQuery.WithContext(ctx).Create(coupon), ShouldBeNil) + + userCoupon := &models.UserCoupon{ + UserID: user.ID, + CouponID: coupon.ID, + Status: consts.UserCouponStatusUnused, + } + So(models.UserCouponQuery.WithContext(ctx).Create(userCoupon), ShouldBeNil) + + _, err := Coupon.Validate(ctx, tenantB, user.ID, userCoupon.ID, 1000) + So(err, ShouldNotBeNil) + + var appErr *errorx.AppError + So(errors.As(err, &appErr), ShouldBeTrue) + So(appErr.Code, ShouldEqual, errorx.ErrForbidden.Code) + }) +} + +func (s *CouponTestSuite) Test_MarkUsed_DenyCrossTenantCoupon() { + Convey("MarkUsed should deny cross-tenant coupon", s.T(), func() { + ctx := s.T().Context() + database.Truncate( + ctx, + s.DB, + models.TableNameCoupon, + models.TableNameUserCoupon, + models.TableNameOrder, + models.TableNameUser, + ) + + user := &models.User{Username: "coupon_cross_mark", Phone: "13800000012"} + So(models.UserQuery.WithContext(ctx).Create(user), ShouldBeNil) + + tenantA := int64(33) + tenantB := int64(44) + coupon := &models.Coupon{ + TenantID: tenantA, + Title: "Tenant A Coupon", + Type: consts.CouponTypeFixAmount, + Value: 200, + MinOrderAmount: 0, + } + So(models.CouponQuery.WithContext(ctx).Create(coupon), ShouldBeNil) + + userCoupon := &models.UserCoupon{ + UserID: user.ID, + CouponID: coupon.ID, + Status: consts.UserCouponStatusUnused, + } + So(models.UserCouponQuery.WithContext(ctx).Create(userCoupon), ShouldBeNil) + + order := &models.Order{ + TenantID: tenantA, + UserID: user.ID, + Type: consts.OrderTypeContentPurchase, + Status: consts.OrderStatusCreated, + } + So(models.OrderQuery.WithContext(ctx).Create(order), ShouldBeNil) + + err := models.Q.Transaction(func(tx *models.Query) error { + return Coupon.MarkUsed(ctx, tx, tenantB, userCoupon.ID, order.ID) + }) + So(err, ShouldNotBeNil) + + var appErr *errorx.AppError + So(errors.As(err, &appErr), ShouldBeTrue) + So(appErr.Code, ShouldEqual, errorx.ErrForbidden.Code) + }) +} + +func (s *CouponTestSuite) Test_Grant_DenyCrossTenantCoupon() { + Convey("Grant should reject coupon from another tenant", s.T(), func() { + ctx := s.T().Context() + database.Truncate( + ctx, + s.DB, + models.TableNameCoupon, + models.TableNameUserCoupon, + models.TableNameUser, + ) + + user := &models.User{Username: "coupon_cross_grant", Phone: "13800000013"} + So(models.UserQuery.WithContext(ctx).Create(user), ShouldBeNil) + + tenantA := int64(55) + tenantB := int64(66) + coupon := &models.Coupon{ + TenantID: tenantA, + Title: "Tenant A Coupon", + Type: consts.CouponTypeFixAmount, + Value: 200, + MinOrderAmount: 0, + } + So(models.CouponQuery.WithContext(ctx).Create(coupon), ShouldBeNil) + + granted, err := Coupon.Grant(ctx, tenantB, coupon.ID, []int64{user.ID}) + So(err, ShouldNotBeNil) + So(granted, ShouldEqual, 0) + + var appErr *errorx.AppError + So(errors.As(err, &appErr), ShouldBeTrue) + So(appErr.Code, ShouldEqual, errorx.ErrRecordNotFound.Code) + + exists, err := models.UserCouponQuery.WithContext(ctx). + Where(models.UserCouponQuery.UserID.Eq(user.ID), models.UserCouponQuery.CouponID.Eq(coupon.ID)). + Exists() + So(err, ShouldBeNil) + So(exists, ShouldBeFalse) + }) +} diff --git a/backend/app/services/creator.go b/backend/app/services/creator.go index 09fd8c7..6b680ff 100644 --- a/backend/app/services/creator.go +++ b/backend/app/services/creator.go @@ -16,6 +16,7 @@ import ( "quyun/v2/pkg/consts" "github.com/google/uuid" + "go.ipao.vip/gen/field" "go.ipao.vip/gen/types" "gorm.io/gorm" ) @@ -717,6 +718,158 @@ func (s *creator) ListOrders( return data, nil } +func (s *creator) ListAuditLogs( + ctx context.Context, + tenantID int64, + userID int64, + filter *creator_dto.CreatorAuditLogListFilter, +) (*requests.Pager, error) { + if filter == nil { + filter = &creator_dto.CreatorAuditLogListFilter{} + } + if tenantID == 0 { + return nil, errorx.ErrRecordNotFound.WithMsg("租户不存在") + } + + if _, err := Tenant.ensureTenantAdmin(ctx, tenantID, userID); err != nil { + return nil, err + } + + tbl, q := models.AuditLogQuery.QueryContext(ctx) + q = q.Where(tbl.TenantID.Eq(tenantID)) + + if filter.OperatorID != nil && *filter.OperatorID > 0 { + q = q.Where(tbl.OperatorID.Eq(*filter.OperatorID)) + } + if filter.Action != nil && strings.TrimSpace(*filter.Action) != "" { + q = q.Where(tbl.Action.Eq(strings.TrimSpace(*filter.Action))) + } + if filter.TargetID != nil && strings.TrimSpace(*filter.TargetID) != "" { + q = q.Where(tbl.TargetID.Eq(strings.TrimSpace(*filter.TargetID))) + } + if filter.Keyword != nil && strings.TrimSpace(*filter.Keyword) != "" { + keyword := "%" + strings.TrimSpace(*filter.Keyword) + "%" + q = q.Where(field.Or(tbl.Detail.Like(keyword), tbl.Action.Like(keyword), tbl.TargetID.Like(keyword))) + } + + operatorIDs, operatorFilter, err := Tenant.lookupUserIDs(ctx, filter.OperatorName) + if err != nil { + return nil, err + } + if operatorFilter { + if len(operatorIDs) == 0 { + q = q.Where(tbl.ID.Eq(-1)) + } else { + q = q.Where(tbl.OperatorID.In(operatorIDs...)) + } + } + + if filter.CreatedAtFrom != nil { + from, err := Super.parseFilterTime(filter.CreatedAtFrom) + if err != nil { + return nil, err + } + if from != nil { + q = q.Where(tbl.CreatedAt.Gte(*from)) + } + } + if filter.CreatedAtTo != nil { + to, err := Super.parseFilterTime(filter.CreatedAtTo) + if err != nil { + return nil, err + } + if to != nil { + q = q.Where(tbl.CreatedAt.Lte(*to)) + } + } + + orderApplied := false + if filter.Desc != nil && strings.TrimSpace(*filter.Desc) != "" { + switch strings.TrimSpace(*filter.Desc) { + case "id": + q = q.Order(tbl.ID.Desc()) + case "created_at": + q = q.Order(tbl.CreatedAt.Desc()) + } + orderApplied = true + } else if filter.Asc != nil && strings.TrimSpace(*filter.Asc) != "" { + switch strings.TrimSpace(*filter.Asc) { + case "id": + q = q.Order(tbl.ID) + case "created_at": + q = q.Order(tbl.CreatedAt) + } + orderApplied = true + } + if !orderApplied { + q = q.Order(tbl.CreatedAt.Desc()) + } + + filter.Pagination.Format() + total, err := q.Count() + if err != nil { + return nil, errorx.ErrDatabaseError.WithCause(err) + } + list, err := q.Offset(int(filter.Pagination.Offset())).Limit(int(filter.Pagination.Limit)).Find() + if err != nil { + return nil, errorx.ErrDatabaseError.WithCause(err) + } + if len(list) == 0 { + return &requests.Pager{ + Pagination: filter.Pagination, + Total: total, + Items: []creator_dto.CreatorAuditLogItem{}, + }, nil + } + + operatorSet := make(map[int64]struct{}, len(list)) + for _, log := range list { + if log.OperatorID > 0 { + operatorSet[log.OperatorID] = struct{}{} + } + } + + operatorMap := make(map[int64]*models.User, len(operatorSet)) + if len(operatorSet) > 0 { + ids := make([]int64, 0, len(operatorSet)) + for id := range operatorSet { + ids = append(ids, id) + } + userTbl, userQuery := models.UserQuery.QueryContext(ctx) + users, err := userQuery.Where(userTbl.ID.In(ids...)).Find() + if err != nil { + return nil, errorx.ErrDatabaseError.WithCause(err) + } + for _, user := range users { + operatorMap[user.ID] = user + } + } + + items := make([]creator_dto.CreatorAuditLogItem, 0, len(list)) + for _, log := range list { + item := creator_dto.CreatorAuditLogItem{ + ID: log.ID, + OperatorID: log.OperatorID, + Action: log.Action, + TargetID: log.TargetID, + Detail: log.Detail, + CreatedAt: s.formatTime(log.CreatedAt), + } + if operator := operatorMap[log.OperatorID]; operator != nil { + item.OperatorName = operator.Username + } else if log.OperatorID > 0 { + item.OperatorName = "ID:" + strconv.FormatInt(log.OperatorID, 10) + } + items = append(items, item) + } + + return &requests.Pager{ + Pagination: filter.Pagination, + Total: total, + Items: items, + }, nil +} + func (s *creator) ProcessRefund(ctx context.Context, tenantID, userID, id int64, form *creator_dto.RefundForm) error { tid, err := s.getTenantID(ctx, tenantID, userID) if err != nil { diff --git a/backend/app/services/creator_test.go b/backend/app/services/creator_test.go index fb555d5..4087dad 100644 --- a/backend/app/services/creator_test.go +++ b/backend/app/services/creator_test.go @@ -592,3 +592,86 @@ func (s *CreatorTestSuite) Test_ExportReport() { So(resp.Content, ShouldContainSubstring, "date,paid_orders,paid_amount,refund_orders,refund_amount,withdrawal_apply_orders,withdrawal_apply_amount,withdrawal_paid_orders,withdrawal_paid_amount,withdrawal_failed_orders,withdrawal_failed_amount,content_created,like_actions,favorite_actions,comment_count") }) } + +func (s *CreatorTestSuite) Test_ListAuditLogs() { + Convey("ListAuditLogs", s.T(), func() { + ctx := s.T().Context() + database.Truncate(ctx, s.DB, + models.TableNameAuditLog, + models.TableNameTenant, + models.TableNameUser, + ) + + owner := &models.User{Username: "owner_audit", Phone: "13900001013"} + operator := &models.User{Username: "operator_audit", Phone: "13900001014"} + outsider := &models.User{Username: "outsider_audit", Phone: "13900001015"} + models.UserQuery.WithContext(ctx).Create(owner, operator, outsider) + + tenantA := &models.Tenant{ + Name: "Tenant Audit A", + Code: "tenant_audit_a", + UserID: owner.ID, + Status: consts.TenantStatusVerified, + } + tenantB := &models.Tenant{ + Name: "Tenant Audit B", + Code: "tenant_audit_b", + UserID: operator.ID, + Status: consts.TenantStatusVerified, + } + models.TenantQuery.WithContext(ctx).Create(tenantA, tenantB) + + now := time.Now() + models.AuditLogQuery.WithContext(ctx).Create( + &models.AuditLog{ + TenantID: tenantA.ID, + OperatorID: owner.ID, + Action: "update_settings", + TargetID: "setting_1", + Detail: "更新频道配置", + CreatedAt: now.Add(-1 * time.Hour), + }, + &models.AuditLog{ + TenantID: tenantA.ID, + OperatorID: operator.ID, + Action: "invite_member", + TargetID: "member_1", + Detail: "邀请成员", + CreatedAt: now, + }, + &models.AuditLog{ + TenantID: tenantB.ID, + OperatorID: operator.ID, + Action: "update_settings", + TargetID: "setting_999", + Detail: "跨租户数据", + CreatedAt: now, + }, + ) + + pager, err := Creator.ListAuditLogs(ctx, tenantA.ID, owner.ID, &creator_dto.CreatorAuditLogListFilter{}) + So(err, ShouldBeNil) + So(pager.Total, ShouldEqual, 2) + + items, ok := pager.Items.([]creator_dto.CreatorAuditLogItem) + So(ok, ShouldBeTrue) + So(len(items), ShouldEqual, 2) + So(items[0].TargetID, ShouldEqual, "member_1") + So(items[1].TargetID, ShouldEqual, "setting_1") + + operatorName := "operator_audit" + filtered, err := Creator.ListAuditLogs(ctx, tenantA.ID, owner.ID, &creator_dto.CreatorAuditLogListFilter{ + OperatorName: &operatorName, + }) + So(err, ShouldBeNil) + So(filtered.Total, ShouldEqual, 1) + filteredItems, ok := filtered.Items.([]creator_dto.CreatorAuditLogItem) + So(ok, ShouldBeTrue) + So(len(filteredItems), ShouldEqual, 1) + So(filteredItems[0].Action, ShouldEqual, "invite_member") + So(filteredItems[0].OperatorName, ShouldEqual, "operator_audit") + + _, err = Creator.ListAuditLogs(ctx, tenantA.ID, outsider.ID, &creator_dto.CreatorAuditLogListFilter{}) + So(err, ShouldNotBeNil) + }) +} diff --git a/backend/app/services/order_test.go b/backend/app/services/order_test.go index 5fdbd83..fa920af 100644 --- a/backend/app/services/order_test.go +++ b/backend/app/services/order_test.go @@ -2,9 +2,11 @@ package services import ( "database/sql" + "errors" "testing" "quyun/v2/app/commands/testx" + "quyun/v2/app/errorx" order_dto "quyun/v2/app/http/v1/dto" "quyun/v2/database" "quyun/v2/database/models" @@ -168,3 +170,74 @@ func (s *OrderTestSuite) Test_PlatformCommission() { }) }) } + +func (s *OrderTestSuite) Test_Pay_DenyCrossTenantOrder() { + Convey("Pay should deny cross-tenant order", s.T(), func() { + ctx := s.T().Context() + database.Truncate( + ctx, + s.DB, + models.TableNameUser, + models.TableNameTenant, + models.TableNameOrder, + ) + + buyer := &models.User{Username: "buyer_cross_tenant", Balance: 5000} + So(models.UserQuery.WithContext(ctx).Create(buyer), ShouldBeNil) + + tenantA := &models.Tenant{UserID: buyer.ID, Code: "order_pay_cross_a", Name: "Tenant A", Status: consts.TenantStatusVerified} + tenantB := &models.Tenant{UserID: buyer.ID, Code: "order_pay_cross_b", Name: "Tenant B", Status: consts.TenantStatusVerified} + So(models.TenantQuery.WithContext(ctx).Create(tenantA, tenantB), ShouldBeNil) + + order := &models.Order{ + TenantID: tenantA.ID, + UserID: buyer.ID, + Type: consts.OrderTypeContentPurchase, + Status: consts.OrderStatusCreated, + AmountPaid: 1000, + } + So(models.OrderQuery.WithContext(ctx).Create(order), ShouldBeNil) + + _, err := Order.Pay(ctx, tenantB.ID, buyer.ID, order.ID, &order_dto.OrderPayForm{Method: "balance"}) + So(err, ShouldNotBeNil) + + var appErr *errorx.AppError + So(errors.As(err, &appErr), ShouldBeTrue) + So(appErr.Code, ShouldEqual, errorx.ErrForbidden.Code) + }) +} + +func (s *OrderTestSuite) Test_Status_DenyCrossTenantOrder() { + Convey("Status should deny cross-tenant order", s.T(), func() { + ctx := s.T().Context() + database.Truncate( + ctx, + s.DB, + models.TableNameUser, + models.TableNameTenant, + models.TableNameOrder, + ) + + buyer := &models.User{Username: "buyer_status_cross", Balance: 5000} + So(models.UserQuery.WithContext(ctx).Create(buyer), ShouldBeNil) + + tenantA := &models.Tenant{UserID: buyer.ID, Code: "order_status_cross_a", Name: "Tenant A", Status: consts.TenantStatusVerified} + tenantB := &models.Tenant{UserID: buyer.ID, Code: "order_status_cross_b", Name: "Tenant B", Status: consts.TenantStatusVerified} + So(models.TenantQuery.WithContext(ctx).Create(tenantA, tenantB), ShouldBeNil) + + order := &models.Order{ + TenantID: tenantA.ID, + UserID: buyer.ID, + Type: consts.OrderTypeContentPurchase, + Status: consts.OrderStatusCreated, + } + So(models.OrderQuery.WithContext(ctx).Create(order), ShouldBeNil) + + _, err := Order.Status(ctx, tenantB.ID, buyer.ID, order.ID) + So(err, ShouldNotBeNil) + + var appErr *errorx.AppError + So(errors.As(err, &appErr), ShouldBeTrue) + So(appErr.Code, ShouldEqual, errorx.ErrForbidden.Code) + }) +} diff --git a/backend/app/services/tenant_member_test.go b/backend/app/services/tenant_member_test.go index cc42075..955d826 100644 --- a/backend/app/services/tenant_member_test.go +++ b/backend/app/services/tenant_member_test.go @@ -216,6 +216,27 @@ func (s *TenantTestSuite) Test_ReviewJoin() { So(err, ShouldBeNil) So(req.Status, ShouldEqual, string(consts.TenantJoinRequestStatusRejected)) }) + + Convey("should deny review when request belongs to another tenant", func() { + tenantA, _, _, reqA := setup() + + ownerB := &models.User{Username: "owner_review_cross_b", Phone: "13900009991"} + So(models.UserQuery.WithContext(ctx).Create(ownerB), ShouldBeNil) + tenantB := &models.Tenant{Name: "Tenant Review B", Code: "tenant_review_cross_b", UserID: ownerB.ID, Status: consts.TenantStatusVerified} + So(models.TenantQuery.WithContext(ctx).Create(tenantB), ShouldBeNil) + + err := Tenant.ReviewJoin(ctx, tenantB.ID, ownerB.ID, reqA.ID, &tenant_dto.TenantJoinReviewForm{Action: "approve"}) + So(err, ShouldNotBeNil) + + var appErr *errorx.AppError + So(errors.As(err, &appErr), ShouldBeTrue) + So(appErr.Code, ShouldEqual, errorx.ErrForbidden.Code) + + reqReload, err := models.TenantJoinRequestQuery.WithContext(ctx).Where(models.TenantJoinRequestQuery.ID.Eq(reqA.ID)).First() + So(err, ShouldBeNil) + So(reqReload.TenantID, ShouldEqual, tenantA.ID) + So(reqReload.Status, ShouldEqual, string(consts.TenantJoinRequestStatusPending)) + }) }) } @@ -352,54 +373,132 @@ func (s *TenantTestSuite) Test_ListMembersAndRemove() { So(err, ShouldBeNil) So(exists, ShouldBeFalse) }) + + Convey("should deny removing member from another tenant", s.T(), func() { + ctx := s.T().Context() + database.Truncate(ctx, s.DB, + models.TableNameTenantUser, + models.TableNameTenant, + models.TableNameUser, + ) + + ownerA := &models.User{Username: "owner_remove_a", Phone: "13900007771"} + ownerB := &models.User{Username: "owner_remove_b", Phone: "13900007772"} + memberA := &models.User{Username: "member_remove_a", Phone: "13900007773"} + So(models.UserQuery.WithContext(ctx).Create(ownerA, ownerB, memberA), ShouldBeNil) + + tenantA := &models.Tenant{Name: "Tenant Remove A", Code: "tenant_remove_cross_a", UserID: ownerA.ID, Status: consts.TenantStatusVerified} + tenantB := &models.Tenant{Name: "Tenant Remove B", Code: "tenant_remove_cross_b", UserID: ownerB.ID, Status: consts.TenantStatusVerified} + So(models.TenantQuery.WithContext(ctx).Create(tenantA, tenantB), ShouldBeNil) + + memberLinkA := &models.TenantUser{ + TenantID: tenantA.ID, + UserID: memberA.ID, + Role: types.Array[consts.TenantUserRole]{consts.TenantUserRoleMember}, + Status: consts.UserStatusVerified, + } + So(models.TenantUserQuery.WithContext(ctx).Create(memberLinkA), ShouldBeNil) + + err := Tenant.RemoveMember(ctx, tenantB.ID, ownerB.ID, memberLinkA.ID) + So(err, ShouldNotBeNil) + + var appErr *errorx.AppError + So(errors.As(err, &appErr), ShouldBeTrue) + So(appErr.Code, ShouldEqual, errorx.ErrForbidden.Code) + + exists, err := models.TenantUserQuery.WithContext(ctx).Where(models.TenantUserQuery.ID.Eq(memberLinkA.ID)).Exists() + So(err, ShouldBeNil) + So(exists, ShouldBeTrue) + }) } func (s *TenantTestSuite) Test_ListInvitesAndDisable() { Convey("ListInvites and DisableInvite", s.T(), func() { ctx := s.T().Context() - database.Truncate(ctx, s.DB, - models.TableNameTenantInvite, - models.TableNameTenant, - models.TableNameUser, - ) + Convey("should list and disable invite in same tenant", func() { + database.Truncate(ctx, s.DB, + models.TableNameTenantInvite, + models.TableNameTenant, + models.TableNameUser, + ) - owner := &models.User{Username: "owner_invite", Phone: "13900002003"} - _ = models.UserQuery.WithContext(ctx).Create(owner) + owner := &models.User{Username: "owner_invite", Phone: "13900002003"} + _ = models.UserQuery.WithContext(ctx).Create(owner) - tenant := &models.Tenant{ - Name: "Tenant Invite", - UserID: owner.ID, - Status: consts.TenantStatusVerified, - } - _ = models.TenantQuery.WithContext(ctx).Create(tenant) + tenant := &models.Tenant{ + Name: "Tenant Invite", + UserID: owner.ID, + Status: consts.TenantStatusVerified, + } + _ = models.TenantQuery.WithContext(ctx).Create(tenant) - invite := &models.TenantInvite{ - TenantID: tenant.ID, - UserID: owner.ID, - Code: "invite_list", - Status: string(consts.TenantInviteStatusActive), - MaxUses: 2, - UsedCount: 0, - ExpiresAt: time.Now().Add(24 * time.Hour), - Remark: "测试邀请", - } - _ = models.TenantInviteQuery.WithContext(ctx).Create(invite) + invite := &models.TenantInvite{ + TenantID: tenant.ID, + UserID: owner.ID, + Code: "invite_list", + Status: string(consts.TenantInviteStatusActive), + MaxUses: 2, + UsedCount: 0, + ExpiresAt: time.Now().Add(24 * time.Hour), + Remark: "测试邀请", + } + _ = models.TenantInviteQuery.WithContext(ctx).Create(invite) - res, err := Tenant.ListInvites(ctx, tenant.ID, owner.ID, &tenant_dto.TenantInviteListFilter{ - Pagination: requests.Pagination{Page: 1, Limit: 10}, + res, err := Tenant.ListInvites(ctx, tenant.ID, owner.ID, &tenant_dto.TenantInviteListFilter{ + Pagination: requests.Pagination{Page: 1, Limit: 10}, + }) + So(err, ShouldBeNil) + So(res.Total, ShouldEqual, 1) + + err = Tenant.DisableInvite(ctx, tenant.ID, owner.ID, invite.ID) + So(err, ShouldBeNil) + + updated, err := models.TenantInviteQuery.WithContext(ctx). + Where(models.TenantInviteQuery.ID.Eq(invite.ID)). + First() + So(err, ShouldBeNil) + So(updated.Status, ShouldEqual, string(consts.TenantInviteStatusDisabled)) }) - So(err, ShouldBeNil) - So(res.Total, ShouldEqual, 1) - err = Tenant.DisableInvite(ctx, tenant.ID, owner.ID, invite.ID) - So(err, ShouldBeNil) + Convey("should deny disabling invite from another tenant", func() { + database.Truncate(ctx, s.DB, + models.TableNameTenantInvite, + models.TableNameTenant, + models.TableNameUser, + ) - updated, err := models.TenantInviteQuery.WithContext(ctx). - Where(models.TenantInviteQuery.ID.Eq(invite.ID)). - First() - So(err, ShouldBeNil) - So(updated.Status, ShouldEqual, string(consts.TenantInviteStatusDisabled)) + ownerA := &models.User{Username: "owner_invite_a", Phone: "13900008881"} + ownerB := &models.User{Username: "owner_invite_b", Phone: "13900008882"} + So(models.UserQuery.WithContext(ctx).Create(ownerA, ownerB), ShouldBeNil) + + tenantA := &models.Tenant{Name: "Tenant Invite A", Code: "tenant_invite_cross_a", UserID: ownerA.ID, Status: consts.TenantStatusVerified} + tenantB := &models.Tenant{Name: "Tenant Invite B", Code: "tenant_invite_cross_b", UserID: ownerB.ID, Status: consts.TenantStatusVerified} + So(models.TenantQuery.WithContext(ctx).Create(tenantA, tenantB), ShouldBeNil) + + inviteA := &models.TenantInvite{ + TenantID: tenantA.ID, + UserID: ownerA.ID, + Code: "invite_cross_disable", + Status: string(consts.TenantInviteStatusActive), + MaxUses: 2, + UsedCount: 0, + ExpiresAt: time.Now().Add(24 * time.Hour), + Remark: "跨租户禁用测试", + } + So(models.TenantInviteQuery.WithContext(ctx).Create(inviteA), ShouldBeNil) + + err := Tenant.DisableInvite(ctx, tenantB.ID, ownerB.ID, inviteA.ID) + So(err, ShouldNotBeNil) + + var appErr *errorx.AppError + So(errors.As(err, &appErr), ShouldBeTrue) + So(appErr.Code, ShouldEqual, errorx.ErrForbidden.Code) + + reloaded, err := models.TenantInviteQuery.WithContext(ctx).Where(models.TenantInviteQuery.ID.Eq(inviteA.ID)).First() + So(err, ShouldBeNil) + So(reloaded.Status, ShouldEqual, string(consts.TenantInviteStatusActive)) + }) }) } diff --git a/backend/docs/docs.go b/backend/docs/docs.go index 348113a..82645fd 100644 --- a/backend/docs/docs.go +++ b/backend/docs/docs.go @@ -4259,6 +4259,1281 @@ const docTemplate = `{ } } }, + "/v1/t/{tenantCode}/creator/apply": { + "post": { + "description": "申请成为创作者并创建频道", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Apply creator profile", + "parameters": [ + { + "description": "Apply form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.ApplyForm" + } + } + ], + "responses": { + "200": { + "description": "Applied", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/audit-logs": { + "get": { + "description": "查询当前租户创作者侧审计日志(仅管理员可见)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator audit logs", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "description": "Operator ID", + "name": "operator_id", + "in": "query" + }, + { + "type": "string", + "description": "Operator name", + "name": "operator_name", + "in": "query" + }, + { + "type": "string", + "description": "Action", + "name": "action", + "in": "query" + }, + { + "type": "string", + "description": "Target ID", + "name": "target_id", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + }, + { + "type": "string", + "description": "Created at from (RFC3339)", + "name": "created_at_from", + "in": "query" + }, + { + "type": "string", + "description": "Created at to (RFC3339)", + "name": "created_at_to", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.CreatorAuditLogItem" + } + } + } + } + ] + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/contents": { + "get": { + "description": "创作者内容列表(分页/筛选)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator contents", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "query" + }, + { + "type": "string", + "description": "Visibility", + "name": "visibility", + "in": "query" + }, + { + "type": "string", + "description": "Genre", + "name": "genre", + "in": "query" + }, + { + "type": "string", + "description": "Key", + "name": "key", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + }, + { + "type": "string", + "description": "Sort", + "name": "sort", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.CreatorContentItem" + } + } + } + } + ] + } + } + } + }, + "post": { + "description": "创建创作者内容", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Create creator content", + "parameters": [ + { + "description": "Create form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.ContentCreateForm" + } + } + ], + "responses": { + "200": { + "description": "Created", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/contents/{id}": { + "get": { + "description": "获取创作者内容编辑详情", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Get creator content detail", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Content ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.ContentEditDTO" + } + } + } + }, + "put": { + "description": "更新创作者内容", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Update creator content", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Content ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Update form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.ContentUpdateForm" + } + } + ], + "responses": { + "200": { + "description": "Updated", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "description": "删除创作者内容", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Delete creator content", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Content ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Deleted", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/coupons": { + "get": { + "description": "查询创作者优惠券", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator coupons", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Coupon type", + "name": "type", + "in": "query" + }, + { + "type": "string", + "description": "Coupon status", + "name": "status", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.CouponItem" + } + } + } + } + ] + } + } + } + }, + "post": { + "description": "创建创作者优惠券", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Create creator coupon", + "parameters": [ + { + "description": "Coupon create form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.CouponCreateForm" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.CouponItem" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/coupons/{id}": { + "get": { + "description": "查询创作者优惠券详情", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Get creator coupon", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Coupon ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.CouponItem" + } + } + } + }, + "put": { + "description": "更新创作者优惠券", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Update creator coupon", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Coupon ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Coupon update form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.CouponUpdateForm" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.CouponItem" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/coupons/{id}/grant": { + "post": { + "description": "向用户发放优惠券", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Grant creator coupon", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Coupon ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Grant form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.CouponGrantForm" + } + } + ], + "responses": { + "200": { + "description": "Granted", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/dashboard": { + "get": { + "description": "获取创作者看板统计", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Get creator dashboard", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.DashboardStats" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members": { + "get": { + "description": "查询创作者成员列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator members", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + }, + { + "type": "string", + "description": "Role", + "name": "role", + "in": "query" + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.TenantMemberItem" + } + } + } + } + ] + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/invite": { + "post": { + "description": "创建成员邀请", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Create creator member invite", + "parameters": [ + { + "description": "Invite form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.TenantInviteCreateForm" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.TenantInviteItem" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/invites": { + "get": { + "description": "查询创作者成员邀请记录", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator member invites", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.TenantInviteListItem" + } + } + } + } + ] + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/invites/{id}": { + "delete": { + "description": "撤销成员邀请", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Disable creator member invite", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Invite ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Disabled", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/join-requests": { + "get": { + "description": "查询成员加入申请", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator join requests", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.TenantJoinRequestItem" + } + } + } + } + ] + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/{id}": { + "delete": { + "description": "移除创作者成员", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Remove creator member", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Member relation ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Removed", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/{id}/review": { + "post": { + "description": "审核成员加入申请", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Review creator join request", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Join request ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Review form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.TenantJoinReviewForm" + } + } + ], + "responses": { + "200": { + "description": "Reviewed", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/orders": { + "get": { + "description": "创作者订单列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator orders", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.Order" + } + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/orders/{id}/refund": { + "post": { + "description": "处理创作者订单退款(同意/拒绝)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Process order refund", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Order ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Refund form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.RefundForm" + } + } + ], + "responses": { + "200": { + "description": "Processed", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/payout-accounts": { + "get": { + "description": "获取创作者收款账户列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List payout accounts", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.PayoutAccount" + } + } + } + } + }, + "post": { + "description": "新增创作者收款账户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Add payout account", + "parameters": [ + { + "description": "Payout account form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.PayoutAccount" + } + } + ], + "responses": { + "200": { + "description": "Created", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "description": "删除创作者收款账户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Remove payout account", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Payout account ID", + "name": "id", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Deleted", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/reports/export": { + "post": { + "description": "导出创作者经营报表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Creator export report", + "parameters": [ + { + "description": "Export form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.ReportExportForm" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.ReportExportResponse" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/reports/overview": { + "get": { + "description": "创作者经营看板概览", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Creator report overview", + "parameters": [ + { + "type": "string", + "description": "Start at (RFC3339)", + "name": "start_at", + "in": "query" + }, + { + "type": "string", + "description": "End at (RFC3339)", + "name": "end_at", + "in": "query" + }, + { + "type": "string", + "description": "Granularity", + "name": "granularity", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.ReportOverviewResponse" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/settings": { + "get": { + "description": "获取创作者频道设置", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Get creator settings", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.Settings" + } + } + } + }, + "put": { + "description": "更新创作者频道设置", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Update creator settings", + "parameters": [ + { + "description": "Settings form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.Settings" + } + } + ], + "responses": { + "200": { + "description": "Updated", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/withdraw": { + "post": { + "description": "发起提现申请", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Create withdraw order", + "parameters": [ + { + "description": "Withdraw form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.WithdrawForm" + } + } + ], + "responses": { + "200": { + "description": "Submitted", + "schema": { + "type": "string" + } + } + } + } + }, "/v1/t/{tenantCode}/me": { "get": { "description": "Get current user profile", @@ -5142,6 +6417,276 @@ const docTemplate = `{ } } }, + "/v1/t/{tenantCode}/tenants": { + "get": { + "description": "List public tenants under current tenant scope", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "List tenants", + "parameters": [ + { + "type": "integer", + "description": "Page number", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Page size", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Search keyword", + "name": "keyword", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.TenantProfile" + } + } + } + } + ] + } + } + } + } + }, + "/v1/t/{tenantCode}/tenants/{id}": { + "get": { + "description": "Get public tenant profile by tenant ID", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Get tenant profile", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.TenantProfile" + } + } + } + } + }, + "/v1/t/{tenantCode}/tenants/{id}/follow": { + "post": { + "description": "Follow a tenant", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Follow tenant", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Followed", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "description": "Unfollow a tenant", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Unfollow tenant", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Unfollowed", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/tenants/{id}/invites/accept": { + "post": { + "description": "Accept a tenant invite by code", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Accept tenant invite", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Invite form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.TenantInviteAcceptForm" + } + } + ], + "responses": { + "200": { + "description": "Accepted", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/tenants/{id}/join": { + "post": { + "description": "Apply to join a tenant", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Apply to join tenant", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Join apply form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.TenantJoinApplyForm" + } + } + ], + "responses": { + "200": { + "description": "Applied", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "description": "Cancel pending tenant join application", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Cancel join application", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Canceled", + "schema": { + "type": "string" + } + } + } + } + }, "/v1/t/{tenantCode}/topics": { "get": { "description": "List curated topics", @@ -5718,6 +7263,56 @@ const docTemplate = `{ } } }, + "dto.ApplyForm": { + "type": "object", + "properties": { + "avatar": { + "description": "Avatar 头像URL。", + "type": "string" + }, + "bio": { + "description": "Bio 频道简介。", + "type": "string" + }, + "name": { + "description": "Name 频道/创作者名称。", + "type": "string" + } + } + }, + "dto.AssetDTO": { + "type": "object", + "properties": { + "id": { + "description": "ID 资源ID。", + "type": "integer" + }, + "name": { + "description": "Name 文件名。", + "type": "string" + }, + "role": { + "description": "Role 资源角色(cover/media/preview)。", + "type": "string" + }, + "size": { + "description": "Size 文件大小描述。", + "type": "string" + }, + "sort": { + "description": "Sort 排序权重。", + "type": "integer" + }, + "type": { + "description": "Type 资源类型(image/audio/video)。", + "type": "string" + }, + "url": { + "description": "URL 资源访问地址。", + "type": "string" + } + } + }, "dto.Comment": { "type": "object", "properties": { @@ -5772,6 +7367,45 @@ const docTemplate = `{ } } }, + "dto.ContentCreateForm": { + "type": "object", + "properties": { + "cover_ids": { + "description": "CoverIDs 封面资源ID集合。", + "type": "array", + "items": { + "type": "integer" + } + }, + "genre": { + "description": "Genre 内容分类/风格。", + "type": "string" + }, + "key": { + "description": "Key 音乐调性或主音。", + "type": "string" + }, + "media_ids": { + "description": "MediaIDs 媒体资源ID集合(音频/视频/图片)。", + "type": "array", + "items": { + "type": "integer" + } + }, + "price": { + "description": "Price 价格(单位元)。", + "type": "number" + }, + "status": { + "description": "Status 内容状态(draft/published)。", + "type": "string" + }, + "title": { + "description": "Title 内容标题。", + "type": "string" + } + } + }, "dto.ContentDetail": { "type": "object", "properties": { @@ -5884,6 +7518,54 @@ const docTemplate = `{ } } }, + "dto.ContentEditDTO": { + "type": "object", + "properties": { + "assets": { + "description": "Assets 资源列表(封面/媒体)。", + "type": "array", + "items": { + "$ref": "#/definitions/dto.AssetDTO" + } + }, + "description": { + "description": "Description 内容简介。", + "type": "string" + }, + "enable_trial": { + "description": "EnableTrial 是否开启试读/试听。", + "type": "boolean" + }, + "genre": { + "description": "Genre 内容分类。", + "type": "string" + }, + "id": { + "description": "ID 内容ID。", + "type": "integer" + }, + "key": { + "description": "Key 音乐调性或主音。", + "type": "string" + }, + "preview_seconds": { + "description": "PreviewSeconds 试看/试听秒数。", + "type": "integer" + }, + "price": { + "description": "Price 价格(单位元)。", + "type": "number" + }, + "status": { + "description": "Status 内容状态。", + "type": "string" + }, + "title": { + "description": "Title 内容标题。", + "type": "string" + } + } + }, "dto.ContentItem": { "type": "object", "properties": { @@ -5994,6 +7676,49 @@ const docTemplate = `{ } } }, + "dto.ContentUpdateForm": { + "type": "object", + "properties": { + "cover_ids": { + "description": "CoverIDs 封面资源ID集合。", + "type": "array", + "items": { + "type": "integer" + } + }, + "genre": { + "description": "Genre 内容分类/风格。", + "type": "string" + }, + "is_pinned": { + "description": "IsPinned 是否置顶。", + "type": "boolean" + }, + "key": { + "description": "Key 音乐调性或主音。", + "type": "string" + }, + "media_ids": { + "description": "MediaIDs 媒体资源ID集合。", + "type": "array", + "items": { + "type": "integer" + } + }, + "price": { + "description": "Price 价格(单位元,nil 表示不修改)。", + "type": "number" + }, + "status": { + "description": "Status 内容状态(draft/published)。", + "type": "string" + }, + "title": { + "description": "Title 内容标题(为空表示不修改)。", + "type": "string" + } + } + }, "dto.CouponCreateForm": { "type": "object", "properties": { @@ -6154,6 +7879,163 @@ const docTemplate = `{ } } }, + "dto.CreatorAuditLogItem": { + "type": "object", + "properties": { + "action": { + "description": "Action 动作标识。", + "type": "string" + }, + "created_at": { + "description": "CreatedAt 创建时间(RFC3339)。", + "type": "string" + }, + "detail": { + "description": "Detail 操作详情。", + "type": "string" + }, + "id": { + "description": "ID 审计日志ID。", + "type": "integer" + }, + "operator_id": { + "description": "OperatorID 操作者用户ID。", + "type": "integer" + }, + "operator_name": { + "description": "OperatorName 操作者用户名/昵称。", + "type": "string" + }, + "target_id": { + "description": "TargetID 目标ID。", + "type": "string" + } + } + }, + "dto.CreatorContentItem": { + "type": "object", + "properties": { + "audio_count": { + "description": "AudioCount 音频素材数量。", + "type": "integer" + }, + "cover": { + "description": "Cover 封面URL。", + "type": "string" + }, + "created_at": { + "description": "CreatedAt 创建时间(RFC3339)。", + "type": "string" + }, + "genre": { + "description": "Genre 内容分类。", + "type": "string" + }, + "id": { + "description": "ID 内容ID。", + "type": "integer" + }, + "image_count": { + "description": "ImageCount 图片素材数量。", + "type": "integer" + }, + "is_pinned": { + "description": "IsPinned 是否置顶。", + "type": "boolean" + }, + "is_purchased": { + "description": "IsPurchased 是否已购买。", + "type": "boolean" + }, + "key": { + "description": "Key 音乐调性或主音。", + "type": "string" + }, + "likes": { + "description": "Likes 点赞数。", + "type": "integer" + }, + "price": { + "description": "Price 价格(单位元)。", + "type": "number" + }, + "status": { + "description": "Status 内容状态。", + "type": "string" + }, + "title": { + "description": "Title 内容标题。", + "type": "string" + }, + "video_count": { + "description": "VideoCount 视频素材数量。", + "type": "integer" + }, + "views": { + "description": "Views 浏览量。", + "type": "integer" + }, + "visibility": { + "description": "Visibility 可见性。", + "type": "string" + } + } + }, + "dto.DashboardStats": { + "type": "object", + "properties": { + "new_messages": { + "description": "NewMessages 新消息数量。", + "type": "integer" + }, + "pending_refunds": { + "description": "PendingRefunds 待处理退款数量。", + "type": "integer" + }, + "total_followers": { + "description": "TotalFollowers 粉丝总数统计。", + "allOf": [ + { + "$ref": "#/definitions/dto.IntStatItem" + } + ] + }, + "total_revenue": { + "description": "TotalRevenue 累计收入统计(单位元)。", + "allOf": [ + { + "$ref": "#/definitions/dto.FloatStatItem" + } + ] + } + } + }, + "dto.FloatStatItem": { + "type": "object", + "properties": { + "trend": { + "description": "Trend 环比/同比变化比例。", + "type": "number" + }, + "value": { + "description": "Value 统计数值(浮点)。", + "type": "number" + } + } + }, + "dto.IntStatItem": { + "type": "object", + "properties": { + "trend": { + "description": "Trend 环比/同比变化比例。", + "type": "number" + }, + "value": { + "description": "Value 统计数值。", + "type": "integer" + } + } + }, "dto.MediaURL": { "type": "object", "properties": { @@ -6446,6 +8328,51 @@ const docTemplate = `{ } } }, + "dto.PayoutAccount": { + "type": "object", + "properties": { + "account": { + "description": "Account 收款账号。", + "type": "string" + }, + "id": { + "description": "ID 收款账户ID。", + "type": "integer" + }, + "name": { + "description": "Name 账户名称/开户行。", + "type": "string" + }, + "realname": { + "description": "Realname 收款人姓名。", + "type": "string" + }, + "review_reason": { + "description": "ReviewReason 审核说明/驳回原因。", + "type": "string" + }, + "reviewed_at": { + "description": "ReviewedAt 审核时间(RFC3339)。", + "type": "string" + }, + "status": { + "description": "Status 审核状态(pending/approved/rejected)。", + "allOf": [ + { + "$ref": "#/definitions/consts.PayoutAccountStatus" + } + ] + }, + "status_description": { + "description": "StatusDescription 审核状态描述(用于展示)。", + "type": "string" + }, + "type": { + "description": "Type 账户类型(bank/alipay)。", + "type": "string" + } + } + }, "dto.RealNameForm": { "type": "object", "properties": { @@ -6466,15 +8393,15 @@ const docTemplate = `{ ], "properties": { "amount": { - "description": "Amount 单码充值金额(元)。", + "description": "Amount 充值码面额(单位元,必填且需大于 0)。", "type": "number" }, "quantity": { - "description": "Quantity 生成数量(默认 1,最大 500)。", + "description": "Quantity 生成数量(可选,默认 1,单次上限 500)。", "type": "integer" }, "remark": { - "description": "Remark 备注信息(用于审计展示)。", + "description": "Remark 激活备注(可选,用于审计记录)。", "type": "string" } } @@ -6499,15 +8426,15 @@ const docTemplate = `{ "type": "string" }, "activated_by": { - "description": "ActivatedBy 激活操作者ID。", + "description": "ActivatedBy 激活操作者用户ID。", "type": "integer" }, "amount": { - "description": "Amount 充值金额(元)。", + "description": "Amount 充值码面额(单位元)。", "type": "number" }, "code": { - "description": "Code 充值码明文。", + "description": "Code 充值码字符串(兑换时输入)。", "type": "string" }, "id": { @@ -6515,23 +8442,23 @@ const docTemplate = `{ "type": "integer" }, "redeemed_at": { - "description": "RedeemedAt 兑换时间(RFC3339)。", + "description": "RedeemedAt 兑换时间(RFC3339,未兑换为空)。", "type": "string" }, "redeemed_by": { - "description": "RedeemedBy 兑换用户ID。", + "description": "RedeemedBy 兑换用户ID(未兑换为 0)。", "type": "integer" }, "redeemed_order_id": { - "description": "RedeemedOrderID 兑换生成的充值订单ID。", + "description": "RedeemedOrderID 兑换产生的充值订单ID(未兑换为 0)。", "type": "integer" }, "remark": { - "description": "Remark 激活备注信息。", + "description": "Remark 激活备注(可选)。", "type": "string" }, "status": { - "description": "Status 充值码状态(active/redeemed)。", + "description": "Status 充值码状态(active 已激活 / redeemed 已兑换)。", "type": "string" } } @@ -6540,6 +8467,7 @@ const docTemplate = `{ "type": "object", "properties": { "code": { + "description": "Code 充值码字符串(用于兑换余额)。", "type": "string" } } @@ -6548,13 +8476,49 @@ const docTemplate = `{ "type": "object", "properties": { "amount": { + "description": "Amount 充值金额(单位元)。", "type": "number" }, "order_id": { + "description": "OrderID 充值订单ID。", "type": "integer" } } }, + "dto.RefundForm": { + "type": "object", + "properties": { + "action": { + "description": "Action 处理动作(accept/reject)。", + "type": "string" + }, + "reason": { + "description": "Reason 退款原因/备注。", + "type": "string" + } + } + }, + "dto.ReportExportForm": { + "type": "object", + "properties": { + "end_at": { + "description": "EndAt 统计结束时间(RFC3339,可选;默认当前时间)。", + "type": "string" + }, + "format": { + "description": "Format 导出格式(仅支持 csv)。", + "type": "string" + }, + "granularity": { + "description": "Granularity 统计粒度(day;目前仅支持 day)。", + "type": "string" + }, + "start_at": { + "description": "StartAt 统计开始时间(RFC3339,可选;默认当前时间往前 7 天)。", + "type": "string" + } + } + }, "dto.ReportExportResponse": { "type": "object", "properties": { @@ -9005,11 +10969,11 @@ const docTemplate = `{ ], "properties": { "amount": { - "description": "Amount 充值金额(元)。", + "description": "Amount 充值金额(单位元,必填且需大于 0)。", "type": "number" }, "remark": { - "description": "Remark 备注信息(用于审计展示)。", + "description": "Remark 充值备注(可选,用于审计记录)。", "type": "string" } } @@ -9306,6 +11270,55 @@ const docTemplate = `{ } } }, + "dto.TenantInviteListItem": { + "type": "object", + "properties": { + "code": { + "description": "Code 邀请码。", + "type": "string" + }, + "created_at": { + "description": "CreatedAt 创建时间(RFC3339)。", + "type": "string" + }, + "creator": { + "description": "Creator 创建者信息(可选)。", + "allOf": [ + { + "$ref": "#/definitions/dto.TenantMemberUserLite" + } + ] + }, + "expires_at": { + "description": "ExpiresAt 过期时间(RFC3339,空字符串表示不限制)。", + "type": "string" + }, + "id": { + "description": "ID 邀请记录ID。", + "type": "integer" + }, + "max_uses": { + "description": "MaxUses 最大可使用次数。", + "type": "integer" + }, + "remark": { + "description": "Remark 备注说明。", + "type": "string" + }, + "status": { + "description": "Status 邀请状态(active/disabled/expired)。", + "type": "string" + }, + "status_description": { + "description": "StatusDescription 状态描述。", + "type": "string" + }, + "used_count": { + "description": "UsedCount 已使用次数。", + "type": "integer" + } + } + }, "dto.TenantItem": { "type": "object", "properties": { @@ -9392,6 +11405,64 @@ const docTemplate = `{ } } }, + "dto.TenantJoinApplyForm": { + "type": "object", + "properties": { + "reason": { + "description": "Reason 申请加入原因(可选,空值会使用默认文案)。", + "type": "string" + } + } + }, + "dto.TenantJoinRequestItem": { + "type": "object", + "properties": { + "created_at": { + "description": "CreatedAt 申请时间(RFC3339)。", + "type": "string" + }, + "decided_at": { + "description": "DecidedAt 审核时间(RFC3339)。", + "type": "string" + }, + "decided_operator_user_id": { + "description": "DecidedOperatorUserID 审核操作者ID。", + "type": "integer" + }, + "decided_reason": { + "description": "DecidedReason 审核备注/原因。", + "type": "string" + }, + "id": { + "description": "ID 申请记录ID。", + "type": "integer" + }, + "reason": { + "description": "Reason 申请说明。", + "type": "string" + }, + "status": { + "description": "Status 申请状态。", + "type": "string" + }, + "status_description": { + "description": "StatusDescription 状态描述。", + "type": "string" + }, + "updated_at": { + "description": "UpdatedAt 更新时间(RFC3339)。", + "type": "string" + }, + "user": { + "description": "User 申请用户信息。", + "allOf": [ + { + "$ref": "#/definitions/dto.TenantMemberUserLite" + } + ] + } + } + }, "dto.TenantJoinReviewForm": { "type": "object", "properties": { @@ -9405,6 +11476,86 @@ const docTemplate = `{ } } }, + "dto.TenantMemberItem": { + "type": "object", + "properties": { + "created_at": { + "description": "CreatedAt 加入时间(RFC3339)。", + "type": "string" + }, + "id": { + "description": "ID 成员关系记录ID。", + "type": "integer" + }, + "role": { + "description": "Role 成员角色列表。", + "type": "array", + "items": { + "$ref": "#/definitions/consts.TenantUserRole" + } + }, + "role_description": { + "description": "RoleDescription 角色描述列表。", + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "description": "Status 成员状态。", + "allOf": [ + { + "$ref": "#/definitions/consts.UserStatus" + } + ] + }, + "status_description": { + "description": "StatusDescription 成员状态描述。", + "type": "string" + }, + "tenant_id": { + "description": "TenantID 租户ID。", + "type": "integer" + }, + "updated_at": { + "description": "UpdatedAt 更新时间(RFC3339)。", + "type": "string" + }, + "user": { + "description": "User 成员用户信息。", + "allOf": [ + { + "$ref": "#/definitions/dto.TenantMemberUserLite" + } + ] + } + } + }, + "dto.TenantMemberUserLite": { + "type": "object", + "properties": { + "avatar": { + "description": "Avatar 头像URL。", + "type": "string" + }, + "id": { + "description": "ID 用户ID。", + "type": "integer" + }, + "nickname": { + "description": "Nickname 昵称。", + "type": "string" + }, + "phone": { + "description": "Phone 手机号。", + "type": "string" + }, + "username": { + "description": "Username 用户名。", + "type": "string" + } + } + }, "dto.TenantOwnerUserLite": { "type": "object", "properties": { @@ -9944,6 +12095,23 @@ const docTemplate = `{ } } }, + "dto.WithdrawForm": { + "type": "object", + "properties": { + "account_id": { + "description": "AccountID 收款账户ID。", + "type": "integer" + }, + "amount": { + "description": "Amount 提现金额(单位元)。", + "type": "number" + }, + "method": { + "description": "Method 提现方式(wallet/external)。", + "type": "string" + } + } + }, "quyun_v2_app_http_super_v1_dto.Location": { "type": "object", "properties": { diff --git a/backend/docs/swagger.json b/backend/docs/swagger.json index 9ebbbb7..ef89882 100644 --- a/backend/docs/swagger.json +++ b/backend/docs/swagger.json @@ -4253,6 +4253,1281 @@ } } }, + "/v1/t/{tenantCode}/creator/apply": { + "post": { + "description": "申请成为创作者并创建频道", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Apply creator profile", + "parameters": [ + { + "description": "Apply form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.ApplyForm" + } + } + ], + "responses": { + "200": { + "description": "Applied", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/audit-logs": { + "get": { + "description": "查询当前租户创作者侧审计日志(仅管理员可见)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator audit logs", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "description": "Operator ID", + "name": "operator_id", + "in": "query" + }, + { + "type": "string", + "description": "Operator name", + "name": "operator_name", + "in": "query" + }, + { + "type": "string", + "description": "Action", + "name": "action", + "in": "query" + }, + { + "type": "string", + "description": "Target ID", + "name": "target_id", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + }, + { + "type": "string", + "description": "Created at from (RFC3339)", + "name": "created_at_from", + "in": "query" + }, + { + "type": "string", + "description": "Created at to (RFC3339)", + "name": "created_at_to", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.CreatorAuditLogItem" + } + } + } + } + ] + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/contents": { + "get": { + "description": "创作者内容列表(分页/筛选)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator contents", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "query" + }, + { + "type": "string", + "description": "Visibility", + "name": "visibility", + "in": "query" + }, + { + "type": "string", + "description": "Genre", + "name": "genre", + "in": "query" + }, + { + "type": "string", + "description": "Key", + "name": "key", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + }, + { + "type": "string", + "description": "Sort", + "name": "sort", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.CreatorContentItem" + } + } + } + } + ] + } + } + } + }, + "post": { + "description": "创建创作者内容", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Create creator content", + "parameters": [ + { + "description": "Create form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.ContentCreateForm" + } + } + ], + "responses": { + "200": { + "description": "Created", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/contents/{id}": { + "get": { + "description": "获取创作者内容编辑详情", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Get creator content detail", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Content ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.ContentEditDTO" + } + } + } + }, + "put": { + "description": "更新创作者内容", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Update creator content", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Content ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Update form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.ContentUpdateForm" + } + } + ], + "responses": { + "200": { + "description": "Updated", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "description": "删除创作者内容", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Delete creator content", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Content ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Deleted", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/coupons": { + "get": { + "description": "查询创作者优惠券", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator coupons", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Coupon type", + "name": "type", + "in": "query" + }, + { + "type": "string", + "description": "Coupon status", + "name": "status", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.CouponItem" + } + } + } + } + ] + } + } + } + }, + "post": { + "description": "创建创作者优惠券", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Create creator coupon", + "parameters": [ + { + "description": "Coupon create form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.CouponCreateForm" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.CouponItem" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/coupons/{id}": { + "get": { + "description": "查询创作者优惠券详情", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Get creator coupon", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Coupon ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.CouponItem" + } + } + } + }, + "put": { + "description": "更新创作者优惠券", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Update creator coupon", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Coupon ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Coupon update form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.CouponUpdateForm" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.CouponItem" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/coupons/{id}/grant": { + "post": { + "description": "向用户发放优惠券", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Grant creator coupon", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Coupon ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Grant form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.CouponGrantForm" + } + } + ], + "responses": { + "200": { + "description": "Granted", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/dashboard": { + "get": { + "description": "获取创作者看板统计", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Get creator dashboard", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.DashboardStats" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members": { + "get": { + "description": "查询创作者成员列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator members", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + }, + { + "type": "string", + "description": "Role", + "name": "role", + "in": "query" + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.TenantMemberItem" + } + } + } + } + ] + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/invite": { + "post": { + "description": "创建成员邀请", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Create creator member invite", + "parameters": [ + { + "description": "Invite form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.TenantInviteCreateForm" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.TenantInviteItem" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/invites": { + "get": { + "description": "查询创作者成员邀请记录", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator member invites", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.TenantInviteListItem" + } + } + } + } + ] + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/invites/{id}": { + "delete": { + "description": "撤销成员邀请", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Disable creator member invite", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Invite ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Disabled", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/join-requests": { + "get": { + "description": "查询成员加入申请", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator join requests", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.TenantJoinRequestItem" + } + } + } + } + ] + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/{id}": { + "delete": { + "description": "移除创作者成员", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Remove creator member", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Member relation ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Removed", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/members/{id}/review": { + "post": { + "description": "审核成员加入申请", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Review creator join request", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Join request ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Review form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.TenantJoinReviewForm" + } + } + ], + "responses": { + "200": { + "description": "Reviewed", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/orders": { + "get": { + "description": "创作者订单列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List creator orders", + "parameters": [ + { + "type": "integer", + "description": "Page", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Limit", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Status", + "name": "status", + "in": "query" + }, + { + "type": "string", + "description": "Keyword", + "name": "keyword", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.Order" + } + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/orders/{id}/refund": { + "post": { + "description": "处理创作者订单退款(同意/拒绝)", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Process order refund", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Order ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Refund form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.RefundForm" + } + } + ], + "responses": { + "200": { + "description": "Processed", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/payout-accounts": { + "get": { + "description": "获取创作者收款账户列表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "List payout accounts", + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.PayoutAccount" + } + } + } + } + }, + "post": { + "description": "新增创作者收款账户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Add payout account", + "parameters": [ + { + "description": "Payout account form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.PayoutAccount" + } + } + ], + "responses": { + "200": { + "description": "Created", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "description": "删除创作者收款账户", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Remove payout account", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Payout account ID", + "name": "id", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Deleted", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/reports/export": { + "post": { + "description": "导出创作者经营报表", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Creator export report", + "parameters": [ + { + "description": "Export form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.ReportExportForm" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.ReportExportResponse" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/reports/overview": { + "get": { + "description": "创作者经营看板概览", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Creator report overview", + "parameters": [ + { + "type": "string", + "description": "Start at (RFC3339)", + "name": "start_at", + "in": "query" + }, + { + "type": "string", + "description": "End at (RFC3339)", + "name": "end_at", + "in": "query" + }, + { + "type": "string", + "description": "Granularity", + "name": "granularity", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.ReportOverviewResponse" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/settings": { + "get": { + "description": "获取创作者频道设置", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Get creator settings", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.Settings" + } + } + } + }, + "put": { + "description": "更新创作者频道设置", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Update creator settings", + "parameters": [ + { + "description": "Settings form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.Settings" + } + } + ], + "responses": { + "200": { + "description": "Updated", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/creator/withdraw": { + "post": { + "description": "发起提现申请", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CreatorCenter" + ], + "summary": "Create withdraw order", + "parameters": [ + { + "description": "Withdraw form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.WithdrawForm" + } + } + ], + "responses": { + "200": { + "description": "Submitted", + "schema": { + "type": "string" + } + } + } + } + }, "/v1/t/{tenantCode}/me": { "get": { "description": "Get current user profile", @@ -5136,6 +6411,276 @@ } } }, + "/v1/t/{tenantCode}/tenants": { + "get": { + "description": "List public tenants under current tenant scope", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "List tenants", + "parameters": [ + { + "type": "integer", + "description": "Page number", + "name": "page", + "in": "query" + }, + { + "type": "integer", + "description": "Page size", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "Search keyword", + "name": "keyword", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/requests.Pager" + }, + { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/definitions/dto.TenantProfile" + } + } + } + } + ] + } + } + } + } + }, + "/v1/t/{tenantCode}/tenants/{id}": { + "get": { + "description": "Get public tenant profile by tenant ID", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Get tenant profile", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/dto.TenantProfile" + } + } + } + } + }, + "/v1/t/{tenantCode}/tenants/{id}/follow": { + "post": { + "description": "Follow a tenant", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Follow tenant", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Followed", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "description": "Unfollow a tenant", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Unfollow tenant", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Unfollowed", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/tenants/{id}/invites/accept": { + "post": { + "description": "Accept a tenant invite by code", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Accept tenant invite", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Invite form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.TenantInviteAcceptForm" + } + } + ], + "responses": { + "200": { + "description": "Accepted", + "schema": { + "type": "string" + } + } + } + } + }, + "/v1/t/{tenantCode}/tenants/{id}/join": { + "post": { + "description": "Apply to join a tenant", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Apply to join tenant", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Join apply form", + "name": "form", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/dto.TenantJoinApplyForm" + } + } + ], + "responses": { + "200": { + "description": "Applied", + "schema": { + "type": "string" + } + } + } + }, + "delete": { + "description": "Cancel pending tenant join application", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "TenantPublic" + ], + "summary": "Cancel join application", + "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "Tenant ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Canceled", + "schema": { + "type": "string" + } + } + } + } + }, "/v1/t/{tenantCode}/topics": { "get": { "description": "List curated topics", @@ -5712,6 +7257,56 @@ } } }, + "dto.ApplyForm": { + "type": "object", + "properties": { + "avatar": { + "description": "Avatar 头像URL。", + "type": "string" + }, + "bio": { + "description": "Bio 频道简介。", + "type": "string" + }, + "name": { + "description": "Name 频道/创作者名称。", + "type": "string" + } + } + }, + "dto.AssetDTO": { + "type": "object", + "properties": { + "id": { + "description": "ID 资源ID。", + "type": "integer" + }, + "name": { + "description": "Name 文件名。", + "type": "string" + }, + "role": { + "description": "Role 资源角色(cover/media/preview)。", + "type": "string" + }, + "size": { + "description": "Size 文件大小描述。", + "type": "string" + }, + "sort": { + "description": "Sort 排序权重。", + "type": "integer" + }, + "type": { + "description": "Type 资源类型(image/audio/video)。", + "type": "string" + }, + "url": { + "description": "URL 资源访问地址。", + "type": "string" + } + } + }, "dto.Comment": { "type": "object", "properties": { @@ -5766,6 +7361,45 @@ } } }, + "dto.ContentCreateForm": { + "type": "object", + "properties": { + "cover_ids": { + "description": "CoverIDs 封面资源ID集合。", + "type": "array", + "items": { + "type": "integer" + } + }, + "genre": { + "description": "Genre 内容分类/风格。", + "type": "string" + }, + "key": { + "description": "Key 音乐调性或主音。", + "type": "string" + }, + "media_ids": { + "description": "MediaIDs 媒体资源ID集合(音频/视频/图片)。", + "type": "array", + "items": { + "type": "integer" + } + }, + "price": { + "description": "Price 价格(单位元)。", + "type": "number" + }, + "status": { + "description": "Status 内容状态(draft/published)。", + "type": "string" + }, + "title": { + "description": "Title 内容标题。", + "type": "string" + } + } + }, "dto.ContentDetail": { "type": "object", "properties": { @@ -5878,6 +7512,54 @@ } } }, + "dto.ContentEditDTO": { + "type": "object", + "properties": { + "assets": { + "description": "Assets 资源列表(封面/媒体)。", + "type": "array", + "items": { + "$ref": "#/definitions/dto.AssetDTO" + } + }, + "description": { + "description": "Description 内容简介。", + "type": "string" + }, + "enable_trial": { + "description": "EnableTrial 是否开启试读/试听。", + "type": "boolean" + }, + "genre": { + "description": "Genre 内容分类。", + "type": "string" + }, + "id": { + "description": "ID 内容ID。", + "type": "integer" + }, + "key": { + "description": "Key 音乐调性或主音。", + "type": "string" + }, + "preview_seconds": { + "description": "PreviewSeconds 试看/试听秒数。", + "type": "integer" + }, + "price": { + "description": "Price 价格(单位元)。", + "type": "number" + }, + "status": { + "description": "Status 内容状态。", + "type": "string" + }, + "title": { + "description": "Title 内容标题。", + "type": "string" + } + } + }, "dto.ContentItem": { "type": "object", "properties": { @@ -5988,6 +7670,49 @@ } } }, + "dto.ContentUpdateForm": { + "type": "object", + "properties": { + "cover_ids": { + "description": "CoverIDs 封面资源ID集合。", + "type": "array", + "items": { + "type": "integer" + } + }, + "genre": { + "description": "Genre 内容分类/风格。", + "type": "string" + }, + "is_pinned": { + "description": "IsPinned 是否置顶。", + "type": "boolean" + }, + "key": { + "description": "Key 音乐调性或主音。", + "type": "string" + }, + "media_ids": { + "description": "MediaIDs 媒体资源ID集合。", + "type": "array", + "items": { + "type": "integer" + } + }, + "price": { + "description": "Price 价格(单位元,nil 表示不修改)。", + "type": "number" + }, + "status": { + "description": "Status 内容状态(draft/published)。", + "type": "string" + }, + "title": { + "description": "Title 内容标题(为空表示不修改)。", + "type": "string" + } + } + }, "dto.CouponCreateForm": { "type": "object", "properties": { @@ -6148,6 +7873,163 @@ } } }, + "dto.CreatorAuditLogItem": { + "type": "object", + "properties": { + "action": { + "description": "Action 动作标识。", + "type": "string" + }, + "created_at": { + "description": "CreatedAt 创建时间(RFC3339)。", + "type": "string" + }, + "detail": { + "description": "Detail 操作详情。", + "type": "string" + }, + "id": { + "description": "ID 审计日志ID。", + "type": "integer" + }, + "operator_id": { + "description": "OperatorID 操作者用户ID。", + "type": "integer" + }, + "operator_name": { + "description": "OperatorName 操作者用户名/昵称。", + "type": "string" + }, + "target_id": { + "description": "TargetID 目标ID。", + "type": "string" + } + } + }, + "dto.CreatorContentItem": { + "type": "object", + "properties": { + "audio_count": { + "description": "AudioCount 音频素材数量。", + "type": "integer" + }, + "cover": { + "description": "Cover 封面URL。", + "type": "string" + }, + "created_at": { + "description": "CreatedAt 创建时间(RFC3339)。", + "type": "string" + }, + "genre": { + "description": "Genre 内容分类。", + "type": "string" + }, + "id": { + "description": "ID 内容ID。", + "type": "integer" + }, + "image_count": { + "description": "ImageCount 图片素材数量。", + "type": "integer" + }, + "is_pinned": { + "description": "IsPinned 是否置顶。", + "type": "boolean" + }, + "is_purchased": { + "description": "IsPurchased 是否已购买。", + "type": "boolean" + }, + "key": { + "description": "Key 音乐调性或主音。", + "type": "string" + }, + "likes": { + "description": "Likes 点赞数。", + "type": "integer" + }, + "price": { + "description": "Price 价格(单位元)。", + "type": "number" + }, + "status": { + "description": "Status 内容状态。", + "type": "string" + }, + "title": { + "description": "Title 内容标题。", + "type": "string" + }, + "video_count": { + "description": "VideoCount 视频素材数量。", + "type": "integer" + }, + "views": { + "description": "Views 浏览量。", + "type": "integer" + }, + "visibility": { + "description": "Visibility 可见性。", + "type": "string" + } + } + }, + "dto.DashboardStats": { + "type": "object", + "properties": { + "new_messages": { + "description": "NewMessages 新消息数量。", + "type": "integer" + }, + "pending_refunds": { + "description": "PendingRefunds 待处理退款数量。", + "type": "integer" + }, + "total_followers": { + "description": "TotalFollowers 粉丝总数统计。", + "allOf": [ + { + "$ref": "#/definitions/dto.IntStatItem" + } + ] + }, + "total_revenue": { + "description": "TotalRevenue 累计收入统计(单位元)。", + "allOf": [ + { + "$ref": "#/definitions/dto.FloatStatItem" + } + ] + } + } + }, + "dto.FloatStatItem": { + "type": "object", + "properties": { + "trend": { + "description": "Trend 环比/同比变化比例。", + "type": "number" + }, + "value": { + "description": "Value 统计数值(浮点)。", + "type": "number" + } + } + }, + "dto.IntStatItem": { + "type": "object", + "properties": { + "trend": { + "description": "Trend 环比/同比变化比例。", + "type": "number" + }, + "value": { + "description": "Value 统计数值。", + "type": "integer" + } + } + }, "dto.MediaURL": { "type": "object", "properties": { @@ -6440,6 +8322,51 @@ } } }, + "dto.PayoutAccount": { + "type": "object", + "properties": { + "account": { + "description": "Account 收款账号。", + "type": "string" + }, + "id": { + "description": "ID 收款账户ID。", + "type": "integer" + }, + "name": { + "description": "Name 账户名称/开户行。", + "type": "string" + }, + "realname": { + "description": "Realname 收款人姓名。", + "type": "string" + }, + "review_reason": { + "description": "ReviewReason 审核说明/驳回原因。", + "type": "string" + }, + "reviewed_at": { + "description": "ReviewedAt 审核时间(RFC3339)。", + "type": "string" + }, + "status": { + "description": "Status 审核状态(pending/approved/rejected)。", + "allOf": [ + { + "$ref": "#/definitions/consts.PayoutAccountStatus" + } + ] + }, + "status_description": { + "description": "StatusDescription 审核状态描述(用于展示)。", + "type": "string" + }, + "type": { + "description": "Type 账户类型(bank/alipay)。", + "type": "string" + } + } + }, "dto.RealNameForm": { "type": "object", "properties": { @@ -6460,15 +8387,15 @@ ], "properties": { "amount": { - "description": "Amount 单码充值金额(元)。", + "description": "Amount 充值码面额(单位元,必填且需大于 0)。", "type": "number" }, "quantity": { - "description": "Quantity 生成数量(默认 1,最大 500)。", + "description": "Quantity 生成数量(可选,默认 1,单次上限 500)。", "type": "integer" }, "remark": { - "description": "Remark 备注信息(用于审计展示)。", + "description": "Remark 激活备注(可选,用于审计记录)。", "type": "string" } } @@ -6493,15 +8420,15 @@ "type": "string" }, "activated_by": { - "description": "ActivatedBy 激活操作者ID。", + "description": "ActivatedBy 激活操作者用户ID。", "type": "integer" }, "amount": { - "description": "Amount 充值金额(元)。", + "description": "Amount 充值码面额(单位元)。", "type": "number" }, "code": { - "description": "Code 充值码明文。", + "description": "Code 充值码字符串(兑换时输入)。", "type": "string" }, "id": { @@ -6509,23 +8436,23 @@ "type": "integer" }, "redeemed_at": { - "description": "RedeemedAt 兑换时间(RFC3339)。", + "description": "RedeemedAt 兑换时间(RFC3339,未兑换为空)。", "type": "string" }, "redeemed_by": { - "description": "RedeemedBy 兑换用户ID。", + "description": "RedeemedBy 兑换用户ID(未兑换为 0)。", "type": "integer" }, "redeemed_order_id": { - "description": "RedeemedOrderID 兑换生成的充值订单ID。", + "description": "RedeemedOrderID 兑换产生的充值订单ID(未兑换为 0)。", "type": "integer" }, "remark": { - "description": "Remark 激活备注信息。", + "description": "Remark 激活备注(可选)。", "type": "string" }, "status": { - "description": "Status 充值码状态(active/redeemed)。", + "description": "Status 充值码状态(active 已激活 / redeemed 已兑换)。", "type": "string" } } @@ -6534,6 +8461,7 @@ "type": "object", "properties": { "code": { + "description": "Code 充值码字符串(用于兑换余额)。", "type": "string" } } @@ -6542,13 +8470,49 @@ "type": "object", "properties": { "amount": { + "description": "Amount 充值金额(单位元)。", "type": "number" }, "order_id": { + "description": "OrderID 充值订单ID。", "type": "integer" } } }, + "dto.RefundForm": { + "type": "object", + "properties": { + "action": { + "description": "Action 处理动作(accept/reject)。", + "type": "string" + }, + "reason": { + "description": "Reason 退款原因/备注。", + "type": "string" + } + } + }, + "dto.ReportExportForm": { + "type": "object", + "properties": { + "end_at": { + "description": "EndAt 统计结束时间(RFC3339,可选;默认当前时间)。", + "type": "string" + }, + "format": { + "description": "Format 导出格式(仅支持 csv)。", + "type": "string" + }, + "granularity": { + "description": "Granularity 统计粒度(day;目前仅支持 day)。", + "type": "string" + }, + "start_at": { + "description": "StartAt 统计开始时间(RFC3339,可选;默认当前时间往前 7 天)。", + "type": "string" + } + } + }, "dto.ReportExportResponse": { "type": "object", "properties": { @@ -8999,11 +10963,11 @@ ], "properties": { "amount": { - "description": "Amount 充值金额(元)。", + "description": "Amount 充值金额(单位元,必填且需大于 0)。", "type": "number" }, "remark": { - "description": "Remark 备注信息(用于审计展示)。", + "description": "Remark 充值备注(可选,用于审计记录)。", "type": "string" } } @@ -9300,6 +11264,55 @@ } } }, + "dto.TenantInviteListItem": { + "type": "object", + "properties": { + "code": { + "description": "Code 邀请码。", + "type": "string" + }, + "created_at": { + "description": "CreatedAt 创建时间(RFC3339)。", + "type": "string" + }, + "creator": { + "description": "Creator 创建者信息(可选)。", + "allOf": [ + { + "$ref": "#/definitions/dto.TenantMemberUserLite" + } + ] + }, + "expires_at": { + "description": "ExpiresAt 过期时间(RFC3339,空字符串表示不限制)。", + "type": "string" + }, + "id": { + "description": "ID 邀请记录ID。", + "type": "integer" + }, + "max_uses": { + "description": "MaxUses 最大可使用次数。", + "type": "integer" + }, + "remark": { + "description": "Remark 备注说明。", + "type": "string" + }, + "status": { + "description": "Status 邀请状态(active/disabled/expired)。", + "type": "string" + }, + "status_description": { + "description": "StatusDescription 状态描述。", + "type": "string" + }, + "used_count": { + "description": "UsedCount 已使用次数。", + "type": "integer" + } + } + }, "dto.TenantItem": { "type": "object", "properties": { @@ -9386,6 +11399,64 @@ } } }, + "dto.TenantJoinApplyForm": { + "type": "object", + "properties": { + "reason": { + "description": "Reason 申请加入原因(可选,空值会使用默认文案)。", + "type": "string" + } + } + }, + "dto.TenantJoinRequestItem": { + "type": "object", + "properties": { + "created_at": { + "description": "CreatedAt 申请时间(RFC3339)。", + "type": "string" + }, + "decided_at": { + "description": "DecidedAt 审核时间(RFC3339)。", + "type": "string" + }, + "decided_operator_user_id": { + "description": "DecidedOperatorUserID 审核操作者ID。", + "type": "integer" + }, + "decided_reason": { + "description": "DecidedReason 审核备注/原因。", + "type": "string" + }, + "id": { + "description": "ID 申请记录ID。", + "type": "integer" + }, + "reason": { + "description": "Reason 申请说明。", + "type": "string" + }, + "status": { + "description": "Status 申请状态。", + "type": "string" + }, + "status_description": { + "description": "StatusDescription 状态描述。", + "type": "string" + }, + "updated_at": { + "description": "UpdatedAt 更新时间(RFC3339)。", + "type": "string" + }, + "user": { + "description": "User 申请用户信息。", + "allOf": [ + { + "$ref": "#/definitions/dto.TenantMemberUserLite" + } + ] + } + } + }, "dto.TenantJoinReviewForm": { "type": "object", "properties": { @@ -9399,6 +11470,86 @@ } } }, + "dto.TenantMemberItem": { + "type": "object", + "properties": { + "created_at": { + "description": "CreatedAt 加入时间(RFC3339)。", + "type": "string" + }, + "id": { + "description": "ID 成员关系记录ID。", + "type": "integer" + }, + "role": { + "description": "Role 成员角色列表。", + "type": "array", + "items": { + "$ref": "#/definitions/consts.TenantUserRole" + } + }, + "role_description": { + "description": "RoleDescription 角色描述列表。", + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "description": "Status 成员状态。", + "allOf": [ + { + "$ref": "#/definitions/consts.UserStatus" + } + ] + }, + "status_description": { + "description": "StatusDescription 成员状态描述。", + "type": "string" + }, + "tenant_id": { + "description": "TenantID 租户ID。", + "type": "integer" + }, + "updated_at": { + "description": "UpdatedAt 更新时间(RFC3339)。", + "type": "string" + }, + "user": { + "description": "User 成员用户信息。", + "allOf": [ + { + "$ref": "#/definitions/dto.TenantMemberUserLite" + } + ] + } + } + }, + "dto.TenantMemberUserLite": { + "type": "object", + "properties": { + "avatar": { + "description": "Avatar 头像URL。", + "type": "string" + }, + "id": { + "description": "ID 用户ID。", + "type": "integer" + }, + "nickname": { + "description": "Nickname 昵称。", + "type": "string" + }, + "phone": { + "description": "Phone 手机号。", + "type": "string" + }, + "username": { + "description": "Username 用户名。", + "type": "string" + } + } + }, "dto.TenantOwnerUserLite": { "type": "object", "properties": { @@ -9938,6 +12089,23 @@ } } }, + "dto.WithdrawForm": { + "type": "object", + "properties": { + "account_id": { + "description": "AccountID 收款账户ID。", + "type": "integer" + }, + "amount": { + "description": "Amount 提现金额(单位元)。", + "type": "number" + }, + "method": { + "description": "Method 提现方式(wallet/external)。", + "type": "string" + } + } + }, "quyun_v2_app_http_super_v1_dto.Location": { "type": "object", "properties": { diff --git a/backend/docs/swagger.yaml b/backend/docs/swagger.yaml index da3d405..1eda7a1 100644 --- a/backend/docs/swagger.yaml +++ b/backend/docs/swagger.yaml @@ -247,6 +247,42 @@ definitions: description: Username 用户名。 type: string type: object + dto.ApplyForm: + properties: + avatar: + description: Avatar 头像URL。 + type: string + bio: + description: Bio 频道简介。 + type: string + name: + description: Name 频道/创作者名称。 + type: string + type: object + dto.AssetDTO: + properties: + id: + description: ID 资源ID。 + type: integer + name: + description: Name 文件名。 + type: string + role: + description: Role 资源角色(cover/media/preview)。 + type: string + size: + description: Size 文件大小描述。 + type: string + sort: + description: Sort 排序权重。 + type: integer + type: + description: Type 资源类型(image/audio/video)。 + type: string + url: + description: URL 资源访问地址。 + type: string + type: object dto.Comment: properties: content: @@ -286,6 +322,34 @@ definitions: description: ReplyTo 被回复评论ID(0 表示一级评论)。 type: integer type: object + dto.ContentCreateForm: + properties: + cover_ids: + description: CoverIDs 封面资源ID集合。 + items: + type: integer + type: array + genre: + description: Genre 内容分类/风格。 + type: string + key: + description: Key 音乐调性或主音。 + type: string + media_ids: + description: MediaIDs 媒体资源ID集合(音频/视频/图片)。 + items: + type: integer + type: array + price: + description: Price 价格(单位元)。 + type: number + status: + description: Status 内容状态(draft/published)。 + type: string + title: + description: Title 内容标题。 + type: string + type: object dto.ContentDetail: properties: author_avatar: @@ -367,6 +431,41 @@ definitions: description: Visibility 内容可见性(如 public/tenant_only/private)。 type: string type: object + dto.ContentEditDTO: + properties: + assets: + description: Assets 资源列表(封面/媒体)。 + items: + $ref: '#/definitions/dto.AssetDTO' + type: array + description: + description: Description 内容简介。 + type: string + enable_trial: + description: EnableTrial 是否开启试读/试听。 + type: boolean + genre: + description: Genre 内容分类。 + type: string + id: + description: ID 内容ID。 + type: integer + key: + description: Key 音乐调性或主音。 + type: string + preview_seconds: + description: PreviewSeconds 试看/试听秒数。 + type: integer + price: + description: Price 价格(单位元)。 + type: number + status: + description: Status 内容状态。 + type: string + title: + description: Title 内容标题。 + type: string + type: object dto.ContentItem: properties: author_avatar: @@ -448,6 +547,37 @@ definitions: description: PriceAmount 原价金额(单位元)。 type: number type: object + dto.ContentUpdateForm: + properties: + cover_ids: + description: CoverIDs 封面资源ID集合。 + items: + type: integer + type: array + genre: + description: Genre 内容分类/风格。 + type: string + is_pinned: + description: IsPinned 是否置顶。 + type: boolean + key: + description: Key 音乐调性或主音。 + type: string + media_ids: + description: MediaIDs 媒体资源ID集合。 + items: + type: integer + type: array + price: + description: Price 价格(单位元,nil 表示不修改)。 + type: number + status: + description: Status 内容状态(draft/published)。 + type: string + title: + description: Title 内容标题(为空表示不修改)。 + type: string + type: object dto.CouponCreateForm: properties: description: @@ -564,6 +694,116 @@ definitions: description: Value 优惠券面值(分/折扣百分比)。 type: integer type: object + dto.CreatorAuditLogItem: + properties: + action: + description: Action 动作标识。 + type: string + created_at: + description: CreatedAt 创建时间(RFC3339)。 + type: string + detail: + description: Detail 操作详情。 + type: string + id: + description: ID 审计日志ID。 + type: integer + operator_id: + description: OperatorID 操作者用户ID。 + type: integer + operator_name: + description: OperatorName 操作者用户名/昵称。 + type: string + target_id: + description: TargetID 目标ID。 + type: string + type: object + dto.CreatorContentItem: + properties: + audio_count: + description: AudioCount 音频素材数量。 + type: integer + cover: + description: Cover 封面URL。 + type: string + created_at: + description: CreatedAt 创建时间(RFC3339)。 + type: string + genre: + description: Genre 内容分类。 + type: string + id: + description: ID 内容ID。 + type: integer + image_count: + description: ImageCount 图片素材数量。 + type: integer + is_pinned: + description: IsPinned 是否置顶。 + type: boolean + is_purchased: + description: IsPurchased 是否已购买。 + type: boolean + key: + description: Key 音乐调性或主音。 + type: string + likes: + description: Likes 点赞数。 + type: integer + price: + description: Price 价格(单位元)。 + type: number + status: + description: Status 内容状态。 + type: string + title: + description: Title 内容标题。 + type: string + video_count: + description: VideoCount 视频素材数量。 + type: integer + views: + description: Views 浏览量。 + type: integer + visibility: + description: Visibility 可见性。 + type: string + type: object + dto.DashboardStats: + properties: + new_messages: + description: NewMessages 新消息数量。 + type: integer + pending_refunds: + description: PendingRefunds 待处理退款数量。 + type: integer + total_followers: + allOf: + - $ref: '#/definitions/dto.IntStatItem' + description: TotalFollowers 粉丝总数统计。 + total_revenue: + allOf: + - $ref: '#/definitions/dto.FloatStatItem' + description: TotalRevenue 累计收入统计(单位元)。 + type: object + dto.FloatStatItem: + properties: + trend: + description: Trend 环比/同比变化比例。 + type: number + value: + description: Value 统计数值(浮点)。 + type: number + type: object + dto.IntStatItem: + properties: + trend: + description: Trend 环比/同比变化比例。 + type: number + value: + description: Value 统计数值。 + type: integer + type: object dto.MediaURL: properties: duration: @@ -769,6 +1009,37 @@ definitions: description: Name 租户名称。 type: string type: object + dto.PayoutAccount: + properties: + account: + description: Account 收款账号。 + type: string + id: + description: ID 收款账户ID。 + type: integer + name: + description: Name 账户名称/开户行。 + type: string + realname: + description: Realname 收款人姓名。 + type: string + review_reason: + description: ReviewReason 审核说明/驳回原因。 + type: string + reviewed_at: + description: ReviewedAt 审核时间(RFC3339)。 + type: string + status: + allOf: + - $ref: '#/definitions/consts.PayoutAccountStatus' + description: Status 审核状态(pending/approved/rejected)。 + status_description: + description: StatusDescription 审核状态描述(用于展示)。 + type: string + type: + description: Type 账户类型(bank/alipay)。 + type: string + type: object dto.RealNameForm: properties: id_card: @@ -781,13 +1052,13 @@ definitions: dto.RechargeCodeActivateForm: properties: amount: - description: Amount 单码充值金额(元)。 + description: Amount 充值码面额(单位元,必填且需大于 0)。 type: number quantity: - description: Quantity 生成数量(默认 1,最大 500)。 + description: Quantity 生成数量(可选,默认 1,单次上限 500)。 type: integer remark: - description: Remark 备注信息(用于审计展示)。 + description: Remark 激活备注(可选,用于审计记录)。 type: string required: - amount @@ -806,45 +1077,72 @@ definitions: description: ActivatedAt 激活时间(RFC3339)。 type: string activated_by: - description: ActivatedBy 激活操作者ID。 + description: ActivatedBy 激活操作者用户ID。 type: integer amount: - description: Amount 充值金额(元)。 + description: Amount 充值码面额(单位元)。 type: number code: - description: Code 充值码明文。 + description: Code 充值码字符串(兑换时输入)。 type: string id: description: ID 充值码ID。 type: integer redeemed_at: - description: RedeemedAt 兑换时间(RFC3339)。 + description: RedeemedAt 兑换时间(RFC3339,未兑换为空)。 type: string redeemed_by: - description: RedeemedBy 兑换用户ID。 + description: RedeemedBy 兑换用户ID(未兑换为 0)。 type: integer redeemed_order_id: - description: RedeemedOrderID 兑换生成的充值订单ID。 + description: RedeemedOrderID 兑换产生的充值订单ID(未兑换为 0)。 type: integer remark: - description: Remark 激活备注信息。 + description: Remark 激活备注(可选)。 type: string status: - description: Status 充值码状态(active/redeemed)。 + description: Status 充值码状态(active 已激活 / redeemed 已兑换)。 type: string type: object dto.RechargeForm: properties: code: + description: Code 充值码字符串(用于兑换余额)。 type: string type: object dto.RechargeResponse: properties: amount: + description: Amount 充值金额(单位元)。 type: number order_id: + description: OrderID 充值订单ID。 type: integer type: object + dto.RefundForm: + properties: + action: + description: Action 处理动作(accept/reject)。 + type: string + reason: + description: Reason 退款原因/备注。 + type: string + type: object + dto.ReportExportForm: + properties: + end_at: + description: EndAt 统计结束时间(RFC3339,可选;默认当前时间)。 + type: string + format: + description: Format 导出格式(仅支持 csv)。 + type: string + granularity: + description: Granularity 统计粒度(day;目前仅支持 day)。 + type: string + start_at: + description: StartAt 统计开始时间(RFC3339,可选;默认当前时间往前 7 天)。 + type: string + type: object dto.ReportExportResponse: properties: content: @@ -2552,10 +2850,10 @@ definitions: dto.SuperWalletCreditForm: properties: amount: - description: Amount 充值金额(元)。 + description: Amount 充值金额(单位元,必填且需大于 0)。 type: number remark: - description: Remark 备注信息(用于审计展示)。 + description: Remark 充值备注(可选,用于审计记录)。 type: string required: - amount @@ -2767,6 +3065,40 @@ definitions: description: UsedCount 已使用次数。 type: integer type: object + dto.TenantInviteListItem: + properties: + code: + description: Code 邀请码。 + type: string + created_at: + description: CreatedAt 创建时间(RFC3339)。 + type: string + creator: + allOf: + - $ref: '#/definitions/dto.TenantMemberUserLite' + description: Creator 创建者信息(可选)。 + expires_at: + description: ExpiresAt 过期时间(RFC3339,空字符串表示不限制)。 + type: string + id: + description: ID 邀请记录ID。 + type: integer + max_uses: + description: MaxUses 最大可使用次数。 + type: integer + remark: + description: Remark 备注说明。 + type: string + status: + description: Status 邀请状态(active/disabled/expired)。 + type: string + status_description: + description: StatusDescription 状态描述。 + type: string + used_count: + description: UsedCount 已使用次数。 + type: integer + type: object dto.TenantItem: properties: admin_users: @@ -2826,6 +3158,46 @@ definitions: description: UUID 租户UUID。 type: string type: object + dto.TenantJoinApplyForm: + properties: + reason: + description: Reason 申请加入原因(可选,空值会使用默认文案)。 + type: string + type: object + dto.TenantJoinRequestItem: + properties: + created_at: + description: CreatedAt 申请时间(RFC3339)。 + type: string + decided_at: + description: DecidedAt 审核时间(RFC3339)。 + type: string + decided_operator_user_id: + description: DecidedOperatorUserID 审核操作者ID。 + type: integer + decided_reason: + description: DecidedReason 审核备注/原因。 + type: string + id: + description: ID 申请记录ID。 + type: integer + reason: + description: Reason 申请说明。 + type: string + status: + description: Status 申请状态。 + type: string + status_description: + description: StatusDescription 状态描述。 + type: string + updated_at: + description: UpdatedAt 更新时间(RFC3339)。 + type: string + user: + allOf: + - $ref: '#/definitions/dto.TenantMemberUserLite' + description: User 申请用户信息。 + type: object dto.TenantJoinReviewForm: properties: action: @@ -2835,6 +3207,60 @@ definitions: description: Reason 审核说明(可选,用于展示驳回原因或备注)。 type: string type: object + dto.TenantMemberItem: + properties: + created_at: + description: CreatedAt 加入时间(RFC3339)。 + type: string + id: + description: ID 成员关系记录ID。 + type: integer + role: + description: Role 成员角色列表。 + items: + $ref: '#/definitions/consts.TenantUserRole' + type: array + role_description: + description: RoleDescription 角色描述列表。 + items: + type: string + type: array + status: + allOf: + - $ref: '#/definitions/consts.UserStatus' + description: Status 成员状态。 + status_description: + description: StatusDescription 成员状态描述。 + type: string + tenant_id: + description: TenantID 租户ID。 + type: integer + updated_at: + description: UpdatedAt 更新时间(RFC3339)。 + type: string + user: + allOf: + - $ref: '#/definitions/dto.TenantMemberUserLite' + description: User 成员用户信息。 + type: object + dto.TenantMemberUserLite: + properties: + avatar: + description: Avatar 头像URL。 + type: string + id: + description: ID 用户ID。 + type: integer + nickname: + description: Nickname 昵称。 + type: string + phone: + description: Phone 手机号。 + type: string + username: + description: Username 用户名。 + type: string + type: object dto.TenantOwnerUserLite: properties: id: @@ -3200,6 +3626,18 @@ definitions: $ref: '#/definitions/dto.Transaction' type: array type: object + dto.WithdrawForm: + properties: + account_id: + description: AccountID 收款账户ID。 + type: integer + amount: + description: Amount 提现金额(单位元)。 + type: number + method: + description: Method 提现方式(wallet/external)。 + type: string + type: object quyun_v2_app_http_super_v1_dto.Location: properties: city: @@ -6079,6 +6517,829 @@ paths: summary: Add like tags: - Content + /v1/t/{tenantCode}/creator/apply: + post: + consumes: + - application/json + description: 申请成为创作者并创建频道 + parameters: + - description: Apply form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.ApplyForm' + produces: + - application/json + responses: + "200": + description: Applied + schema: + type: string + summary: Apply creator profile + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/audit-logs: + get: + consumes: + - application/json + description: 查询当前租户创作者侧审计日志(仅管理员可见) + parameters: + - description: Page + in: query + name: page + type: integer + - description: Limit + in: query + name: limit + type: integer + - description: Operator ID + in: query + name: operator_id + type: integer + - description: Operator name + in: query + name: operator_name + type: string + - description: Action + in: query + name: action + type: string + - description: Target ID + in: query + name: target_id + type: string + - description: Keyword + in: query + name: keyword + type: string + - description: Created at from (RFC3339) + in: query + name: created_at_from + type: string + - description: Created at to (RFC3339) + in: query + name: created_at_to + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/requests.Pager' + - properties: + items: + items: + $ref: '#/definitions/dto.CreatorAuditLogItem' + type: array + type: object + summary: List creator audit logs + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/contents: + get: + consumes: + - application/json + description: 创作者内容列表(分页/筛选) + parameters: + - description: Page + in: query + name: page + type: integer + - description: Limit + in: query + name: limit + type: integer + - description: Status + in: query + name: status + type: string + - description: Visibility + in: query + name: visibility + type: string + - description: Genre + in: query + name: genre + type: string + - description: Key + in: query + name: key + type: string + - description: Keyword + in: query + name: keyword + type: string + - description: Sort + in: query + name: sort + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/requests.Pager' + - properties: + items: + items: + $ref: '#/definitions/dto.CreatorContentItem' + type: array + type: object + summary: List creator contents + tags: + - CreatorCenter + post: + consumes: + - application/json + description: 创建创作者内容 + parameters: + - description: Create form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.ContentCreateForm' + produces: + - application/json + responses: + "200": + description: Created + schema: + type: string + summary: Create creator content + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/contents/{id}: + delete: + consumes: + - application/json + description: 删除创作者内容 + parameters: + - description: Content ID + format: int64 + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: Deleted + schema: + type: string + summary: Delete creator content + tags: + - CreatorCenter + get: + consumes: + - application/json + description: 获取创作者内容编辑详情 + parameters: + - description: Content ID + format: int64 + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/dto.ContentEditDTO' + summary: Get creator content detail + tags: + - CreatorCenter + put: + consumes: + - application/json + description: 更新创作者内容 + parameters: + - description: Content ID + format: int64 + in: path + name: id + required: true + type: integer + - description: Update form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.ContentUpdateForm' + produces: + - application/json + responses: + "200": + description: Updated + schema: + type: string + summary: Update creator content + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/coupons: + get: + consumes: + - application/json + description: 查询创作者优惠券 + parameters: + - description: Page + in: query + name: page + type: integer + - description: Limit + in: query + name: limit + type: integer + - description: Coupon type + in: query + name: type + type: string + - description: Coupon status + in: query + name: status + type: string + - description: Keyword + in: query + name: keyword + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/requests.Pager' + - properties: + items: + items: + $ref: '#/definitions/dto.CouponItem' + type: array + type: object + summary: List creator coupons + tags: + - CreatorCenter + post: + consumes: + - application/json + description: 创建创作者优惠券 + parameters: + - description: Coupon create form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.CouponCreateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/dto.CouponItem' + summary: Create creator coupon + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/coupons/{id}: + get: + consumes: + - application/json + description: 查询创作者优惠券详情 + parameters: + - description: Coupon ID + format: int64 + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/dto.CouponItem' + summary: Get creator coupon + tags: + - CreatorCenter + put: + consumes: + - application/json + description: 更新创作者优惠券 + parameters: + - description: Coupon ID + format: int64 + in: path + name: id + required: true + type: integer + - description: Coupon update form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.CouponUpdateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/dto.CouponItem' + summary: Update creator coupon + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/coupons/{id}/grant: + post: + consumes: + - application/json + description: 向用户发放优惠券 + parameters: + - description: Coupon ID + format: int64 + in: path + name: id + required: true + type: integer + - description: Grant form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.CouponGrantForm' + produces: + - application/json + responses: + "200": + description: Granted + schema: + type: string + summary: Grant creator coupon + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/dashboard: + get: + consumes: + - application/json + description: 获取创作者看板统计 + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/dto.DashboardStats' + summary: Get creator dashboard + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/members: + get: + consumes: + - application/json + description: 查询创作者成员列表 + parameters: + - description: Page + in: query + name: page + type: integer + - description: Limit + in: query + name: limit + type: integer + - description: Keyword + in: query + name: keyword + type: string + - description: Role + in: query + name: role + type: string + - description: Status + in: query + name: status + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/requests.Pager' + - properties: + items: + items: + $ref: '#/definitions/dto.TenantMemberItem' + type: array + type: object + summary: List creator members + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/members/{id}: + delete: + consumes: + - application/json + description: 移除创作者成员 + parameters: + - description: Member relation ID + format: int64 + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: Removed + schema: + type: string + summary: Remove creator member + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/members/{id}/review: + post: + consumes: + - application/json + description: 审核成员加入申请 + parameters: + - description: Join request ID + format: int64 + in: path + name: id + required: true + type: integer + - description: Review form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.TenantJoinReviewForm' + produces: + - application/json + responses: + "200": + description: Reviewed + schema: + type: string + summary: Review creator join request + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/members/invite: + post: + consumes: + - application/json + description: 创建成员邀请 + parameters: + - description: Invite form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.TenantInviteCreateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/dto.TenantInviteItem' + summary: Create creator member invite + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/members/invites: + get: + consumes: + - application/json + description: 查询创作者成员邀请记录 + parameters: + - description: Page + in: query + name: page + type: integer + - description: Limit + in: query + name: limit + type: integer + - description: Status + in: query + name: status + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/requests.Pager' + - properties: + items: + items: + $ref: '#/definitions/dto.TenantInviteListItem' + type: array + type: object + summary: List creator member invites + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/members/invites/{id}: + delete: + consumes: + - application/json + description: 撤销成员邀请 + parameters: + - description: Invite ID + format: int64 + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: Disabled + schema: + type: string + summary: Disable creator member invite + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/members/join-requests: + get: + consumes: + - application/json + description: 查询成员加入申请 + parameters: + - description: Page + in: query + name: page + type: integer + - description: Limit + in: query + name: limit + type: integer + - description: Status + in: query + name: status + type: string + - description: Keyword + in: query + name: keyword + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/requests.Pager' + - properties: + items: + items: + $ref: '#/definitions/dto.TenantJoinRequestItem' + type: array + type: object + summary: List creator join requests + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/orders: + get: + consumes: + - application/json + description: 创作者订单列表 + parameters: + - description: Page + in: query + name: page + type: integer + - description: Limit + in: query + name: limit + type: integer + - description: Status + in: query + name: status + type: string + - description: Keyword + in: query + name: keyword + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/dto.Order' + type: array + summary: List creator orders + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/orders/{id}/refund: + post: + consumes: + - application/json + description: 处理创作者订单退款(同意/拒绝) + parameters: + - description: Order ID + format: int64 + in: path + name: id + required: true + type: integer + - description: Refund form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.RefundForm' + produces: + - application/json + responses: + "200": + description: Processed + schema: + type: string + summary: Process order refund + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/payout-accounts: + delete: + consumes: + - application/json + description: 删除创作者收款账户 + parameters: + - description: Payout account ID + format: int64 + in: query + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: Deleted + schema: + type: string + summary: Remove payout account + tags: + - CreatorCenter + get: + consumes: + - application/json + description: 获取创作者收款账户列表 + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/dto.PayoutAccount' + type: array + summary: List payout accounts + tags: + - CreatorCenter + post: + consumes: + - application/json + description: 新增创作者收款账户 + parameters: + - description: Payout account form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.PayoutAccount' + produces: + - application/json + responses: + "200": + description: Created + schema: + type: string + summary: Add payout account + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/reports/export: + post: + consumes: + - application/json + description: 导出创作者经营报表 + parameters: + - description: Export form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.ReportExportForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/dto.ReportExportResponse' + summary: Creator export report + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/reports/overview: + get: + consumes: + - application/json + description: 创作者经营看板概览 + parameters: + - description: Start at (RFC3339) + in: query + name: start_at + type: string + - description: End at (RFC3339) + in: query + name: end_at + type: string + - description: Granularity + in: query + name: granularity + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/dto.ReportOverviewResponse' + summary: Creator report overview + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/settings: + get: + consumes: + - application/json + description: 获取创作者频道设置 + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/dto.Settings' + summary: Get creator settings + tags: + - CreatorCenter + put: + consumes: + - application/json + description: 更新创作者频道设置 + parameters: + - description: Settings form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.Settings' + produces: + - application/json + responses: + "200": + description: Updated + schema: + type: string + summary: Update creator settings + tags: + - CreatorCenter + /v1/t/{tenantCode}/creator/withdraw: + post: + consumes: + - application/json + description: 发起提现申请 + parameters: + - description: Withdraw form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.WithdrawForm' + produces: + - application/json + responses: + "200": + description: Submitted + schema: + type: string + summary: Create withdraw order + tags: + - CreatorCenter /v1/t/{tenantCode}/me: get: consumes: @@ -6657,6 +7918,183 @@ paths: summary: Upload file tags: - Storage + /v1/t/{tenantCode}/tenants: + get: + consumes: + - application/json + description: List public tenants under current tenant scope + parameters: + - description: Page number + in: query + name: page + type: integer + - description: Page size + in: query + name: limit + type: integer + - description: Search keyword + in: query + name: keyword + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + allOf: + - $ref: '#/definitions/requests.Pager' + - properties: + items: + items: + $ref: '#/definitions/dto.TenantProfile' + type: array + type: object + summary: List tenants + tags: + - TenantPublic + /v1/t/{tenantCode}/tenants/{id}: + get: + consumes: + - application/json + description: Get public tenant profile by tenant ID + parameters: + - description: Tenant ID + format: int64 + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/dto.TenantProfile' + summary: Get tenant profile + tags: + - TenantPublic + /v1/t/{tenantCode}/tenants/{id}/follow: + delete: + consumes: + - application/json + description: Unfollow a tenant + parameters: + - description: Tenant ID + format: int64 + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: Unfollowed + schema: + type: string + summary: Unfollow tenant + tags: + - TenantPublic + post: + consumes: + - application/json + description: Follow a tenant + parameters: + - description: Tenant ID + format: int64 + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: Followed + schema: + type: string + summary: Follow tenant + tags: + - TenantPublic + /v1/t/{tenantCode}/tenants/{id}/invites/accept: + post: + consumes: + - application/json + description: Accept a tenant invite by code + parameters: + - description: Tenant ID + format: int64 + in: path + name: id + required: true + type: integer + - description: Invite form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.TenantInviteAcceptForm' + produces: + - application/json + responses: + "200": + description: Accepted + schema: + type: string + summary: Accept tenant invite + tags: + - TenantPublic + /v1/t/{tenantCode}/tenants/{id}/join: + delete: + consumes: + - application/json + description: Cancel pending tenant join application + parameters: + - description: Tenant ID + format: int64 + in: path + name: id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: Canceled + schema: + type: string + summary: Cancel join application + tags: + - TenantPublic + post: + consumes: + - application/json + description: Apply to join a tenant + parameters: + - description: Tenant ID + format: int64 + in: path + name: id + required: true + type: integer + - description: Join apply form + in: body + name: form + required: true + schema: + $ref: '#/definitions/dto.TenantJoinApplyForm' + produces: + - application/json + responses: + "200": + description: Applied + schema: + type: string + summary: Apply to join tenant + tags: + - TenantPublic /v1/t/{tenantCode}/topics: get: consumes: diff --git a/docs/release-evidence/2026-02-08.md b/docs/release-evidence/2026-02-08.md new file mode 100644 index 0000000..b36e2e5 --- /dev/null +++ b/docs/release-evidence/2026-02-08.md @@ -0,0 +1,299 @@ +# Release Evidence — 2026-02-08 + +## Scope + +D1 基线执行(对应 `docs/plan.md`:T1 / T4 / T15): +- 生产部署能力差距台账(4 项标准) +- 前端生产路由数据来源盘点(Portal + Superadmin) +- 后端隔离基线盘点(order/content/coupon/tenant/wallet) + +## Environment + +- Repo: `/home/rogee/Projects/quyun_v2` +- Branch: `main` +- Plan commit: `3126ed5` (`chore: refine production-readiness execution plan`) + +## Evidence A — 4项标准差距台账(Baseline) + +| 标准 | 当前状态 | 结论 | 关键证据 | +|------|----------|------|----------| +| 1) 前端所有数据来源后端接口/渲染 | Portal/Superadmin 主业务页大多为 API;存在硬编码业务数据页面与 demo mock 数据入口 | **未达标** | `frontend/portal/src/views/user/LikesView.vue:12-35`(硬编码 items);`frontend/superadmin/src/views/uikit/TableDoc.vue:2,85-91` + `frontend/superadmin/src/service/CustomerService.js:2-39`(mock数据源) | +| 2) 用户/租户数据隔离完备 | Controller 与 Service 多数传递 tenantID/userID 并做 where 约束;仍存在“依赖人工维护”的模式,需继续补负向测试 | **部分达标** | `backend/app/http/v1/helpers.go`(tenant/user 上下文);`backend/app/services/order.go:31-39,64-73`; `backend/app/services/content.go:31-47`; `backend/app/services/coupon.go:162-175,237-239`; `backend/app/services/tenant_member.go:138-154`; `backend/app/services/wallet.go:35-43` | +| 3) 超级管理员后台可审计 | 超管审计链路已存在(表、服务、API、页面) | **达标** | `backend/database/migrations/20260115103830_create_audit_logs_and_system_configs.sql:3-25`; `backend/app/http/super/v1/audit_logs.go:16-27`; `frontend/superadmin/src/views/superadmin/AuditLogs.vue:46-67` | +| 4) 租户管理对租户数据可审计 | 目前未见租户侧独立审计日志查询 API/页面(仅通知不等同审计日志) | **未达标** | `backend/app/http/v1` 未发现租户 audit-log 列表入口;Portal 仅有通知页 `frontend/portal/src/views/user/NotificationsView.vue` | + +## Evidence B — Portal 路由数据来源盘点(生产相关) + +来源:`frontend/portal/src/router/index.js` + +### B1. API 驱动为主(带少量 UI 常量) +- `/`, `/t/:tenantCode` -> `HomeView.vue`(API + fallback 常量) +- `/t/:tenantCode/channel` -> `tenant/HomeView.vue`(API + tab 常量) +- `/t/:tenantCode/contents/:id` -> `content/DetailView.vue`(API) +- `/t/:tenantCode/me/orders`、`/wallet`、`/coupons`、`/library`、`/favorites`、`/notifications`、`/profile`(以 `userApi` 为主) +- `/t/:tenantCode/creator/*`(以 `creatorApi` 为主) +- `/t/:tenantCode/checkout`、`/payment/:id`(`contentApi/orderApi`) + +### B2. 高风险(业务硬编码) +- `/t/:tenantCode/me/likes` -> `user/LikesView.vue` + - 证据:`items` 直接硬编码业务内容 `LikesView.vue:12-35` + +### B3. 静态/演示型(非关键业务) +- `/creator/apply` -> `creator/ApplyView.vue` + - 证据:`setTimeout` 模拟提交,未接后端 `ApplyView.vue:42-47` +- `/t/:tenantCode/me/security` -> `user/SecurityView.vue` + - 证据:页面展示固定手机号/验证流程占位,未接后端 `SecurityView.vue:64,113,29` + +## Evidence C — Superadmin 路由数据来源盘点 + +来源:`frontend/superadmin/src/router/index.js` + +### C1. 生产业务路由(/superadmin/*) +- 租户、用户、订单、内容、创作者、优惠券、财务、报表、资产、通知、审计日志、系统配置等页面均存在。 +- 这些页面普遍是“API 查询 + 本地选项常量(筛选项)”混合模式。 + +### C2. 明确 demo/mock 数据入口(应隔离) +- `/uikit/table` -> `views/uikit/TableDoc.vue` + - 证据:`CustomerService.getCustomers*` `TableDoc.vue:85-91` + - 数据源:`CustomerService.js` 内置对象数组 `CustomerService.js:2-39`(后续大量同类对象) + +## Evidence D — 后端隔离基线矩阵(T4) + +| 模块 | 主要隔离实现 | 风险备注 | 证据 | +|------|--------------|----------|------| +| order | query-time 使用 tenantID/userID 条件;读取明细时 tenant + user 双条件 | Recharge 类型用 OR 放行(设计允许同用户跨租户查看充值记录),需确认业务预期 | `order.go:31-39,64-73,66-70` | +| content | 列表/详情普遍 tenant 过滤;filter tenant mismatch 直接 forbidden | `UnderlyingDB` + preload 路径需持续关注遗漏风险 | `content.go:31-47,148-159,172-176` | +| coupon | Receive/Create/Update/Get/Validate/MarkUsed 多处 tenant 校验 | 存在 tenantID==0 分支(平台视角),需在接口层严格限定调用入口 | `coupon.go:162-175,237-239,306-308,657-658,720-721` | +| tenant (member) | 管理操作先 `ensureTenantAdmin`,再检查 request/invite 的 tenant 一致性 | 需用负向用例覆盖“跨租户 requestID/inviteID”场景 | `tenant_member.go:138-154,227-237,291-295,320-330` | +| wallet | 钱包交易列表使用 tenant+user 查询;支持充值订单特例 | 与订单同样存在 recharge 例外,需文档化并测试 | `wallet.go:35-43` | + +## Performance Baseline Protocol (for later execution) + +按计划定义,后续性能验证需满足: +- 目标接口:`/super/v1/audit-logs` + 新增租户审计列表 +- 条件:`page=1&limit=20`,默认排序 +- 样本:预热10次 + 采样50次,统计 p95 +- 结果写入本文件后续“性能结果”小节 + +## D1 Exit Check + +- [x] T1 差距台账已建立并含证据路径 +- [x] T4 隔离基线矩阵已建立(order/content/coupon/tenant/wallet) +- [x] T15 证据模板文件已创建并写入 D1 结果 + +## Evidence E — T2 执行结果(LikesView API化) + +### E1. 变更内容 +- 文件:`frontend/portal/src/views/user/LikesView.vue` +- 改动要点: + - 删除硬编码 `items` 列表(原本本地静态业务记录)。 + - 接入 `userApi.getLikes()` 拉取后端数据。 + - 接入 `userApi.removeLike(id)` 处理取消点赞并同步本地列表。 + - 复用与 Favorites/Library 一致的数据字段渲染:`title/cover/type/author_name/author_avatar/created_at`。 + +### E2. 核验结果 +- LSP(目标文件): `lsp_diagnostics frontend/portal/src/views/user/LikesView.vue severity=error` -> **No diagnostics found**。 +- Portal lint: `npm -C frontend/portal run lint` -> **pass**。 +- Portal build: `npm -C frontend/portal run build` -> **pass**(包含 `LikesView-*.js` 构建产物)。 + +### E3. 状态更新 +- 标准 #1(前端数据来源后端接口/渲染): + - `LikesView` 已从“未达标子项”移除。 + - 剩余风险主要在 demo/doc 路由隔离(`/uikit/table`)与静态占位页策略。 + +## Evidence F — T3 执行结果(Superadmin demo 路由隔离) + +### F1. 变更内容 +- 文件:`frontend/superadmin/src/router/index.js` +- 改动要点: + - 新增 `isDemoOnlyRoute(path)` 判定,覆盖: + - `/uikit/*` + - `/blocks` + - `/pages/empty` + - `/pages/crud` + - `/documentation` + - `/landing` + - 在全局 `beforeEach` 中加入生产环境拦截: + - `if (!import.meta.env.DEV && isDemoOnlyRoute(to.path)) return { name: 'dashboard' }` + - 效果:开发环境保留 demo 调试能力;非开发环境禁止通过 URL 直接进入 demo 页面。 + +### F2. 核验结果 +- LSP(目标文件): `frontend/superadmin/src/router/index.js` -> **No diagnostics found**。 +- Superadmin lint: `npm -C frontend/superadmin run lint` -> **pass**(首次执行出现一次临时文件 ENOENT,重试通过)。 +- Superadmin build: `npm -C frontend/superadmin run build` -> **pass**。 + +### F3. 状态更新 +- 标准 #1(前端生产数据来源约束)继续收敛: + - demo/mock 路由已从“可直接访问”改为“生产环境拦截”。 + - 仍建议后续把 demo 路由按配置化开关进一步显式隔离(可选增强项)。 + +## Evidence G — T6 执行结果(跨租户负向测试补强) + +### G1. 新增测试覆盖 + +#### Order +- 文件:`backend/app/services/order_test.go` +- 新增用例: + - `Test_Pay_DenyCrossTenantOrder` + - `Test_Status_DenyCrossTenantOrder` +- 断言目标:同一用户持有 A 租户订单时,用 B 租户上下文调用 `Pay/Status` 必须返回 `ErrForbidden`。 + +#### Coupon +- 文件:`backend/app/services/coupon_test.go` +- 新增用例: + - `Test_Validate_DenyCrossTenantCoupon` + - `Test_MarkUsed_DenyCrossTenantCoupon` + - `Test_Grant_DenyCrossTenantCoupon` +- 断言目标: + - `Validate/MarkUsed` 跨租户必须拒绝(`ErrForbidden`) + - `Grant` 使用非所属租户发放时必须失败且不产生 `user_coupons` 记录。 + +#### Tenant Member +- 文件:`backend/app/services/tenant_member_test.go` +- 新增用例: + - `Test_ReviewJoin` 中补充跨租户 review 拒绝场景 + - `Test_ListMembersAndRemove` 中补充跨租户 remove 拒绝场景 + - `Test_ListInvitesAndDisable` 中补充跨租户 disable 邀请拒绝场景 +- 断言目标:跨租户操作返回 `ErrForbidden`,目标记录状态不应被修改。 + +### G2. 测试执行结果 +- 命令(聚合): + - `cd backend && env GOCACHE=$PWD/.gocache GOTMPDIR=$PWD/.gotmp go test ./app/services -run 'Test_Order/(Test_Pay_DenyCrossTenantOrder|Test_Status_DenyCrossTenantOrder)|Test_Coupon/(Test_Validate_DenyCrossTenantCoupon|Test_MarkUsed_DenyCrossTenantCoupon|Test_Grant_DenyCrossTenantCoupon)|Test_Tenant/(Test_ReviewJoin|Test_ListMembersAndRemove|Test_ListInvitesAndDisable)'` +- 结果:**PASS**(`ok quyun/v2/app/services`) + +### G3. 过程说明 +- 首轮执行暴露新增测试数据问题(`tenants_code_key` 唯一约束冲突),已通过为新增租户测试数据设置唯一 `code` 修复。 +- 修复后目标测试集稳定通过。 + +## Evidence H — T8 执行结果(租户侧审计日志 API) + +### H1. 变更内容 +- 新增 DTO:`backend/app/http/v1/dto/creator_audit.go` + - `CreatorAuditLogListFilter`:分页 + `operator_id/operator_name/action/target_id/keyword/created_at_from/created_at_to/asc/desc` + - `CreatorAuditLogItem`:`id/operator_id/operator_name/action/target_id/detail/created_at` +- 新增服务方法:`backend/app/services/creator.go` + - `Creator.ListAuditLogs(ctx, tenantID, userID, filter)` + - 强制租户范围:`audit_logs.tenant_id = currentTenantID` + - 权限校验:复用 `Tenant.ensureTenantAdmin`,仅租户主账号/tenant_admin 可查看 + - 过滤/排序/分页:对齐 super audit 风格(支持 `id/created_at` 排序) + - 操作者名补齐:批量查询 user 表回填 `operator_name` + - DB 错误统一 `errorx.ErrDatabaseError.WithCause(err)` 包装 +- 新增控制器接口:`backend/app/http/v1/creator.go` + - `GET /v1/t/:tenantCode/creator/audit-logs` + - 控制器仅做 bind + tenant/user 上下文提取 + service 调用 +- 路由/文档生成: + - `atomctl gen route` + - `atomctl swag init` + - 生成结果包含: + - `backend/app/http/v1/routes.gen.go` 新路由注册 + - `backend/docs/swagger.yaml|swagger.json|docs.go` 新接口与模型 + +### H2. 测试与核验 +- 新增测试:`backend/app/services/creator_test.go` + - `Test_ListAuditLogs` + - 覆盖点: + - 仅返回当前租户日志(跨租户数据不泄露) + - `operator_name` 过滤生效 + - 非管理员访问拒绝 +- 执行结果: + - `go test ./app/services -run 'Test_Creator/(Test_ListAuditLogs|Test_ReportOverview|Test_ExportReport)$'` -> **PASS** + - `go test ./app/http/v1 ./app/services` -> **PASS** + - `go test ./...`(backend)-> **PASS** +- LSP(本次变更文件): **No diagnostics found** + +## Evidence I — T9 执行结果(Portal 创作者审计页面) + +### I1. 变更内容 +- API 封装:`frontend/portal/src/api/creator.js` + - 新增 `listAuditLogs(params)` -> `/creator/audit-logs` +- 新增页面:`frontend/portal/src/views/creator/AuditView.vue` + - 筛选:`operator_id/operator_name/action/target_id/keyword/created_at_from/created_at_to` + - 排序:`created_at|id` + 升降序 + - 列表展示:日志ID、操作者、动作、目标ID、详情、创建时间 + - 分页:PrimeVue `Paginator` +- 路由注册:`frontend/portal/src/router/index.js` + - 新增 `creator-audit`,路径 `creator/audit` +- 侧边菜单:`frontend/portal/src/layout/LayoutCreator.vue` + - 新增“操作审计”入口,链接 `tenantRoute('/creator/audit')` + +### I2. 核验结果 +- Portal lint: `npm -C frontend/portal run lint` -> **pass** +- Portal build: `npm -C frontend/portal run build` -> **pass**(产物含 `AuditView-*.js`) +- LSP(本次前端变更文件): **No diagnostics found** + +## Status Update + +- 标准 #4(租户管理侧可审计): + - 已具备租户侧审计查询 API + Portal 页面入口与展示能力 + - 当前状态:**达标(待后续前后端联调回归统一验收)** + +## Evidence J — T16 执行结果 (Tenant Creator Audit Flow Acceptance) + +### J1. 测试执行摘要 + +| 测试用例 | 状态 | 观察结果 | 证据 | +|-----------|--------|-------------|----------| +| **Admin Login & Navigation** | PASS | Admin `13800000001` 成功登录并导航至 `/t/meipai_765/creator/audit`。页面标题“操作审计”验证通过。 | `admin-audit-page-loaded.png` | +| **Data Rendering** | PASS | 审计日志列表渲染多行数据 (IDs 13, 12, etc.)。 | `admin-audit-page-loaded.png` | +| **Action Filter** | PASS | 筛选动作 "seed" 后列表缩减为单条匹配记录 (ID 3)。 | `admin-filter-result.png` | +| **Pagination** | PASS | 切换至第 2 页显示了不同的记录 (IDs 3, 2, 1)。 | `admin-page-2.png` | +| **Permission Control** | PASS | 普通成员 `13800138000` 访问页面显示“暂无审计记录”,验证了数据权限控制。 | `member-denied-state.png` | + +### J2. 截图证据 + +#### 1. Admin: Audit Page Loaded +![Admin Audit Page](2026-02-08/admin-audit-page-loaded.png) +*完整审计日志列表展示* + +#### 2. Admin: Filter Result ("seed") +![Admin Filter Result](2026-02-08/admin-filter-result.png) +*筛选 action='seed' 结果* + +#### 3. Admin: Pagination (Page 2) +![Admin Page 2](2026-02-08/admin-page-2.png) +*第 2 页旧数据展示* + +#### 4. Member: Access Denied / No Data +![Member Denied](2026-02-08/member-denied-state.png) +*非管理员用户访问无数据展示* + +### J3. 结论 +**PASS**. 新增的租户创作者审计流程对管理员功能正常,对普通成员具备权限控制。T16 验收通过。 + +## Evidence K — T17 发布门禁汇总与 Go/No-Go + +### K1. 门禁清单结果 + +| 门禁项 | 结果 | 证据 | +|---|---|---| +| T13 Backend 全量测试 | PASS | `go test ./...`(backend)通过 | +| T14 Frontend build/lint | PASS | `npm -C frontend/portal run lint && npm -C frontend/portal run build` 通过;`npm -C frontend/superadmin run lint && npm -C frontend/superadmin run build` 通过 | +| T16 前端页面流验收(本次受影响流) | PASS | Evidence J + 截图 `docs/release-evidence/2026-02-08/*.png` | +| 租户审计 API 权限与数据面验证 | PASS | 成员调用 `/v1/t/meipai_765/creator/audit-logs` 返回 `code=1206 无权限操作该租户`;管理员调用返回 `total=13` 且可筛选/分页 | + +### K2. 四项标准最终判定(本轮) + +| 标准 | 判定 | 说明 | +|---|---|---| +| 1) 前端业务数据来自后端接口/渲染 | PASS(本轮范围) | LikesView 已 API 化;superadmin demo 路由已生产拦截 | +| 2) 用户/租户数据隔离完备 | PASS(本轮范围) | 跨租户负向测试补强通过(Evidence G) | +| 3) 超管后台可审计 | PASS | 既有超管审计链路 + 构建验证通过 | +| 4) 租户管理侧可审计 | PASS | 新增 creator audit API + Portal 页面 + 页面流验收通过 | + +### K3. Go/No-Go 结论 + +**Go(可进入生产发布候选)**。 + +依据:T13/T14/T16/T17 门禁均通过,且四项标准在本轮改造范围内均达标。 + +### K4. 发布前剩余建议(非阻塞) + +1. 按计划补充审计接口性能基线(p95)记录(目前文档仅有测量协议,尚缺执行数据)。 +2. 将 superadmin demo 路由从“运行时拦截”进一步提升为“构建期裁剪”(可选增强)。 +3. 按计划完成归档动作:若确认本阶段收口,执行 T18(归档 `docs/plan.md` -> `docs/plans/.md` 并清空活动 plan)。 + +## Next Actions (D2+) + +1. (已完成)执行计划门禁与联调验收项(T13/T14/T16/T17),见 Evidence K。 +2. (已完成)进行前端页面流验收(creator audit 查询/筛选/分页)并补充录屏或截图证据(见 Evidence J)。 +3. (可选增强)将 superadmin demo 路由按构建开关完全剔除,而非仅运行时拦截。 diff --git a/docs/release-evidence/2026-02-08/admin-audit-page-loaded.png b/docs/release-evidence/2026-02-08/admin-audit-page-loaded.png new file mode 100644 index 0000000000000000000000000000000000000000..f485f2900c95e8f61efd0182a8405c1bb49b817d GIT binary patch literal 97892 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
6m!;qFLOQl2jGkT|&u1h~&%Bh|f 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 XtzR#?&1emPZy+blt<7E>_qh6h1H>?t literal 0 HcmV?d00001 diff --git a/docs/release-evidence/2026-02-08/admin-filter-result.png b/docs/release-evidence/2026-02-08/admin-filter-result.png new file mode 100644 index 0000000000000000000000000000000000000000..8a3196506c1de7144c74f9bd80b6afafe851375b GIT binary patch literal 84142 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 R1U?wdX(e^Vl;dXJ{{vVpd)@#5 literal 0 HcmV?d00001 diff --git a/docs/release-evidence/2026-02-08/admin-page-2.png b/docs/release-evidence/2026-02-08/admin-page-2.png new file mode 100644 index 0000000000000000000000000000000000000000..81255f656e2b157c352f49d3b1a87841e8ba9307 GIT binary patch literal 83989 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�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 L>L{0Au(|br-FYfk literal 0 HcmV?d00001 diff --git a/docs/release-evidence/2026-02-08/member-denied-state.png b/docs/release-evidence/2026-02-08/member-denied-state.png new file mode 100644 index 0000000000000000000000000000000000000000..64d51eb67c7317f99539d96e11eefabf4276c9a7 GIT binary patch literal 80785 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 { + const qs = new URLSearchParams(params).toString(); + return request(`/creator/audit-logs?${qs}`); + }, refundOrder: (id, data) => request(`/creator/orders/${id}/refund`, { method: "POST", body: data }), listCoupons: (params) => { diff --git a/frontend/portal/src/layout/LayoutCreator.vue b/frontend/portal/src/layout/LayoutCreator.vue index 700a846..384ecbb 100644 --- a/frontend/portal/src/layout/LayoutCreator.vue +++ b/frontend/portal/src/layout/LayoutCreator.vue @@ -91,6 +91,16 @@ const isFullWidth = computed(() => { > 订单管理 + + + 操作审计 + import("../views/creator/OrdersView.vue"), }, + { + path: "audit", + name: "creator-audit", + component: () => import("../views/creator/AuditView.vue"), + }, { path: "members", name: "creator-members", diff --git a/frontend/portal/src/views/creator/AuditView.vue b/frontend/portal/src/views/creator/AuditView.vue new file mode 100644 index 0000000..47ed9e3 --- /dev/null +++ b/frontend/portal/src/views/creator/AuditView.vue @@ -0,0 +1,347 @@ + + + diff --git a/frontend/portal/src/views/user/LikesView.vue b/frontend/portal/src/views/user/LikesView.vue index 6fa33e3..b734f3c 100644 --- a/frontend/portal/src/views/user/LikesView.vue +++ b/frontend/portal/src/views/user/LikesView.vue @@ -1,42 +1,61 @@ @@ -65,11 +84,8 @@ const removeItem = (id) => {
    - - {{ item.duration || "文章" }} + + {{ getTypeLabel(item.type) }}
    @@ -81,13 +97,19 @@ const removeItem = (id) => { {{ item.title }}
    - - {{ item.author }} + + {{ item.author_name }}
    - {{ item.time }} + {{ item.created_at }}
    -
    +
    diff --git a/frontend/superadmin/dist/index.html b/frontend/superadmin/dist/index.html index 779bb73..0ab20ec 100644 --- a/frontend/superadmin/dist/index.html +++ b/frontend/superadmin/dist/index.html @@ -7,7 +7,7 @@ Sakai Vue - + diff --git a/frontend/superadmin/src/router/index.js b/frontend/superadmin/src/router/index.js index 8cd2cd4..4f733c8 100644 --- a/frontend/superadmin/src/router/index.js +++ b/frontend/superadmin/src/router/index.js @@ -225,10 +225,18 @@ const router = createRouter({ ] }); +const isDemoOnlyRoute = (path) => { + return path.startsWith('/uikit/') || path === '/blocks' || path === '/pages/empty' || path === '/pages/crud' || path === '/documentation' || path === '/landing'; +}; + let tokenValidated = false; let tokenValidationPromise = null; router.beforeEach(async (to) => { + if (!import.meta.env.DEV && isDemoOnlyRoute(to.path)) { + return { name: 'dashboard' }; + } + if (to.meta?.requiresAuth !== true) return true; const isAuthed = hasSuperAuthToken();