- Сайт корректно работает с включённым NoScript (личное требование, т.к. раздражают "тяжелые" сайты, следовательно React и подобные Frontend решения не подходят)
- Единый подход к работе с сессиями и пользователями (HTML+API), которые хранятся в защищенных cookie (из коробки ни в FastAPI, ни в OpenAPI (Swagger UI) такого решения для API - нет)
- При шифровании паролей используется настраиваемый Scrypt (предлагаемый по умолчанию Bcrypt уже не лучшее решение)
- Разобраться с
Middleware(session, user) и адаптировать свою реализацию (штатные выглядели крайне подозрительно, например JWT в starletteSessionMiddleware: кратко, детальнее) - Все "html action routes" работают через редирект на "html page routes", соответственно
_route_handler()вызывается дважды, но с другой стороны так достигается единый подход в обработке "page" и "action", следовательно сессия создается во всех случаях, кромеlogout_user()(возможно стоит запретить использоватьactionsбез сессии т.к. они создаются со страницы и возвращаются на неё-же черезreferrer, смысла в прямом вызове не вижу - тогда двойной вызов будет устранен) - Добавить отложенную запись в БД (если нужно):
- Запись - переместить обновление
SessionDB.updated_atв "Session cache cleaner", и так-же обновлять при закрытии приложения (Session.init) - Чтение (если действительно ускорит) - кэшировать запросы сказок и их количество, обновлять при добавлении (других операций пока не предвидится, если будет добавлена модификация - можно на месте при модификации кэш обновлять)
- Запись - переместить обновление
- Вывести текстовые строки в отдельный файл, например в
app/__init__.py(from app import text, для разделения сообщений HTML/API, подгрузки фактических вариантов ответа в документацию, устранения дублирования и в целом удобства сопровождения) - Добавить описания ошибок в API после создания общего места для текстовых строк
- Унифицировать добавление асинхронных задач в общий пул
- Изучить Keycloak (выглядит многообещающе, особенно для нескольких сервисов с единой базой пользователей, но нужно переделывать для работы с включённым NoScript)
- Использование векторной БД для поиска похожих сказок
- Работа без перезагрузки страниц в JS режиме (т.к. штатно в HTML+CSS таких опций не существует - нравится подход HTMX, хорошо сочетается с Jinja Templates)
- Уведомления в JS режиме (работают только при перезагрузке страницы т.к. подгружаются из cookie, например уведомление переключения темы отображается только с включённым NoScript)
Найти правильный способ отображать html после применения внешнего CSS (с оверлеями проблем нет т.к. прозрачность устанавливается в html head, а вот с кнопками и полями сложнее т.к. требуется доступ к константам во внешнем файле)%% Исправлено в v0.2 %%- Останавливать таймер удаления уведомления, когда курсор на него наведен
- Постоянное уведомление о том, что сайт лучше работает с включенным JS, с возможностью скрытия (после скрытия сохраняется в cookie, и, например, в базу, если пользователь вошёл)
- Добавить обратную связь о работе нейросети ("зависание" страницы от 30 секунд до 10 минут - далеко не лучшее решение)
- Добавить нажатия на уведомления о готовности сказки (с переходом к ней, после добавления общей очереди)
- Добавить редактирование профиля пользователя
- Добавить аватарки
- Добавить поиск по тегам и заголовкам на главной странице, переход на главную по нажатию на тег в странице сказки
- Добавить группировку персонажей из одного произведения в тегах
- Добавить оценки сказкам
- Добавить рекомендации сказок для зарегистрированных пользователей
- Добавить простые задания, решение которых даёт возможность создавать дополнительные сказки израсходовав суточный лимит
- Нет общей очереди для работы с нейросетью (на данный момент параллельное использование, что чревато перегрузками)
- Не нашел способ сохранять выбранную тему без JS, не нарушая внешнего вида анимаций переключателя темы (с включенным JS всё работает, переносить переключатель темы в отдельную форму с кнопкой сохранения проблему-бы устранило, но во первых портит запланированную логику (переключатель в углу доступный всегда), во вторых это зарезервировано для изменения темы по умолчанию - при редактировании профиля пользователя, которое пока не реализовано):
<input type="image">вместо<input type="submit">выглядит крайне ужасной идеей<input type="submit">вместо<input type="checkbox">похоже не может сработать в принципе, т.к. у кнопки одно постоянное состояние, а событийное :active переделать в постоянное не нашел способа<input type="submit" style="opacity: 0">над<input type="checkbox">не работает т.к. перехватывает нажатия не пропуская их ниже, следовательно все анимации переключения не работают, и нужно перезагружать страницу с новой темой (текущий вариант), или переключать с анимацией, но без сохранения текущей выбранной темы, что было-бы странным- Не уверен, подходит-ли вариант через :target к данному случаю
Не все анимации отображаются корректно (в некоторых местах лишние (footer), в некоторых не хватает)%% Исправлено в v0.2 %%- Если обновить страницу OpenAPI (Swagger UI) с успешной авторизацией - визуально авторизация теряется, но по факту всё работает т.к. не было Logout.
- Первое нажатие на
Зарегистрироватьсясоздает запрос, а не должно, последующие не создают (добавление ? перед # в URL) Найти способ подгрузки внешней таблицы стилей до отображения получше (браузер применяет файл 2 раза, это видно в отладчике и определенно неправильно)%% Исправлено в v0.2 %%- Toggle моргает при обновлении страницы (подгрузка внешней таблицы стилей устранена, но негативный эффект остался)
notify_progressкогда есть 2 уведомления - на втором скрыт (при обновлении страницы, пока курсор не попадет на страницу)- При нажатии кнопки назад в браузере - отображаются старые уведомления из cookie
DB_KW={'url': 'postgresql+asyncpg://user:password@hostname/db_name'}
ADMIN_KW={'username': 'admin_name', 'password': 'admin_password', 'man': True, 'age': 20, 'dark_theme': True}
FASTAPI_KW={}
NEURALNET_KW={'api_key': 'mistral_api_key'}
PASSWORD_HASHER_KW={}