Skip to content

Latest commit

 

History

History
317 lines (215 loc) · 14.4 KB

File metadata and controls

317 lines (215 loc) · 14.4 KB

Productivity Pulse

This project aims to show capabilities of those marvellous people, known by their alies Halk, Flash, Superman and Catwoman

Productivity Pulse - проект, создающийся с целью повысить эффективность обучения людей. Он основывается на методе помодоро: позволяет запускать таймер на 25 минут, а после его окончания предупредит о необходимости перерыва. Однако это не все возможности проекта.

Продвинутые возможности таймера:

  • Создание личного кабинета для сохранения прогресса
  • Создание категорий, чтобы отслеживать время, проведенное за определенной задачей
  • Достижения, мотивирующие пользователя продолжать работу
  • Удобный формат вывода статистики за разные периоды

Также премиум пользователи будут иметь возможность запускать фоновую музыку

Стек технологий

Productivity Pulse будет написан на Python3 с использованием фреймворка Django. Используемая база данных - SQLite.

Варианты использования

use_case_diagram

Схема БД

er_diagram

Clock API

Clock API — это API для управления часами, поддерживающий регистрацию пользователей и защищённые эндпоинты.

Установка и настройка

  1. Клонируйте репозиторий и перейдите в папку проекта:

    git clone <URL>
    cd <project_folder>
  2. Создайте виртуальное окружение и активируйте его:

    python -m venv venv
    source venv/bin/activate  # На Windows используйте `venv\Scripts\activate`
  3. Установите необходимые зависимости: Выполните следующую команду, чтобы установить основные зависимости, которые нужны для проекта.

    pip install -r requirements.txt
  4. Выполните миграции базы данных:

    python manage.py makemigrations
    python manage.py migrate --run-syncdb
  5. Запустите сервер:

    python manage.py runserver

Доступ к Swagger документации

После запуска сервера документация API доступна по следующим URL-адресам:

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

Swagger-документация предоставляет описание всех доступных эндпоинтов, включая методы, параметры и примеры ответов для каждого.

  • Swagger UI — это интерфейс, где можно не только просматривать документацию, но и тестировать запросы к API, что упрощает разработку и отладку.
  • ReDoc — это альтернативный формат документации, организованный в виде компактного дерева, удобного для навигации по большим API.

Генерация Swagger-схемы вручную

Чтобы экспортировать Swagger-схему в файл, используйте следующую команду:

python manage.py generateschema --format openapi > schema.yaml

Этот файл можно использовать для интеграции с другими инструментами API-документации или тестирования.

Авторизация в Swagger

Для доступа к некоторым эндпоинтам необходима авторизация с использованием JWT-токенов. Чтобы получить доступ к защищённым ресурсам:

  • Авторизация через Swagger UI:
    • Перейдите в Swagger UI.
    • Нажмите на кнопку Authorize.
    • Введите ваше имя пользователя и пароль.
    • Нажмите Authorize.

Теперь защищённые эндпоинты будут доступны для тестирования в Swagger UI.

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

Регистрация нового пользователя:

curl -X POST http://localhost:8000/clock/register/ -H "Content-Type: application/json" -d "{\"username\": \"testuser\", \"email\": \"testuser@example.com\", \"password\": \"testpassword\", \"date_of_birth\": \"1990-01-01\", \"country\": \"US\"}"

Зависимости

  • Django: Веб-фреймворк для построения API.
  • Django REST Framework: Библиотека для создания RESTful API.
  • drf-yasg: Библиотека для автоматической генерации Swagger-документации.
  • djangorestframework-simplejwt: Пакет для авторизации с использованием JWT-токенов.

Описание проекта

Данный backend предоставляет API для управления пользователями, ролями и функциональностью на основе ролей. Реализован функционал CRUD для сущностей, сложные выборки, а также управление доступом к различным операциям с использованием кастомных разрешений.


API: Группировка по ролям

1. Для всех пользователей (анонимные и аутентифицированные):

  • Регистрация пользователя:
    POST /clock/register/
    Создание нового пользователя.

  • Логин:
    POST /clock/token/
    Получение токенов доступа и обновления.

  • Обновление токенов:
    POST /clock/token/refresh/
    Обновление истекшего токена.

  • Просмотр публичных профилей пользователей (поиск, фильтрация):
    GET /api/users/
    Фильтрация по имени, email, стране, признаку премиум.


