Платформа может помочь IT специалистам создать удобную и эффективную среду для нахождения работы и развития профессиональной карьеры в IT. Может помочь сократить время и усилия, связанные с поиском проектов и коммуникацией с заказчиками.
Название | URL |
---|---|
Сайт | https://taski.ddns.net/ |
API | https://taski.ddns.net/api/ |
Документация Redoc | https://taski.ddns.net/redoc/ |
Настроен автоматический деплой проекта из ветки develop
.
Перейти в директорию frontend
и установить зависимости:
cd frontend
npm install
Запустить фронтенд-сервер:
npm start
Фронтенд-сервер запустится по адресу: http://localhost:5173
Собрать фронтенд для деплоя:
npm run build
Готовый фронтенд будет в папке dist
.
Important
В файле /backend/taski/settings.py
нужно раскомментировать блок DATABASES
с sqlite3
,
а блок DATABASES
выше закомментировать.
Перейти в папку backend
, создать и активировать виртуальное окружение:
cd backend
python -m venv venv
source venv/bin/activate
Обновить менеджер пакетов pip и установить зависимости:
python -m pip install --upgrade pip
pip install -r requirements.txt
Выполнить миграции и загрузить данные:
python manage.py makemigrations users
python manage.py makemigrations api
python manage.py makemigrations orders
python manage.py makemigrations chat
python manage.py migrate
python manage.py loadcats
Запустить бэкенд-сервер:
python manage.py runserver
Получить список основных эндпоинтов: http://127.0.0.1:8000/api/
Redoc и Swagger доступны по следующим адресам (есть проблемы для /users
и /login
,
поэтому смотри Эндпоинты модели Member):
/api/main/
GET
JSON схема передаваемых данных
{
"id": "ID фрилансера",
"user":{ "данные подтягиваются из анкеты"
"first_name": "Имя",
"last_name": "Фамилия"
},
"stacks": [
{
"name": "Стэк технологий, которым владеет исполнитель",
"slug": "А нужен ли?????"
}
],
"categories": [
{
"name": "категория, соответствующая категориям в фильтрах заказа",
"slug": "А нужен ли?????"
}
],
"about": "о себе",
"payrate": "ставка оплаты в час"
}
Отображаемые данные отсортированы по дате регистрации (created_at).
РЕАЛИЗОВАН ПОИСК ПО ПОЛЯМ (пример)
/api/main/?categories=development&min_payrate=&max_payrate=2500
##### Регистрация нового пользователя (доступно любому пользователю):
/api/users/ POST
JSON схема передаваемых данных
```json
{
"first_name": "Имя",
"last_name": "Фамилия",
"email": "адрес электронной почты в принятом стандарте",
"password": "пароль, обязательно должны быть цифра, спецсимвол и заглавная буква",
"re_password": "ещё раз пароль",
"is_customer": "пользователь регистрируется в качестве заказчика (булева переменная)",
"is_worker": "пользователь регистрируется в качестве фрилансера (булева переменная)"
}
Все поля обязательны к заполнению, булевы не могут быть оба True или False
/api/users/id/
GET
JSON схема передаваемых данных профиля Заказчика
{
"id": "ID пользователя",
"photo": "логотип, фото, закодированный в Base64",
"name": "Фамилия Имя или название компании",
"is_customer": "пользователь регистрируется в качестве заказчика (булева переменная)",
"is_worker": "пользователь регистрируется в качестве фрилансера (булева переменная)",
"industry": {
"name": "область деятельности компании"
},
"about": "о себе",
"web": "личный сайт"
}
JSON схема передаваемых данных профиля Исполнителя
{
"id": "ID пользователя",
"user":{ "данные подтягиваются из анкеты"
"first_name": "Имя",
"last_name": "Фамилия"
},
"is_customer": "пользователь регистрируется в качестве заказчика (булева переменная)",
"is_worker": "пользователь регистрируется в качестве фрилансера (булева переменная)",
"stacks": [
{
"name": "Стэк технологий, которым владеет исполнитель",
"slug": "А нужен ли?????"
}
],
"categories": [
{
"name": "категория, соответствующая категориям в фильтрах заказа",
"slug": "А нужен ли?????"
}
],
"education": [
{
"diploma": [
{
"file": "файл диплома (допустимый тип jpg, png, pdf)",
"name": "краткое описание файла",
"thumbnail": "автоматически создаваемая иконка (GET)"
}
],
"name": "название учебного заведения",
"faculty": "факультет",
"start_year": "год начала обучения",
"finish_year": "год окончания обучения",
"degree": "квалификация"
}
],
"portfolio": [
{
"file": "файл портфолио (допустимый тип jpg, png, pdf)",
"name": "краткое описание файла",
"thumbnail": "автоматически создаваемая иконка (GET)"
}
],
"photo": "фотография исполнителя",
"payrate": "ставка оплаты в час",
"about": "о себе",
"web": "сайт-портфолио или своя страница исполнителя"
}
/api/login/jwt/create/
POST
JSON схема передаваемых данных
{
"email": "адрес электронной почты в принятом стандарте",
"password": "пароль"
}
/api/users/me/
PATCH GET
JSON схема передаваемых данных профиля Заказчика (выбор автоматически по роли пользователя)
{
"id": "ID заказчика",
"photo": "логотип, фото, закодированный в Base64",
"account_email": "адрес электронной почты R/O",
"name": "Фамилия Имя или название компании",
"first_name": "Имя R/O",
"last_name": "Фамилия R/O",
"is_customer": "пользователь регистрируется в качестве заказчика (булева переменная) R/O",
"is_worker": "пользователь регистрируется в качестве фрилансера (булева переменная) R/O",
"industry": {
"name": "область деятельности компании"
},
"about": "о себе",
"web": "личный сайт"
}
R/O - read only, только для чтения. Изменение значения поля невозможно JSON схема передаваемых данных профиля Исполнителя (выбор автоматически по роли пользователя)
{
"id": "ID фрилансера",
"account_email": "адрес электронной почты R/O",
"user": { // "данные подтягиваются из анкеты"
"first_name": "Имя",
"last_name": "Фамилия"
},
"is_customer": "пользователь регистрируется в качестве заказчика (булева переменная) R/O",
"is_worker": "пользователь регистрируется в качестве фрилансера (булева переменная) R/O",
"contacts": [
{
"type": "Тип контакта (выбор из предустановленного списка)",
"value": "контакт",
"preferred": "Установить в качестве предпочитаемого (булева переменная)"
}
],
"stacks": [
{
"name": "Стэк технологий, которым владеет исполнитель",
"slug": "А нужен ли?????"
}
],
"categories": [
{
"name": "категория, соответствующая категориям в фильтрах заказа",
"slug": "А нужен ли?????"
}
],
"education": [
{
"diploma": [
{
"file": "файл диплома (допустимый тип jpg, png, pdf)",
"name": "краткое описание файла",
"thumbnail": "автоматически создаваемая иконка (GET)"
}
],
"name": "название учебного заведения",
"faculty": "факультет",
"start_year": "год начала обучения",
"finish_year": "год окончания обучения",
"degree": "квалификация"
}
],
"portfolio": [
{
"file": "файл портфолио (допустимый тип jpg, png, pdf)",
"name": "краткое описание файла",
"thumbnail": "автоматически создаваемая иконка (GET)"
}
],
"photo": "фотография исполнителя",
"payrate": "ставка оплаты в час",
"about": "о себе",
"web": "сайт-портфолио или своя страница исполнителя"
}
R/O - read only, только для чтения. Изменение значения поля невозможно POST используется только один раз при создании профиля, далее используется только PATCH
/api/users/new_email/
POST
JSON схема передаваемых данных
{
"new_email": "новый email",
"re_new_email": "ещё раз новый email",
"current_password": "действующий пароль пользователя"
}
/api/users/new_password/
POST
JSON схема передаваемых данных
{
"new_password": "новый пароль",
"re_new_password": "ещё раз новый пароль",
"current_password": "действующий пароль пользователя"
}
-
Отправка письма на зарегистрированный электронный адрес
/api/users/reset_password/ POST
JSON схема передаваемых данных
{ "email": "email пользователя, желающего сбросить свой пароль и установить новый" }
-
Пользователь получает на свой электронный адрес письмо, в теле которого есть ссылка в формате
имя_сайта/api/users/reset_password_confirm/{uid}/{token}/
, после нажатия на эту ссылку пользователь попадает на страницу установки нового пароляapi/users/reset_password_confirm/
POST
JSON схема передаваемых данных
{ "uid": "UID пользователя, содержащийся в ссылке, полученной в письме", "token": "одноразовый токен, содержащийся в ссылке, полученной в письме", "new_password": "новый пароль", "re_new_password": "ещё раз новый пароль" }