- profile publicId ("User482917", accounts/public_id.py); admin shows and searches it
- plans API reports aiDailyQuota per plan and freeAiDailyQuota; migration 0007 sets the
temporary prices (monthly 99,000 / yearly 990,000 toman, 5 tutor questions a day) unless
an admin already edited the yearly plan
- tutor tone follows the learner's age (18+ gets an adult tone at any grade); notation
still follows the grade's book; answer cache keyed by tone (prompt tutor-v12-age-tone)
- POST /api/user/delete: phone users confirm with a fresh SMS code (same checks as login,
now shared in verify_phone_otp), guests type "حذف"; payment records are kept, demo
accounts refused
- delete_users --skip-paid
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
24 lines
814 B
Python
24 lines
814 B
Python
from django.urls import path
|
|
|
|
from .views import (
|
|
DeleteAccountView,
|
|
GuestSessionView,
|
|
LoginView,
|
|
LogoutView,
|
|
RefreshTokenView,
|
|
RequestOTPView,
|
|
SetUserGradeView,
|
|
UserProfileView,
|
|
)
|
|
|
|
urlpatterns = [
|
|
path('auth/session', GuestSessionView.as_view(), name='auth-session'),
|
|
path('auth/otp/request', RequestOTPView.as_view(), name='auth-otp-request'),
|
|
path('auth/login', LoginView.as_view(), name='auth-login'),
|
|
path('auth/refresh', RefreshTokenView.as_view(), name='auth-refresh'),
|
|
path('auth/logout', LogoutView.as_view(), name='auth-logout'),
|
|
path('user/grade', SetUserGradeView.as_view(), name='user-grade'),
|
|
path('user/profile', UserProfileView.as_view(), name='user-profile'),
|
|
path('user/delete', DeleteAccountView.as_view(), name='user-delete'),
|
|
]
|