/dating

Draft for dating service

Primary LanguagePython

Dating Project (Draft)

Это драфт приложения для знакомств.

Реализованные функции

  1. Модель участника:

    • Поля: пол, имя, фамилия, почта.
    • Проверка уникальности электронной почты реализована в клиентском сервисе.
  2. Регистрация с загрузкой аватарки:

    • Две версии маршрута регистрации:
      • /api/clients/create2: Последовательный процесс.
      • /api/clients/create: Асинхронная загрузка аватарки.
    • Хеширование пароля с использованием bcrypt для совместимости с авторизацией.
    • Добавлены тесты (но на скорую руку, нужно рефакторить)

Используемые технологии

  • Python 3.12: Язык программирования проекта.
  • SQLite: Для хранения БД для разработки.
  • SQLAlchemy: ORM для взаимодействия с БД.
  • Pydantic: Валидация данных и управление входными данными.
  • Alembic: Миграции базы данных.
  • python-dotenv: Управление переменными окружения.
  • bcrypt: Генерация хеша паролей (версия 4.0.1).

Модель участников

Участник имеет следующие поля:

  • ID: Уникальный идентификатор.
  • Аватар: URL (опционально).
  • Пол: 'male' или 'female'.
  • Имя: Имя пользователя.
  • Фамилия: Фамилия пользователя.
  • Почта: Уникальный адрес электронной почты.
  • is_active: Поддержка "soft delete".

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

dating/
├── alembic/             # Скрипты миграций БД
├── alembic.ini          # Конфигурация Alembic
├── create_db_once.py    # Инициализация БД
├── README.md            # Документация проекта
├── requirements.txt     # Зависимости
├── run.py               # Запуск приложения
├── watermark.png        # Пример водяного знака
├── tests                # Тесты
│   ├── tests.py         # Тестирование роутов
├── src/
│   ├── config/         
│   │   ├── database.py  # Конфигурация БД
│   │   ├── logging.py   # Настройки логирования
│   │   └── settings.py  # Общие настройки
│   ├── models/          # ORM-модели
│   ├── routers/         # API маршруты
│   ├── schemas/         # Pydantic схемы
│   ├── services/        # Логика приложения
│   └── __main__.py      # Точка входа
├── avatars/             # Аватары пользователей
└── database.db          # База данных (файл)

Установка

Рекомендуется использовать виртуальное окружение:

  1. Склонируйте репозиторий:

    git clone https://github.com/sergei-kruchinin/dating.git
    cd dating
  2. Создайте и активируйте виртуальное окружение:

    python3 -m venv .venv
    source .venv/bin/activate

    [Windows]

    .venv\Scripts\activate
  3. Установите зависимости:

    pip3 install -r requirements.txt
  4. Создайте файл .env:

    DATABASE_URL=sqlite+aiosqlite:///./database.db
    SECRET_KEY=your_secret_key_here
    AVATAR_DIR=./avatars
    AVATAR_URL_PREFIX = avatars
    WATERMARK_PATH = ./watermark.png
    
  5. Измените alembic.ini:

    sqlalchemy.url = sqlite:////tmp/database.db
  6. Инициализируйте базу данных:

    python3 create_db_once.py
  7. Запустите приложение:

    python3 run.py

Управление миграциями

Используйте Alembic для управления схемой базы данных:

  • Обновить до последней схемы:

    alembic upgrade head
  • Создать новую миграцию:

    alembic revision --autogenerate -m "Описание изменений"
  • Откатить последнюю миграцию:

    alembic downgrade -1

Логирование

Система логирования настроена для вывода логов с уровнем INFO, включая временные метки и сообщения.

Исключения и схемы ошибок

Проект использует пользовательские схемы Pydantic для обработки HTTP ошибок в API. Эти схемы стандартизируют сообщения об ошибках и помогают в отладке:

  • InternalServerErrorResponse: Сообщение для ошибок сервера.
  • BadRequestResponse: Сообщение для неправильных запросов.
  • NotFoundResponse: Сообщение для несуществующих ресурсов.
  • EmailAlreadyRegisteredResponse: Сообщение для конфликтов из-за дублирования email.

Схемы пользователей

  • UserCreate: Схема для создания нового пользователя, включает валидацию таких полей как email и password.
  • UserResponse: Схема для ответов с данными пользователей, поддерживает ORM.

Протоколы

  • PasswordHasherProtocol: Протокол для реализации сервиса хеширования и проверки паролей.

Модели данных

  • Base: Базовая декларативная модель для всех ORM-моделей.
  • UserModel: Представляет таблицу users в базе данных с полями как id, gender, first_name, last_name, email, hashed_password и is_active.

API маршруты

  • Создание клиента с аватаром:
    • Асинхронный маршрут для создания нового клиента с поддержкой аватаров и водяных знаков.
    • http://127.0.0.1:8000/api/clients.
  • Создание клиента (последовательное):
    • Альтернативный маршрут для последовательного процесса создания клиента.
    • http://127.0.0.1:8000/api/clients2
  • Получение клиента по ID:

Swagger UI документация

  • Доступна по адресу http://127.0.0.1:8000/docs.
  • Позволяет просматривать доступные API-маршруты и тестировать их.

Примечания

Этот проект является черновиком и может быть расширен для добавления дополнительных возможностей и улучшения функциональности.

Автор

Сергей Кручинин sergeykr@yandex.ru