Design » History » Version 22
Никита Давыдовский, 04/26/2012 03:39 PM
| 1 | 1 | Алексей Филиппов | h1. Проект архитектуры |
|---|---|---|---|
| 2 | |||
| 3 | 10 | Никита Давыдовский | {{TOC}} |
| 4 | |||
| 5 | 1 | Алексей Филиппов | Модель архитектуры представлена на следующей схеме: |
| 6 | |||
| 7 | !https://redmine.cs.karelia.ru/attachments/download/83/850px-MS_Arch_mods.png! |
||
| 8 | |||
| 9 | h2. Описание уровней архитектуры |
||
| 10 | |||
| 11 | *Сетевой уровень (Network layer)* объединяет используемые социальные сервисы и среду передачи данных. В архитектуре представлены сервисы ВКонтакте, Facebook и Flickr. Каждый сервис предоставляет доступ к данным посредством собственного протокола. В настоящий момент в проекте MySocials реализована поддержка протоколов на основе XML и JSON. |
||
| 12 | |||
| 13 | *Транспортный уровень (Transport layer)* представляет собой набор библиотек доступа к социальным сервисам (драйверов). Основная задача драйвера - выполнять запросы к сервису для получения или отправки данных. Один запрос к драйверу может быть реализован в виде серии запросов к сервису. |
||
| 14 | |||
| 15 | *Промежуточный уровень (Middleware layer)* обеспечивает единый программный интерфейс (MySocials API) доступа к социальным сервисам. API реализован на основе XML. Для более удобной реализации приложений с использованием социальных сервисов реализована Qt библиотека (Core). Библиотека предоставляет набор базовых классов, средства кэширования для автономной работы и объединяет составные запросы. |
||
| 16 | |||
| 17 | *Пользовательский уровень (User layer*) объединяет разработанные приложения и плагины. |
||
| 18 | * Плагины для Qt Messaging Framework (QMF plugins) предоставляют доступ к социальным сервисам аналогично доступу к почтовым сервисам. |
||
| 19 | * Плагины приложений (Application plugins) реализуют работу с социальными сервисами в различных приложениях. В настоящий момент реализован плагин для Telepathy framework и плагин импорта контактов в адресную книгу Maemo. |
||
| 20 | * Консольное тестовое приложение (Console application) позволяет проверить работоспособность драйверов и выполнять запросы на основе MySocials API. |
||
| 21 | * Приложение для просмотра изображений социальных сервисов (Gallery) |
||
| 22 | * Приложение для работы с социальными сервисами (MySocials) |
||
| 23 | |||
| 24 | h2. Описание подсистем |
||
| 25 | |||
| 26 | *Ядро (Core)* – Подпрограмма, отвечающая за перенаправление запросов от других модулей к драйверам и наоборот, контроль использования оперативной памяти программой, выполнение повторяющихся задач(проверка сообщений, проверка друзей и т.д.) |
||
| 27 | Включает в себя: |
||
| 28 | |||
| 29 | * Менеджер Событий - модуль, выполняющий через определенный промежуток времени повторяющиеся задача (проверка на новые сообщения и т.д.) |
||
| 30 | * Модуль перенаправления запросов - модуль, который перенаправляет запросы, полученные от подпрограмм к драйверам |
||
| 31 | |||
| 32 | *Драйвер (Driver)* - подпрограмма реализующая взаимодействие с определенным сервисом или их группой |
||
| 33 | Включает в себя: |
||
| 34 | |||
| 35 | * Модуль получения запросов от ядра |
||
| 36 | * Отправка запросов и получение ответов от сервиса |
||
| 37 | * Обработка ответа от сервиса |
||
| 38 | * Модуль отправки ответа ядру |
||
| 39 | |||
| 40 | *Интерфейс пользователя (UI)* - Подпрограмма содержащая графический интерфейс пользователя. Содержит функции по выводу информации пользователю, вызывает функции из виджетов. Включает в себя: |
||
| 41 | Включает в себя: |
||
| 42 | |||
| 43 | * Формы с компонентами из виджетов |
||
| 44 | |||
| 45 | *Виджеты (Widgets)* - Набор компнентов, содержащих логику работу интерфейса. Виджеты располагаются на уровне конечного приложения. Включают в себя: |
||
| 46 | |||
| 47 | * модули(менеджеры) для соединения графического интерфейса и ядра |
||
| 48 | * модели данных полученные от ядра и методы доступа к ним |
||
| 49 | * функции обработки событий, поступающих от графического интерфейса |
||
| 50 | 2 | Алексей Филиппов | |
| 51 | h1. Ядро |
||
| 52 | |||
| 53 | !https://redmine.cs.karelia.ru/attachments/download/84/850px-MSCore_Arch.png! |
||
| 54 | Архитектура ядра |
||
| 55 | |||
| 56 | *Структуры данных* |
||
| 57 | |||
| 58 | В проекте MySocials для хранения данных используются специальные классы-хранилища. Каждому объекту социальной сети соответствует свой класс. Все классы должны наследоваться от базового класса (Base object), содержащего общие для всех объектов поля и методы. |
||
| 59 | |||
| 60 | Поля класса @baseobject@: |
||
| 61 | |||
| 62 | <pre> |
||
| 63 | QString serviceId; // Id сервиса. |
||
| 64 | QString accountId; // Id аккаунта. |
||
| 65 | QString ownerId; // Id владельца объекта. |
||
| 66 | QString objectId; // Id объекта. |
||
| 67 | QString icon_url; // Путь до иконки объекта. |
||
| 68 | bool isPrivate; // True если объект имеет ограниченный доступ и не может быть загружен с сервиса. |
||
| 69 | bool isEmpty; // True если в объекте ничего нет, иначе - false. |
||
| 70 | </pre> |
||
| 71 | |||
| 72 | Методы класса @baseobject@: |
||
| 73 | |||
| 74 | <pre> |
||
| 75 | /* Генерирует имя файла на основе пути и ссылки на объект. */ |
||
| 76 | const QString generateFileName(const QString &path, const QString &obj) const; |
||
| 77 | </pre> |
||
| 78 | |||
| 79 | Поля класса @event@: |
||
| 80 | |||
| 81 | <pre> |
||
| 82 | QString title; // Название события. |
||
| 83 | QString description; // Описание события. |
||
| 84 | QString startTime; // Время начала события. |
||
| 85 | QString endTime; // Время завершения события. |
||
| 86 | QString updateTime; // Время последнего обновления информации о событии. |
||
| 87 | QString location; // Географическое место расположения. |
||
| 88 | QString privacy; // Приватность. |
||
| 89 | QString creator; // Идентификатор пользователя создавшего событие. |
||
| 90 | QString icon; // URL иконки события. |
||
| 91 | QString rsvpStatus; // Статус участия. |
||
| 92 | </pre> |
||
| 93 | |||
| 94 | Методы класса @event@: |
||
| 95 | |||
| 96 | <pre> |
||
| 97 | /* "Упаковать" данные в XML формат. */ |
||
| 98 | QDomElement toQDomElement(QDomDocument& doc) const; |
||
| 99 | </pre> |
||
| 100 | |||
| 101 | <pre> |
||
| 102 | /* Переопределение предыдущего метода. Во входных параметрах добавлен источник данных. */ |
||
| 103 | static QDomElement toQDomElement(QDomDocument& doc, const Event& src); |
||
| 104 | </pre> |
||
| 105 | |||
| 106 | <pre> |
||
| 107 | /* Загрузить данные из XML. */ |
||
| 108 | static Event fromQDomElement(const QDomElement& fr, const QString& srvcId, const QString& accountId, |
||
| 109 | const QString& friendId); |
||
| 110 | </pre> |
||
| 111 | |||
| 112 | 20 | Никита Давыдовский | h1. Функции |
| 113 | 2 | Алексей Филиппов | |
| 114 | h2. Получение списка событий |
||
| 115 | |||
| 116 | 20 | Никита Давыдовский | *Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекаются данные и помещаются во внутреннюю структуру данных. После заполнения структура добавляется к списку. По окончании разбора посылается сигнал о том, что события получены. |
| 117 | 2 | Алексей Филиппов | |
| 118 | *Параметры:* |
||
| 119 | |||
| 120 | @userId@ - id пользователя чей список нужно получить. |
||
| 121 | @startTime@ - дата, начиная с которой нужно получить события (строка даты в формате UNIX_timestamp или ISO_8601). |
||
| 122 | @alsoLoadIcons@ - также загрузить иконки. |
||
| 123 | |||
| 124 | *Прототип:* |
||
| 125 | |||
| 126 | <pre> |
||
| 127 | void getEvents(QString userId, QString startTime, bool alsoLoadIcons) |
||
| 128 | </pre> |
||
| 129 | |||
| 130 | h2. Создание события |
||
| 131 | |||
| 132 | 20 | Никита Давыдовский | *Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекается eventId (id созданного события) и функция посылает сигнал с eventId и статусом транзакции. |
| 133 | 2 | Алексей Филиппов | |
| 134 | *Параметры:* |
||
| 135 | |||
| 136 | @title@ - название события. |
||
| 137 | @description@ - описание события. |
||
| 138 | @startTime@ - время начала (строка даты в формате UNIX_timestamp или ISO_8601). |
||
| 139 | @endTime@ - время завершения (строка даты в формате UNIX_timestamp или ISO_8601). |
||
| 140 | @location@ - место проведения. |
||
| 141 | @privacy@ - приватность. |
||
| 142 | |||
| 143 | *Прототип:* |
||
| 144 | |||
| 145 | <pre> |
||
| 146 | QString createEvent(QString title, QString description, QString startTime, QString endTime, QString location, |
||
| 147 | QString privacy) |
||
| 148 | </pre> |
||
| 149 | |||
| 150 | h2. Редактирование события |
||
| 151 | |||
| 152 | *Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. Ответ должен содержать информацию об успехе редактирования (true/false) и эта информация возвращается из функции. |
||
| 153 | |||
| 154 | *Параметры:* |
||
| 155 | |||
| 156 | @eventId@ - id события которое требуется редактировать. |
||
| 157 | @title@ - название события. |
||
| 158 | @description@ - описание события. |
||
| 159 | @startTime@ - время начала (строка даты в формате UNIX_timestamp или ISO_8601). |
||
| 160 | @endTime@ - время завершения (строка даты в формате UNIX_timestamp или ISO_8601). |
||
| 161 | @location@ - место проведения. |
||
| 162 | @privacy@ - приватность. |
||
| 163 | |||
| 164 | *Прототип:* |
||
| 165 | |||
| 166 | <pre> |
||
| 167 | bool editEvent(QString eventId, QString title, QString description, QString startTime, QString endTime, |
||
| 168 | QString location, QString privacy) |
||
| 169 | </pre> |
||
| 170 | |||
| 171 | h2. Удаление события |
||
| 172 | |||
| 173 | *Описание:* Функция, на основе полученных параметров, формирует и отправляет запрос к драйверу и затем получает ответ. Ответ должен содержать информацию об успехе удаления (true/false) и эта информация возвращается из функции. Также функция удаляет информацию о событии из кэша. |
||
| 174 | |||
| 175 | *Параметры:* |
||
| 176 | |||
| 177 | @eventId@ - id события которое требуется удалить. |
||
| 178 | |||
| 179 | *Прототип:* |
||
| 180 | 1 | Алексей Филиппов | |
| 181 | <pre> |
||
| 182 | bool deleteEvent(QString eventId) |
||
| 183 | 20 | Никита Давыдовский | </pre> |
| 184 | |||
| 185 | h2. Поиск событий |
||
| 186 | |||
| 187 | *Описание:* Функция, на основе поисковой строки, даты и смещения, формирует и отправляет запрос к драйверу и затем получает ответ. После из ответа извлекаются данные и помещаются во внутреннюю структуру данных. После заполнения структура добавляется к списку. По окончании разбора посылается сигнал о том, что события найдены получены. |
||
| 188 | |||
| 189 | *Параметры:* |
||
| 190 | |||
| 191 | @text@ - поисковый запрос. |
||
| 192 | @onlyUpcoming@ - флаг, поиск только по грядущим событиям. |
||
| 193 | @offset@ - смещение (используется для подгрузки событий). |
||
| 194 | |||
| 195 | *Прототип:* |
||
| 196 | |||
| 197 | <pre> |
||
| 198 | void searchEvents(QString text, bool onlyUpcoming, int offset); |
||
| 199 | </pre> |
||
| 200 | |||
| 201 | h2. Установка/изменение статуса участия |
||
| 202 | |||
| 203 | *Описание:* Функция устанавливает/меняет статус участия пользователя на параметр status, по отношению к событию eventId. |
||
| 204 | По завершению транзакции отправляет сигнал об успехе/ошибке. |
||
| 205 | |||
| 206 | *Параметры:* |
||
| 207 | |||
| 208 | @eventId@ - id события по отшению к которому нужно изменить статус. |
||
| 209 | @status@ - новый статус участия (attending/maybe(unsure)/declined). |
||
| 210 | |||
| 211 | |||
| 212 | *Прототип:* |
||
| 213 | |||
| 214 | <pre> |
||
| 215 | void setRsvpStatus(QString eventId, QString status); |
||
| 216 | </pre> |
||
| 217 | |||
| 218 | h2. Получение списка отметок |
||
| 219 | |||
| 220 | *Описание:* Функция получает список отметок места (заданного в параметрах одним из способов). |
||
| 221 | |||
| 222 | *Параметры:* |
||
| 223 | |||
| 224 | @latitude@ - географическая широта места для которого нужно получить список отметок. |
||
| 225 | @longitude@ - географическая долгота места для которого нужно получить список отметок. |
||
| 226 | @placeId@ - идентификатор места (игнорируется если поля широты и долготы не пустые). |
||
| 227 | @ownerId@ - идентификатор пользователя для котрого нужно получить список (игнорируется если поля широты, долготы и placeId не пустые). |
||
| 228 | |||
| 229 | *Прототип:* |
||
| 230 | |||
| 231 | <pre> |
||
| 232 | void getCheckins(QString latitude, QString longitude, QString placeId, QString ownerId, const int type); |
||
| 233 | </pre> |
||
| 234 | |||
| 235 | h2. Поиск места по названию |
||
| 236 | |||
| 237 | *Описание:* Функция поиска места по названию в указанной географической локации. |
||
| 238 | |||
| 239 | *Параметры:* |
||
| 240 | |||
| 241 | @text@ - поисковая строка. |
||
| 242 | @latitude@ - географическая широта места. |
||
| 243 | @longitude@ - географическая долгота места. |
||
| 244 | @radius@ - радиус поиска. |
||
| 245 | |||
| 246 | *Прототип:* |
||
| 247 | |||
| 248 | <pre> |
||
| 249 | void searchPlaces(QString text, QString latitude, QString longitude, QString radius); |
||
| 250 | </pre> |
||
| 251 | |||
| 252 | h2. Создание нового места |
||
| 253 | |||
| 254 | *Описание:* Функция создания нового места в указанной географической локации. Возвращает идентификатор созданного места. |
||
| 255 | |||
| 256 | *Параметры:* |
||
| 257 | |||
| 258 | @title@ - название места. |
||
| 259 | @latitude@ - географическая широта места. |
||
| 260 | @longitude@ - географическая долгота места. |
||
| 261 | @type@ - тип места. |
||
| 262 | @address@ - адрес места. |
||
| 263 | |||
| 264 | *Прототип:* |
||
| 265 | |||
| 266 | <pre> |
||
| 267 | QString createPlace(QString title, QString latitude, QString longitude, QString type, QString address); |
||
| 268 | </pre> |
||
| 269 | |||
| 270 | h2. Отметка |
||
| 271 | |||
| 272 | *Описание:* Отметиться в заданном месте. Возвращает статус транзакции. |
||
| 273 | |||
| 274 | *Параметры:* |
||
| 275 | |||
| 276 | @placeId@ - место в котором нужно отметиться. |
||
| 277 | @title@ - подпись к отметке. |
||
| 278 | |||
| 279 | *Прототип:* |
||
| 280 | |||
| 281 | <pre> |
||
| 282 | bool checkIn(QString placeId, QString title); |
||
| 283 | 2 | Алексей Филиппов | </pre> |
| 284 | |||
| 285 | 11 | Никита Давыдовский | h2. Драйвер |
| 286 | 2 | Алексей Филиппов | |
| 287 | !https://redmine.cs.karelia.ru/attachments/download/85/850px-MSDriver_Arch.png! |
||
| 288 | 1 | Алексей Филиппов | Архитектура драйвера |
| 289 | 11 | Никита Давыдовский | |
| 290 | 12 | Александр Шитнев | |
| 291 | 14 | Александр Шитнев | h2. Общий формат запросов и ответов |
| 292 | 12 | Александр Шитнев | |
| 293 | 14 | Александр Шитнев | *Формат запроса:* |
| 294 | 13 | Александр Шитнев | <pre> |
| 295 | 12 | Александр Шитнев | <Request class="" function = "" noAuthorize="true"> |
| 296 | <Params> |
||
| 297 | |||
| 298 | </Params> |
||
| 299 | 1 | Алексей Филиппов | </Request> |
| 300 | 12 | Александр Шитнев | </pre> |
| 301 | 14 | Александр Шитнев | _noAuthorize_ - флаг, запрещающий библиотеке вызывать webauth (необязательный параметр, по умолчанию false) |
| 302 | _class_ - класс, к которому относится вызываемая функция |
||
| 303 | _function_ - имя функции |
||
| 304 | _Params_ - набор параметров, строго определенный для каждой функции |
||
| 305 | |||
| 306 | *Формат ответа:* |
||
| 307 | 13 | Александр Шитнев | <pre> |
| 308 | 12 | Александр Шитнев | <Response class="..." function = "..." authorized="true" upload="..." download="..."> |
| 309 | <Params> |
||
| 310 | |||
| 311 | </Params> |
||
| 312 | 13 | Александр Шитнев | </Response> |
| 313 | 12 | Александр Шитнев | </pre> |
| 314 | 14 | Александр Шитнев | _authorized_ - флаг, показывающий происходила ли авторизация при выполнении запроса, не устанавливается, если при выполнении запроса возникла ошибка |
| 315 | _upload_ - количество байт отправленных на сервер |
||
| 316 | _download_ - количество байт полученных с сервера |
||
| 317 | 12 | Александр Шитнев | |
| 318 | * "settings":http://oss.fruct.org/wiki/Libvkontakte/xml-data/settings: класс для работы с настройками |
||
| 319 | |||
| 320 | * "places":http://oss.fruct.org/wiki/Libvkontakte/xml-data/places: класс для получения данных о местах |
||
| 321 | |||
| 322 | * "events":http://oss.fruct.org/wiki/Libvkontakte/xml-data/events: класс для получения данных о событиях |
||
| 323 | |||
| 324 | 1 | Алексей Филиппов | h2. Трассируемость требований |
| 325 | |||
| 326 | 19 | Никита Давыдовский | h3. Общие требования |
| 327 | |||
| 328 | |_.Функциональные требования| |
||
| 329 | ||Приложение Places|Приложение Events| |
||
| 330 | |*SR.FUSRA.01*(Создание аккаунта)||"Форма _UIEH_8_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%9C%D0%B5%D0%BD%D1%8E-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B0%D0%BA%D0%BA%D0%B0%D1%83%D0%BD%D1%82%D0%B0-UIEH_8| |
||
| 331 | |*SR.FUSRA.02*(Настройки сети)||"Форма _UIEH_9_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D1%81%D0%B5%D1%82%D1%8C%D1%8E-UIEH_9| |
||
| 332 | |*SR.FUSRA.03*(Выбор аккаунта)|"Форма _UIEH_6_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Geo-ui-harmattan#%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B0%D0%BA%D0%BA%D0%B0%D1%83%D0%BD%D1%82%D0%B0%D0%BC%D0%B8-UIPH_6|"Форма _UIEH_7_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%9C%D0%B5%D0%BD%D1%8E-%D0%B0%D0%BA%D0%BA%D0%B0%D1%83%D0%BD%D1%82%D0%BE%D0%B2-UIEH_7| |
||
| 333 | |||
| 334 | 18 | Никита Давыдовский | h3. Приложение Events |
| 335 | 1 | Алексей Филиппов | |
| 336 | 22 | Никита Давыдовский | |_.Функциональные требования|\6=.*Интерфейс*|\6=.*Ядро*| |
| 337 | 21 | Никита Давыдовский | ||"_UIEH_1_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F-%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0-%D0%BA%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D1%8C-UIEH_1|"_UIEH_2_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F-UIEH_2|"_UIEH_3_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%9F%D0%BE%D0%B8%D1%81%D0%BA-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9-UIEH_3|"_UIEH_5_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F-%D0%9C%D0%B0%D0%BA%D0%B5%D1%82-UIEH_5|"_UIEH_6_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F-%D0%9C%D0%B0%D0%BA%D0%B5%D1%82-UIEH_6|"_UIEH_4_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Events-ui-harmattan#%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F-%D0%BE-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B8-UIEH_4|"getEvents":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Design#%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9|"createEvent":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Design#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F|"editEvent":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Design#%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F|"deleteEvent":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Design#%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F|"searchEvent":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Design#%D0%9F%D0%BE%D0%B8%D1%81%D0%BA-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9|"setRsvpStatus":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Design#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D0%B0%D1%82%D1%83%D1%81%D0%B0-%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%B8%D1%8F| |
| 338 | |*SR.FUSRE.01*(Получение списка событий)|=.+||||||+|||||| |
||
| 339 | |*SR.FUSRE.02*(Создание события)||=.+||||||+||||| |
||
| 340 | |*SR.FUSRE.05*(Поиск событий)|||=.+||||||||+|| |
||
| 341 | |*SR.FUSRE.03*(Редактирование события)||||=.(2)+||=.(1)+|||+|||| |
||
| 342 | |*SR.FUSRE.04*(Удаление события)|||||=.(2)+|=.(1)+||||+||| |
||
| 343 | |*SR.FUSRE.05*(Изменение статуса)||||||=.+||||||+| |
||
| 344 | 19 | Никита Давыдовский | |
| 345 | _Примечание: (№) означает последовательность появления форм на экране._ |
||
| 346 | 18 | Никита Давыдовский | |
| 347 | h3. Приложение Places |
||
| 348 | |||
| 349 | |_.Функциональные требования| |
||
| 350 | ||=.-|"Форма _UIPH_1_":https://redmine.cs.karelia.ru/projects/geo-places/wiki/Geo-ui-harmattan#%D0%9E%D1%82%D0%BC%D0%B5%D1%82%D0%BA%D0%B8-%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D0%BF%D0%BE%D0%B1%D0%BB%D0%B8%D0%B7%D0%BE%D1%81%D1%82%D0%B8-UIPH_1|=.-|=.-| |
||
| 351 | |*SR.FUSRP.01*(Поиск места по названию)||||| |
||
| 352 | |*SR.FUSRP.02*(Получение списка отметок)||=.+||| |
||
| 353 | |*SR.FUSRP.03*(Создание нового места)||||| |
||
| 354 | 1 | Алексей Филиппов | |*SR.FUSRP.04*(Отметка)||||| |