2. Для аутентифицированных пользователей:

  • Просмотр своих сообщений:
    GET /chat/messages/<int:user_id>/
    История переписки с конкретным пользователем.

  • Отправка сообщений:
    POST /chat/send/
    Отправка личного сообщения другому пользователю.

  • Обновление аватара:
    POST /update-avatar/
    Обновление фото профиля.

  • Обновление email:
    POST /update-email/
    Смена email с подтверждением нового адреса.


3. Для администраторов:

  • Управление пользователями:
    GET /api/users/<int:pk>/
    Получение, обновление и удаление пользователей (через GET, PUT, DELETE).

  • Доступ к сложным фильтрациям пользователей:
    GET /api/users/?is_premium=True
    Фильтрация премиум-пользователей.


Инструкция по развертыванию и запуску

В этой части документа представлены шаги по развертыванию и запуску приложения Study Clock с использованием Docker и Docker Compose.


Предварительные требования

Перед началом убедитесь, что у вас установлены следующие инструменты:

  1. Docker - Скачать и установить Docker
  2. Docker Compose - Установить Docker Compose

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

Проект содержит следующие ключевые файлы:

  • Dockerfile.db - Конфигурация для контейнера PostgreSQL.
  • Dockerfile.backend - Конфигурация для контейнера Python (Django backend).
  • docker_compose.yml - Управление всеми сервисами через Docker Compose.
  • requirements.txt - Список Python-зависимостей для backend-части.
  • Исходный код приложения - файлы Django.

Шаги по развертыванию

1. Клонируйте репозиторий

Склонируйте проект на локальную машину:

git clone <repository-url>
cd <repository-folder>

2. Сборка и запуск сервисов

Выполните следующую команду, чтобы собрать и запустить все сервисы:

docker-compose up --build

Эта команда выполнит:

  • Сборку сервиса db (PostgreSQL) с использованием Dockerfile.db.
  • Сборку сервиса backend (Django backend) с использованием Dockerfile.backend.
  • Загрузку и запуск образа Redis.

3. Доступ к приложению

  • Backend: Django-приложение будет доступно по адресу http://localhost:8000.
  • База данных: PostgreSQL будет доступен на порту 5432. Для подключения используйте, например, pgAdmin или CLI psql с такими настройками:
    • Хост: localhost
    • Порт: 5432
    • База данных: db
    • Пользователь: postgres
    • Пароль: HomeWork
  • Redis: Сервис Redis работает на порту 6379.

4. Остановка приложения

Для остановки всех запущенных сервисов нажмите Ctrl+C в терминале, где выполняется docker-compose up. Затем выполните команду:

docker-compose down

Эта команда остановит все контейнеры и удалит созданные сети.


Дополнительные шаги

5. Постоянное хранилище данных базы данных

Данные PostgreSQL сохраняются в томе postgres_data. Это позволяет не терять данные при перезапуске контейнеров.

Если нужно очистить базу данных, выполните:

docker-compose down -v

6. Отладка и логи

Чтобы посмотреть логи конкретного сервиса, выполните:

docker logs <имя_контейнера>

Например:

docker logs study_clock_backend

Для просмотра логов всех сервисов в реальном времени выполните:

docker-compose logs -f

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

Для настройки приложения используются следующие переменные окружения:

Сервис базы данных (db):

  • POSTGRES_DB: Имя базы данных (db)
  • POSTGRES_USER: Имя пользователя базы данных (postgres)
  • POSTGRES_PASSWORD: Пароль пользователя базы данных (HomeWork)

Сервис backend (backend):

  • DATABASE_HOST: Хост базы данных (db)
  • DATABASE_PORT: Порт базы данных (5432)
  • DATABASE_NAME: Имя базы данных (db)
  • DATABASE_USER: Имя пользователя базы данных (postgres)
  • DATABASE_PASSWORD: Пароль пользователя базы данных (HomeWork)
  • REDIS_HOST: Хост сервиса Redis (redis)
  • REDIS_PORT: Порт сервиса Redis (6379)

Частые проблемы и их решение

1. Конфликты портов

  • Если какой-либо из портов (5432, 6379, 8000) занят, измените настройки в секции ports в файле docker_compose.yml, указав свободный порт.

2. Ошибки миграции базы данных

  • Убедитесь, что сервисы db и redis запущены перед запуском backend. Docker Compose автоматически учитывает зависимости через директиву depends_on, но если проблема сохраняется, перезапустите сервисы:
    docker-compose restart db redis backend

3. Сборка новых образов

  • Если вы изменили Dockerfile или добавили зависимости, пересоберите сервисы:
    docker-compose build

Теперь вы готовы развернуть и запустить приложение Study Clock.

Контакты

Если у вас есть вопросы, вы можете связаться с нами по электронной почте: bus9ko@gmail.com.