package tenant import ( "time" "quyun/v2/app/errorx" "quyun/v2/app/http/tenant/dto" "quyun/v2/app/requests" "quyun/v2/app/services" "quyun/v2/database/models" "github.com/gofiber/fiber/v3" log "github.com/sirupsen/logrus" ) // tenantInviteAdmin 提供“租户管理员管理邀请码”的相关接口。 // // @provider type tenantInviteAdmin struct{} // adminCreateInvite // // @Summary 创建邀请码(租户管理) // @Tags Tenant // @Accept json // @Produce json // @Param tenantCode path string true "Tenant Code" // @Param form body dto.AdminTenantInviteCreateForm true "Form" // @Success 200 {object} models.TenantInvite // // @Router /t/:tenantCode/v1/admin/invites [post] // @Bind tenant local key(tenant) // @Bind tenantUser local key(tenant_user) // @Bind form body func (*tenantInviteAdmin) adminCreateInvite( ctx fiber.Ctx, tenant *models.Tenant, tenantUser *models.TenantUser, form *dto.AdminTenantInviteCreateForm, ) (*models.TenantInvite, error) { if err := requireTenantAdmin(tenantUser); err != nil { return nil, err } if form == nil { return nil, errorx.ErrInvalidParameter } log.WithFields(log.Fields{ "tenant_id": tenant.ID, "user_id": tenantUser.UserID, }).Info("tenant.admin.invites.create") return services.Tenant.AdminCreateInvite(ctx.Context(), tenant.ID, tenantUser.UserID, form) } // adminInviteList // // @Summary 邀请码列表(租户管理) // @Tags Tenant // @Accept json // @Produce json // @Param tenantCode path string true "Tenant Code" // @Param filter query dto.AdminTenantInviteListFilter true "Filter" // @Success 200 {object} requests.Pager{items=models.TenantInvite} // // @Router /t/:tenantCode/v1/admin/invites [get] // @Bind tenant local key(tenant) // @Bind tenantUser local key(tenant_user) // @Bind filter query func (*tenantInviteAdmin) adminInviteList( ctx fiber.Ctx, tenant *models.Tenant, tenantUser *models.TenantUser, filter *dto.AdminTenantInviteListFilter, ) (*requests.Pager, error) { if err := requireTenantAdmin(tenantUser); err != nil { return nil, err } if filter == nil { filter = &dto.AdminTenantInviteListFilter{} } log.WithFields(log.Fields{ "tenant_id": tenant.ID, "user_id": tenantUser.UserID, "status": filter.Status, "code": filter.CodeTrimmed(), }).Info("tenant.admin.invites.list") return services.Tenant.AdminInvitePage(ctx.Context(), tenant.ID, filter) } // adminDisableInvite // // @Summary 禁用邀请码(租户管理) // @Tags Tenant // @Accept json // @Produce json // @Param tenantCode path string true "Tenant Code" // @Param inviteID path int64 true "InviteID" // @Param form body dto.AdminTenantInviteDisableForm true "Form" // @Success 200 {object} models.TenantInvite // // @Router /t/:tenantCode/v1/admin/invites/:inviteID/disable [patch] // @Bind tenant local key(tenant) // @Bind tenantUser local key(tenant_user) // @Bind inviteID path // @Bind form body func (*tenantInviteAdmin) adminDisableInvite( ctx fiber.Ctx, tenant *models.Tenant, tenantUser *models.TenantUser, inviteID int64, form *dto.AdminTenantInviteDisableForm, ) (*models.TenantInvite, error) { if err := requireTenantAdmin(tenantUser); err != nil { return nil, err } if inviteID <= 0 { return nil, errorx.ErrInvalidParameter.WithMsg("invite_id must be > 0") } if form == nil { return nil, errorx.ErrInvalidParameter } log.WithFields(log.Fields{ "tenant_id": tenant.ID, "user_id": tenantUser.UserID, "invite_id": inviteID, "disable_time": time.Now(), }).Info("tenant.admin.invites.disable") return services.Tenant.AdminDisableInvite(ctx.Context(), tenant.ID, tenantUser.UserID, inviteID, form.Reason) }