Skip to content

Busskov/study_clock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

A project created by four cool people

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors