open the API up to the frontend
سینیور خواست زودتر به فرانتاند وصل شویم تا از آنجا هم تست شود. اینها
سمتِ ما لازم بودند:
CORS با allowlist صریح (نه ALLOW_ALL): احرازِ هویتِ ما توکنِ Bearer در هدر
است، پس origin ناشناس نباید از مرورگرِ کاربر به API ما بزند.
CORS_ALLOW_CREDENTIALS عمداً خاموش میماند — کوکیای در کار نیست و روشن
کردنش فقط سطحِ حمله اضافه میکند. CorsMiddleware بالاتر از CommonMiddleware
گذاشته شد وگرنه ریدایرکتِ APPEND_SLASH و خطای ۴۰۰ هدرِ CORS نمیگیرند و در
مرورگر بهشکلِ خطای مبهمِ شبکه دیده میشوند.
PATCH /api/user/profile اضافه شد؛ تا پیش از این هیچ راهی برای ثبتِ نامِ
کاربر نبود. GET /api/home بدونِ پارامتر حالا پایهی ذخیرهشدهی کاربر را
برمیگرداند و POST /api/ai/ask فقط با lessonId کار میکند — هر دو برای
اینکه فرانت لازم نباشد پایه را خودش نگه دارد. questionCount به
lessons/{id}/intro اضافه شد.
docs/frontend/api.ts و README.md کلاینتِ تایپدار و راهنمای اتصالاند، از
روی OpenAPI واقعیِ همین سرویس تولید شدهاند.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -51,6 +51,11 @@ class LessonIntroResponseSerializer(serializers.Serializer):
|
||||
title = serializers.CharField()
|
||||
introText = serializers.CharField()
|
||||
mascotAnimation = serializers.CharField()
|
||||
# تعدادِ سوالهای آمادهی این درس. صفر یعنی محتوای آموزشی هست ولی آزمونش
|
||||
# هنوز ساخته نشده؛ اپ باید «بهزودی» نشان دهد نه یک کویزِ خالی. بدونِ این
|
||||
# فیلد فرانت مجبور بود اول questions را بگیرد تا بفهمد چیزی هست یا نه، و
|
||||
# `complete` هم totalQuestions=0 را رد میکند (درست است، ولی گیجکننده).
|
||||
questionCount = serializers.IntegerField()
|
||||
|
||||
|
||||
# ---- Lesson questions ----
|
||||
|
||||
Reference in New Issue
Block a user