ms-admin's Introduction
ms-admin's People
ms-admin's Issues
Сброс пароля
-
Добавить два таба:
Настройки,Сброс пароля.
В настройках должны сделанные настройки аккаунта
В вкладке "сброс пароля",кнопка:Сбросить пароль -
Для сброса пароля нужно сдалать запрос:
GET /accounts/{accountID}/resetPassword?user_session={значение}
АПИ должно возвратить
{ status: 200, password: "1asdf88asfd4afs3"}
-
После получения ответа вывести сообщение:
Пароль сброшен.
Новый пароль:1asdf88asfd4afs3
Оживить форму создания аккаунта
Поправить форму
- Поправить подпись "Добавить аккаунт". Заменить на "Новый аккаунт";
- Добавить к полю плейсхолдер "название аккаунта";
- Добавить в форму режим прелоадера — пока обрабатывается запрос (запрос отправлен, но ответ ещё не пришёл) нужно задизейблить форму и кнопку "Добавить" переименовать в "Добавляем.."
Сценарий
Когда пользователь заполняет поле и жмёт на кнопку, то отправляем запрос на новый эндпоинт POST /accounts
. Если ответ успешный и возвращает id, то сделать редирект на страницу нового аккаунта.
Транки. Баг в файрфоксе
Проверка сессии
- Переименовать checksession.js в adminName.js
- В adminName.js убрать все условия,оставить только запрос на получение имени
- со всех файлах переименовать скрипт checksession в adminName
- Создать новый файл в корневой директории checksession.js
- Внутри checkSession содать функцию,у которой будет два аргумента request,response
В теле функции будет браться сессия requets.cookie
Далее будет условие: если userSession === undefined,тогда res.replace('/') - Импортировать checksession в server.js и вызывать созданную функцию во всех запросах,где требуется проверка
Починить список транков
АПИ для редактирования параметра
Для редактирования параметра нужно сделать запрос:
PUT /accounts/{accountID}/customfields/{fieldID}?user_session={значение}
где accountID это идентификатор аккаунта, fieldID идентификатор параметра
и передать в body параметры.
В ответ АПИ возвращает успешный статус сохранения новых данных:
{
status: 200
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }
Если какой-то из параметров неправильный, то АПИ вернёт ошибку:
{
status:400,
message: "Неправильно заполнен один из параметров",
fields: [ "type" ]
}
АПИ для создания параметра
Для создания нового параметра нужно сделать запрос:
POST /accounts/{accountID}/customfields?user_session={значение}
и передать в body параметр name — название нового параметра.
В ответ АПИ возвращает идентификатор нового аккаунта:
{
status: 200,
id: "идентификатор"
}
Форму нового параметра сделать аналогично как форму нового аккаунта на странице аккаунтов или нового пользователя на странице пользователей
Починить форму
Форму аккаунта нужно сделать пошире в десктопной версии и добавить побольше воздуха над формой чтобы не прилипала к хэдеру:
Убери у формы паддинг слева и маржин сверху. Маржин поставь в 0 auto чтобы форма вставала сама по центру. А воздух сверху это верхний паддинг у контейнера в котором лежит форма.
Проверить после мобильную версию. Дополнительно проверить и починить все другие формы.
Страницы пользователей
В сайдбаре сделать пункт "Пользователи" который ведёт на УРЛ /accounts/{accountID}/users. Подумай как эффективнее подставлять id аккаунта в эту ссылку — сайдбар есть на разных страницах и будут другие ссылки кроме пользователей. Страница с пользователями users.html.
Каждый пользователь в списке пользователей — ссылка на УРЛ /accounts/{accountID}/users/{userID}_. Страница с формой пользователя user.html
Поправить форму нового аккаунта
Сброс пароля
1)Табы и кнопку для сброса пароля переместить из account переместить в user.
- Запрос для сброса также удалить из аккаунта и вставить в user
АПИ для создания транка
Для создания нового транка нужно сделать запрос:
POST /accounts/{accountID}/trunks?user_session={значение}
и передать в body параметры:
- name — название
- phone — номер
В ответ АПИ возвращает идентификатор нового транка:
{
status: 200,
id: "идентификатор"
}
Починить форму пользователя
АПИ для получения данных на аккаунт
Для получения списка аккаунтов нужно сделать запрос:
GET /accounts/{id аккаунта}?user_session={значение}
В ответ АПИ возвращает данные:
{
"id": "111",
"name": "Компания"
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }
Убираем удаление транков. Заменяем на отключение
- В ответе от GET /accounts/{id}/trunks у каждого танка теперь приходит параметр active (я закомитил в мастер изменение).
- Если значение этого параметра false, то форму танка нужно задизейблить (нельзя редактировать поля, кнопка «редактировать» неактивна).
- Переименовать кнопки «удалить»: если active true, то кнопка должна быть подписана «отключить». Если active false, то «включить».
- Переделать запрос на удаление — вместо него отправлять запрос на редактирование (параметр active). Если транк был отключен, то включать (отправлять active: true) если был включен, то выключать (отправлять active: false). Потом дизейблить его форму (если было выключение) и переименовывать кнопку.
Переделать пустой список
Страница транков
Страница транков выглядит примерно вот так https://cloudup.com/c3KqQcZwwda
Несколько сценариев:
- При открытии страница сразу запрашивает список транков и выводит их в виде форм у которых сразу есть возможность отредактировать транк или удалить.
- На странице, вверху есть форма для создания нового транка. После создания нового транка он должен добавиться в список существующих транков, а под формой нового транка нужно вывести сообщение об добавлении или ошибке.
- При сохранении транка под ним так же должно выводиться сообщение, что транк сохранён.
- Если пользователь удаляет транк, то над таблицей нужно вывести сообщение, что транк был удалён.
Если что-то непонятно, то задай вопросы и уточни. Если увидел какие-то другие сценарии, которые я тут не описал, то расскажи.
Страница аккаунтов, баг с обработкой ошибок
В обработке ошибок текст ошибки просто выводится. Что будет если это ошибка сессии?
На странице аккаунтов ничего не происходит
Запускаю локальный сервер (без php), открываю страницу аккаунтов и ничего не происходит хотя должна быть ошибка.
Фейковый запрос к АПИ
Формат
Логин (авторизация)
POST-метод. Принимает логин и пароль в виде
{ login: “test_login”, password: “1234” }
Если логин и пароль неверные возвращает ошибку:
{ status: 400, message: “Неверный логин или пароль” }
Если всё правильно, то возвращает md5-токен сессии пользователя:
{ status: 200, session: “fb21257948461a14d065f414762517df” }
Иногда случаются внутренние ошибки (что-то отваливается или баг в коде). Тогда ошибка будет такой:
{ status: 500, message: “Техническая ошибка. Попробуйте позже или обратитесь в поддержку” }
Сценарий для тестов
- Если ввести логин=test и пароль=111, то вернуть токен с сессией
- Если ввести логин=badass и пароль=666, то вернуть техническую ошибку
- Для любых других данных вернуть ошибку неправильных данных
АПИ для чтения данных о пользователе
Для получения юзернейма нужно получить данные об авторизованном пользователе запросом на:
GET /user/{user_session} (user_session это сессия из куки)
Пример ответа:
{ username: "Имя Пользователя" }
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status: 403, message: "Сессия устарела или не создавалась" }
Если АПИ вернёт такую ошибку, то пользователя нужно снова отправить на страницу входа.
АПИ для получения параметра по id
Данные можно получить запросом на:
GET accounts/{accountID}/customfields/{fieldID}?user_session={значение}
Пример ответа:
{
status: 200,
id: '333',
name: 'Тестовый параметр',
list: ['Значение 1', 'Значение 2'],
type: 'select'
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status: 403, message: "Сессия устарела или не создавалась" }
Дополнения к форме редактирования параметра:
- Поле type (тип параметра) должно быть селектом с выбором типа: select - список, multiselect - мультисписок, text - обычный текст;
- Поле list (список значений параметра) должно быть текстареей в которой каждое значение стоит в отдельной строке.
Если тип text, то текстарея для list скрывается
Добавить поле в форму параметра
Маржины поменять на паддинги
Убрать верхние маржины везде, где задаётся отступ сверху. Вместо этого контейнеру-родителю поставить аналогичный паддинг.
Перед правками сначала составить список мест, где это нужно поправить и написать этот список в комментарий к этой задаче
АПИ для получения списка аккаунтов
Для получения списка аккаунтов нужно сделать запрос:
GET /accounts?user_session={значение}
В этом и в остальных методах АПИ сессия обязательный параметр и передаётся всегда в строке запроса (query_string).
В ответ АПИ возвращает список аккаунтов:
{
"items": [
{
"id": "111",
"name": "Компания"
},
{
"id": "222",
"name": "Другая компания"
}
]
}
У каждого аккаунта есть параметр id для ссылки и название для подписи ссылки.
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }
Проверить на АПИ
Заменить фейковые эндпоинты:
- Логин на POST https://fake-admin-api.glitch.me/login
- Данные о пользователе на GET https://fake-admin-api.glitch.me/users/{session}
- Список аккаунтов на GET https://fake-admin-api.glitch.me/accounts?user_session={session}
Проверить работу страниц на них.
АПИ для удаления транка
Чтобы удалить транк нужно сделать запрос:
DELETE /accounts/{accountID}/trunks/{trunkID}?user_session={значение}
где accountID это идентификатор аккаунта и trunkID это идентификатор транка.
В ответ АПИ возвращает успешный статус удаления:
{
status: 200
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }
Убрать ячейки у таблиц списков в мобильной версии
Проверка сессии
-
Создать user.js
-
Положить проверки куки в user.js
- Если кука есть и на корне - редайрект на /accounts/ иначе - запросить пользователя и сохранить в переменную данные о нем
- Если нет - редайрект на корень
-
Подключить user.js в остальные скрипты
-
Выпилить проверку куки и запрос данных о пользователе из остальных скриптов
АПИ для получения списка транков
Чтобы получить список транков нужно сделать запрос:
GET /accounts/{accountID}/trunks?user_session={значение}
где accountID это идентификатор аккаунта.
В ответ АПИ возвращает успешный статус и список пользователей:
{
status: 200,
items:[
{
id: '111',
phone: '+77783452111',
name: 'Facebook'
},
{
id: '222',
phone: '+77783452222',
name: 'Instagram'
},
]
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }
Транки
- Задать минимальную ширину для кнопки вкл/выкл
- Переделать функцию checkBtn
Bootstrap 4
- Make a migration of :
- Accounts page
- Account page
- Users page
- User page
- Customfields page
- Customfield page
Таблицы для списков
1)Списки accounts,users,customfields,trunks сделать таблицей (из бутстрапа).
-
В заголовке таблице должны быть: № и Название(аккаунта,транка,параметера)/Имя пользователя
-
В ячейках: нумерация и сам список
Убрать левый отступ
Баг с сохранением транков
- Убрать перезапись innerHtml при добавлении транка
2)Убрать перезапись innerHtlm при сохранении транка. (добавление сообщения "сохранено")
АПИ для создания аккаунта
Для создания нового аккаунта нужно сделать запрос:
POST /accounts?user_session={значение}
и передать в body параметр name — название нового аккаунта.
В ответ АПИ возвращает идентификатор нового аккаунта:
{
status: 200,
id: "идентификатор"
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }
Если не заполнить параметр name, то АПИ вернёт ошибку:
{ status:400, message: "Название аккаунта не заполнено" }
Формы
- Поправить форму на странице аккаунтов
- Разобраться с кнопками на формах которые разъезжаются
АПИ для редактирования транка
Для редактирования транка нужно сделать запрос:
PUT /accounts/{accountID}/trunks/{trunkID}?user_session={значение}
где accountID это идентификатор аккаунта, trunkID идентификатор пользователя
и передать в body параметры.
В ответ АПИ возвращает успешный статус сохранения новых данных:
{
status: 200
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }
Если какой-то из параметров неправильный, то АПИ вернёт ошибку:
{
status:400,
message: "Неправильно заполнен один из параметров",
fields: [ "phone" ]
}
АПИ для получения списка параметров
Чтобы получить список параметров нужно сделать запрос:
GET /accounts/{accountID}/customfields?user_session={значение}
где accountID это идентификатор аккаунта.
В ответ АПИ возвращает успешный статус и список параметров:
{
status: 200,
items:[
{
id: '111',
name: 'Пол',
},
{
id: '222',
name: 'Возраст',
}
]
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }
АПИ для получения профиля пользователя
Для получения профиля нужно получить данные о пользователе запросом на:
GET accounts/{accountID}/users/{userID}?user_session={значение}
Пример ответа:
{
status: 200,
id: '111',
name: 'Иван',
phones: ['+77771234567', '+77785553311'],
type: 'manager',
email:'[email protected]'
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status: 403, message: "Сессия устарела или не создавалась" }
Дополнения к форме редактирования профиля:
- Поле type (тип пользователя) должно быть селектом с выбором типа пильзователя: boss - начальник, manager - менеджер;
- Поле phones (номера телефонов) должно быть текстареей в которой каждый номер стоит в отдельной строке
Страница аккаунта
Страница аккаунта:
- Меню навигации (как на странице со списком аккаунтов)
- Сайдбар слева с пунктами меню
- Форма
АПИ для редактирования профиля пользователя
Для редактирования профиля пользователя нужно сделать запрос:
PUT /accounts/{accountID}/users/{userID}?user_session={значение}
где accountID это идентификатор аккаунта, userID идентификатор пользователя
и передать в body параметры.
В ответ АПИ возвращает успешный статус сохранения новых данных:
{
status: 200
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }
Если какой-то из параметров неправильный, то АПИ вернёт ошибку:
{
status:400,
message: "Неправильно заполнен один из параметров",
fields: [ "type" ]
}
АПИ для редактирования аккаунта
Для редактирования аккаунта нужно сделать запрос:
PUT /accounts/{accountID}?user_session={значение}
где accountID это идентификатор аккаунта и передать в body параметры.
В ответ АПИ возвращает успешный статус сохранения новых данных:
{
status: 200
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }
Если какой-то из параметров неправильный, то АПИ вернёт ошибку:
{
status:400,
message: "Неправильно заполнен один из параметров",
fields: [ "maxWaitingTime" ]
}
Сообщение о сохранении транка
- Сделать сохранение по-другому
Старый код
- Разбить старый код на блоки для удобства чтения кода
Доработки
-
Починить сайдбар. Id аккаунта это не только цифры, но и буквы (например вот такой 59c28264ee2f750c5848fdef)
-
Параметры время ожидания и время разговора приходят с сервера в милисекундах. Нужно конвертировать их в секунды при получении и обратно в миллисекунды при сохранении
-
Время разговора теперь называется maxConversationTime. Раньше назывался maxAnswerTime, нужно переименовать в форме
-
Добавить в форму аккаунта поля:
- Этапы воронки (параметр funnelSteps) — массив со ст
роками. Работать как с номерами телефонов у юзера - Причины для нецелевых (параметр noTargetReasons) — тоже массив со строками
Страницы параметров
В сайдбаре сделать пункт "Параметры" который ведёт на УРЛ /accounts/{accountID}/customfields. Страница с пользователями customfields.html.
Каждый параметр в списке пользователей — ссылка на УРЛ /accounts/{accountID}/customfields/{fieldID}. Страница с формой параметра customfield.html
АПИ для получения списка пользователей
Чтобы получить список пользователей нужно сделать запрос:
GET /accounts/{accountID}/users?user_session={значение}
где accountID это идентификатор аккаунта.
В ответ АПИ возвращает успешный статус и список пользователей:
{
status: 200,
items:[
{
id: '111',
name: 'Иван'
},
{
id: '222',
name: 'Арай'
},
{
id: '333',
name: 'Елена'
},
]
}
Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }
Шапка
- Шапку сделать аналогично сайдбару. Создать:
- Создать header.js
- Элементы шапки вставить в header.js
- Подключить header.js на все страницы,кроме страницы логина
АПИ для создания пользователя
Для создания нового аккаунта нужно сделать запрос:
POST /accounts/{accountID}/users?user_session={значение}
и передать в body параметр name — имя нового пользователя.
В ответ АПИ возвращает идентификатор нового аккаунта:
{
status: 200,
id: "идентификатор"
}
Форму нового пользователя сделать аналогично как форму нового аккаунта на странице аккаунтов
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.