API галерея Альфа версия

Documentation Develop
Develop Python DRF REST API PostGreSql PyTest

API галерея Альфа версия

New API description

Description

Для получения продуктов, на текущий момент используется следующее API:

Галерея

GET <BASE_URL>/api/gallery/product/?filter_param=filter_value - Получение списка продуктов для галереи

Для множественной фильтрации необходимо передавать параметры с повторяющимся filter_param, например:

(theme=1&theme=2&theme=3 etc…)

Возможные значения параметров фильтрации(filter_param):

- search - Название или Описание продукта (str icontains)
- type - Идентификатор типа продукта (int) []
- fmt - Идентификатор формата схемы продукта (id) []
- fmt_orient - Ориентация формата схемы продукта(str) []
- template_cat - Категория Схемы шаблонов (int) []
- theme_cat - Идентификатор категории темы (int) []
- theme_color - Идентификатор цвета темы (int) []
- theme_style - Идентификатор стиля темы (int) []
- theme_author - Идентификатор автора темы (int) []
Сортировка продуктов:

возможные значения sort( new - новые, top - популярные)

GET <BASE_URL>/api/gallery/product/?sort=new
Получение мета информации о возможных вариантах фильтрации
GET <BASE_URL>/api/gallery/meta/
Необходимо на основе данного API создать API2, желательно по данному принципу:

http://center.u4u.online:10080/projects/u4u/wiki/API_%D0%B3%D0%B0%D0%BB%D0%B5%D1%80%D0%B5%D1%8F

Текущая версия API не должна быть изменена, для обратной совместимости с действующим функционалом.

API галерея (не реализовано)

New API Alfa

The default page size.

page_size = 20

Client can control the page size using this query parameter.

page_size_query_param = 'page_size'

Set to an integer to limit the maximum page size the client may request.

max_page_size = 30

Get First page

http://localhost/api/gallery2/product/?page_size=1
{
    "count": 368,
    "next": 2,
    "previous": null,
    "results": [
      {
          "id": 3672,
          "orientation": "SQUARE",
          "name": "Ко дню влюбленных",
          "theme_id": 561,
          "format": "30x30",
          "preview_cover": "/media/prodprev/3672/0_b1fbea1f-8d37-4a3a-8203-97742848f24e.jpg"
      },
    ]
}

Get by Page number

http://localhost/api/gallery2/product/?page=6&page_size=1
{
    "count": 368,
    "next": 7,
    "previous": 5,
    "results": [
      {
          "id": 3672,
          "orientation": "SQUARE",
          "name": "Ко дню влюбленных",
          "theme_id": 561,
          "format": "30x30",
          "preview_cover": "/media/prodprev/3672/0_b1fbea1f-8d37-4a3a-8203-97742848f24e.jpg"
      },
    ]
}

Get Last page

http://localhost/api/gallery2/product/?page_size=1&page=last
{
    "count": 368,
    "next": null,
    "previous": 367,
    "results": [
      {
          "id": 3672,
          "orientation": "SQUARE",
          "name": "Ко дню влюбленных",
          "theme_id": 561,
          "format": "30x30",
          "preview_cover": "/media/prodprev/3672/0_b1fbea1f-8d37-4a3a-8203-97742848f24e.jpg"
      },
    ]
}

Filter Params:

table table materials_themecategory

Рossible values:

* 1	Путешествия
* 2	Увлечения
* 3	Семья
* 4	События
* 5	Животные
* 6	Природа
* 7	Бизнес

table materials_formats.orientation

Рossible values:

* SQUARE
* SQUARE
* HORIZONTAL
* VERTICAL
* SQUARE

Example request with filter params

http://localhost/api/gallery2/product/?theme_cat=1&fmt_orient=SQUARE

table materials_formats

Рossible values:

"fmt": [
    {
        "id": 1,
        "name": "15х15 см"
    },
    {
        "id": 2,
        "name": "20х20 см"
    },
    {
        "id": 3,
        "name": "30х20 см"
    },
    {
        "id": 4,
        "name": "20х30 см"
    },
    {
        "id": 5,
        "name": "30х30 см"
    }
]

Example request with filter params

http://localhost/api/gallery2/product/?theme_cat=5&fmt=5

Response Example:


