Tasker - это учебное приложение, похожее по функционалу на доски KanBan, trello и т.п, выполненное на Django, React, Postgres и Docker Compose. Данное приложение создавалось для лучшего усвоения материала по Django, а так же знакомство с технлогиями Reac и java-scrips. Часть компонентов для фронтэнда было взято из приложения foodgram, процессы перетаскивания элементов реализовано с помощью хуков Drag and Drop компонентов.
Это приложение имеет минимальный функционал, особенно в части фронэнда (не до конца реализована валидация данных, обработка ошибок и др., не использовались модули react)
Для установки приложения выполните следующие шаги:
- Убедитесь, что у вас установлен Docker и Docker Compose.
- Склонируйте репозиторий с помощью команды
git clone https://github.com/yourusername/tasker.git
. - Перейдите в директорию проекта с помощью команды
cd tasker/infra
. - Создайте файл .env в корневой директории проекта со следующим содержимым:
DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432
DJANGO_SETTINGS_MODULE=tasker.settings
SECRET_KEY=Ключ_для_Django_приложения
DJANGO_SUPERUSER_USERNAME=admin
DJANGO_SUPERUSER_EMAIL=admin@admin.com
DJANGO_SUPERUSER_PASSWORD=admin123456789`
- Запустите приложение с помощью команды
docker-compose up
. - Откройте браузер и перейдите на страницу http://localhost.
DB_ENGINE
- указывает на тип базы данных, который будет использоваться в приложении.DB_NAME
- имя базы данных, которая будет создана при первом запуске приложения.POSTGRES_USER
- имя пользователя, который будет использоваться для подключения к базе данных Postgres.POSTGRES_PASSWORD
- пароль пользователя, который будет использоваться для подключения к базе данных Postgres.DB_HOST
- адрес хоста базы данных. В данном случае используется имя контейнера Docker, в котором будет запущена база данных.DB_PORT
- порт, на котором будет работать база данных.DJANGO_SETTINGS_MODULE
- модуль настроек Django, который будет использоваться в приложении.SECRET_KEY
- секретный ключ, который используется для генерации CSRF-токенов и хранения паролей пользователей.DJANGO_SUPERUSER_USERNAME
- имя суперпользователя, который будет создан при первом запуске приложения.DJANGO_SUPERUSER_EMAIL
- email адрес суперпользователя, который будет создан при первом запуске приложения.DJANGO_SUPERUSER_PASSWORD
- пароль суперпользователя, который будет создан при первом запуске приложения.
При первом запуске приложения автоматически создается суперпользователь admin c паролем admin123456789, обязательно поменяйте пароль!
Если Вам не нужна эта опция удалите функцию создания пользователя из файла backend/tasker/entrypoint.sh
В таком случае код файла entrypoint.sh
должен выглядеть так:
#!/bin/bash
python manage.py makemigrations
python manage.py migrate
exec gunicorn tasker.wsgi:application -b 0.0.0.0:8000
Приложение состоит из четырех контейнеров Docker, каждый из которых выполняет свою функцию:
-
web - это контейнер, который содержит backend часть приложжения, фреймворк Django и все необходимые зависимости для работы с ним.
-
db - это контейнер, который содержит базу данных PostgreSQL. Он используется для хранения данных приложения..
-
nginx - это контейнер, который содержит веб-сервер Nginx. Он используется для проксирования запросов к приложению и обеспечения доступа к нему через интернет.
-
frontend - это контейнер, который содержит фронтенд приложение, написанное с использованием React. Он компилируется при первом запуске, копирует необходимые данные для работы nginx.
POST /api/api/users/
{
email: "name@email.ru",
password: "password",
username: "name",
first_name: "name",
last_name: "name"
}
{
"username":"name",
"email":"name@email.ru",
"first_name":"",
"last_name":""
}
Код ответа | Описание |
---|---|
201 | Created |
POST /api/users/login/
{
email: "name@email.ru",
password: "password"
}
{
"auth_token":"e38a3c4e53804a94820e8f2d66fcc990f89045ee"
}
Код ответа | Описание |
---|---|
200 | OK |
POST /api/users/set_password/
{
current_password: "old_password",
new_password: "new_password"
}
Код ответа | Описание |
---|---|
204 | No Content |
POST /api/users/logout/
Код ответа | Описание |
---|---|
401 | Unauthorized |
GET /api/users/me/
{
"username":"name",
"email":"name@email.ru",
"first_name":"",
"last_name":"",
}
Код ответа | Описание |
---|---|
200 | OK |
GET /api/boards/
[
{
"id":1,
"title":"Main"
},
{
"id":2,
"title":"Учеба"
}
]
Код ответа | Описание |
---|---|
200 | OK |
GET /api/board/<id>/
[
{
"id": 1,
"title": "Заплаиновано",
"tasks": [
{
"id": 5,
"group": 6,
"title": "Купить",
"position": 1
},
{
"id": 4,
"group": 6,
"title": "Продать",
"position": 2
},
{
"id": 3,
"group": 6,
"title": "Заплатить",
"position": 3
}
],
"position": 1,
"board": 2
},
{
"id": 4,
"title": "В работе",
"tasks": [],
"position": 2,
"board": 2
},
{
"id": 5,
"title": "Выполнено",
"tasks": [],
"position": 3,
"board": 2
}
]
Код ответа | Описание |
---|---|
200 | OK |
PATCH /api/board/<id>/
{
"string"
}
{
"id": 2,
"title": "string"
}
Код ответа | Описание |
---|---|
200 | OK |
DELETE /api/board/<id>/
{
"id": 2,
"title": "string"
}
Код ответа | Описание |
---|---|
200 | OK |
POST /api/groups/
{
"board": "2",
"title": "Новая группа",
"position": 4
}
[
{
"id": 8,
"title": "Новая группа",
"tasks": [],
"position": 4,
"board": 2
}
]
Код ответа | Описание |
---|---|
200 | OK |
PATCH /api/groups/<id>/
{
"string"
}
{
"title": "string",
"board": 2,
"position": 3
}
Код ответа | Описание |
---|---|
200 | OK |
DELETE /api/groups/<id>/
{
"group": "5"
}
Код ответа | Описание |
---|---|
200 | OK |
POST /api/groups/move/
{
"boards": [
{
"id": 7,
"title": "Первая группа",
"tasks": [],
"position": 1,
"board": 2
},
{
"id": 4,
"title": "Вторая группа",
"tasks": [],
"position": 2,
"board": 2
},
{
"id": 6,
"title": "4",
"tasks": [
{
"id": 5,
"group": 6,
"title": "3",
"position": 1
},
{
"id": 4,
"group": 6,
"title": "2",
"position": 2
},
{
"id": 3,
"group": 6,
"title": "1",
"position": 3
}
],
"position": 3,
"board": 2
}
]
}
[
{
"title": "3",
"board": 2,
"position": 3
},
{
"title": "Вторая группа",
"board": 2,
"position": 2
},
{
"title": "Первая группа",
"board": 2,
"position": 1
}
]
Код ответа | Описание |
---|---|
200 | OK |
POST /api/tasks/
{
"task": {
"title": "Новая задача",
"group": 7,
"position": 1
}
}
{
"id": 6,
"group": 7,
"title": "Новая задача",
"position": 1
}
Код ответа | Описание |
---|---|
200 | OK |
PATCH /api/tasks/<id>/
{
"string"
}
{
"id": 6,
"group": 7,
"title": "string",
"position": 1
}
Код ответа | Описание |
---|---|
200 | OK |
DELETE /api/tasks/<id>/
{
"task": "7"
}
Код ответа | Описание |
---|---|
200 | OK |
POST /api/tasks/move/
{
"tasks": [
{
"id": 6,
"group": 7,
"title": "Исправленная задача",
"position": 1
},
{
"id": 8,
"group": 4,
"title": "задача для перемещения",
"position": 1
}
]
}
[
{
"id": 6,
"group": 7,
"title": "Исправленная задача",
"position": 1
},
{
"id": 8,
"group": 7,
"title": "задача для перемещения",
"position": 2
}
]
Код ответа | Описание |
---|---|
200 | OK |