Мобильное приложение информационной системы общественного контроля

Снижение сроков принятия решений контрольно-надзорными органами, обеспечение их публичной подотчетности. Разработка архитектуры мобильного приложения для информирования гражданами уполномоченных государственных органов. Требования к мобильному приложению.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.08.2018
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.Allbest.ru/

Размещено на http://www.Allbest.ru/

Федеральное агентство связи

Федеральное государственное бюджетное образовательное учреждение высшего образования

Поволжский государственный университет телекоммуникаций и информатики

Факультет информационных систем и технологий

Направление (специальность): Информатика и вычислительная техника

Кафедра информатики и вычислительной техники

Выпускная квалификационная работа (бакалаврская работа)

Тема:

Мобильное приложение информационной системы общественного контроля

Разработал С.В. Беляев

студент группы ПО-32

Руководитель ст. преп.

Е.С. Карташевская

Самара 2017

ЗАДАНИЕ

по подготовке выпускной квалификационной работы

Студента Беляева Сергея Владимировича

Тема ВКР «Мобильное приложение информационной системы общественного контроля»

Утверждена приказом по университету от 3.04.2017 №74-2

Исходные данные и постановка задачи

1) Изучение теоретического материала для разработки мобильного приложения

2) Проектирование архитектуры приложения

3) Разработка приложения

Перечень подлежащих разработке в ВКР вопросов или краткое содержание ВКР

1) Изучить теоретический материал

2) Разработать архитектуру мобильного приложения

3) Реализовать приложение, согласно архитектуре

4) Произвести тестирование приложения

Перечень графического материала

Презентационный материал

Дата выдачи задания «» 2017 г.

Кафедра Информатики и вычислительной техники

Утверждаю зав. кафедрой д.т.н., проф. Н.Ф. Бахарева

Руководитель ст. преп. Е.С. Карташевская

Задание принял к исполнению ПО-32 С.В. Беляев

Введение

С аварийным состоянием дорог, недостаточным качеством жилищных коммуникаций сталкивается практически каждый человек. Чтобы хоть как-то исправить ситуацию приходиться стучаться во все инстанции, стоять в очередях в кабинеты и разбираться в бюрократических тонкостях тех или иных муниципальных служб.

Актуальность работы заключается в автоматизации процессов общественного контроля.

Предметом является разработка мобильного приложения информационной системы общественного контроля.

Объектом является процесс разработки мобильного приложения.

Целью является разработка приложения для простого и своевременного информирования гражданами уполномоченных государственных органов; повышение прозрачности работы контрольно-надзорных органов, обеспечения их публичной подотчетности; снижение сроков принятия решений и проведения мероприятий, направленных на ликвидацию нарушений в различных сферах деятельности.

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

Методология разработки - изучение и анализ источников из интернета.

Работа состоит из введения, трех глав и заключения.

В первой главе рассматриваются готовые решения, ставится задача и требования к мобильному приложению.

Во второй главе рассматривается API серверной части системы контроля

В третьей главе рассматривается готовое приложение

В заключение подводятся итоги, рассматривается достижение поставленных перед работой целей и задач, а также формируется вывод.

1. Описание мобильного приложения системы общественного контроля

1.1 Понятие общественного контроля

Общественный контроль [1]: это осуществляемый гражданами, институтами гражданского общества - средствами массовой информации, политическими партиями, общественными объединениями, профсоюзами комплекс различных мер по наблюдению и проверке деятельности органов государственной власти и органов местного самоуправления, в целях принуждения власти к обеспечению соблюдению закона, ответственному и, как следствие, компетентному исполнению своих обязанностей.

Мировой опыт учит, что общественный контроль выгоден как обществу, так и государственной власти. Действительно, он заставляет государство быть ответственным - обеспечивать работу закона, уважать и защищать права и свободы человека, а, следовательно, эффективно действовать на общее благо. Общественный контроль выгоден и самому государству, так как стимулирует его все время совершенствоваться.

Во-первых, он выступает как воздействующая сила, побуждающая государственных служащих устоять от бесчисленных соблазнов и искушений, которые всегда стоят перед ними в силу природы власти. Благодаря давлению общественного контроля чиновники корректирует свои действия, становясь ответственными и, как следствие, компетентными.

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

В-третьих, мотивируя государство работать эффективно, общественный контроль обеспечивает тем самым доверие к нему и поддержку граждан. Опираясь на поддержку общества, компетентная власть берет за основу конструктивные предложения граждан и проводит в стране необходимые реформы.

Все это способствует созданию и развитию конкурентоспособной экономики, росту жизненного уровня народа, формированию сильного гражданского общества, укреплению национальной безопасности, повышению качества человеческого капитала. В конечном итоге, страна становится сильной, эффективной и процветающей, что и отражает ее национальные интересы.

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

В рамках данной работы заявлением называется текст с приложенными к нему фото- и/или видео-материалами. Заявления описывают проблемы и нарушения, подлежащие рассмотрению контролирующими органами в той или иной сфере деятельности. Заявления формируются пользователями системы.

1.2 Обзор готовых решений

Самой распространённой мобильной платформой (более 80% от проданных устройств [2]) на данный момент является Android.

Самой большой системой распространения и дистрибьюции ПО для платформы Android является Google Play.Market. В результате поиска в Play.Market и анализе готовых решений было выбрано приложение «Наш Санкт-Петербург.

Самая важная составляющая проекта - это пользовательские сообщения.