{
    "count": 34,
    "next": null,
    "previous": 1,
    "results": [
        {
            "id": 830,
            "theme_id": 161,
            "orientation": "SQUARE",
            "name": "Акварельные цветы",
            "format": "30x30",
            "preview_cover": "/media/prodprev/830/0_05c4d9c5-11a0-4f62-aac1-e15582d1e531.jpg"
        },
...
        {
            "id": 65,
            "theme_id": 28,
            "orientation": "SQUARE",
            "name": "Бохо",
            "format": "30x30",
            "preview_cover": "/media/prodprev/65/0_a03fd5ec-4737-4c3b-9169-b3ec6702365f.jpg"
        }
    ],
    "query_params": {
        "fmt": "5",
        "theme_cat": "5",
        "page": "last"
    }
}

Get Products for special project

Example params:

Product Name Special Project “words”
Газпром автоматизация GAZPROMAVT
Газпром автоматизация GAZPROMAVT
Газпром корпоративный GAZTELECOM25
Сбербанк корпоративный SBERBANK27
Сбербанк мероприятия SBERBANK27
Сбербанк официальный SBERBANK27
Сбербанк развлекательный SBERBANK27
Сбербанк события SBERBANK27
Сбербанк спортивный SBERBANK27

Example request:

http://localhost/api/gallery2/product/?special_project=GAZPROMAVT

API Get Moderator layout By product_id

GET http://localhost/api/ua/layout/product/<product_id>

Respоnce

{
    "product_name": "Travel",
    "num_pages": 21,
    "name": "Путь",
    "scheme_theme_rel": {
        "166": 24,
        "173": 29,
...
        "298": 32,
        "300": 30,
        "309": 25
    },
    "font_size": 16,
    "id": "babb14ac-e59a-4aa1-a7d0-7dad05966f73",
    "pages": [
        {
            "num": 0,
            "type": "COVER",
            "factor": 2.834516129032258,
            "width_px": 1238.7096774193549,
            "layout": "babb14ac-e59a-4aa1-a7d0-7dad05966f73",
            "id": "c050b071-900c-47d8-af5f-6b5ae70015bc",
            "viewbox": {
                "width": 1814.2,
                "height": 878.7
            },
            "template": {
                "id": 163,
                "width": 640,
                "height": 310
            },
            "blocks": [
              ...

            ]
        },
...
    ],
    "last_scheme_page_num": 60
}

API Get theme Category list

GET http://localhost/api/gallery2/themecategory/
[
    {
        "id": 1,
        "name": "Все"
    },
    {
        "id": 2,
        "name": "Дети"
    },
    {
        "id": 3,
        "name": "Семья"
    },
...
    {
        "id": 15,
        "name": "Абстракция"
    },
    {
        "id": 16,
        "name": "Новый год"
    }
]

Получение мета информации о категориях, фильтрах:

можно оставить текущую, но доработать, если потребуется (на текущий момент она не используется):

/api/gallery/meta/

Вывод результата на текущий момент:

    {
        "theme_color": [
            {
                "id": 1,
                "name": "Темные"
            },
            {
                "id": 2,
                "name": "Светлые"
            },
            {
                "id": 3,
                "name": "Яркие"
            },
            {
                "id": 4,
                "name": "Приглушенные"
            }
        ],
        "product_type": [
            {
                "id": 1,
                "name": "Фотоальбом"
            },
            {
                "id": 2,
                "name": "Брошюра"
            },
            {
                "id": 3,
                "name": "Книга"
            },
            {
                "id": 4,
                "name": "Календарь"
            }
        ],
        "theme_cat": [
            {
                "id": 1,
                "name": "Путешествия"
            },
            {
                "id": 2,
                "name": "Увлечения"
            },
            {
                "id": 3,
                "name": "Семья"
            },
            {
                "id": 4,
                "name": "События"
            },
            {
                "id": 5,
                "name": "Животные"
            },
            {
                "id": 6,
                "name": "Природа"
            },
            {
                "id": 7,
                "name": "Бизнес"
            }
        ],
        "theme_style": [
            {
                "id": 1,
                "name": "Строгий"
            },
            {
                "id": 2,
                "name": "Изящный"
            },
            {
                "id": 3,
                "name": "Роскошный"
            }
        ],
        "fmt_orient": [
            {
                "id": "HORIZONTAL",
                "name": "Горизонтальная"
            },
            {
                "id": "VERTICAL",
                "name": "Вертикальная"
            },
            {
                "id": "SQUARE",
                "name": "Квадратная"
            }
        ],
        "template_cat": [
            {
                "id": "variablephoto",
                "name": "Разноформатные фотографии"
            },
            {
                "id": "bigphoto",
                "name": "Большие фотографии"
            },
            {
                "id": "smallphoto",
                "name": "Много маленьких фотографий"
            },
            {
                "id": "withtext",
                "name": "С текстом"
            },
            {
                "id": "shorttext",
                "name": "С короткими подписями"
            },
            {
                "id": "notext",
                "name": "Без текста"
            }
        ],
        "theme_author": [],
        "fmt": [
            {
                "id": 1,
                "name": "15х15 см"
            },
            {
                "id": 2,
                "name": "20х20 см"
            },
            {
                "id": 3,
                "name": "30х20 см"
            },
            {
                "id": 4,
                "name": "20х30 см"
            },
            {
                "id": 5,
                "name": "30х30 см"
            }
        ]
    }

