Восемь интерфейсов системы. Входы, выходы, назначение.
Quiz UI → profile_code
Квиз → Профиль
Ответы пользователя переводятся в profile_code. Временно сохраняется в localStorage как taste_profile_code.
Supabase Auth → session
Google OAuth → Сессия
Supabase принимает Google identity, создаёт пользователя, возвращает session и user.id. Используется на /auth и /callback.
INSERT quiz_results
Callback → База данных
После логина: callback берёт profile_code из localStorage и сохраняет строку (user_id, profile_code, profile_name) в quiz_results.
GET /recommend/{profile_code}
Frontend → Render API
wines_list делает GET-запрос на Render. Получает JSON-массив: wine_id, wine_name, region, similarity_score, explanation.
recommend_for_features()
FastAPI → ML Model
API переводит profile_code в feature vector через PROFILE_TO_FEATURES, вызывает ContentWineRecommender, получает pandas DataFrame.
SELECT profile_recommendations
Legacy / Fallback Path
Batch-слой: wines_list читает заранее рассчитанные рекомендации из Supabase. Используется как fallback или кэш при недоступности API.