Открыв приложение “Наш Санкт-Петербург” можно ознакомиться с тем, какие действия можно выполнить в приложении (рис 1.1).

Рис. 1.1 - Главный экран приложения «Наш Санкт-Петербург»

При клике на «Все сообщения» мы можем увидеть список опубликованных сообщений всех пользователей с кратким описанием проблемы, фото, статусом заявки (рис. 1.2).

Рис. 1.2 - Экран «Все сообщения»

При клике на любое сообщение из списка открывается окно детальной информации по данному сообщению (рис 1.3), в верхней части экрана под тулбаром можно изменить тип просмотра на один из 3 имеющихся.

Рис. 1.3 - Экран детальной информации

Также можно попробовать создать заявку (рис. 1.4), заполнив поле с описанием проблемы и прикрепив фотографию

Рис. 1.4 - Экран создания сообщения

Таким образом приложение “Наш Санкт-Петербург” отлично справляется с задачей подачи и обработки заявок, но также имеет ряд недостатков:

· Территориальную ограниченность (не может быть использовано повсеместно, только в одном городе)

· Сложную систему категорий сообщений

Также в процессе использования было выявленно, что данное приложение имеет низкий User Experience [3], пользоваться приложением не удобно.

В связи с этим было принято решение создать и отладить систему, включающую в себя веб-портал (подробности реализации портала в ВКР рассмотрены не будут) и мобильное приложение, для формирования заявлений (сообщений, обращений) с последующим отслеживанием пользователем изменения процессинговых стадий заявления (новое, на рассмотрении, в работе, завершено, отклонено и т.д.);

2. Разработка мобильного приложения

2.1 Подбор платформы, материала

Платформа Android является хорошо поддерживаемой и документируемой системой с открытым исходным кодом. Множество новых компонентов, внедряемых в последних версиях SDK, доступны и могут быть использованы на более ранних версия платформы, за счёт пакета совместимости Android Support Repository [4].

Несмотря на вышеизложенное, некоторые компоненты Android Support Repository могут требовать более высокой версии SDK. Андроид, также как и язык Java, на котором в основном и ведётся разработка под Андроид, является обратно совместимым, т.е. приложения написанные для более ранних версий AndroidSDK также будут работать и для устройств с более свежей версией прошивки.

Выбор минимально поддерживаемой версии SDK для проекта определяет количество (процент) устройств, на которых приложение сможет работать. В AndroidStudio (при создании проекта) и на сайте Android Developers можно посмотреть какой процент поддерживаемых устройств вы покроете, выбрав ту или иную версию API[5]. Данные о количестве смартфонов и версии API Согласно Android-guidelines [6] хорошей практикой является поддержка 90% устройств и более.

Было принято решение выбрать минимально поддерживаемой версией [7] для конечных устройств Android 4.0 (ICE_CREAM_SANDWICH, SDKv14), что обеспечивает совместимость с существующими на рынке устройствами в 99% случаев [7].

Таким образом, приложение возможно запустить практически на любом устройстве на платформе Android. Ограничения по типу устройства (планшет/смартфон) отсутствуют.

2.2 Определение сущностей приложения

Для начала нужно дать определение сущностям, используемым в рамках приложения.

Главной сущностью приложения являются пользовательские обращения. Обращение содержит:

· Текст обращения

· Подтверждающие приложения (фото/видео материал)

Заявки (обращения, сообщения) создаются пользователями, затем обрабатываются исполнительными органами

Профиль (аккаунт) - пара логин/пароль, бывают 2-х видов пользователь/инспектор. Пользователи могут зарегистрироваться сами, инспекторов может зарегистрировать только пользователь с правом регистрации инспектора(н-р Нач. управления регионального органа)

Регион - сущность для определения местоположения заявителя(пользователя), также используется в рейтинге регионов(статистика, аналитика). Регионы содержат в себе список населенных пунктов.

Населенный пункт - то же что и регион, более мелкая структурная единица

Контент приложения - заявки, статистика по заявкам. Дополнительной функцией являются новости.

2.3 Серверная часть

В рамках ВКР будут рассмотрены только API серверной части, подробности реализации логики серверной части рассмотрены не будут.

Клиент-серверное взаимодействие [8] [9] реализовано путём вызова методов сервера из приложения-клиента.

Необходимые данные будут передаваться в формате JSON[10] посредством HTTP-запросов к серверу

Запросы могут быть как авторизованными(для большинства экранов), так и неавторизованными(для экранов авторизации/регистрации).

Приложение строится на основе запросов к API.

2.4 Описание API, примеры запросов

Общее описание

Все пути указаны относительно базового пути сервера.

Формат всех ответов:

{

statusCode: INT,// Статус ответа. Содержит код ошибки.

// 0 - успешное выполнение.

statusMessage: STRING,// Содержит дополнительное сообщение

ошибки.

response: OBJECT// Объект ответа.

}

Ниже в описании методов приведены примеры содержимого поля response.

Идентификатор сессии передается в заголовке Auth-token.

Стоит отличать {} и null - первое это объект без полей, второе это ничто.

В методах для работы с датами используется UnixTimestamp [11] представление дат, а именно количество миллисекунд с 1 января 1970 года (LONG). Пример: 946684800000 (1 января 2000г.)

Таблица 2.1

Общий список кодов ошибок

Code

Message

Описание

100

имя поля

Отсутствует обязательное поле.

101

LOGIN_EMPTY

Отсутствует логин.

102

PASSWORD_EMPTY

