Files
team-api/internal/service/admin.go
T

634 lines
50 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// You can delete these comments if you wish manually maintain this interface file.
// ================================================================================
package service
import (
"context"
v1 "github.com/qianfree/team-api/api/admin/v1"
)
type (
IAdmin interface {
// ListUsers returns a paginated list of admin users.
ListUsers(ctx context.Context, req *v1.AdminUserListReq) (*v1.AdminUserListRes, error)
// CreateUser creates a new admin user.
CreateUser(ctx context.Context, req *v1.AdminUserCreateReq) (*v1.AdminUserCreateRes, error)
// UpdateUser updates an admin user.
UpdateUser(ctx context.Context, req *v1.AdminUserUpdateReq) (*v1.AdminUserUpdateRes, error)
// DeleteUser deletes an admin user.
DeleteUser(ctx context.Context, req *v1.AdminUserDeleteReq) (*v1.AdminUserDeleteRes, error)
// UpdateUserStatus enables or disables an admin user.
UpdateUserStatus(ctx context.Context, req *v1.AdminUserUpdateStatusReq) (*v1.AdminUserUpdateStatusRes, error)
// UnlockUser 清除管理员的登录锁定状态(重置失败计数与锁定截止时间)。
//
// 解锁是本文件里唯一漏掉 assertCanManageAdminUser 的账号处置动作:锁定本身是暴力破解
// 的防线,非超管若能解锁超级管理员账号,就等于可以无限次重置对方的失败计数继续爆破。
UnlockUser(ctx context.Context, req *v1.AdminUserUnlockReq) (*v1.AdminUserUnlockRes, error)
// ResetUserPassword resets an admin user's password.
ResetUserPassword(ctx context.Context, req *v1.AdminUserResetPasswordReq) (*v1.AdminUserResetPasswordRes, error)
// ExportUsers exports admin users to CSV or Excel.
ExportUsers(ctx context.Context, req *v1.AdminUserExportReq) (*v1.AdminUserExportRes, error)
// CreateAgreement 创建协议版本
CreateAgreement(ctx context.Context, req *v1.AgreementCreateReq) (*v1.AgreementCreateRes, error)
// ListAgreements 协议版本列表
ListAgreements(ctx context.Context, req *v1.AgreementListReq) (*v1.AgreementListRes, error)
// GetAgreement 协议版本详情
GetAgreement(ctx context.Context, req *v1.AgreementGetReq) (*v1.AgreementGetRes, error)
// UpdateAgreement 更新协议版本(仅 draft)
UpdateAgreement(ctx context.Context, req *v1.AgreementUpdateReq) (*v1.AgreementUpdateRes, error)
// DeleteAgreement 删除协议版本(仅 draft)
DeleteAgreement(ctx context.Context, req *v1.AgreementDeleteReq) (*v1.AgreementDeleteRes, error)
// PublishAgreement 发布协议版本
PublishAgreement(ctx context.Context, req *v1.AgreementPublishReq) (*v1.AgreementPublishRes, error)
// ListAgreementAcceptances 协议接受记录列表
ListAgreementAcceptances(ctx context.Context, req *v1.AgreementAcceptanceListReq) (*v1.AgreementAcceptanceListRes, error)
// ListAdminPendingAgreements 当前管理员待接受的协议
ListAdminPendingAgreements(ctx context.Context, req *v1.AdminAgreementPendingReq) (*v1.AdminAgreementPendingRes, error)
// AcceptAdminAgreements 管理员接受协议
AcceptAdminAgreements(ctx context.Context, req *v1.AdminAgreementAcceptReq) (*v1.AdminAgreementAcceptRes, error)
// GetAuditConfig retrieves the global audit level from sys_options.
GetAuditConfig(ctx context.Context, _ *v1.AuditConfigGetReq) (*v1.AuditConfigGetRes, error)
// UpdateAuditConfig updates the global audit level.
UpdateAuditConfig(ctx context.Context, req *v1.AuditConfigUpdateReq) (*v1.AuditConfigUpdateRes, error)
// ListOperationLogs retrieves a paginated list of operation logs with optional filters.
ListOperationLogs(ctx context.Context, req *v1.OperationLogListReq) (*v1.OperationLogListRes, error)
// ListSensitiveAccessLogs retrieves a paginated list of sensitive data access logs.
ListSensitiveAccessLogs(ctx context.Context, req *v1.SensitiveLogListReq) (*v1.SensitiveLogListRes, error)
// ListRequestAuditLogs 分页查询请求审计日志(不返回 request_body/response_body 以优化性能)
// 审计数据从审计库查询,关联信息(用户名、租户名等)从主库批量查询后在应用层合并。
ListRequestAuditLogs(ctx context.Context, req *v1.RequestAuditLogListReq) (*v1.RequestAuditLogListRes, error)
// GetRequestAuditLogDetail 查询单条请求审计日志详情(含完整 request_body 和 response_body)
GetRequestAuditLogDetail(ctx context.Context, req *v1.RequestAuditLogDetailReq) (*v1.RequestAuditLogDetailRes, error)
// ForwardingTraceGet 按 request_id 查询请求转发路径追踪(仅管理员,用量日志详情懒加载用)。
// 从审计库查询 aud_request_logs(可能独立于主库),仅取 forwarding_trace 与 audit_level 两列。
// 一个 request_id 仅对应一条审计记录(任务完成审计为 UPDATE 非 INSERT),OrderDesc 取最新为防御性兜底。
ForwardingTraceGet(ctx context.Context, req *v1.ForwardingTraceGetReq) (*v1.ForwardingTraceGetRes, error)
// ExportOperationLogs exports operation logs to CSV or Excel.
ExportOperationLogs(ctx context.Context, req *v1.OperationLogExportReq) (*v1.OperationLogExportRes, error)
// ContentFilterLogList returns a paginated list of content filter interception logs.
// 审计数据从审计库查询,关联信息从主库批量查询后在应用层合并。
ContentFilterLogList(ctx context.Context, req *v1.ContentFilterLogListReq) (*v1.ContentFilterLogListRes, error)
// ContentFilterLogClear 硬删除全部内容过滤拦截日志。
// 拦截日志为追加型审计流水,堆积后用 TRUNCATE 秒级清空并立即归还磁盘空间
// (DELETE 需等 VACUUM 回收)。TRUNCATE 不返回行数,故先取删除前条数作为反馈。
// 表无数据库级外键,TRUNCATE 安全。
ContentFilterLogClear(ctx context.Context, _ *v1.ContentFilterLogClearReq) (*v1.ContentFilterLogClearRes, error)
// Login handles admin login.
Login(ctx context.Context, req *v1.AdminLoginReq) (*v1.AdminLoginRes, error)
// Logout handles admin logout.
Logout(ctx context.Context, _ *v1.AdminLogoutReq) (*v1.AdminLogoutRes, error)
// Refresh handles token refresh.
Refresh(ctx context.Context, req *v1.AdminRefreshReq) (*v1.AdminRefreshRes, error)
// ListSessions returns active sessions for the current admin user.
ListSessions(ctx context.Context, req *v1.AdminSessionListReq) (*v1.AdminSessionListRes, error)
// RevokeSession revokes a specific session.
RevokeSession(ctx context.Context, req *v1.AdminRevokeSessionReq) (*v1.AdminRevokeSessionRes, error)
// ForceLogout revokes all sessions for a specific user.
ForceLogout(ctx context.Context, req *v1.AdminForceLogoutReq) (*v1.AdminForceLogoutRes, error)
// ChangePassword handles admin password change.
ChangePassword(ctx context.Context, req *v1.AdminChangePasswordReq) (*v1.AdminChangePasswordRes, error)
// GetMe 返回当前登录用户的信息与有效权限。
//
// 权限此前只在登录响应里下发一次,之后前端从 localStorage 恢复:管理员改了某人的权限,
// 对方不重新登录就一直按旧权限渲染菜单。前端在应用启动与 token 刷新后调用本接口刷新。
GetMe(ctx context.Context, _ *v1.AdminMeReq) (*v1.AdminMeRes, error)
// CreateChangelog 创建更新日志
CreateChangelog(ctx context.Context, req *v1.ChangelogCreateReq) (*v1.ChangelogCreateRes, error)
// ListChangelogs 更新日志列表(管理后台,含草稿)
ListChangelogs(ctx context.Context, req *v1.ChangelogListReq) (*v1.ChangelogListRes, error)
// UpdateChangelog 更新更新日志
UpdateChangelog(ctx context.Context, req *v1.ChangelogUpdateReq) (*v1.ChangelogUpdateRes, error)
// DeleteChangelog 删除更新日志
DeleteChangelog(ctx context.Context, req *v1.ChangelogDeleteReq) (*v1.ChangelogDeleteRes, error)
// PublishChangelog 发布更新日志
PublishChangelog(ctx context.Context, req *v1.ChangelogPublishReq) (*v1.ChangelogPublishRes, error)
// ListChannelOptions 渠道下拉选项(不分页,返回全部渠道)。
// 刻意不做状态过滤:日志 / 统计页的渠道筛选项要覆盖历史数据里出现过的全部渠道,
// 已停用渠道同样需要能作为筛选条件;status 原样返回,由前端决定是否标记。
// 注意与 /admin/channels 的区别:后者是渠道管理列表(分页 + 健康度联表 + 运行态),
// 下拉场景不要用它 —— 那是本接口存在的意义。
ListChannelOptions(ctx context.Context, _ *v1.ChannelOptionsReq) (*v1.ChannelOptionsRes, error)
ListChannels(ctx context.Context, req *v1.ChannelListReq) (*v1.ChannelListRes, error)
// CloneChannel 克隆渠道
CloneChannel(ctx context.Context, req *v1.ChannelCloneReq) (*v1.ChannelCloneRes, error)
// CreateChannel 创建渠道
CreateChannel(ctx context.Context, req *v1.ChannelCreateReq) (*v1.ChannelCreateRes, error)
// UpdateChannel 更新渠道
UpdateChannel(ctx context.Context, req *v1.ChannelUpdateReq) (*v1.ChannelUpdateRes, error)
// DeleteChannel 删除渠道
DeleteChannel(ctx context.Context, req *v1.ChannelDeleteReq) (*v1.ChannelDeleteRes, error)
// GetChannelDetail 获取渠道详情
GetChannelDetail(ctx context.Context, req *v1.ChannelDetailReq) (*v1.ChannelDetailRes, error)
// AddChannelKey 添加渠道 API Key(已废弃:每渠道仅支持一个 Key)
AddChannelKey(ctx context.Context, req *v1.ChannelKeyCreateReq) (*v1.ChannelKeyCreateRes, error)
// DeleteChannelKey 删除渠道 API Key
DeleteChannelKey(ctx context.Context, req *v1.ChannelKeyDeleteReq) (*v1.ChannelKeyDeleteRes, error)
// SetChannelAbilities 设置渠道模型能力
SetChannelAbilities(ctx context.Context, req *v1.ChannelAbilityBatchReq) (*v1.ChannelAbilityBatchRes, error)
// GetChannelKeys 获取渠道 Key 列表
GetChannelKeys(ctx context.Context, req *v1.ChannelKeyListReq) (*v1.ChannelKeyListRes, error)
// GetChannelAbilities 获取渠道模型能力列表
GetChannelAbilities(ctx context.Context, req *v1.ChannelAbilitiesGetReq) (*v1.ChannelAbilitiesGetRes, error)
// GetProviderDefaultURLs 获取供应商默认 API 地址
GetProviderDefaultURLs(ctx context.Context, _ *v1.ProviderDefaultURLReq) (*v1.ProviderDefaultURLRes, error)
// GetChannelHealthTrend 获取渠道健康趋势数据(健康度、延迟在 SQL 层四舍五入取整,避免展示小数)
// 不再返回 stability_score / consecutive_failures:健康体系重写后这两列已停止写入,
// 返回恒定值只会让前端画出两条毫无意义的常量线。
GetChannelHealthTrend(ctx context.Context, req *v1.ChannelHealthTrendReq) (*v1.ChannelHealthTrendRes, error)
// ResetChannelHealth 重置渠道健康度(渠道可能已修复、重新可用):落库健康分 80(展示层),
// 并复位熔断 + 成功率 EWMA(调度层),使渠道立即恢复被调度选择的能力。
ResetChannelHealth(ctx context.Context, req *v1.ChannelResetHealthReq) (*v1.ChannelResetHealthRes, error)
// ExportChannels exports channel list to CSV or Excel.
ExportChannels(ctx context.Context, req *v1.ChannelExportReq) (*v1.ChannelExportRes, error)
// ChannelDebugLogList 渠道调试日志列表(原生 SQL:octet_length 表达式经 gdb Fields 有引号化风险)
ChannelDebugLogList(ctx context.Context, req *v1.ChannelDebugLogListReq) (*v1.ChannelDebugLogListRes, error)
// ChannelDebugLogStats 渠道调试日志统计(条数/落库体积/最早时间,供清理提示)
ChannelDebugLogStats(ctx context.Context, req *v1.ChannelDebugLogStatsReq) (*v1.ChannelDebugLogStatsRes, error)
// ChannelDebugLogDetail 渠道调试日志详情(四段完整报文;headers JSONB 解析为对象便于前端渲染)
ChannelDebugLogDetail(ctx context.Context, req *v1.ChannelDebugLogDetailReq) (*v1.ChannelDebugLogDetailRes, error)
// ChannelDebugLogDelete 删除单条调试日志(硬删除)
ChannelDebugLogDelete(ctx context.Context, req *v1.ChannelDebugLogDeleteReq) (*v1.ChannelDebugLogDeleteRes, error)
// ChannelDebugLogClear 清空渠道调试日志(按渠道硬删除全部)
ChannelDebugLogClear(ctx context.Context, req *v1.ChannelDebugLogClearReq) (*v1.ChannelDebugLogClearRes, error)
// ChannelErrorEventList 渠道错误事件列表
ChannelErrorEventList(ctx context.Context, req *v1.ChannelErrorEventListReq) (*v1.ChannelErrorEventListRes, error)
// ChannelErrorStats 渠道错误统计
ChannelErrorStats(ctx context.Context, req *v1.ChannelErrorStatsReq) (*v1.ChannelErrorStatsRes, error)
// ChannelErrorTrend 渠道错误趋势
ChannelErrorTrend(ctx context.Context, req *v1.ChannelErrorTrendReq) (*v1.ChannelErrorTrendRes, error)
// ChannelErrorTopChannels 错误最多的渠道
ChannelErrorTopChannels(ctx context.Context, req *v1.ChannelErrorTopChannelsReq) (*v1.ChannelErrorTopChannelsRes, error)
// ChannelErrorCategories 错误分类选项
ChannelErrorCategories(ctx context.Context, req *v1.ChannelErrorCategoriesReq) (*v1.ChannelErrorCategoriesRes, error)
// ChannelErrorClear 硬删除全部渠道错误事件。
// 错误风暴时事件表堆积很快,用 TRUNCATE 而非逐行 DELETE 秒级清空并立即归还磁盘空间。
// TRUNCATE 不返回行数,故先取删除前条数作为反馈。表无数据库级外键,TRUNCATE 安全。
// 注意异步写入器(DefaultChannelErrorWriter)清空后继续写入新事件,属预期行为。
ChannelErrorClear(ctx context.Context, _ *v1.ChannelErrorClearReq) (*v1.ChannelErrorClearRes, error)
// ChannelOAuthAuthURL 生成 OAuth 授权链接
ChannelOAuthAuthURL(ctx context.Context, req *v1.ChannelOAuthAuthURLReq) (*v1.ChannelOAuthAuthURLRes, error)
// ChannelOAuthExchange OAuth 授权码换取令牌
ChannelOAuthExchange(ctx context.Context, req *v1.ChannelOAuthExchangeReq) (*v1.ChannelOAuthExchangeRes, error)
// ChannelOAuthRefresh 手动刷新 OAuth 令牌
ChannelOAuthRefresh(ctx context.Context, req *v1.ChannelOAuthRefreshReq) (*v1.ChannelOAuthRefreshRes, error)
// TestChannel 测试渠道可用性(发送最小请求验证)。
// 不限制渠道状态:禁用中的渠道也允许手动测试,便于管理员在启用放流量前确认已恢复;
// 自动探测 cron 只查 active 渠道,禁用渠道不会被自动探测。
TestChannel(ctx context.Context, req *v1.ChannelTestReq) (*v1.ChannelTestRes, error)
// CronJobList returns all registered cron jobs with their last execution status.
CronJobList(ctx context.Context, _ *v1.CronJobListReq) (*v1.CronJobListRes, error)
// CronJobTrigger manually triggers a cron job.
CronJobTrigger(ctx context.Context, req *v1.CronJobTriggerReq) (*v1.CronJobTriggerRes, error)
// GetDashboardStats 获取管理后台仪表盘统计
GetDashboardStats(ctx context.Context, req *v1.AdminDashboardReq) (*v1.AdminDashboardRes, error)
// GetDashboardTrends returns daily revenue and request trends for the past N days.
GetDashboardTrends(ctx context.Context, req *v1.AdminDashboardTrendsReq) (*v1.AdminDashboardTrendsRes, error)
// GetTopTenants returns the top 10 tenants by revenue.
GetTopTenants(ctx context.Context, req *v1.AdminDashboardTopTenantsReq) (*v1.AdminDashboardTopTenantsRes, error)
// GetModelDistribution returns the model usage distribution.
GetModelDistribution(ctx context.Context, req *v1.AdminDashboardModelDistributionReq) (*v1.AdminDashboardModelDistributionRes, error)
// GetModelHourlyCost 模型费用按小时堆叠统计,用于仪表盘堆叠柱状图:
// 取最近 N 小时内费用最高的 TopN 个模型,按小时聚合费用,非 TopN 模型归并为"其他"。
GetModelHourlyCost(ctx context.Context, req *v1.AdminDashboardModelHourlyReq) (*v1.AdminDashboardModelHourlyRes, error)
// GetAllUsageLogs 获取所有租户的用量日志(管理后台)
GetAllUsageLogs(ctx context.Context, req *v1.AdminUsageLogListReq) (*v1.AdminUsageLogListRes, error)
// GetUsageLogDetail 获取单条用量日志详情(含 billing_snapshot / billing_summary /
// user_agent / error_message 等列表不返回的大字段)。
// bil_usage_logs 按 created_at 月分区且 PK 为 (id, created_at):仅按 id 查询无法
// 分区裁剪,计划为对各月分区的 Append 索引探测(每分区走本地 PK 前缀命中 id),
// 分区数随月份线性增长但单次探测为微秒级,与 upstream_request_id 反查(000023)
// 同一模式;若日后分区数显著增大,可让调用方携带 created_at 提示做裁剪。
GetUsageLogDetail(ctx context.Context, req *v1.AdminUsageLogDetailReq) (*v1.AdminUsageLogDetailRes, error)
// GetUsageLogSummary 获取用量日志统计汇总(独立接口,与列表共用筛选口径)
GetUsageLogSummary(ctx context.Context, req *v1.AdminUsageLogSummaryReq) (*v1.AdminUsageLogSummaryRes, error)
// GetAllBillingRecords 获取所有计费记录(管理后台)
GetAllBillingRecords(ctx context.Context, req *v1.AdminBillingRecordListReq) (*v1.AdminBillingRecordListRes, error)
// GetTenantWallets 获取所有租户钱包(管理后台)
GetTenantWallets(ctx context.Context, req *v1.AdminWalletListReq) (*v1.AdminWalletListRes, error)
// AdjustBalance 调整租户余额(管理后台)。
// Redis 权威化架构:余额变动以 Redis Lua 为资金提交点(扣减在权威可用余额上原子判断,
// 穿透冻结会破坏预扣一致性),DB 侧仅记流水;流水失败时逆转 Redis 已发生的变动。
AdjustBalance(ctx context.Context, req *v1.AdminWalletAdjustReq) (*v1.AdminWalletAdjustRes, error)
// OfflineRecharge 线下充值入账(管理后台)
// 场景:用户线下银行转账(人民币 CNY),运营确认到账后入账。
// 本位币=USD 时按平台汇率换算入账;本位币=CNY 时直接入账(无换汇)。
// 与 AdjustBalance 的区别:走正规充值链路——余额与累计充值同步累加、触发等级检查、
// 流水类型为 recharge,并在描述中携带 CNY 快照(原始人民币 + 汇率 + 入账金额 + 转账流水号),
// 供现金对账与开票追溯。
OfflineRecharge(ctx context.Context, req *v1.AdminWalletOfflineRechargeReq) (*v1.AdminWalletOfflineRechargeRes, error)
// GetWalletInfo 获取租户钱包信息(管理后台)。
// balance/frozen_balance 以 Redis 权威值为准(Redis 是资金提交点,调整余额/线下入账后立即可见),
// DB 侧余额是物化器周期覆盖的滞后副本,仅作钱包行存在性校验与 Redis 不可用时的降级展示。
GetWalletInfo(ctx context.Context, req *v1.AdminWalletInfoReq) (*v1.AdminWalletInfoRes, error)
// GetWalletTransactions 获取租户钱包交易流水(管理后台)
GetWalletTransactions(ctx context.Context, req *v1.AdminWalletTransactionListReq) (*v1.AdminWalletTransactionListRes, error)
// SetWarningThreshold 设置租户钱包预警阈值(管理后台)
SetWarningThreshold(ctx context.Context, req *v1.AdminWalletSetWarningThresholdReq) (*v1.AdminWalletSetWarningThresholdRes, error)
// GetWalletFrozenItems 获取租户钱包冻结明细(管理后台)。
// 数据源为 Redis 预扣明细(权威),DB 预扣追踪表已废弃。
GetWalletFrozenItems(ctx context.Context, req *v1.AdminWalletFrozenItemListReq) (*v1.AdminWalletFrozenItemListRes, error)
// ReleaseWalletFrozenItem 按笔释放冻结(管理后台运维逃生舱)。
// 释放走 billing.UnfreezePreDeduct 的 Redis 认领路径:认领即删预扣 hash、幂等、逐笔精确,
// 绝不直接改写钱包 hash 的 frozen_balance 汇总值。
ReleaseWalletFrozenItem(ctx context.Context, req *v1.AdminWalletFrozenReleaseReq) (*v1.AdminWalletFrozenReleaseRes, error)
// ReleaseAllWalletFrozenItems 一键释放租户全部冻结(管理后台运维逃生舱)。
// 遍历 Redis 活跃冻结明细,复用 frozenItemGuard 护栏逐项筛选:
// - 任务关联在途/待结算项自动跳过(由任务结算流程负责,禁止手动释放);
// - 保护期内(冻结不足 frozenReleaseMinAge)项默认跳过,Force=true 时才释放;
// - 其余项逐个 UnfreezePreDeduct(Lua 认领即删,幂等,与并发结算竞争安全)。
//
// 返回实际释放笔数/金额与跳过原因摘要(去重)。
ReleaseAllWalletFrozenItems(ctx context.Context, req *v1.AdminWalletFrozenReleaseAllReq) (*v1.AdminWalletFrozenReleaseAllRes, error)
// GetAllTransactions 获取所有租户交易流水(管理后台)
GetAllTransactions(ctx context.Context, req *v1.AdminTransactionListReq) (*v1.AdminTransactionListRes, error)
// GetDashboardChannelHealth 获取渠道健康概览(最不健康的5个活跃渠道)
GetDashboardChannelHealth(ctx context.Context, req *v1.AdminDashboardChannelHealthReq) (*v1.AdminDashboardChannelHealthRes, error)
// GetDashboardRecentAlerts 获取最近5条告警
GetDashboardRecentAlerts(ctx context.Context, req *v1.AdminDashboardRecentAlertsReq) (*v1.AdminDashboardRecentAlertsRes, error)
// ExportUsageLogs exports usage logs to CSV or Excel.
ExportUsageLogs(ctx context.Context, req *v1.AdminUsageLogExportReq) (*v1.AdminUsageLogExportRes, error)
// ExportBillingRecords exports billing records to CSV or Excel.
ExportBillingRecords(ctx context.Context, req *v1.AdminBillingRecordExportReq) (*v1.AdminBillingRecordExportRes, error)
DataGovernanceSettingsGet(ctx context.Context, _ *v1.DataGovernanceSettingsGetReq) (*v1.DataGovernanceSettingsGetRes, error)
// UpdateDataGovernanceSettings 更新数据治理设置
DataGovernanceSettingsUpdate(ctx context.Context, req *v1.DataGovernanceSettingsUpdateReq) (*v1.DataGovernanceSettingsUpdateRes, error)
// RequestDataExport 请求数据导出
DataGovernanceExport(ctx context.Context, req *v1.DataGovernanceExportReq) (*v1.DataGovernanceExportRes, error)
// RequestDataDeletion 请求数据删除
DataGovernanceDeletion(ctx context.Context, req *v1.DataGovernanceDeletionReq) (*v1.DataGovernanceDeletionRes, error)
// TriggerDataCleanup 手动触发数据清理
DataGovernanceCleanup(ctx context.Context, _ *v1.DataGovernanceCleanupReq) (*v1.DataGovernanceCleanupRes, error)
// ListEmailSendLogs 分页查询邮件发送记录(ntf_send_log,主库)。
// 列表不返回 body(HTML 正文较大),由详情接口返回完整记录。
ListEmailSendLogs(ctx context.Context, req *v1.EmailSendLogListReq) (*v1.EmailSendLogListRes, error)
// GetEmailSendLogDetail 查询单条邮件发送记录详情(含 body 正文)。
GetEmailSendLogDetail(ctx context.Context, req *v1.EmailSendLogDetailReq) (*v1.EmailSendLogDetailRes, error)
// ListEmailVerifyCodes 分页查询验证码申请记录(sys_email_verify_codes,主库)。
ListEmailVerifyCodes(ctx context.Context, req *v1.EmailVerifyCodeListReq) (*v1.EmailVerifyCodeListRes, error)
// ErrorLogList returns a paginated list of system error logs.
ErrorLogList(ctx context.Context, req *v1.ErrorLogListReq) (*v1.ErrorLogListRes, error)
// ErrorLogDetail returns the detail of a single error log.
ErrorLogDetail(ctx context.Context, req *v1.ErrorLogDetailReq) (*v1.ErrorLogDetailRes, error)
// ErrorLogResolve marks an error log as resolved.
ErrorLogResolve(ctx context.Context, req *v1.ErrorLogResolveReq) (*v1.ErrorLogResolveRes, error)
// ErrorLogBatchResolve marks multiple error logs as resolved.
ErrorLogBatchResolve(ctx context.Context, req *v1.ErrorLogBatchResolveReq) (*v1.ErrorLogBatchResolveRes, error)
// ErrorLogClear 硬删除全部错误日志。
// 系统报错大量堆积时用于快速释放数据库空间:用 TRUNCATE 而非逐行 DELETE,
// 秒级清空并立即归还磁盘空间(DELETE 需等 VACUUM 回收)。TRUNCATE 不返回行数,
// 故先取删除前条数作为反馈。表无数据库级外键,TRUNCATE 安全。
ErrorLogClear(ctx context.Context, _ *v1.ErrorLogClearReq) (*v1.ErrorLogClearRes, error)
// ErrorLogStats returns error log statistics.
ErrorLogStats(ctx context.Context, _ *v1.ErrorLogStatsReq) (*v1.ErrorLogStatsRes, error)
// ListAllFeedbacks 管理后台反馈列表
ListAllFeedbacks(ctx context.Context, req *v1.FeedbackListAllReq) (*v1.FeedbackListAllRes, error)
// ReplyToFeedback 管理员回复反馈
ReplyToFeedback(ctx context.Context, req *v1.FeedbackReplyReq) (*v1.FeedbackReplyRes, error)
// UpdateFeedbackStatus 更新反馈状态
UpdateFeedbackStatus(ctx context.Context, req *v1.FeedbackUpdateStatusReq) (*v1.FeedbackUpdateStatusRes, error)
// GetFeedbackStats 反馈统计
GetFeedbackStats(ctx context.Context, req *v1.FeedbackStatsReq) (*v1.FeedbackStatsRes, error)
// FileList 文件列表(分页 + 筛选)。
FileList(ctx context.Context, req *v1.FileListReq) (*v1.FileListRes, error)
// FileStats 存储占用统计(KPI)。
FileStats(ctx context.Context, req *v1.FileStatsReq) (*v1.FileStatsRes, error)
// FileDownload 生成临时预览下载链接。
FileDownload(ctx context.Context, req *v1.FileDownloadReq) (*v1.FileDownloadRes, error)
// FileDelete 删除单个文件(存储对象 + 记录)。
FileDelete(ctx context.Context, req *v1.FileDeleteReq) (*v1.FileDeleteRes, error)
// FileCleanup 手动触发一次保留期清理(导出 + 图片)。
FileCleanup(ctx context.Context, req *v1.FileCleanupReq) (*v1.FileCleanupRes, error)
// CreateHelpCategory 创建帮助分类
CreateHelpCategory(ctx context.Context, req *v1.HelpCategoryCreateReq) (*v1.HelpCategoryCreateRes, error)
// UpdateHelpCategory 更新帮助分类
UpdateHelpCategory(ctx context.Context, req *v1.HelpCategoryUpdateReq) (*v1.HelpCategoryUpdateRes, error)
// DeleteHelpCategory 删除帮助分类
DeleteHelpCategory(ctx context.Context, req *v1.HelpCategoryDeleteReq) (*v1.HelpCategoryDeleteRes, error)
// ListHelpCategories 帮助分类列表(管理后台)
ListHelpCategories(ctx context.Context, req *v1.HelpCategoryListReq) (*v1.HelpCategoryListRes, error)
// CreateHelpArticle 创建帮助文章
CreateHelpArticle(ctx context.Context, req *v1.HelpArticleCreateReq) (*v1.HelpArticleCreateRes, error)
// UpdateHelpArticle 更新帮助文章
UpdateHelpArticle(ctx context.Context, req *v1.HelpArticleUpdateReq) (*v1.HelpArticleUpdateRes, error)
// DeleteHelpArticle 删除帮助文章
DeleteHelpArticle(ctx context.Context, req *v1.HelpArticleDeleteReq) (*v1.HelpArticleDeleteRes, error)
// ListHelpArticles 帮助文章列表(管理后台)
ListHelpArticles(ctx context.Context, req *v1.HelpArticleListReq) (*v1.HelpArticleListRes, error)
// GetHelpArticle 帮助文章详情(管理后台)
GetHelpArticle(ctx context.Context, req *v1.HelpArticleGetReq) (*v1.HelpArticleGetRes, error)
// CreateMember adds a new member to a specified tenant.
CreateMember(ctx context.Context, req *v1.AdminMemberCreateReq) (*v1.AdminMemberCreateRes, error)
// ListAllMembers returns a paginated list of all tenant members across all tenants.
ListAllMembers(ctx context.Context, req *v1.AdminMemberListReq) (*v1.AdminMemberListRes, error)
// DisableMember disables a tenant member by admin.
DisableMember(ctx context.Context, req *v1.AdminMemberDisableReq) (*v1.AdminMemberDisableRes, error)
// EnableMember re-enables a tenant member by admin.
EnableMember(ctx context.Context, req *v1.AdminMemberEnableReq) (*v1.AdminMemberEnableRes, error)
// ResetMemberPassword resets a member's password by admin, returns the new random password.
ResetMemberPassword(ctx context.Context, req *v1.AdminMemberResetPasswordReq) (*v1.AdminMemberResetPasswordRes, error)
// UnlockMember 清除成员的登录锁定状态(平台视角,跨租户)。
UnlockMember(ctx context.Context, req *v1.AdminMemberUnlockReq) (*v1.AdminMemberUnlockRes, error)
// ExportMembers exports member list to CSV or Excel.
ExportMembers(ctx context.Context, req *v1.AdminMemberExportReq) (*v1.AdminMemberExportRes, error)
// ListModelOptions 获取模型选项列表(不分页,用于下拉选择)
ListModelOptions(ctx context.Context, req *v1.ModelOptionsReq) (*v1.ModelOptionsRes, error)
// ListModels 获取模型列表(含定价摘要)
ListModels(ctx context.Context, req *v1.ModelListReq) (*v1.ModelListRes, error)
// CreateModel 创建模型(自动创建默认 token 定价记录)
CreateModel(ctx context.Context, req *v1.ModelCreateReq) (*v1.ModelCreateRes, error)
// UpdateModel 更新模型(含弃用状态管理)
UpdateModel(ctx context.Context, req *v1.ModelUpdateReq) (*v1.ModelUpdateRes, error)
// DeleteModel 删除模型(同时删除定价记录、租户分配记录和分组关联)
DeleteModel(ctx context.Context, req *v1.ModelDeleteReq) (*v1.ModelDeleteRes, error)
// GetModelPricing 获取模型定价(pricing JSONB 单行还原为 PricingItem 列表,响应结构与旧多行结构保持兼容)
GetModelPricing(ctx context.Context, req *v1.PricingGetReq) (*v1.PricingGetRes, error)
// SetModelPricing 设置模型定价(全量替换)
SetModelPricing(ctx context.Context, req *v1.PricingSetReq) (*v1.PricingSetRes, error)
// FetchOfficialPricing 拉取模型官方定价(来自 LiteLLM + models.dev 双数据源)
FetchOfficialPricing(ctx context.Context, req *v1.PricingFetchOfficialReq) (*v1.PricingFetchOfficialRes, error)
// FetchOfficialModelInfo 按模型名称拉取官方模型信息(上下文长度+能力特性)
// 按优先级尝试 LiteLLM → OpenRouter → BaseLLM,返回第一个匹配的结果
FetchOfficialModelInfo(ctx context.Context, req *v1.ModelFetchOfficialInfoReq) (*v1.ModelFetchOfficialInfoRes, error)
// ExportModels exports model list to CSV or Excel.
ExportModels(ctx context.Context, req *v1.ModelExportReq) (*v1.ModelExportRes, error)
// ListModelGroups 模型分组列表
ListModelGroups(ctx context.Context, req *v1.ModelGroupListReq) (*v1.ModelGroupListRes, error)
// CreateModelGroup 创建模型分组
CreateModelGroup(ctx context.Context, req *v1.ModelGroupCreateReq) (*v1.ModelGroupCreateRes, error)
// UpdateModelGroup 更新模型分组
UpdateModelGroup(ctx context.Context, req *v1.ModelGroupUpdateReq) (*v1.ModelGroupUpdateRes, error)
// DeleteModelGroup 删除模型分组
DeleteModelGroup(ctx context.Context, req *v1.ModelGroupDeleteReq) (*v1.ModelGroupDeleteRes, error)
// ListModelGroupOptions 分组选项列表(不分页,用于下拉选择)
ListModelGroupOptions(ctx context.Context, req *v1.ModelGroupOptionsReq) (*v1.ModelGroupOptionsRes, error)
// ListGroupModels 查看分组内模型列表
ListGroupModels(ctx context.Context, req *v1.GroupModelsListReq) (*v1.GroupModelsListRes, error)
// SetGroupModels 设置分组内模型(全量替换)
SetGroupModels(ctx context.Context, req *v1.GroupModelsSetReq) (*v1.GroupModelsSetRes, error)
// ListTenantGroups 查看租户关联的分组列表
ListTenantGroups(ctx context.Context, req *v1.TenantGroupsListReq) (*v1.TenantGroupsListRes, error)
// SetTenantGroups 设置租户关联的分组(全量替换)
SetTenantGroups(ctx context.Context, req *v1.TenantGroupsSetReq) (*v1.TenantGroupsSetRes, error)
// ExportModelsJson 导出模型配置为 JSON 文件(含定价数据,用于跨环境迁移)
ExportModelsJson(ctx context.Context, req *v1.ModelExportJsonReq) (*v1.ModelExportJsonRes, error)
// ImportModelsPreview 导入模型预览(解析上传文件,检测冲突)
ImportModelsPreview(ctx context.Context, req *v1.ModelImportPreviewReq) (*v1.ModelImportPreviewRes, error)
// ImportModels 确认导入模型(事务内执行)
ImportModels(ctx context.Context, req *v1.ModelImportReq) (*v1.ModelImportRes, error)
// ListTemplates 获取通知模板列表(分页)
ListTemplates(ctx context.Context, req *v1.TemplateListReq) (*v1.TemplateListRes, error)
// GetTemplate 获取单个通知模板
GetTemplate(ctx context.Context, req *v1.TemplateGetReq) (*v1.TemplateGetRes, error)
// UpdateTemplate 更新通知模板
UpdateTemplate(ctx context.Context, req *v1.TemplateUpdateReq) (*v1.TemplateUpdateRes, error)
// TestTemplate 用测试变量渲染模板,返回渲染结果(不发送)
TestTemplate(ctx context.Context, req *v1.TemplateTestReq) (*v1.TemplateTestRes, error)
// SendMessage 创建手动站内消息并推送 WebSocket 通知
SendMessage(ctx context.Context, req *v1.MessageSendReq) (*v1.MessageSendRes, error)
// SendBroadcast 创建广播消息并推送 WebSocket 通知
SendBroadcast(ctx context.Context, req *v1.MessageBroadcastReq) (*v1.MessageBroadcastRes, error)
// ListMessages 获取所有消息列表(管理后台,支持过滤)
ListMessages(ctx context.Context, req *v1.MessageListReq) (*v1.MessageListRes, error)
// CreateAnnouncement 创建公告
CreateAnnouncement(ctx context.Context, req *v1.AnnouncementCreateReq) (*v1.AnnouncementCreateRes, error)
// UpdateAnnouncement 更新公告
UpdateAnnouncement(ctx context.Context, req *v1.AnnouncementUpdateReq) (*v1.AnnouncementUpdateRes, error)
// ListAnnouncements 获取公告列表(分页)
ListAnnouncements(ctx context.Context, req *v1.AnnouncementListReq) (*v1.AnnouncementListRes, error)
// PublishAnnouncement 发布公告
PublishAnnouncement(ctx context.Context, req *v1.AnnouncementPublishReq) (*v1.AnnouncementPublishRes, error)
// ArchiveAnnouncement 归档公告
ArchiveAnnouncement(ctx context.Context, req *v1.AnnouncementArchiveReq) (*v1.AnnouncementArchiveRes, error)
// ListOrders 获取全部订单列表
ListOrders(ctx context.Context, req *v1.OrderListReq) (*v1.OrderListRes, error)
// GetOrder 获取订单详情
GetOrder(ctx context.Context, req *v1.OrderDetailReq) (*v1.OrderDetailRes, error)
// RefundOrder 发起退款(线上侧一步完成:状态流转 + 权益收回;渠道打款由管理员线下原路退回)。
//
// 退款语义(与《系统货币规则》对齐):
// - 退款认订单原始 CNY 金额(ord_ 层永远 CNY),线下按此金额原路退给用户;
// - 已履约的充值订单必须按【履约当时入账的 USD】原额扣回钱包(从入账流水取值,
// 禁止按当前汇率反算,防止汇率波动套利);
// - 已履约的套餐订单撤销对应的活跃订阅;
// - 已支付未履约(paid)的订单权益尚未发放,仅做状态流转。
RefundOrder(ctx context.Context, req *v1.OrderRefundReq) (*v1.OrderRefundRes, error)
// OrderComplete 手动完成订单
OrderComplete(ctx context.Context, req *v1.OrderCompleteReq) (*v1.OrderCompleteRes, error)
// GetPaymentChannels 获取所有渠道配置(单例模式,从 sys_options 读取)
GetPaymentChannels(ctx context.Context, _ *v1.PaymentChannelListReq) (*v1.PaymentChannelListRes, error)
// SavePaymentChannel 保存指定渠道的配置(整体覆盖)
SavePaymentChannel(ctx context.Context, req *v1.PaymentChannelSaveReq) (*v1.PaymentChannelSaveRes, error)
// GetPaymentSettings 获取全局支付设置。
GetPaymentSettings(ctx context.Context, _ *v1.PaymentSettingsGetReq) (*v1.PaymentSettingsGetRes, error)
// UpdatePaymentSettings 更新全局支付设置。
UpdatePaymentSettings(ctx context.Context, req *v1.PaymentSettingsUpdateReq) (*v1.PaymentSettingsUpdateRes, error)
// ExportOrders exports order list to CSV or Excel.
ExportOrders(ctx context.Context, req *v1.OrderExportReq) (*v1.OrderExportRes, error)
// GetUserPermissions returns permission points and data scopes for an admin user.
GetUserPermissions(ctx context.Context, req *v1.AdminPermissionListReq) (*v1.AdminPermissionListRes, error)
// UpdateUserPermissions updates permission points for an admin user.
UpdateUserPermissions(ctx context.Context, req *v1.AdminPermissionUpdateReq) (*v1.AdminPermissionUpdateRes, error)
// GetAllPermissions returns all predefined permission groups plus tier metadata.
//
// 同时返回权限点分组(高级模式用)与「模块 × 档位」元数据(默认配置界面用):
// 二者是同一份数据的两个视图,由后端统一给出,避免前端复刻一份档位定义造成漂移。
GetAllPermissions(ctx context.Context, _ *v1.AdminAllPermissionsReq) (*v1.AdminAllPermissionsRes, error)
// ListPlans 获取套餐列表
ListPlans(ctx context.Context, req *v1.PlanListReq) (*v1.PlanListRes, error)
// GetPlan 获取套餐详情
GetPlan(ctx context.Context, req *v1.PlanDetailReq) (*v1.PlanDetailRes, error)
// CreatePlan 创建套餐
CreatePlan(ctx context.Context, req *v1.PlanCreateReq) (*v1.PlanCreateRes, error)
// UpdatePlan 更新套餐
UpdatePlan(ctx context.Context, req *v1.PlanUpdateReq) (*v1.PlanUpdateRes, error)
// ArchivePlan 下架套餐(软删除)
ArchivePlan(ctx context.Context, req *v1.PlanArchiveReq) (*v1.PlanArchiveRes, error)
// ToggleRecommend 切换推荐标记
ToggleRecommend(ctx context.Context, req *v1.PlanToggleRecommendReq) (*v1.PlanToggleRecommendRes, error)
// ExportPlans exports plan list to CSV or Excel.
ExportPlans(ctx context.Context, req *v1.PlanExportReq) (*v1.PlanExportRes, error)
PluginList(ctx context.Context, req *v1.PluginListReq) (*v1.PluginListRes, error)
PluginDetail(ctx context.Context, req *v1.PluginDetailReq) (*v1.PluginDetailRes, error)
PluginInstall(ctx context.Context, req *v1.PluginInstallReq) (*v1.PluginInstallRes, error)
PluginEnable(ctx context.Context, req *v1.PluginEnableReq) (*v1.PluginEnableRes, error)
PluginDisable(ctx context.Context, req *v1.PluginDisableReq) (*v1.PluginDisableRes, error)
PluginUninstall(ctx context.Context, req *v1.PluginUninstallReq) (*v1.PluginUninstallRes, error)
PluginUpgrade(ctx context.Context, req *v1.PluginUpgradeReq) (*v1.PluginUpgradeRes, error)
PluginConfigUpdate(ctx context.Context, req *v1.PluginConfigUpdateReq) (*v1.PluginConfigUpdateRes, error)
PluginConfigSchema(ctx context.Context, req *v1.PluginConfigSchemaReq) (*v1.PluginConfigSchemaRes, error)
// ListPromoCodes 获取优惠码列表
ListPromoCodes(ctx context.Context, req *v1.PromoCodeListReq) (*v1.PromoCodeListRes, error)
// CreatePromoCode 创建优惠码
CreatePromoCode(ctx context.Context, req *v1.PromoCodeCreateReq) (*v1.PromoCodeCreateRes, error)
// UpdatePromoCode 更新优惠码
UpdatePromoCode(ctx context.Context, req *v1.PromoCodeUpdateReq) (*v1.PromoCodeUpdateRes, error)
// GetPromoCodeUsages 获取优惠码使用记录
GetPromoCodeUsages(ctx context.Context, req *v1.PromoCodeUsagesReq) (*v1.PromoCodeUsagesRes, error)
// ExportPromoCodes exports promo code list to CSV or Excel.
ExportPromoCodes(ctx context.Context, req *v1.PromoCodeExportReq) (*v1.PromoCodeExportRes, error)
// ListRedemptions 获取兑换码列表
ListRedemptions(ctx context.Context, req *v1.RedemptionListReq) (*v1.RedemptionListRes, error)
// BatchCreateRedemptions 批量生成兑换码
BatchCreateRedemptions(ctx context.Context, req *v1.RedemptionCreateReq) (*v1.RedemptionCreateRes, error)
// DisableRedemption 禁用兑换码
DisableRedemption(ctx context.Context, req *v1.RedemptionDisableReq) (*v1.RedemptionDisableRes, error)
// ListRedemptionUsages 获取兑换码使用记录
ListRedemptionUsages(ctx context.Context, req *v1.RedemptionUsagesReq) (*v1.RedemptionUsagesRes, error)
// ExportRedemptions exports redemption list to CSV or Excel.
ExportRedemptions(ctx context.Context, req *v1.RedemptionExportReq) (*v1.RedemptionExportRes, error)
// AssignUserRoles 为管理员分配角色(全量覆盖)。
AssignUserRoles(ctx context.Context, req *v1.AdminUserRoleAssignReq) (*v1.AdminUserRoleAssignRes, error)
// GetUserRoles 查询管理员已分配的角色。
GetUserRoles(ctx context.Context, req *v1.AdminUserRoleListReq) (*v1.AdminUserRoleListRes, error)
// ListRoles 返回角色列表(角色数量少,不分页)。
ListRoles(ctx context.Context, _ *v1.AdminRoleListReq) (*v1.AdminRoleListRes, error)
// GetRoleDetail 返回角色详情,同时给出权限点全集与按模块归纳的档位视图。
GetRoleDetail(ctx context.Context, req *v1.AdminRoleDetailReq) (*v1.AdminRoleDetailRes, error)
// CreateRole 新建角色。权限可直接给出,也可从现有角色复制。
CreateRole(ctx context.Context, req *v1.AdminRoleCreateReq) (*v1.AdminRoleCreateRes, error)
// UpdateRole 更新角色的名称、说明、排序与权限(code 不可修改)。
UpdateRole(ctx context.Context, req *v1.AdminRoleUpdateReq) (*v1.AdminRoleUpdateRes, error)
// UpdateRoleStatus 启用/禁用角色。禁用后该角色的权限对全部关联用户立即失效。
UpdateRoleStatus(ctx context.Context, req *v1.AdminRoleStatusUpdateReq) (*v1.AdminRoleStatusUpdateRes, error)
// DeleteRole 删除角色,并在同一事务内级联清理其权限行与用户关联。
//
// 无外键,级联必须由业务层完成,否则会留下悬空的权限行与用户关联。
// 预置角色同样可删:is_builtin 只标识来源,不构成删除保护。
//
// 不存在把自己锁死的风险 —— 超级管理员由 sys_admin_users.role 判定并短路鉴权,
// 不依赖任何角色记录,即便角色被删光也能登录并重建,因此不设「至少保留一个角色」的约束。
DeleteRole(ctx context.Context, req *v1.AdminRoleDeleteReq) (*v1.AdminRoleDeleteRes, error)
// ResetRoleDefaults 把预置角色的权限恢复为出厂默认值。
ResetRoleDefaults(ctx context.Context, req *v1.AdminRoleResetReq) (*v1.AdminRoleResetRes, error)
// Verify2FA handles the 2FA verification step during admin login.
Verify2FA(ctx context.Context, req *v1.Admin2FAVerifyReq) (*v1.Admin2FAVerifyRes, error)
// Setup2FA starts the 2FA setup process for the current admin user.
Setup2FA(ctx context.Context, _ *v1.Admin2FASetupReq) (*v1.Admin2FASetupRes, error)
// Enable2FA confirms and enables 2FA after verifying the code.
Enable2FA(ctx context.Context, req *v1.Admin2FAEnableReq) (*v1.Admin2FAEnableRes, error)
// Disable2FA disables 2FA for the current admin user.
Disable2FA(ctx context.Context, req *v1.Admin2FADisableReq) (*v1.Admin2FADisableRes, error)
// RegenerateBackupCodes generates new backup codes.
RegenerateBackupCodes(ctx context.Context, req *v1.Admin2FARegenerateBackupCodesReq) (*v1.Admin2FARegenerateBackupCodesRes, error)
// ConfirmHighRisk generates a confirm token for high-risk operations.
ConfirmHighRisk(ctx context.Context, req *v1.Admin2FAConfirmReq) (*v1.Admin2FAConfirmRes, error)
// LoginHistory returns the login history for all admin users with search filters.
LoginHistory(ctx context.Context, req *v1.AdminLoginHistoryReq) (*v1.AdminLoginHistoryRes, error)
// TenantLoginHistory returns login history for tenant users (admin view).
TenantLoginHistory(ctx context.Context, req *v1.AdminTenantLoginHistoryReq) (*v1.AdminTenantLoginHistoryRes, error)
// GetSettingsCategories returns all available setting categories.
GetSettingsCategories(ctx context.Context, _ *v1.AdminSettingsCategoriesReq) (*v1.AdminSettingsCategoriesRes, error)
// GetSettings retrieves settings with schema for a given category.
GetSettings(ctx context.Context, req *v1.AdminSettingsGetReq) (*v1.AdminSettingsGetRes, error)
// UpdateSettings batch-updates settings for a given category.
UpdateSettings(ctx context.Context, req *v1.AdminSettingsUpdateReq) (*v1.AdminSettingsUpdateRes, error)
// TestStorageConfig 测试对象存储配置连通性:用生成的测试图片走一次「上传 → 下载校验 → 删除」
// 完整往返,验证凭证 / 桶 / 端点 / 读写删权限是否正常。
//
// access_key_id / secret 为空或掩码("******")时回落到已保存的配置值——与 GET 接口对敏感字段
// 的掩码逻辑(config.GetCategoryWithValues)以及 Turnstile 校验的 "******" 处理保持一致,
// 从而支持管理员在「未点保存」的状态下直接测试表单中新填/改动的配置。
TestStorageConfig(ctx context.Context, req *v1.AdminStorageTestReq) (*v1.AdminStorageTestRes, error)
// TestEmailConfig 发送一封测试邮件,验证 SMTP 配置是否可用。
//
// 与 TestStorageConfig 同构:请求体携带表单中的邮件配置(可能尚未保存),字段为空或为掩码
// "******" 时回落到已保存的值,从而支持管理员在「未点保存」的状态下直接测试改动。
// 收件人留空时发送给当前登录管理员的邮箱。
//
// 使用 SendOnce 而非 Send:连通性测试要快速拿到真实 SMTP 错误(认证失败、端口不通重试
// 三次也不会变好),不该让管理员多等十几秒的退避。
TestEmailConfig(ctx context.Context, req *v1.AdminEmailTestReq) (*v1.AdminEmailTestRes, error)
// GetSupportPendingSummary 顶栏铃铛待办计数。
GetSupportPendingSummary(ctx context.Context, _ *v1.AdminSupportPendingSummaryReq) (*v1.AdminSupportPendingSummaryRes, error)
// TaskList 大模型异步任务列表
TaskList(ctx context.Context, req *v1.TaskListReq) (*v1.TaskListRes, error)
// TaskDetail 大模型异步任务详情
TaskDetail(ctx context.Context, req *v1.TaskDetailReq) (*v1.TaskDetailRes, error)
// TaskCancel 取消大模型异步任务
TaskCancel(ctx context.Context, req *v1.TaskCancelReq) (*v1.TaskCancelRes, error)
// TenantSelect returns a lightweight paginated tenant list for dropdown selectors.
TenantSelect(ctx context.Context, req *v1.TenantSelectReq) (*v1.TenantSelectRes, error)
// CreateTenant creates a new tenant with its owner user and wallet.
CreateTenant(ctx context.Context, req *v1.TenantCreateReq) (*v1.TenantCreateRes, error)
// ListTenants returns a paginated list of tenants.
ListTenants(ctx context.Context, req *v1.TenantListReq) (*v1.TenantListRes, error)
// GetTenant returns detail of a single tenant.
GetTenant(ctx context.Context, req *v1.TenantGetReq) (*v1.TenantGetRes, error)
// UpdateTenantStatus updates a tenant's status.
UpdateTenantStatus(ctx context.Context, req *v1.TenantUpdateStatusReq) (*v1.TenantUpdateStatusRes, error)
// UpdateTenant updates tenant information.
UpdateTenant(ctx context.Context, req *v1.TenantUpdateReq) (*v1.TenantUpdateRes, error)
// UpdateTenantChannelScope 更新租户默认渠道范围
UpdateTenantChannelScope(ctx context.Context, req *v1.TenantChannelScopeUpdateReq) (*v1.TenantChannelScopeUpdateRes, error)
// ExportTenants exports tenant list to CSV or Excel.
ExportTenants(ctx context.Context, req *v1.TenantExportReq) (*v1.TenantExportRes, error)
// TenantApiKeySelect 租户 API Key 下拉选择列表(轻量,不返回密钥原值)。
// 供渠道调试目标过滤等管理端选择器使用;user_id > 0 时按创建者过滤。
// 注意:Fields 不能挂在 Count 之前的模型上——gdb 会生成 COUNT(col1, col2, ...),
// PostgreSQL 的 count 只接受单参数,会直接报错。
TenantApiKeySelect(ctx context.Context, req *v1.TenantApiKeySelectReq) (*v1.TenantApiKeySelectRes, error)
ListTenantLevelConfigs(ctx context.Context, _ *v1.TenantLevelConfigListReq) (*v1.TenantLevelConfigListRes, error)
CreateTenantLevelConfig(ctx context.Context, req *v1.TenantLevelConfigCreateReq) (*v1.TenantLevelConfigCreateRes, error)
UpdateTenantLevelConfig(ctx context.Context, req *v1.TenantLevelConfigUpdateReq) (*v1.TenantLevelConfigUpdateRes, error)
DeleteTenantLevelConfig(ctx context.Context, req *v1.TenantLevelConfigDeleteReq) (*v1.TenantLevelConfigDeleteRes, error)
// ListTenantModels 列出租户已分配的模型
ListTenantModels(ctx context.Context, req *v1.TenantModelListReq) (*v1.TenantModelListRes, error)
// BatchAssignModels 批量分配模型给租户
BatchAssignModels(ctx context.Context, req *v1.TenantModelBatchAssignReq) (*v1.TenantModelBatchAssignRes, error)
// UpdateTenantModel 更新租户模型配置
UpdateTenantModel(ctx context.Context, req *v1.TenantModelUpdateReq) (*v1.TenantModelUpdateRes, error)
// DeleteTenantModel 移除租户模型分配
DeleteTenantModel(ctx context.Context, req *v1.TenantModelDeleteReq) (*v1.TenantModelDeleteRes, error)
// ListTenantAvailableModels 预览租户实际可用的所有模型(显式分配 + 分组来源,去重)
ListTenantAvailableModels(ctx context.Context, req *v1.TenantAvailableModelsPreviewReq) (*v1.TenantAvailableModelsPreviewRes, error)
// ListAllTickets 获取全部工单列表(管理后台)
ListAllTickets(ctx context.Context, req *v1.TicketListReq) (*v1.TicketListRes, error)
// GetTicketAdmin 获取工单详情(管理后台,含回复)
GetTicketAdmin(ctx context.Context, req *v1.TicketGetReq) (*v1.TicketGetRes, error)
// AssignTicket 分配工单给管理员
AssignTicket(ctx context.Context, req *v1.TicketAssignReq) (*v1.TicketAssignRes, error)
// ReplyToTicketAdmin 管理员回复工单
ReplyToTicketAdmin(ctx context.Context, req *v1.TicketReplyReq) (*v1.TicketReplyRes, error)
// UpdateTicketStatus 更新工单状态
UpdateTicketStatus(ctx context.Context, req *v1.TicketStatusUpdateReq) (*v1.TicketStatusUpdateRes, error)
// CheckUpdate checks GitHub Releases for a newer version
UpdateCheck(ctx context.Context, req *v1.UpdateCheckReq) (*v1.UpdateCheckRes, error)
// GetUpdateStatus returns the current update status
UpdateStatus(ctx context.Context, req *v1.UpdateStatusReq) (*v1.UpdateStatusRes, error)
// ExecuteUpdate triggers the system update
UpdateExecute(ctx context.Context, req *v1.UpdateExecuteReq) (*v1.UpdateExecuteRes, error)
// RollbackUpdate rolls back to the previous version
UpdateRollback(ctx context.Context, req *v1.UpdateRollbackReq) (*v1.UpdateRollbackRes, error)
UsageLogCleanupCreate(ctx context.Context, req *v1.UsageLogCleanupCreateReq) (*v1.UsageLogCleanupCreateRes, error)
UsageLogCleanupList(ctx context.Context, req *v1.UsageLogCleanupListReq) (*v1.UsageLogCleanupListRes, error)
UsageLogCleanupCancel(ctx context.Context, req *v1.UsageLogCleanupCancelReq) (*v1.UsageLogCleanupCancelRes, error)
// GetWorkbenchSummary 工作台汇总。
GetWorkbenchSummary(ctx context.Context, _ *v1.AdminWorkbenchSummaryReq) (*v1.AdminWorkbenchSummaryRes, error)
// GetWorkbenchBadges 工作台菜单角标计数(与 summary 共用缓存,不额外压库)。
//
// 角标只挂工作台菜单一项:待办的排查线索只存在于工作台的描述文案里,
// 业务菜单里没有对应的定位入口,往各业务菜单挂数字只会带来
// 「进去了却找不到问题」的困惑(红点引路却无路可走)。
GetWorkbenchBadges(ctx context.Context, _ *v1.AdminWorkbenchBadgeReq) (*v1.AdminWorkbenchBadgeRes, error)
}
)
var (
localAdmin IAdmin
)
func Admin() IAdmin {
if localAdmin == nil {
panic("implement not found for interface IAdmin, forgot register?")
}
return localAdmin
}
func RegisterAdmin(i IAdmin) {
localAdmin = i
}