Skip to content

Backend

Ignatenko Sergiy edited this page Sep 20, 2023 · 8 revisions

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

Мова програмування - Python, фреймворк - Django, БД - SQLite 3.

Опис моделей

Модель Product

  • id: Унікальний ідентифікатор товару.
  • name: Назва товару (наприклад, "Процесор Intel Core i5-11400").
  • description: Опис товару (текстове поле для подробиць про товар).
  • price: Ціна товару (з числовим типом даних для зберігання ціни, наприклад, 999.99).

Модель Category

  • id: Унікальний ідентифікатор категорії.
  • name: Назва категорії (наприклад, "Процесори", "Відеокарти", "Материнські плати" і т. д.).

Модель ProductCategory

  • product: Зовнішній ключ, пов'язаний з Product, вказує на конкретний товар.
  • category: Зовнішній ключ, пов'язаний з Category, вказує на категорію, до якої відноситься товар.

Модель Customer

  • id: Унікальний ідентифікатор клієнта.
  • username: Ім'я користувача клієнта (може бути використане для авторизації).
  • email: Електронна пошта клієнта (унікальна, використовується для зв'язку і авторизації).
  • password: Пароль клієнта (рекомендується зберігати у захешованому форматі).

Модель Order

  • id: Унікальний ідентифікатор замовлення.
  • customer: Зовнішній ключ, пов'язаний з Customer, вказує на клієнта, який зробив замовлення.
  • order_date: Дата і час створення замовлення.

Модель OrderItem

  • id: Унікальний ідентифікатор елемента замовлення.
  • order: Зовнішній ключ, пов'язаний з Order, вказує на замовлення, до якого належить цей елемент.
  • product: Зовнішній ключ, пов'язаний з Product, вказує на товар, який був доданий до замовлення.
  • quantity: Кількість одиниць товару, які були замовлені.

Модель Address

  • id: Унікальний ідентифікатор адреси доставки.
  • customer: Зовнішній ключ, пов'язаний з Customer, вказує на клієнта, для якого ця адреса призначена.
  • street: Вулиця доставки.
  • city: Місто доставки.
  • postal_code: Поштовий індекс.

Модель Payment

  • id: Унікальний ідентифікатор оплати.
  • order: Зовнішній ключ, пов'язаний з Order, вказує на замовлення, за яке проведено оплату.
  • payment_date: Дата і час оплати.
  • amount: Сума оплати.

Модель Review

  • id: Унікальний ідентифікатор відгуку.
  • product: Зовнішній ключ, пов'язаний з Product, вказує на товар, до якого написаний відгук.
  • customer: Зовнішній ключ, пов'язаний з Customer, вказує на клієнта, який написав відгук.
  • rating: Рейтинг товару, наприклад, від 1 до 5.
  • comment: Текстовий коментар клієнта.

Схема БД

image

Платіжна система

Призначення

Переказ коштів за товар замовлений в інтернет магазині;

Опис функціоналу

Клієнта, після замовлення товарів, перенаправляють на сторінку або показують способи оплати за товари, що є в корзині.

Деталі реалізації

В нашому інтернет магазині буде оплата через картку за допомогою платіжної системи Stripe (https://stripe.com/docs) Задача бекенд розробника - інтегрувати дану систему в нашу. Для перевірки працездатності stripe надає тестовий режим (https://stripe.com/docs/test-mode). Він надає можливість симулювати використання Stripe без переводу реальних коштів.

У файлі налаштувань треба вказати ключі для використання тестового і потім реального режимів.

Згідно документації https://stripe.com/docs/development/quickstart?lang=python інтеграція має проводитися

  • встановити бібліотеку stripe:
    pip3 install --upgrade stripe

Приклад Реалізації:

import json
import os
import stripe

def create_payment():
    try:
        data = json.loads(request.data)
        # Create a PaymentIntent with the order amount and currency
        intent = stripe.PaymentIntent.create(
            amount=calculate_order_amount(data['items']),
            currency='usd',
            # In the latest version of the API, specifying the `automatic_payment_methods` parameter is optional because Stripe enables its functionality by default.
            automatic_payment_methods={
                'enabled': True,
            },
        )
        return jsonify({
            'clientSecret': intent['client_secret']
        })
    except Exception as e:
        return jsonify(error=str(e)), 403

Після вдалої транзакції в особистому кабінеті Stripe з'явиться відповідний запис про неї.

автоматична документація АПІ

Swagger

Ми використаємо бібліотеку ʼdrf-yasgʼ згідно керівництва https://drf-yasg.readthedocs.io/en/stable/readme.html#usage Для встановлення необхідно pip install -U drf-yasg

додати бібліотеку в settings.py

INSTALLED_APPS = [
   ...
   'django.contrib.staticfiles',  # required for serving swagger ui's css/js files
   'drf_yasg',
   ...
]

оновити urls.py

path('swagger/', views.schema_view.with_ui('swagger', cache_timeout=0), name='swagger'),

views.py

schema_view = get_schema_view(
    openapi.Info(
        title="API description",
        default_version="v1",
        description="test Description",
        contact=openapi.Contact(email="[email protected]")
    ),
    public=True,
    generator_class=OpenAPISchemaGenerator,
    permission_classes=(permissions.AllowAny,), )

Після цього ми бачитимемо тут http://127.0.0.1:8000/swagger/ все доступне АПІ і зможемо звідти робити HTTP запити