Отсутствует поле пароля.

103

EMAIL_EMPTY

Отсутствует поле почты.

104

FIRST_NAME_EMPTY

Отсутствует имя пользователя.

105

LAST_NAME_EMPTY

Отсутствует фамилия пользователя.

111

Company name not be null

Отсутствует название компании

112

Company orgn not be null

Отсутствует регистрационный номер компании.

121

Application id not be null

Отсутствует id сообщения.

122

Source system code no be null

Отсутствует код системы.

123

Description not be null

Отсутствует описание.

124

Category not be null

Отсутствует категория сообщения..

131

Place not be null

Отсутствует местоположение..

132

Place.FederalDistrict not be null

Отсутствует Федеральный округ..

133

Place.Subject not be null

Отсутствует субъект федерации.

141

Comment id not be null

Отсутствует id комментария.

142

File id not be null

Отсутствует id файла вложения.

151

Header messages not be null

Отсутствует заголовок обращения. (Обратная связь)

152

Messages not be null

Отсутствует текст обращения. (Обратная связь)

153

Username not be null

Отсутствует имя пользователя (Обратная связь)

200

имя поля

Невалидное значение.

201

INVALID_LOGIN

Невалидное значение поля “логин”.

202

INVALID_PASSWORD

Невалидное значение поля “пароль”.

203

INVALID_EMAIL

Невалидное значение поля email.

204

INVALID_PHONE_NUMBER

Невалидное значение телефонного номера.

205

INVALID_FIRST_NAME

Невалидное значение поля имени.

206

INVALID_LAST_NAME

Невалидное значение поля фамилии.

207

INVALID_MIDDLE_NAME

Невалидное значение поля отчества.

211

Invalid source system code.

Невалидное значение кода платформы.

212

Exceeded description size

Превышен допустимый размер описания.

213

Exceeded title size

Превышен допустимый размер заголовка.

221

Exceeded header messages size

Превышен допустимый размер заголовка. (Обратная связь)

222

Exceeded username messages size

Превышен допустимый размер имени пользователя. (Обратная связь)

231

Invalid file!

Невалидный файл. (Загрузка файлов)

232

Invalid file extension!

Невалидное расширение файла. (Загрузка файлов).

233

Photo is too large!

Превышен допустимый размер фото. (Загрузка файлов).

234

Video is too large!

Превышен допустимый размер видео. (Загрузка файлов).

235

File type is not image!

Файл не является изображением. (Выгрузка изображения с изменение размера)

300

NO_SUCH_USER

Ошибка авторизации.

301

Access Denied!

Доступ запрещен.

311

Login is already exists

Такой логин уже используется.

312

Phone number is already exists

Такой номер телефона уже используется.

313

Email is already exists

Такой email уже используется.

321

Category not exist in database.

Категория отсутствует в БД.

322

Application no status a draft

Сообщение не является черновиком. (Удаление)

323

Original application not exist in database.

Первичная заявка отсутствует в БД.

324

Attachments must be one or more

Должно быть не менее 1 вложения.

331

Federal District not exist in database.

Федеральный округ отсутствует в БД.

332

Subject RF not exist in database.

Субъект РФ отсутствует в БД,

333

Subject RF not exist in this Federal District.

Субъект РФ не связан с Федеральным округом.

400

INVALID_JSON

Не валидный JSON

401

Session not found!

Пользовательская сессия не найдена.

402

User not found!

Пользователь не найден.

403

Individual not found!

Расширение пользователя не найдено. (Скорее всего ошибка в БД).

404

Зарезервирована за стандартной ошибкой “Страница не найдена”.

405

News not found!

Новость не найдена.

406

File not found!

Файл не найден

407

No active tasks found!

Нет активных задач.

408

Application identifier not found!

Id сообщения не найден.

409

Application number not found!

Номер сообщения не найден.

420

Code not found!

Код не найден. (Активация профиля)

421

User with this token not found or already activated!

Токен активации не найден (возможно, пользователь уже активен).

422

User with this email token not found or token obsolete!

Токен активации email не найден. (Возможно, почта уже активна).

423

Email not found.

Почтовый адрес не найден.

424

User is already verified

Пользователь уже подтвержден.

425

Reset token not found or already used

Токен восстановления не найдет

500

Внутренняя ошибка сервера.

501

Ошибка при выполнении метода.

502

Error in database.

Невалидные данные в БД. (Скорее всего устаревшие данные).

503

Range param error!

Ошибка byte-range support'a

Появление следующих ошибок возможно во всех методах API:400, 500, 501, 502

Аутентификация

Аутентификация пользователя

Метод: POST/security/signin

Модель запроса:

{

login: STRING,// логин

password: STRING,// пароль

longLife: BOOLEAN// длинную ли сессию создавать

}

Модель ответа: Сессия

Пример ответа:

{

"sessionId": "f65c511b-5805-6f5f-b79e-8346fcccc391",

“active”: false

}

Коды ошибок: 100, 300

Закрытие сессии

Запрос на завершение активной пользовательской сессии.

Метод: GET/security/signout

Header:

Auth-Token: STRING(Обязательное поле)

Сессия определяется по id (Auth-token)

В случае успеха ответ не содержит дополнительных объектов.

Коды ошибок: 300

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

Запрос на проверку активности сессии.

Метод:

POST/security/check

Header:

Auth-Token: STRING (обязательное поле)

Модель ответа:

{

"active": BOOLEAN // активна ли сессия

}

Восстановление пароля

Запрос на восстановление пароля пользователя.

Метод:

POST/security/recoverPassword

Модель запроса:

{

email: STRING // почта на которую нужно выслать новый пароль.

}

На указанную почту приходит сообщение с ссылкой на восстановление пароля.

При переходе по ссылке откроется окно с полем для ввода нового пароля.

Если пользователь уже сменил пароль или снова отправил запрос на восстановление пароля, то данный токен будет недействителен.

Коды ошибок: 100, 200, 423

Восстановление пароля (сохранение)

Метод сохранения нового пароля.

После заполнения формы смены пароля необходимо вызвать этот метод.

Метод: POST/security/changePassword

Модель запроса:

{

newPassword: STRING,// новый пароль

resetToken: STRING// токен в ссылке на страницу с вводом нового

пароля

}

Модель ответа:Сессия

Коды ошибок: 425

Методы работы с обращениями

Получение категорий

Все обращения категоризированны, получить список доступных категорий можно при помощи следующего метода.

Метод: GET/api/application_category

Модель ответа:

{

categories:// список категорий

[

{

id: STRING,// idкатегории

name: STRING// наименование категории

},

]

}

Пример ответа:

"categories":[

{

"id": "aca48aff-4008-f27c-84e6-6d10ba771dc2",

"name": "Несанкционированный сброс твердых бытовых отходов"

},

{

"id": "23c6aead-1d10-f348-b9bf-ec74a2868560",

"name": "Нарушение покрытия дорожного полотна"

}

]

Создание обращения

Добавление нового сообщения о проблеме или нарушении.

Методы:

POST/api/application - создание сообщений.

POST/api/application/createAndSend - создание и отправка сообщения на

модерацию.

Header:

Auth-Token: STRING(Обязательное поле)

Модель запроса:

{

title: STRING,// заголовок

description: STRING,// текст сообщения

originalApplicationId: UUID,// В случае связанных заявок

categoryId: UUID,// idкатегории

sourceSystem: {// платформа

code: STRING// код платформы

},

place: {// место

address: STRING,// адрес

latitude: NUMBER(10,7),// широта

longitude: NUMBER(10,7),// долгота

federalSubjectId: UUID,// федеральный округ

subjectId: UUID,// федеральный субъект

municipalityName: UUID// муниципалитет

},

attachmentIds: [STRING,.. STRING]// вложения

}

Поле “code” принимает следующие значения: “MOBILE” / ”WEB” / ”CORE”

latitude, longitude - числа с дробной частью и точкой в качестве разделителя

regionId - существующий идентификатор региона

Модель ответа: Заявка

Коды ошибок: 100, 200, 301, 321 323, 331, 332, 333

Получение обращения

Методы получения данных одного конкретного сообщения (загрузки) по номеру или по id этого сообщения.

Методы:

GET/api/application?id=####-###-###-#####// загрузка по id

GET/api/application/number/{number}// загрузка по номеру

id: UUID // id заявки

number: INT// номер сообщения.

Header:

Auth-Token: STRING

Модель ответа:Заявка

Коды ошибок:301

Отправка обращения

Отправляет сообщение на модерацию.

Метод:

POST/api/application/send

Header:

Auth-Token: STRING

Модель запроса:

{

id: UUID//id заявки

}

Модель ответа: Заявка

Коды ошибок:100

Выполнение действий над обращением

Выполнение бизнес-процессов.

Метод:

POST/api/application/action

Модель запроса:

{

id: UUID, // id заявки

action: String,// действие

comment: Комментарий// объект комментария

}

Пример запроса:

{

id: “15aa3a0b-1f33-4b0d-84a0-a26484d40967“,

action: “Подтвердить”,

comment: {

content: “Всё верно изложено”,

"attachments":[

{"id":"6b2a518e-ff2e-a34e-bc36-1b71c1319436"},

....]

}

}

Модель ответа:

{

successful: true/false

}

Коды ошибок:100, 341, 407

Добавить обращение в избранное

Добавление сообщения в список избранных и исключение его из этого списка.

Методы:

POST/api/application/favorite -добавить в избранное.

POST/api/application/unfavorite - исключить из избранного.

Модель запроса:

{

id: UUID//id заявки

}

Модель ответа:

{

favorite: BOOLEAN

}

true - сообщение успешно добавлено в избранное (или уже находится в избранном).

false - сообщение успешно удалено из избранного.

Коды ошибок: 100, 401, 402, 403

Присоединится к обращению

Методы:

POST /application/like// Присоединится

POST /application/unlike // Отсоединится

Модель запроса:

{

id: UUID//id заявки

}

Модель ответа:

{

like: true/false // При отсоединении приходит false

likesCount: INTEGER// кол-во голосов

}

Список обращений (поиск)

Метод:POST /application/find

Модель запроса:

{

limit: INTEGER,// кол-во записей (max: 1000)

offset: INTEGER,// с какой записи искать

mine: BOOLEAN,// только собственные (обязательна авторизация)

applicationId: UUID,// id обращения

applicationNumber: STRING,// уникальный номер обращения (или часть

номера)

federalSubjectId: UUID,// ф. округ

subjectId: UUID,// субъект РФ

municipalityId: UUID,// муниципалитет

categoryId: UUID,// idкатегории

createdFrom: LONG,// начало временного интервала создания

обращения

createdTill: LONG,// конец временного интервала создания обращения

orderby: STRING,// критерий сортировки

groupId: STRING,// inbox - поиск обращений со статусами 20 и 100 и др.

likes: INTEGER,// количество лайков у сообщения

square: {// прямоугольник координат

topLat: DOUBLE,

leftLong: DOUBLE,

bottomLat: DOUBLE,

rightLong: DOUBLE

}

}

Модель ответа:

{

total: INTEGER,// общее кол-во найденных обращений

applications: [Заявка]// список найденных обращений

}

Таблица 2.2

Критерии сортировки

Code

Message

по умолчанию

По умолчанию обращения сортируются по дате изменения.

category_and_createTs

Сортировка по двум параметрам.

Первый:Сначала идут “требующие редактирования”, затем “требующие подтверждения”, затем черновики, отправленные, опубликованные, на рассмотрении, в работе, запланированные, отклонённые.Второй: внутри первой сортировки обращения сортируются по дате создания.

category_and_updateTs

Сортировка по двум параметрам.

Первый:Сначала идут “требующие редактирования”, затем “требующие подтверждения”, затем черновики, отправленные, опубликованные, на рассмотрении, в работе, запланированные, отклонённые.Второй: внутри первой сортировки обращения сортируются по дате изменения.

Таблица 2.3

Коды ошибок

Code

Message

Описание

100

имя поля

пустое обязательное поле

200

имя поля

невалидное значение

Выгрузка сообщения в xml [12]

Метод:

POST /application/export

Модель запроса:

{

limit: INTEGER,//кол-возаписей (max: 1000)

offset: INTEGER,//с какой записи искать

mine: BOOLEAN,//только собственные (обязательна авторизация)

applicationId: UUID,//id обращения

applicationNumber: STRING,//уникальный номер обращения (или часть

номера)

federalSubjectId: UUID,//ф. округ

subjectId: UUID,//субъект РФ

municipalityId: UUID,// муниципалитет

categoryId: UUID,// id категории

createdFrom: LONG,// начало временного интервала создания

обращения

createdTill: LONG,// конец временного интервала создания обращения

orderby: STRING, // критерий сортировки

groupId: STRING// inbox - поиск обращений со статусами 20 и 100 и др.

square: {// прямоугольник координат

topLat: DOUBLE,

leftLong: DOUBLE,

bottomLat: DOUBLE,

rightLong: DOUBLE

}

}

Критерии сортировки: см. табл. 2.2

Модель ответа:

В случае успеха отдается файл в формате xml[9].

Удаление обращения

Метод:

DELETE /application/{id}

Пример запроса: /application?id=e67777a2-86ea-1a19-8a4f-4b52b6d65f40

Модель ответа:

В случае успеха ответ не содержит дополнительных объектов

Пользователь должен быть авторизован.

Удаляется обращение только в статусе черновик.

Добавление комментария

Метод: POST /application/{applicationId}/comment

Модель запроса:

Комментарий

Модель ответа:

В случае успеха ответ не содержит дополнительных объектов

Коды ошибок: см. табл. 2.3

Методы работы с профилем

Регистрация и редактирование профиля

Осуществляет регистрацию нового пользователя и изменение данных профиля уже существующего пользователя.

Методы:

POST/api/profile- регистрация

PUT/api/profile - редактирование

Модель запроса:

{

login: STRING,// логин заявителя

email: STRING,// адрес ел. почты заявителя

phoneNumber: STRING,// телефонный номер заявителя

firstName: STRING,// имя

lastName: STRING,// фамилия

middleName: STRING,// отчество

registrationAddress: STRING,// адрес регистрации заявителя

registrationPostcode: STRING,// почтовый индекс

actualAddress: STRING,// адрес проживания

actualPostcode: STRING,// актуальный почтовый индекс

password: STRING,// пароль

inspector: BOOLEAN,// флаг инспектора

redirectUrl: STRING, // ссылка, на которую будет переброшен

пользователь после подтверждения email

company: {// компания в которой состоит заявитель

name: STRING,// название компании

ogrn: STRING,// основной гос. регистрационный номер

position: STRING,// должность

},

notifications: {// уведомления

email: BOOLEAN,// по эл. почте

sms:BOOLEAN// по смс

},

displayPattern: {// отображение (другим пользователям?):

firstName: BOOLEAN,// имени

lastName: BOOLEAN,// фамилии

middleName: BOOLEAN,// отчества

companyName: BOOLEAN// название компании

}

}

Поле password обязательно только при регистрации, при изменении профиля password необходимо указывать только в случае смены пароля.

Для физ.лиц поле company не передаётся (company: null), для юр. лиц поле company необходимо заполнять полностью.

Валидация: email:

(?:[a-z0-9!#$%&'+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'+/=?^_`{|}~-

]+)|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\[\x01-

\x09\x0b\x0c\x0e-\x7f])")@(?:(?:a-z0-9?.)+a-z0-9?|[(?:(?:25[0-5]|2[0-4][0-

9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-

z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\[\x01-

\x09\x0b\x0c\x0e-\x7f])+)])

email будет сохранен в нижнем регистре

phoneNumber:

(8|+7)-?(?\d{3})?-?\d{1}-?\d{1}-?\d{1}-?\d{1}-?\d{1}-?\d{1}-?\d{1}

но в базе телефон будет сохранен в виде: +71234567890

postcode:

\d{3}\s?\d{3}

в базе индекс будет сохранен в виде 123456

login / password:

^*[A-Za-z0-9]*

Модель ответа:

В случае успеха ответ не содержит дополнительных объектов

