0.5.8-panel-upgrade-community-crud-fix
All checks were successful
Deploy on push / deploy (push) Successful in 6s
All checks were successful
Deploy on push / deploy (push) Successful in 6s
This commit is contained in:
@@ -32,6 +32,14 @@ python dev.py
|
||||
### Администрирование
|
||||
- **Админ-панель**: Управление пользователями, ролями, переменными среды
|
||||
- **Управление публикациями**: Просмотр, поиск, фильтрация по статусу (опубликованные/черновики/удаленные)
|
||||
- **Управление топиками**: Упрощенное редактирование топиков с иерархическим отображением
|
||||
- **Клик по строке**: Модалка редактирования открывается при клике на строку таблицы
|
||||
- **Ненавязчивый крестик**: Серая кнопка "×" для удаления, краснеет при hover
|
||||
- **Простой HTML редактор**: Обычный contenteditable div с моноширинным шрифтом
|
||||
- **Редактируемые поля**: ID (просмотр), название, slug, описание, сообщество, родители
|
||||
- **Дерево топиков**: Визуализация родительско-дочерних связей с отступами и символами `└─`
|
||||
- **Безопасное удаление**: Предупреждения о каскадном удалении дочерних топиков
|
||||
- **Автообновление**: Рефреш списка после операций с корректной инвалидацией кешей
|
||||
- **Просмотр данных**: Body, media, авторы, темы с удобной навигацией
|
||||
- **DRY принцип**: Переиспользование существующих резолверов из reader.py и editor.py
|
||||
|
||||
|
@@ -1,3 +1,48 @@
|
||||
## Админ-панель
|
||||
|
||||
- **Управление пользователями**: Просмотр, поиск, назначение ролей (user/moderator/admin)
|
||||
- **Управление публикациями**: Таблица со всеми публикациями, фильтрация по статусу, превью контента
|
||||
- **Управление топиками**: Полноценное редактирование топиков в админ-панели
|
||||
- **Иерархическое отображение**: Темы показываются в виде дерева с отступами и символами `└─` для дочерних элементов
|
||||
- **Колонки таблицы**: ID, название, slug, описание, сообщество, родители, действия
|
||||
- **Простой интерфейс редактирования**:
|
||||
- **Клик по строке**: Модалка редактирования открывается при клике на любом месте строки таблицы
|
||||
- **Ненавязчивый крестик**: Кнопка удаления в виде серого "×", краснеет при hover
|
||||
- **Простой HTML редактор**: Обычный contenteditable div с моноширинным шрифтом вместо сложного редактора
|
||||
- **Редактируемые поля**:
|
||||
- **ID**: Отображается для идентификации (поле только для чтения)
|
||||
- **Название и slug**: Текстовые поля для основной информации
|
||||
- **Описание**: Простой HTML редактор с placeholder
|
||||
- **Картинка**: URL изображения топика
|
||||
- **Сообщество**: ID сообщества с числовой валидацией
|
||||
- **Родители**: Список parent_ids через запятую с автоматическим парсингом
|
||||
- **Безопасное удаление**: Модальное окно подтверждения при клике на крестик
|
||||
- **Корректная инвалидация кешей**: Автоматическое обновление счетчиков подписок у всех подписчиков
|
||||
- **GraphQL интеграция**: Использование мутаций `UPDATE_TOPIC_MUTATION` и `DELETE_TOPIC_MUTATION`
|
||||
- **Управление переменными среды**: Настройка конфигурации приложения
|
||||
- **TypeScript интеграция**: Полная типизация с автогенерацией типов из GraphQL схемы
|
||||
- **Responsive дизайн**: Адаптивность для разных размеров экранов
|
||||
|
||||
## Codegen интеграция
|
||||
|
||||
- **Автоматическая генерация типов**: TypeScript типы генерируются из GraphQL схемы
|
||||
- **Файл конфигурации**: `codegen.ts` с настройками для client-side генерации
|
||||
- **Структура проекта**: Разделение на queries, mutations и index файлы в `panel/graphql/generated/`
|
||||
- **Type safety**: Строгая типизация для всех GraphQL операций в админ-панели
|
||||
- **Developer Experience**: Автокомплит и проверка типов в IDE
|
||||
|
||||
## Улучшенная система кеширования топиков
|
||||
|
||||
- **Централизованная функция**: `invalidate_topic_followers_cache()` в модуле cache
|
||||
- **Комплексная инвалидация**: Обработка кешей как самого топика, так и всех его подписчиков
|
||||
- **Правильная последовательность**: Получение подписчиков ДО удаления данных из БД
|
||||
- **Инвалидируемые кеши**:
|
||||
- `author:follows-topics:{follower_id}` - список подписок на топики
|
||||
- `author:followers:{follower_id}` - счетчики подписчиков
|
||||
- `author:stat:{follower_id}` - общая статистика автора
|
||||
- `topic:followers:{topic_id}` - список подписчиков топика
|
||||
- **Архитектурные принципы**: Разделение ответственности, переиспользуемость, тестируемость
|
||||
|
||||
## Просмотры публикаций
|
||||
|
||||
- Интеграция с Google Analytics для отслеживания просмотров публикаций
|
||||
|
@@ -42,7 +42,7 @@ Unfollow an entity.
|
||||
### Queries
|
||||
|
||||
#### get_shout_followers
|
||||
Get list of users who reacted to a shout.
|
||||
Get list of authors who reacted to a shout.
|
||||
|
||||
**Parameters:**
|
||||
- `slug: String` - Shout slug
|
||||
|
@@ -34,7 +34,7 @@ JWT_EXPIRATION_HOURS=24
|
||||
-- Create oauth_links table
|
||||
CREATE TABLE oauth_links (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
user_id INTEGER NOT NULL REFERENCES authors(id) ON DELETE CASCADE,
|
||||
provider VARCHAR(50) NOT NULL,
|
||||
provider_id VARCHAR(255) NOT NULL,
|
||||
provider_data JSONB,
|
||||
|
@@ -295,7 +295,7 @@ async def migrate_oauth_tokens():
|
||||
refresh_token=author.provider_refresh_token
|
||||
)
|
||||
|
||||
print(f"Migrated OAuth tokens for {len(authors)} users")
|
||||
print(f"Migrated OAuth tokens for {len(authors)} authors")
|
||||
```
|
||||
|
||||
## Performance Benefits
|
||||
|
Reference in New Issue
Block a user