新增 POST /api/admin/tasks/<id>/reap/:仅限卡在「已预留」超 10 分钟的僵尸任务(SUBMITTED/ POLLING 故意不许杀,视频合法耗时 5-10 分钟+,强杀会与轮询结算竞态),标失败 + 退还冻结积分, 与自动回收 _reap_stale_standalone_image_tasks 同款账务路径,幂等。 自动回收只在同团队下次提交时顺手触发,团队弃用某功能后冻结积分会永久躺着——这是给超管的 手动出口。序列化器加 reapable 字段(与端点闸同口径),任务监控行级「回收退款」按钮。 4 条测试(成功退款+审计/窗口内拒绝/非 RESERVED 拒绝/非超管 403)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
73 lines
3.4 KiB
Python
73 lines
3.4 KiB
Python
from django.urls import path
|
|
|
|
from .views import (
|
|
admin_asset_reviews,
|
|
admin_billing_config,
|
|
admin_asset_reviews_poll,
|
|
admin_asset_reviews_submit,
|
|
admin_invitations,
|
|
admin_ledger_adjust,
|
|
admin_ledgers,
|
|
admin_model_detail,
|
|
admin_model_set_default,
|
|
admin_models,
|
|
admin_integrity,
|
|
admin_projects,
|
|
admin_provider_detail,
|
|
admin_providers,
|
|
admin_quota_policies,
|
|
admin_quota_policy_detail,
|
|
admin_task_detail,
|
|
admin_task_reap,
|
|
admin_task_retry,
|
|
admin_tasks,
|
|
admin_prompt_template_detail,
|
|
admin_prompt_templates,
|
|
admin_quality_word_detail,
|
|
admin_quality_words,
|
|
admin_revoke_invitation,
|
|
admin_team_detail,
|
|
admin_team_pricing,
|
|
admin_team_toggle,
|
|
admin_teams,
|
|
admin_user_reset_password,
|
|
admin_user_toggle,
|
|
admin_users,
|
|
)
|
|
|
|
|
|
urlpatterns = [
|
|
path("invitations/", admin_invitations, name="admin-invitations"),
|
|
path("invitations/<uuid:invite_id>/revoke/", admin_revoke_invitation, name="admin-invitation-revoke"),
|
|
path("teams/", admin_teams, name="admin-teams"),
|
|
path("teams/<uuid:team_id>/", admin_team_detail, name="admin-team-detail"),
|
|
path("teams/<uuid:team_id>/toggle/", admin_team_toggle, name="admin-team-toggle"),
|
|
path("teams/<uuid:team_id>/pricing/", admin_team_pricing, name="admin-team-pricing"),
|
|
path("users/", admin_users, name="admin-users"),
|
|
path("users/<uuid:user_id>/toggle/", admin_user_toggle, name="admin-user-toggle"),
|
|
path("users/<uuid:user_id>/reset-password/", admin_user_reset_password, name="admin-user-reset-password"),
|
|
path("quality-words/", admin_quality_words, name="admin-quality-words"),
|
|
path("quality-words/<uuid:word_id>/", admin_quality_word_detail, name="admin-quality-word-detail"),
|
|
path("prompt-templates/", admin_prompt_templates, name="admin-prompt-templates"),
|
|
path("prompt-templates/<uuid:template_id>/", admin_prompt_template_detail, name="admin-prompt-template-detail"),
|
|
path("asset-reviews/", admin_asset_reviews, name="admin-asset-reviews"),
|
|
path("asset-reviews/submit/", admin_asset_reviews_submit, name="admin-asset-reviews-submit"),
|
|
path("asset-reviews/poll/", admin_asset_reviews_poll, name="admin-asset-reviews-poll"),
|
|
path("tasks/", admin_tasks, name="admin-tasks"),
|
|
path("tasks/<uuid:task_id>/", admin_task_detail, name="admin-task-detail"),
|
|
path("tasks/<uuid:task_id>/retry/", admin_task_retry, name="admin-task-retry"),
|
|
path("tasks/<uuid:task_id>/reap/", admin_task_reap, name="admin-task-reap"),
|
|
path("ledgers/", admin_ledgers, name="admin-ledgers"),
|
|
path("ledgers/adjust/", admin_ledger_adjust, name="admin-ledger-adjust"),
|
|
path("billing-config/", admin_billing_config, name="admin-billing-config"),
|
|
path("quota-policies/", admin_quota_policies, name="admin-quota-policies"),
|
|
path("quota-policies/<uuid:policy_id>/", admin_quota_policy_detail, name="admin-quota-policy-detail"),
|
|
path("providers/", admin_providers, name="admin-providers"),
|
|
path("providers/<uuid:provider_id>/", admin_provider_detail, name="admin-provider-detail"),
|
|
path("models/", admin_models, name="admin-models"),
|
|
path("models/<uuid:model_id>/", admin_model_detail, name="admin-model-detail"),
|
|
path("models/<uuid:model_id>/set-default/", admin_model_set_default, name="admin-model-set-default"),
|
|
path("projects/", admin_projects, name="admin-projects"),
|
|
path("integrity/", admin_integrity, name="admin-integrity"),
|
|
]
|