Коды ошибок:100, 101, 102, 103, 104, 105, (111, 112), 200, 201, 202, 203, 204, 205, 206, 207, 311, 312, 313

Проверка на занятость полей

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

Метод:

POST/security/check_availability

Модель запроса:

{

login: STRING,

email: STRING,

phoneNumber: STRING

}

Модель ответа:

{

loginExists: BOOLEAN,

emailExists: BOOLEAN,

phoneNumberExists: BOOLEAN,

}

true - поле с таким значением уже существует в базе данных.

Коды ошибок:200

Получение профиля

Получение персональных данных профиля, указанных при

авторизации.

Метод:

GET/api/profile

Header:

Auth-Token: STRING (Обязательное поле)

Модель ответа: Профиль (без пароля).

Пример ответа:

{

login: “tester”,

email: “tester@test.te”,

phoneNumber: “+71234567890”,

taxNumber: null,

firstName: “Иван”,

lastName: “Иванов”,

middleName: “Иванович”,

registrationAddress: null,

registrationPostcode: null,

actualAddress: null,

actualPostcode: null,

inspector: false,

company: {

name: “Иванов и ко”,

ogrn: “1234567890123”,

position: “Исполнительный директор”,

},

notifications: {

email: true,

sms:false

},

displayPattern: {

firstName: true,

lastName: false,

middleName: false,

companyName: false

}

}

Важно! При регистрации профиля пользователь создается неактивированным. На телефонный номер высылается сообщение с кодом подтверждения регистрации, который нужно ввести, чтобы активировать профиль. При активации пользователя ему добавляется роль (Заявитель или Инспектор) в зависимости от настроек.

Коды ошибок: 401, 402, 403

Подтверждение профиля

Повторная отправка сообщения с кодом подтверждения профиля*

Повторная отправка кода активации профиля (и одновременно подтверждения телефона) на указанный телефонный номер.

Метод:

POST/api/sms/resending

При повторной отправке генерируется новый код, а старый - становится недействительным.

Профиль автоматически определяется по номеру телефона.

Модель запроса:

{

phoneNumber: STRING

}

Пример объекта запроса:

{

"phoneNumber":"8-666-66-66”

}

Модель ответа:

В случае успеха ответ не содержит дополнительных объектов

Коды ошибок: 403, 424

Блокировка профиля

Блокирует профиль пользователя.

Метод:

DELETE/api/profile

Пользователь определяется по токену сессии.

Пользователь должен иметь пользовательскуюсессию.

При отправке запроса блокируется профиль пользователя, повторный вход в систему будет невозможен.

Header:

Auth-Token: STRING

В случае успеха ответ не содержит дополнительных объектов

Коды ошибок: 401, 402

Методы справочных данных

Получение регионов (округов, субъектов, образований)

Метод: GET /nsi/region/federalDistrict?include_subjects=true/false

Модель ответа:

{

Federal Districts: [

id: UUID,// id федерального округа

title: STRING,// наимнование федерального округа

subjects: [// список субъектов РФ, которые входят в этот округ

id: UUID,// id субъекта РФ

title: STRING// наименование субъекта рф

]

]

}

если include_subjects = true, то округ возвращается с субъектами

Метод:

GET /nsi/region/subject?federal_district_id=DISTRICT_ID

Модель ответа:

{

subjects: [// список субъектов РФ, которые входят в этот округ

id: UUID,// id субъекта РФ

title: STRING// наименование субъекта рф

]

}

Методы:

GET /nsi/region/municipality

GET /nsi/region/subject?subject_id=SUBJECT_ID

Модель ответа:

{

municipalities: [// списокмуниципалитетов

id: UUID,// idмуниципалитета

title: STRING// наименование муниципалитета

]

}

Получение новостей

Метод: GET /news?offset&limit

offset - кол-во пропускаемых записей

limit - ограничение по кол-ву новостей

Модель ответа:

{

total: LONG,//общее кол-во новостей в системе

offset: LONG,//кол-во пропущенных новостей

limit: LONG,//ограничение по кол-ву новостей

page: [Новость]//вернётся вариант новостей для preview

}

Пояснения к процессу работы со списком новостей:

Полеtotal показывает общее кол-во новостей? limit кол-во новостей на 1 страницу. Для получения конкретной страницы нужно высылать параметр

offset = № страницы * limit.

Кол-во страниц можно высчитать: total / limit.

Получение новости

Метод:GET /news/{id}

Модель ответа:Новость

Коды ошибок:404

Получение списка показателей для рейтинга

Метод:GET /rating/indicators

Модельответа:

[

{

id: String,// idиндикатора, например, «PUBLISHED»

caption: STRING// описание индикатора

},

]

Методы рейтингов и статистики

Получение рейтинга регионов

Получение статистики по статусам

Метод:

GET /application/stats/statuses?mine=true/false

Модель ответа:

{

statuses: [// список объектов статистики по статусам

{

code: “0”,// код статуса

title: “Черновик”,// наименование статуса

count: 10// кол-во обращений по статусам

}

],

favorites: LONG,

total: LONG

}

Список статусов:

*Всего (TOTAL)

Выводит общее количество сообщений со статусами в соответствии с приходящими фильтрами.

*Избранное (FAVORITE)

Сообщения фильтруются по проставленному пользователем признаку

*Черновик (“0”)

Сообщения фильтруются по статусу «Черновик», который присваивается при сохранении сообщения без отправки

*Отправлено (“5”)