TODO Integrate search by

Photorec 3 шт.

photorec-69cd8b8957-2hwff                                      1/1     Running     0          39h
photorec-69cd8b8957-cb2ll                                      1/1     Running     0          39h
photorec-69cd8b8957-wdwxv   

All action in wa services

1. Make migrations

NEW

➜  ua git:(new_api_gallery) kubectl exec -it wa-79d848fc7d-v6bnb -- /bin/bash 
root@wa-79d848fc7d-v6bnb:~# python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, materials, sessions
Running migrations:
  Applying materials.0007_auto_20190122_1215... OK
  Applying materials.0008_auto_20190122_1219... OK
  Applying materials.0009_auto_20190125_1401... OK
  Applying materials.0010_auto_20190321_1801... OK

OLD

root@4bf13345a5ca:~# python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, materials, sessions
Running migrations:
  Applying materials.0009_auto_20190125_1401... OK
root@4bf13345a5ca:~#

2. Loaddata fixtures

NEW

Exec SQL

insert into public.materials_themecategory (id, name, created_at, updated_at) values (2, 'Дети', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (3, 'Семья', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (4, 'Любовь', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (5, 'Свадьба', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (7, 'День рождения', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (8, 'Выпускной', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (9, 'Путешествия', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (10, 'Спорт', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (11, 'Времена года', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (12, 'Для мужчин', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (13, 'Для женщин', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (14, 'Нейтральная', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (15, 'Абстракция', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');
insert into public.materials_themecategory (id, name, created_at, updated_at) values (16, 'Новый год', '2019-03-21 15:01:31.938178', '2019-03-21 15:01:31.963102');

Result

2	Дети	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
3	Семья	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
4	Любовь	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
5	Свадьба	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
7	День рождения	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
8	Выпускной	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
9	Путешествия	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
10	Спорт	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
11	Времена года	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
12	Для мужчин	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
13	Для женщин	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
14	Нейтральная	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
15	Абстракция	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102
16	Новый год	2019-03-21 15:01:31.938178	2019-03-21 15:01:31.963102

OLD

python manage.py loaddata materials.themecategory.json

Use Dump files one of this

TESTED WORK OK (19.04.2019)

copy&exec from gist link below https://gitlab.u4u.online/snippets/21

        materials/fixtures/dev_public_materials_themes_category_insert_grovvy.sql

Check insert many-tomany correct




SELECT materials_themes.id, m2.id, themecategory.id from
materials_themes
JOIN
    materials_themes_category m2
    ON materials_themes.id = m2.theme_id
JOIN
    materials_themecategory themecategory on m2.themecategory_id = themecategory.id;

In wa service one time.

python manage.py set_product_group

3. Make SQL requests

UPDATE materials_products
SET special_project='GAZPROMAVT'
WHERE name like '%Газпром автоматизация%';

UPDATE materials_products
SET special_project='GAZTELECOM25'
WHERE name like '%Газпром корпоративный%';

UPDATE materials_products
SET special_project='SBERBANK27'
WHERE name like '%Сбербанк%';

4. Return signal

@receiver(post_save, sender=models.Product)
 def product_post_save(sender, instance, created, **kwargs):
     if created and not kwargs.get('raw'):
         instance.generate_previews()
     # Закоментировал. Использовали для обновления информации в существующих layout-ах. AiratKh(15.08.2018)
     instance.update_layout_information({'scheme_template': instance.scheme_template_id})


 @receiver(post_save, sender=models.Theme)
 def theme_post_save(sender, instance, created, **kwargs):
     if instance.approved and not instance.products.exists():
          instance.generate_products()

     if created:
         try:
             util.send_email_when_theme_created(instance)
         except Exception as e:
             client.report_exception()
             logger.error(e)