Skip to content

YaroslavNehutorov/TestTaskdZen

Repository files navigation

Система комментариев с сортировкой

Описание

Веб-приложение для создания и управления комментариями с возможностью сортировки по различным критериям.

Функциональность

Сортировка постов

  • По имени пользователя (username) - алфавитная сортировка
  • По email (email) - алфавитная сортировка
  • По дате добавления (timestamp) - хронологическая сортировка

Направления сортировки

  • По убыванию (desc) - от большего к меньшему
  • По возрастанию (asc) - от меньшего к большему

Сортировка по умолчанию

  • LIFO (Last In, First Out) - новые посты отображаются первыми

GraphQL API

  • Полнотекстовый поиск по постам и комментариям
  • Elasticsearch интеграция для быстрого поиска
  • Аутентификация через JWT токены
  • CRUD операции для постов и пользователей
  • Пагинация и фильтрация результатов

Технологии

  • Django 5.2.4
  • GraphQL (graphene-django)
  • Elasticsearch 8.11.0
  • Apache Kafka 7.4.0
  • Bootstrap 5.3.0
  • Bootstrap Icons 1.11.0
  • Python 3.11+
  • SQLite 3
  • Docker & Docker Compose

Установка и запуск

🔐 Переменные окружения

Перед запуском приложения создайте файл .env в корневой директории проекта со следующими переменными:

# Django
DJANGO_SECRET_KEY=your_django_secret_key_here

# Google reCAPTCHA
RECAPTCHA_PUBLIC_KEY=your_recaptcha_public_key_here
RECAPTCHA_PRIVATE_KEY=your_recaptcha_private_key_here

Где взять ключи:

DJANGO_SECRET_KEY:

  • Сгенерируйте новый ключ: https://djecrety.ir/
  • Или используйте команду Python:
    from django.core.management.utils import get_random_secret_key
    print(get_random_secret_key())

Google reCAPTCHA:

  1. Перейдите на https://www.google.com/recaptcha/admin
  2. Нажмите "+" для создания нового сайта
  3. Выберите reCAPTCHA v2 "Я не робот"
  4. Добавьте домены: localhost, 127.0.0.1
  5. Получите Site Key (публичный) и Secret Key (приватный)
  6. Вставьте их в .env файл

🐳 Запуск в Docker (рекомендуется)

Просто запустите:

docker-compose up -d

Откройте в браузере:

GraphQL API

Основные эндпоинты

Примеры запросов

Получение всех постов

query {
  allPosts {
    id
    text
    username
    email
    timestamp
    parentPost {
      id
      text
    }
  }
}

Поиск постов

query {
  elasticsearchSearch(query: "поисковый запрос", size: 10) {
    hits {
      id
      text
      username
      score
    }
    total
  }
}

Создание поста

mutation {
  createPost(input: {
    text: "Текст нового поста"
  }) {
    post {
      id
      text
      username
    }
    success
  }
}

Получение всех постов

query {
  allPosts {
    id
    text
    username
    email
    timestamp
    parentPost {
      id
      text
    }
  }
}

Поиск постов

query {
  elasticsearchSearch(query: "поисковый запрос", size: 10) {
    hits {
      id
      text
      username
      score
    }
    total
  }
}

Создание поста

mutation {
  createPost(input: {
    text: "Текст нового поста"
    parentPostId: "1"
  }) {
    post {
      id
      text
      username
    }
    success
  }
}

Аутентификация

API использует JWT токены. Для авторизованных запросов добавьте заголовок:

Authorization: JWT <your_token>

Архитектура

Компоненты системы

  • Django - основной веб-фреймворк
  • GraphQL - API для гибкого взаимодействия с данными
  • Elasticsearch - поисковая система для быстрого поиска
  • Kafka - система обмена сообщениями для асинхронной обработки
  • JWT - аутентификация пользователей

Поток данных

  1. Пользователь создает пост через GraphQL API
  2. Django сохраняет пост в базе данных
  3. Kafka отправляет событие о новом посте
  4. Elasticsearch индексирует пост для поиска
  5. Пост становится доступен для поиска через API

Структура проекта

test_task_comments/
├── posts/           # Приложение для постов
│   ├── documents.py # Elasticsearch документы
│   ├── search_service.py # Поисковый сервис
│   └── signals.py   # Django сигналы
├── users/           # Приложение для пользователей
├── graphql_app/     # GraphQL API
│   ├── schema.py    # GraphQL схема
│   └── jwt_utils.py # JWT аутентификация
├── common/          # Общие компоненты
│   └── kafka_client.py # Kafka клиент
├── templates/       # HTML шаблоны
├── static/          # CSS, JS, изображения
├── media/           # Загружаемые файлы
└── docker-compose.yml

Docker сервисы

  • django - Django приложение
  • elasticsearch - Поисковая система
  • kafka - Apache Kafka брокер
  • zookeeper - Координатор для Kafka
  • kafka-ui - Веб-интерфейс для мониторинга Kafka

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published