Сообщения фильтруются по статусу «Отправлено», который присваивается при отправке сообщений на модерацию

*Отказано в публикации (“20”)

Сообщения фильтруются по статусу «Отказано в публикации», который присваивается, при отклонении сообщения модератором

*Опубликовано (“10”)

Сообщения фильтруются по статусу «Опубликовано», который присваивается при успешном прохождении модерации

*На рассмотрении (“40”)

Сообщения фильтруются по статусу «На рассмотрении», который присваивается при назначении модератором сообщения тероргану, но терорган еще не отклонил и не принял в работу

*В работе (“30”)

Сообщения фильтруются по статусу «В работе», который присваивается при принятии терорганом сообщения в работу или при передаче модератором сообщения в Субъект РФ, также статус «В работе» сохраняется при назначении инспектора терорганом

*Запланировано (“50”)

Сообщения фильтруются по статусу «Запланировано», который присваивается при принятии решения терорганом о невозможности исполнения сообщения в срок 30 дней

*Отправлено повторно ()

Сообщения фильтруются по статусу «Отправлено повторно», который присваивается при повторной отправки сообщения после отклонения пользователем принятого решения

*Завершено (“100”)

Сообщения фильтруются по статусу «Завершено», который присваивается при отправке итогового ответа модератором или Терорганом

Получение статистики по группировкам статусов

Метод: GET /application/stats/groups

Модель ответа:

{

groupByStatuses: [

{

"code": "favorite",

"title": "Избранные",

"count": 10

},

{

"code": "inbox",

"title": "Входящие",

"count": 25

},...

]

“total”: 35 - сумма по группам

}

Получение статистики для индикаторов на устройствах

Метод: GET /application/stats/indicators/periodic_counters

Модель ответа:

{

totalCount: LONG,

weekCount: LONG,

dayCount: LONG

}

Метод возвращает число опубликованных обращений по трём периодам: всё время, неделя, день.

Методы работы с файлами

Отправка файла

Метод: POST /attachment

Модель запроса: Multipart

Модель ответа: Файл вложения

Таблица 2.4

Коды ошибок

Code

Message

Описание

303

Невалидное содержимое

304

Недопустимый формат файла

306

Превышен допустимый размер файла

Получение вложения

Метод: GET /attachment/{id}

Модель ответа:Файл вложения

Коды ошибок:404

Обратная связь

Отправляет письмо на почту обратной связи.

Метод: POST/security/feedback

Модель запроса:

{

userName: STRING// имя отправителя

email: STRING// почта для обратной связи

headerMessages: STRING// заголовок письма

messages: STRING// текст письма

}

Пример объекта запроса:

{

"userName": "Иванов Иван",

"headerMessages": "Вылет при быстром переходе между экранами",

"email": "defaultEmail@test.com",

"messages": "При быстром переходе между экранами приложение

крашится"

}

Модель ответа: В случае успеха ответ не содержит дополнительных объектов.

Коды ошибок:100, 200

Объекты ответов

В этом блоке описаны основные классы объектов ответов, используемые в системе.

Профиль

{

login: STRING,// логин заявителя

email: STRING,// адрес ел. почты заявителя

phoneNumber: STRING,// телефонный номер заявителя

firstName: STRING,// имя

lastName: STRING,// фамилия

middleName: STRING,// отчество

displayName: STRING,// полное ФИО (зависит от флагов отображения)

actualAddress: STRING,// адреспроживания

actualPostcode: STRING,// актуальныйпочтовыйиндекс

password: STRING,// пароль

inspector: BOOLEAN,// флагинспектора

redirectUrl: STRING,// url для перехода

company: {// компания в которой состоит заявитель

name: STRING,// названиекомпании

ogrn: STRING,// основнойгос. регистрационныйномер

position: STRING,// должность

},

notifications: {// уведомления

email: BOOLEAN,// по эл. почте

sms:BOOLEAN // по смс

},

displayPattern: {// отображение (другим пользователям?):

firstName: BOOLEAN,// имени

lastName: BOOLEAN,// фамилии

middleName: BOOLEAN,// отчества

companyName: BOOLEAN// названия компании

},

emailConfirm: BOOLEAN,// флаг подтверждения эл.почты

phoneConfirm: BOOLEAN// флаг подтверждения телефона

}

Обращение

{

id: UUID,// id обращения

number: STRING,// уникальный номер обращения

categoryId: UUID,// id категории обращения

categoryName: STRING,// название категории

status: STRING,// общий статус обращения

title: STRING,// заголовок обращения

description: STRING,// тело обращения

receivedTs: DATETIME,// дата принятия обращения

updateTs: DATETIME,// дата последнего обновления заявки

(комментария)

author: STRING, // ФИО название компании автора согласно

настройкам

originalApplication: STRING,// родительскоеобращение

processStage: STRING,// текущаястадияпроцесса

favorite: BOOLEAN, // флаг того, что обращение добавлено в

«избранное»

dueDate: LONG,// срок завершения текущей стадии.

controlDate: LONG,// срок завершения обработки заявки.

processStatus: {// статус процесса обращения.

id: UUID,// id статуса

code: STRING,// код статуса

name: STRING// наименование статуса

}

sourceSystem: {// платформа, с которой было отправлено обращение

code: STRING*// код платформы («MOBILE» для мобильных

платформ)

}

actions: {// возможные действия над обращением

[

name: STRING,// наименование действия

code: STRING// рабочий код действия

],

},

