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 не должна быть изменена, для обратной совместимости с действующим функционалом.
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:
theme_cat
- Идентификатор категории темы (int)
table table materials_themecategory
- Для работы фильтрации по категориям необходимо корректно заполнить ссылки Тема
Theme
+ КатегорияCategory
Рossible values:
* 1 Путешествия
* 2 Увлечения
* 3 Семья
* 4 События
* 5 Животные
* 6 Природа
* 7 Бизнес
fmt_orient
- Ориентация формата схемы продукта(str)
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
fmt_id
- ID materials_formats(int)
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)