Giter Site home page Giter Site logo

ms-admin's Introduction

ms-admin

ms-admin's People

Contributors

catindev avatar exoriri avatar

Watchers

 avatar

ms-admin's Issues

Сброс пароля

  • Добавить два таба:
    Настройки,Сброс пароля.
    В настройках должны сделанные настройки аккаунта
    В вкладке "сброс пароля",кнопка:Сбросить пароль

  • Для сброса пароля нужно сдалать запрос:
    GET /accounts/{accountID}/resetPassword?user_session={значение}

    АПИ должно возвратить
    { status: 200, password: "1asdf88asfd4afs3"}

  • После получения ответа вывести сообщение:
    Пароль сброшен.
    Новый пароль:1asdf88asfd4afs3

Оживить форму создания аккаунта

Поправить форму

  • Поправить подпись "Добавить аккаунт". Заменить на "Новый аккаунт";
  • Добавить к полю плейсхолдер "название аккаунта";
  • Добавить в форму режим прелоадера — пока обрабатывается запрос (запрос отправлен, но ответ ещё не пришёл) нужно задизейблить форму и кнопку "Добавить" переименовать в "Добавляем.."

Сценарий
Когда пользователь заполняет поле и жмёт на кнопку, то отправляем запрос на новый эндпоинт POST /accounts. Если ответ успешный и возвращает id, то сделать редирект на страницу нового аккаунта.

Проверка сессии

  1. Переименовать checksession.js в adminName.js
  2. В adminName.js убрать все условия,оставить только запрос на получение имени
  3. со всех файлах переименовать скрипт checksession в adminName
  4. Создать новый файл в корневой директории checksession.js
  5. Внутри checkSession содать функцию,у которой будет два аргумента request,response
    В теле функции будет браться сессия requets.cookie
    Далее будет условие: если userSession === undefined,тогда res.replace('/')
  6. Импортировать 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: "идентификатор"
}

Форму нового параметра сделать аналогично как форму нового аккаунта на странице аккаунтов или нового пользователя на странице пользователей

Починить форму

Форму аккаунта нужно сделать пошире в десктопной версии и добавить побольше воздуха над формой чтобы не прилипала к хэдеру:
image

Убери у формы паддинг слева и маржин сверху. Маржин поставь в 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). Потом дизейблить его форму (если было выключение) и переименовывать кнопку.

Переделать пустой список

Сейчас вот так

image

Нужно поменять. Пусть будет блок с текстом по центру и верхней рамкой. Вот такой:

image

Сделать во всех списках.

Страница транков

Страница транков выглядит примерно вот так https://cloudup.com/c3KqQcZwwda

Несколько сценариев:

  • При открытии страница сразу запрашивает список транков и выводит их в виде форм у которых сразу есть возможность отредактировать транк или удалить.
  • На странице, вверху есть форма для создания нового транка. После создания нового транка он должен добавиться в список существующих транков, а под формой нового транка нужно вывести сообщение об добавлении или ошибке.
  • При сохранении транка под ним так же должно выводиться сообщение, что транк сохранён.
  • Если пользователь удаляет транк, то над таблицей нужно вывести сообщение, что транк был удалён.

Если что-то непонятно, то задай вопросы и уточни. Если увидел какие-то другие сценарии, которые я тут не описал, то расскажи.

Фейковый запрос к АПИ

Формат

Логин (авторизация)

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: "Ошибка аутентификации" }

АПИ для удаления транка

Чтобы удалить транк нужно сделать запрос:
DELETE /accounts/{accountID}/trunks/{trunkID}?user_session={значение}
где accountID это идентификатор аккаунта и trunkID это идентификатор транка.

В ответ АПИ возвращает успешный статус удаления:

{
    status: 200
}

Если сессия будет устаревшей, то АПИ вернёт ошибку:
{ status:403, message: "Ошибка аутентификации" }

Проверка сессии

  1. Создать user.js

  2. Положить проверки куки в user.js

  • Если кука есть и на корне - редайрект на /accounts/ иначе - запросить пользователя и сохранить в переменную данные о нем
  • Если нет - редайрект на корень
  1. Подключить user.js в остальные скрипты

  2. Выпилить проверку куки и запрос данных о пользователе из остальных скриптов

АПИ для получения списка транков

Чтобы получить список транков нужно сделать запрос:
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 :
    1. Accounts page
    2. Account page
    3. Users page
    4. User page
    5. Customfields page
    6. Customfield page

Таблицы для списков

1)Списки accounts,users,customfields,trunks сделать таблицей (из бутстрапа).

  • В заголовке таблице должны быть: № и Название(аккаунта,транка,параметера)/Имя пользователя

  • В ячейках: нумерация и сам список

Убрать левый отступ

Убери вот этот пенёк. Глаз мозолит ппц
image

Пусть первый пункт меню стразу вверху стоит

Баг с сохранением транков

  1. Убрать перезапись 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" ]
}

Старый код

  • Разбить старый код на блоки для удобства чтения кода

Доработки

  1. Починить сайдбар. Id аккаунта это не только цифры, но и буквы (например вот такой 59c28264ee2f750c5848fdef)

  2. Параметры время ожидания и время разговора приходят с сервера в милисекундах. Нужно конвертировать их в секунды при получении и обратно в миллисекунды при сохранении

  3. Время разговора теперь называется maxConversationTime. Раньше назывался maxAnswerTime, нужно переименовать в форме

  4. Добавить в форму аккаунта поля:

  • Этапы воронки (параметр funnelSteps) — массив со ст
    роками. Работать как с номерами телефонов у юзера
  • Причины для нецелевых (параметр noTargetReasons) — тоже массив со строками
  1. Ещё в списке полей у аккаунта приходят author (автор) и created (дата создания). Нужно под заголовок формы аккаунта добавить строчку "Подключил Имя_автора Дата_создания". Вот так:
    pic

Страницы параметров

В сайдбаре сделать пункт "Параметры" который ведёт на УРЛ /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: "Ошибка аутентификации" }

Шапка

  • Шапку сделать аналогично сайдбару. Создать:
    1. Создать header.js
    2. Элементы шапки вставить в header.js
    3. Подключить header.js на все страницы,кроме страницы логина

АПИ для создания пользователя

Для создания нового аккаунта нужно сделать запрос:
POST /accounts/{accountID}/users?user_session={значение}
и передать в body параметр name — имя нового пользователя.

В ответ АПИ возвращает идентификатор нового аккаунта:

{
   status: 200,
   id: "идентификатор"
}

Форму нового пользователя сделать аналогично как форму нового аккаунта на странице аккаунтов

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.