Skip to content

Платформа для фрилансеров и поиска заказов для IT специалиста

Notifications You must be signed in to change notification settings

tutanhamon667/contract-2

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Платформа для фрилансеров и поиска заказов для IT специалиста [freelancing-platform-project]

Freelance platform workflow

О проекте

Платформа может помочь 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):

Эндпоинты модели 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": "пароль"
}
Создание, обновление или просмотр своего профиля (авторизация с использования JWT-токена):
/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

Изменение адреса электронной почты (авторизация с использования JWT-токена):
/api/users/new_email/
POST

JSON схема передаваемых данных

{
    "new_email": "новый email",
    "re_new_email": "ещё раз новый email",
    "current_password": "действующий пароль пользователя"
}
Изменение пароля (авторизация с использования JWT-токена):
/api/users/new_password/
POST

JSON схема передаваемых данных

{
    "new_password": "новый пароль",
    "re_new_password": "ещё раз новый пароль",
    "current_password": "действующий пароль пользователя"
}
Сброс пароля с использованием email происходит в 2 этапа:
  1. Отправка письма на зарегистрированный электронный адрес

    /api/users/reset_password/
    POST
    

    JSON схема передаваемых данных

    {
        "email": "email пользователя, желающего сбросить свой пароль и установить новый"
    }
  2. Пользователь получает на свой электронный адрес письмо, в теле которого есть ссылка в формате имя_сайта/api/users/reset_password_confirm/{uid}/{token}/, после нажатия на эту ссылку пользователь попадает на страницу установки нового пароля api/users/reset_password_confirm/

    POST
    

    JSON схема передаваемых данных

    {
        "uid": "UID пользователя, содержащийся в ссылке, полученной в письме",
        "token": "одноразовый токен, содержащийся в ссылке, полученной в письме",
        "new_password": "новый пароль",
        "re_new_password": "ещё раз новый пароль"
    }

About

Платформа для фрилансеров и поиска заказов для IT специалиста

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 55.7%
  • Python 33.2%
  • CSS 10.7%
  • Other 0.4%