place: {// местоположение проблемы

address: STRING,// адрес

latitude: NUMBER(10,7),// широта

longitude: NUMBER(10,7),// долгота

federalDistrictId: UUID,// id федерального округа

federalDistrictName: STRING,// наименование федерального округа

subjectId: UUID,// id федерального субъекта

subjectName: STRING,// наименование федерального субъекта

municipalityName: STRING,// наименованиемуниципалитета

},

attachments: [Файлвложения,..],// файлывложений

comments: [Комментарий,..]// комментарии

}

*sourceSystem.code может принимать значения: “MOBILE” / ”WEB” /

“CORE”

Комментарий

{

id: UUID,// id комментария

authorId: STRING,// id автора

authorName: STRING,// имя автора

created: LONG,// дата создания

content: STRING,// текст комментария

resolution: BOOLEAN,// флаг - является ли комментарий итоговым

решением

roleCode: STRING,// код роли комментатора

attachments: [Файл вложения,..]// вложения комментария

}

Файл вложения

{

id: UUID,// id файла

fileSize: LONG,// размерфайла

extension: STRING,// расширениефайла

url: STRING// ссылка для скачивания

}

Регион

{

id: UUID,// idрегиона

title: STRING,// Наименованиерегиона

}

Новость

{

id: UUID,// id новости

date: DATETIME,// дата создания

title: STRING,// заголовок

description: STRING,// текст новости

attachments: [Файл вложения,... ],// файлы-вложения новости

logo: STRING,// ссылка на один из файлов вложений

source: STRING,// источник новости

proof: STRING// ссылка на новость в источнике

}

Сессия

{

sessionId: STRING,// id сессии

}

мобильный приложение публичный информирование

3. Готовое приложение

3.1Экраны авторизации, регистрации и восстановления пароля

Экраны регистрации

Начальный экран регистрации

Экран должен содержать два элемента Физическое лицо и Юридическое лицо, при выборе того или другого открывается соответствующий экран регистрации.

Экран регистрации физического лица

На экране должны быть поля:

1. Логин*

Не должен содержать кириллицу (только латиница) и пробелов, миндлина 6, максдлина 50. Справа иконка в виде знака вопроса, при нажатии на которую всплывает информационное окно с заголовком: «Заполнение поля Логин» и с текстом: «Логин не должен содержать кириллицу (только латиница), спецсимволов ($, #, &,) и пробелов, минимальная длина 6, максимальная длина 50» и кнопкой Ок, при нажатии на которую окно исчезает

2. Пароль*

Не должен содержать кириллицу (только латиница) и пробелов, мин длина 6, максдлина 20. Справа иконка в виде знака вопроса, при нажатии на которую всплывает информационное окно с заголовком: «Заполнение поля Пароль» и с текстом: «Пароль не должен содержать кириллицу (только латиница) и пробелов, минимальная длина 6, максимальная длина 20» и кнопкой Ок, при нажатии на которую окно исчезает

3. Повтор пароля*

Должен совпадать с введенным в поле Пароль, максдлина 20 символов. Справа иконка в виде знака вопроса, при нажатии на которуювсплывает информационное окно с заголовком: «Заполнение поля Повтор пароля» и текстом: «Должен совпадать с введенным в поле Пароль, максимальная длина 20» и кнопкой Ок, при нажатии на которую окно исчезает

4. Фамилия*

Только на кириллице, не более 50 символов. Первая буква должна быть заглавной. Справа иконка в виде знака вопроса, при нажатии на которую всплывает информационное окно с заголовком: «Заполнение поля Фамилия» и с текстом: «Только на кириллице, не более 50 символов. Первая буква должна быть заглавной» и кнопкой Ок, при нажатии на которую окно исчезает

5. Имя*

Только на кириллице, не более 50 символов. Первая буква должна быть заглавной. Справа иконка в виде знака вопроса, при нажатии на которую всплывает информационное окно с заголовком: «Заполнение поля Имя» и с текстом: «Только на кириллице, не более 50 символов. Первая буква должна быть заглавной» и кнопкой Ок, при нажатии на которую окно исчезает

6. Отчество

Только на кириллице, не более 50 символов. Первая буква должна быть заглавной. Справа иконка в виде знака вопроса, при нажатии на которую всплывает информационное окно с заголовком: «Заполнение поля Отчество» и с текстом: «Только на кириллице, не более 50 символов. Первая буква должна быть заглавной» и кнопкой Ок, при нажатии на которую окно исчезает

7. Контактный телефон*

Должна быть маска +7(___)___-____ где при клике номер должен писаться только в местах, где находится символ _

8. Электронная почта*

Должна быть проверка формат e-mail @___.___, не должен содержать кириллицу (только латиница) и пробелов, максимальная общая длина не более 50 символов

9. Пометка о том, что поля, отмеченные * являются обязательными

10. Я согласен(на) получать уведомления о ходе рассмотрения сообщения по e-mail

Ответ пользователя должен быть выполнен в виде Переключателя

11. Принимаю условия регистрации*

Ответ пользователя должен быть выполнен в виде Переключателя, «условия регистрации» должны быть ссылкой на раздел условия регистрации на портале. По умолчанию выключен

12. Как к Вам обращаться?*

13. В виде Переключателя должны быть представлены Фамилия, Имя, Отчество

14. Можно выбрать только Фамилию, только Имя, Фамилию и Имя, Имя и Отчество, но нельзя выбрать только Отчество или Фамилию и Отчество

15. Кнопка «Далее»

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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.