Commit 00ece798 by Иван Кубота

Simulate category, cards API.

New data for questions generation
parent 252487a6
Pipeline #540 failed with stage
var Route = function(url) {
if(!(this instanceof Route))
return new Route(url);
//url.replace(/(:[a-zA-Z0-9\-_]+)(?=\/|$)/g)
var list = this.list = [];
var rand = Math.random().toString(36).substr(2);
this.splitted = url.replace(/(:([^\/]+))(?=\/|$)/g, function(str, full, token) {
list.push(token);
return rand;
}).split(rand);
var splitted = this.splitted,
out = [];
for( var i = 0, _i = splitted.length; i < _i; i++ ){
out.push(splitted[i].replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
i<_i-1 && out.push('([^\\/]+)');
}
this.RegExp = new RegExp('^'+out.join('')+'/?$', 'i');
};
Route.prototype = {
generate: function(data) {
var list = this.list,
splitted = this.splitted,
out = [];
for( var i = 0, _i = splitted.length; i < _i; i++ ){
out.push(splitted[i]);
i<_i-1 && out.push(data[list[i]] || '');
}
return out.join('');
},
load: function(url) {
var matched = url.match(this.RegExp),
data = {}, list = this.list,
silent = true;
var state = history.state || {},
stateData = state.data || {},
dataNotMatched = false;
for( var i = 0, _i = list.length; i < _i; i++ ){
var listElement = list[ i ];
data[listElement] = matched[i+1];
if(stateData[listElement] !== matched[i+1])
dataNotMatched = true;
}
for(i in stateData){
if(!(i in data)){
dataNotMatched = true;
}
}
if(state.place === this.pageName || dataNotMatched){
silent = false;
}
ACTION.NAVIGATE.execute(this.pageName, data, silent);
/*
store.set({
'navigation.current': event.state.place,
'navigation.data': event.state.data || {}
});
*/
},
match: function(url) {
return (url.match(this.RegExp) !== null? 1 : 0)*url.length;
}
};
module.exports = Route;
\ No newline at end of file
......@@ -23,7 +23,7 @@ const print = function(data) {
return tpls.index.replace('$DATA$', data)
};
const api = [require('./src/api/generateRandom')].reduce((store, el)=>{
const api = [require('./src/api/generateRandom'), require('./src/api/crud')].reduce((store, el)=>{
return Object.assign(store, el)
}, {});
const {api2html, api2routes} = require('./src/apiMappers.js');
......@@ -52,7 +52,7 @@ router.all('/', function(req, res) {
});
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header("Access-Control-Allow-Headers", "*");
res.header("Access-Control-Allow-Origin","*");
next();
});
......
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
категория,номер вопроса,Заголовок,карточка,множественный выбор,Тип вопроса,Тип ответа
2,1,"С какого года на рынке компания ""Избёнка""?",1,нет,текст,текст
2,2,"В каком году открылся первый магазин ""ВкусВилл""",1,нет,текст,текст
2,3,"Кто основатель проекта ""ВкусВилл""",1,нет,текст,текст
2,4,Где покупатель может оставить отзыв или предложение?,31,да,текст,текст
2,5,Каковы преимущества карты во ВкусВилл?,2,да,текст,текст
2,6,Покупатель не является держателем карты. Ваши действия?,3,нет,текст,текст
2,7,Что необходимо сообщить клиенту после прокатки карты на кассе,4,да,текст,текст
2,8,"Если клиент расплачивается наличными, что необходимо озвучить на кассе?",4,да,текст,текст
2,9,Как правильно выдать чек покупателю?,4,нет,текст,текст
2,10,"Какую клавишу необходимо нажать на кассе после взвешивания, если вы собираетесь пробить 3 яблока, сложенных в зеленый контейнер",5,нет,текст,текст
2,11,"Какую клавишу необходимо нажать на кассе после взвешивания, если вы собираетесь пробить 3 яблока, сложенных в прозрачный контейнер",5,нет,текст,текст
2,12,"Какую клавишу необходимо нажать на кассе в первую очередь, если вы собираетесь пробить 3 яблока, сложенных в пакет",5,нет,текст,текст
2,13,Как осуществить отказ от позиции или отмену чека?,6,нет,текст,текст
2,14,Как сделать возврат?,7,нет,текст,текст
2,15,Каковы условия назначения Любимого продукта?,9,да,текст,текст
2,16,Как часто можно менять Любимый продукт ?,10,нет,текст,текст
2,17,Когда начинает действовать скидка на Любимый продукт?,11,нет,текст,текст
2,18,Какое количество любимого продукта можно купить за 1 раз?,12,нет,текст,текст
2,19,"Что делать, если ЛП отсутствует и покупатель хочет назначить скидку на другой товар только на сегодня?",13,нет,текст,текст
2,20,"Что делать, если ЛП у покупателя отсутствует в зале, но есть на остатках?",14,нет,текст,текст
2,21,В каком случае замена ЛП на 1 день приведет к его установке на весь срок действия?,15,нет,текст,текст
2,22,Какие документы могут считаться удостоверением личности при продаже алкогольной продукции?,18,да,текст,текст
2,23,"Почему необходимо спрашивать документы, при продаже алкогольной продукции",19,нет,текст,текст
2,24,Нужно ли спрашивать документы при продаже безалкогольного пива?,20,нет,текст,текст
2,25,Что обязательно перед пробитием товара на кассе?,21,да,текст,текст
2,26,"Как правильно поступать с возвратом товара, в котором есть посторонний предмет?",23,нет,текст,текст
2,27,Желтый ценник это-,24,нет,текст,текст
2,28,Оранжевый ценник это-,24,нет,текст,текст
2,29,Зеленый ценник это-,24,нет,текст,текст
2,30,Синий ценник это-,24,нет,текст,текст
2,31,Наши ценности,25,нет,текст,текст
2,32,Наш девиз,26,нет,текст,текст
2,33,Что обещают наши консультанты,27,да,текст,текст
2,34,Что НЕ обещают наши консультанты,29,да,текст,текст
2,35,"Назовите 3 принципа сервиса ""Закажи и забери"". ",30,да,текст,текст
\ No newline at end of file
This diff is collapsed. Click to expand it.
\,номер вопроса,Заголовок,карточка,множественный выбор,Тип вопроса,Тип ответа
3,1,"Выберите утверждение , которое НЕ относится к нашей молочной продукции:",1,да,текст,текст
3,2,Порекомендуете ли вы наши детские кисломолочные продукты покупателям с детьми? ,2,нет,текст,текст
3,3,Кому подходит козье молоко?,3,нет,текст,текст
3,4,Закончите фразу: Наши производители мясной продукции:,4,нет,текст,текст
3,5,"Клиент хочет купить замороженную рыбу, но не хочет переплачивать за вес льда, ваш комментарий:",7,нет,текст,текст
3,6,"Закончите фразу: все товары из категории ""рыбная гастрономия"":",8,нет,текст,текст
3,7,"Какое из описаний подходит наиболее точно: Открыв банку с рыбной консервой, клиент увидит:",9,нет,текст,текст
3,8,Какое из ниже ниже представленных утверждений верно:,10,нет,текст,текст
3,9,Какой продукт покупатель НЕ найдет на полках наших магазинов?,11,нет,текст,текст
3,10,"При изготовлении наших десертов не используют консерванты, улучшители и стабилизаторы, а также никакого:",12,нет,текст,текст
3,11,В чем уникальность нашей воды?,13,нет,текст,текст
3,12,Что можете сказать о наших соках?,14,нет,текст,текст
3,13,Какое из ниже представленных выражений верное:,15,нет,текст,текст
3,14,Какого из ниже представленных напитков нет в ассортименте магазинов Вкусвилл?,16,нет,текст,текст
3,15,Что такое полезные снеки ВкусВилл?,17,нет,текст,текст
3,16,На полках наших магазинов можно найти макаронные изделия:,19,нет,текст,текст
3,17,"Покупатели хвалят наши продукты из мяса и птицы за их ""домашний вкус"" и качество, как производителям удается добится таких отзывов?",5,нет,текст,текст
3,18,Почему у нашей колбасы не привлекательный цвет?,6,нет,текст,текст
3,19,Какие редкие крупы можно найти в магазинах ВкусВилл?,18,да,текст,текст
3,20,Чаи ВкусВилл выращивают:,21,нет,текст,текст
3,21,"Мюсли Ягодные. Состав: хлопья пшеничные, хлопья овсяные, клюква, клубника вяленая, курага, цукаты, хлопья ячменные,;хлопья ржаные, хлопья из пророщенной пшеницы;семена тыквы, ядро миндаля, хлопья гречневые, ядро фисташки, отруби пшеничные. Назовите лишний ингредиент в составе, который поставщики Вкусвилл никогда не используют при приготовлении мюсли.",20,нет,текст,текст
\ No newline at end of file
номер вопроса,ответ,правильный
1,"Свод указаний, который подсказывает возможные варианты решений.",да
1,"Свод законов, который диктует нам, как вести себя в той или иной ситуации.",нет
1,"Это слово, которое мы говорим, когда заканчиваем разбор утренней поставки.",нет
2,Доносить практику внедрения наших ценностей внутри компании и до внешнего мира,да
2,Привлекая людей к КРУТО -формировать крутую команду.,да
2,Адаптировать новых и воодушевлять уже давно работающих сотрудников на изменения.,да
2,Давать ориентиры для принятия верных решений и разбора спорных ситуаций.,да
2,"Быть основанием для формирования культуры доверия, самоуправления и целостности.",да
2,"Давать людям четкие инструкции и инструменты для максимально эффективного взаимодействия как внутри, так и вне компании.",нет
3,Индивидуальному подходу.,да
3,Доброжелательному и искреннему общению.,да
3,Регулярным допродажам к любым основным покупкам.,нет
3,"Стандартным ""фирменным"" фразам во время приветствия и общения в целом.",нет
4,Попросите посмотреть 200 рублей одной или двумя купюрами.,нет
4,Поблагодарите за размен и поможете отсчитать нужную сумму.,да
4,"С недовольным лицом будете ждать ,пока клиент закончит отсчитывать мелочь.",нет
5,"Если покупатель не прав, объяснить почему и привести веские аргументы.",нет
5,Не спопорить с покупателем.,да
5,"Вежливо и оперативно принять возврат от покупателя, при наличии упаковки и веской причины.",нет
5,"В случае, если покупатель утверждает, что дал другую купюру, зовем старшего продавца, снимаем кассу, проверяем ,есть ли излишек.",да
6,Стопроцентное качество обслуживания.,да
6,У покупателей принят любой возврат,нет
6,Совершать покупки удобно и приятно.,нет
7,У покупателей принят любой возврат,да
7,Информация об остатках в магазине -актуальная и корректная.,да
7,Клиент всегда прав,нет
8,Постараться решить самостоятельно или обратиться с просьбой помочь к коллеге,да
8,"Доложить помощнику управляющего и сделать, как он скажет",нет
8,"Сказать,что вы не компетентны в данном вопросе и переложить решение проблемы на коллегу",нет
\ No newline at end of file
категория,Название,номер карточки,Текст карточки,Картинка
4,Кодекс Розничных Управлений Торговой Организации (КРУТО),1,"Кодекс Розничных Управлений Торговой Организации (КРУТО) — это просто свод указаний, а не жёстких законов. Принимай решение самостоятельно исходя из ситуации. КРУТО только подсказывает возможные варианты решений, но не может выбрать за вас, как будет правильно поступить в каждом конкретном случае.",
4,Основная цель нашего Кодекса,2,"Основная цель нашего Кодекса:
- доносить практику внедрения наших ценностей внутри компании и до внешнего мира;
- помогать формировать команду из наших людей, привлекая их к КРУТО;
- адаптировать новых сотрудников и воодушевлять уже давно работающих на изменения;
- давать ориентиры для принятия верных решений и разбора спорных ситуаций;
- быть основанием для формирования культуры доверия, самоуправления и целостности.",
4,Нашим покупателям очень нравится,3,"Нашим покупателям очень нравится:
доброжелательное и искреннее общение с ними, в том числе приветствие и прощание, но только не заученное, а личное;
индивидуальный подход;
искренние улыбки;
готовность помочь:
- с выбором товара,
- с поиском его на полках,
- с получением детальной информации по товару.
А также:
предложения продегустировать товар перед покупкой,
позитивное обслуживание,
личные рекомендации сотрудника,
искренний интерес к покупателю,
узнавание постоянных покупателей, обращение к ним по имени и проговаривание их любимого продукта,
отсутствие навязчивых допродаж.",
4,Если клиент хочет оплатить мелочью или поврежденной купюрой,4,"В случае, если клиент хочет оплатить мелочью или поврежденной купюрой, мы не отказываем в продаже. Покупатель не должен чувствовать себя неудобно, отдавая гору мелочи. Мы искренне благодарим его за то, что сделал для нас удобнее. Всегда принимаем оплату любым номиналом, даже копейками, и в любом виде — даже рваную, мятую, грязную купюру. Исключение – только фальшивые купюры, выявленные специальным проверочным карандашом, или банкнота, где отсутствует хотя бы одна цифра в номере.",
4,Не спорить с покупателями,5,"Мы не должны спорить с нашим покупателем!
Не считаем, что покупатель говорит неправду!
Смело доверяем покупателю, например, когда он утверждает, что дал другую купюру. В таком случае просто приглашаем старшего продавца и снимаем кассу, проверяем, есть ли излишек.
Не воспринимаем возврат продуктов как личное оскорбление.
Всегда с благодарностью принимаем любой возврат от покупателя.
",
4,Стопроцентное качество обслуживания,6,"Главное, что обещает розница — это стопроцентное качество обслуживания! Каждый покупатель должен после каждой покупки уходить довольным и с радостью приходить к нам ещё!",
4,Старшие продавцы обещают,7,"Старшие продавцы обещают:
У покупателей принят любой возврат по правилам, и любая другая жалоба покупателя урегулирована в магазине.
Информация об остатках в магазине всегда актуальная и корректная.
Для этого:
а) Каждый раз, как только обнаружилась разница, сначала проводится корректировка, а потом выясняются причины.
б) Списания проводятся в ""1С"" сразу, как только товар убран с полки.",
4,Конфликтные ситуации,8,"Мы стараемся самостоятельно решать все возникающие конфликтные ситуации, но всегда есть возможность обратиться с просьбой помочь к любому сотруднику.",
\ No newline at end of file
категория,номер вопроса,Заголовок,карточка,множественный выбор,Тип вопроса,Тип ответа
4,1,Что такое КРУТО?,1,нет,текст,текст
4,2,Что относится к целям кодекса?,2,да,текст,текст
4,3,Чему будет рад наш покупатель?,3,да,текст,текст
4,4,Сумма к оплате 678 рублей. Покупатель протягивает вам 500 рублей и внушительную горсть мелочи. Ваши действия?,4,нет,текст,текст
4,5,"Если в магазине возникла спорная ситуация, какие из следующих действий верные?",5,да,текст,текст
4,6,Какое главное обещание розницы?,6,нет,текст,текст
4,7,Какое обещание дают старшие продавцы?,7,да,текст,текст
4,8,Как решить возникающие конфликтные ситуации?,8,да,текст,текст
\ No newline at end of file
категория,номер карточки,Текст карточки,Картинка
4,1,"Кодекс Розничных Управлений Торговой Организации (КРУТО) — это просто свод указаний, а не жёстких законов. Принимай решение самостоятельно исходя из ситуации. КРУТО только подсказывает возможные варианты решений, но не может выбрать за вас, как будет правильно поступить в каждом конкретном случае.",
4,2,"Основная цель нашего Кодекса:
- доносить практику внедрения наших ценностей внутри компании и до внешнего мира;
- помогать формировать команду из наших людей, привлекая их к КРУТО;
- адаптировать новых сотрудников и воодушевлять уже давно работающих на изменения;
- давать ориентиры для принятия верных решений и разбора спорных ситуаций;
- быть основанием для формирования культуры доверия, самоуправления и целостности.",
4,3,"Нашим покупателям очень нравится:
доброжелательное и искреннее общение с ними, в том числе приветствие и прощание, но только не заученное, а личное;
индивидуальный подход;
искренние улыбки;
готовность помочь:
- с выбором товара,
- с поиском его на полках,
- с получением детальной информации по товару.
А также:
предложения продегустировать товар перед покупкой,
позитивное обслуживание,
личные рекомендации сотрудника,
искренний интерес к покупателю,
узнавание постоянных покупателей, обращение к ним по имени и проговаривание их любимого продукта,
отсутствие навязчивых допродаж.",
4,4,"В случае, если клиент хочет оплатить мелочью или поврежденной купюрой, мы не отказываем в продаже. Покупатель не должен чувствовать себя неудобно, отдавая гору мелочи. Мы искренне благодарим его за то, что сделал для нас удобнее. Всегда принимаем оплату любым номиналом, даже копейками, и в любом виде — даже рваную, мятую, грязную купюру. Исключение – только фальшивые купюры, выявленные специальным проверочным карандашом, или банкнота, где отсутствует хотя бы одна цифра в номере.",
4,5,"Мы не должны спорить с нашим покупателем!
Не считаем, что покупатель говорит неправду!
Смело доверяем покупателю, например, когда он утверждает, что дал другую купюру. В таком случае просто приглашаем старшего продавца и снимаем кассу, проверяем, есть ли излишек.
Не воспринимаем возврат продуктов как личное оскорбление.
Всегда с благодарностью принимаем любой возврат от покупателя.
",
4,6,"Главное, что обещает розница — это стопроцентное качество обслуживания! Каждый покупатель должен после каждой покупки уходить довольным и с радостью приходить к нам ещё!",
4,7,"Старшие продавцы обещают:
У покупателей принят любой возврат по правилам, и любая другая жалоба покупателя урегулирована в магазине.
Информация об остатках в магазине всегда актуальная и корректная.
Для этого:
а) Каждый раз, как только обнаружилась разница, сначала проводится корректировка, а потом выясняются причины.
б) Списания проводятся в ""1С"" сразу, как только товар убран с полки.",
4,8,"Мы стараемся самостоятельно решать все возникающие конфликтные ситуации, но всегда есть возможность обратиться с просьбой помочь к любому сотруднику.",
\ No newline at end of file
const data = require("../../db.js");
let cats = [
{"id":1,"title":"Продукты","description":null,"hidden":false,"type":1,"items":[]},
{"id":2,"title":"Стандарты","description":null,"hidden":false,"type":2,"items":[]},
{"id":3,"title":"Категории","description":null,"hidden":false,"type":2,"items":[]},
{"id":4,"title":"4й блок","description":null,"hidden":false,"type":2,"items":[]}];
module.exports = {
'/api/new': {
method: 'GET',
summary: 'Get list of new cards',
fn: async function(args) {
return Object.values(data.products);
}
},
'/api/card_info/:categoryID/:cardID': {
method: 'GET',
summary: 'Get card details',
options: {
categoryID: {required: true, description: 'ID of card category', type: Number},
cardID: {required: true, description: 'ID of card in category', type: Number}
},
fn: async function(args) {
let searched = Object.values(data.products).filter(p=>p.id===args.cardID && p.category_id === args.categoryID);
if(searched.length){
return searched[0];
}else{
throw new Error('No matched product')
}
}
},
'/api/categories': {
method: 'GET',
summary: 'Get list of all categories',
options: {},
fn: async function(args) {
return cats.map(c=>{
c.count = Object.values(data.products).filter(p=>p.category_id+'' === c.id+'').length;
return c;
});
}
},
'/api/categories/:id': {
method: 'GET',
summary: 'Fetch category data with child cards',
options: {
id: {required: true, description: 'ID of Category to fetch', type: Number}
},
fn: async function(args) {
return Object.assign({}, cats.filter(c=>c.id+''===args.id+'')[0], {
items:Object.values(data.products).filter(p=>p.category_id+'' === args.id+'')
});
}
}
};
\ No newline at end of file
......@@ -29,7 +29,7 @@ const mappers = {
};
const parseArgs = function(req, res, opts) {
const query = req.query;
const query = Object.assign({},req.params,req.query);
const args = {};
const errs = [];
for(let k in opts) if(opts.hasOwnProperty(k)){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment