---
# System prepended metadata

title: Техническая спецификация (руководство администратора) мобильного приложения PhageView

---

# Техническая спецификация (руководство администратора) мобильного приложения PhageView

## Архитектура приложения
Из каких компонентов состоит, как они взаимодействуют между собой
Графическая схема компонентов и связей (в визио)

## Структура БД 
В виде графической схемы и в виде текстового описания (в виде таблицы с названиями полей, их типами данных и описанием)

![](https://i.imgur.com/QxsGjMA.jpg)


### Справочник бактерий
Имя таблицы - Bacteria
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)|уникальный код, первичный ключ|
| name|character varying(255)| наименование бактерии 
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|

### Справочник бактериафагов
Имя таблицы - Bacteria
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)|уникальный код, первичный ключ|
| name|character varying(255)| наименование бактериофага 
| letter|character varying(255)| буква номера серии 
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|

### Справочник лабораторий
Имя таблицы - Laboratory
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)     | уникальный код, первичный ключ     |
| name|character varying(255)| наименование лаборатории     |
| city| character varying(255)| город|
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|


### Справочник медицинских организаций
Имя таблицы - Bacteria
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)|уникальный код, первичный ключ|
| name|character varying(255)| наименование медицинской организации 
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|

### Отчеты
Имя таблицы - Reports
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)|уникальный код, первичный ключ|
| creatorId| int (auto increment)|ссылка на уникальный ключ|
| executorId| int (auto increment)|ссылка на уникальный ключ|
| managerId| int (auto increment)|ссылка на уникальный ключ|
| bactId| int (auto increment)|ссылка на уникальный ключ|
| drugId| int (auto increment)|ссылка на уникальный ключ|
| medOrgId| int (auto increment)|ссылка на уникальный ключ|
| number|character varying(255)|номер отчета |
| sensivity|"enum_Reports_sensitivity"|чувствительность|
| date|datetime|дата формарования отчета|
| statusId| int (auto increment)|ссылка на уникальный ключ|
| managerStatusId|int (auto increment)|ссылка на уникальный ключ|
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|

### Комментарии отчета
Имя таблицы - ReportComments
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)|уникальный код, первичный ключ|
| userId| int (auto increment)|ссылка на уникальный ключ|
| reportId| int (auto increment)|ссылка на уникальный ключ|
| text|character varying(255)|текст отчета| 
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|

### История просмотров комментарий к отчету*
Имя таблицы - ReportShowComments
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)|уникальный код, первичный ключ|
| userId| int (auto increment)|ссылка на уникальный ключ|
| reportId| int (auto increment)|ссылка на уникальный ключ|
| lastReadComId | int (auto increment)|ссылка на уникальный ключ|
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|

### Статусы отчета
Имя таблицы - ReportStatuses
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)|уникальный код, первичный ключ|
| name|character varying(255)|название|
| description|character varying(255)|описание| 
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|

### История статусов отчета
Имя таблицы - ReportStatusHistories
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)|уникальный код, первичный ключ|
| userId| int (auto increment)|ссылка на уникальный ключ|
| reportId| int (auto increment)|ссылка на уникальный ключ|
| oldStatusId| int (auto increment)|ссылка на уникальный ключ|
| newStatusId| int (auto increment)|ссылка на уникальный ключ|
| name|character varying(255)|название|
| description|character varying(255)|описание| 
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|

### Вложения отчета
Имя таблицы - ReportAttachments
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)|уникальный код, первичный ключ|
| reportId| int (auto increment)|ссылка на уникальный ключ|
| photoPath|character varying(255)|фотография|
| thumbnailPath |character varying(255)|путь фотографии|
| width| int (auto increment)|ширина|
| height| int (auto increment)|высота|
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|

### Пользователи
Имя таблицы - Users
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)|уникальный код, первичный ключ|
| labId| int (auto increment)|ссылка на уникальный код|
| number|character varying(255)|номер|
| userName |character varying(255)| имя пользователь|
| login |character varying(255)|логин|
| password |character varying(255)|пароль|
| typeUser |"enum_Users_typeUser"|тип пользователя|
| creatorId| int (auto increment)|ссылка на уникальный код|
| creatorIp|character varying(255)|ip создателя|
| updaterId| int (auto increment)|ссылка на уникальный код|
| updaterIp|character varying(255)|ip редактора|
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|

### Токен пользователя
Имя таблицы - UserTokens
| Имя поля | Тип данных | Назначение |
| -------- | -------- | -------- |
| id| int (auto increment)|уникальный код, первичный ключ|
| userId| int (auto increment)|ссылка на уникальный код|
| accessToken|character varying(255)|токен доступа|
| notificationToken|character varying(255)|токен уведомления|
| createdAt| datetime| дата и время создания записи|
| updatedAt| datetime| дата и время редактирования записи|


## Запросы API и структуры данных
документация в swagger

## Описание модулей исходного кода backend
На чём написан (язык, фреймворк, ключевые библиотеки, используемая IDE)
Как склонировать проект, открыть его в IDE, установить зависимости и запустить
Основные модули (классы) и взаимодействие между ними (вкратце)
Основные настройки в исходном коде (ключевые константы)

## Описание модулей исходного кода frontent интерфейса администратора
На чём написан (язык, фреймворк, ключевые библиотеки, используемая IDE)
Как склонировать проект, открыть его в IDE, установить зависимости и запустить
Основные модули (классы) и взаимодействие между ними (вкратце)
Основные настройки в исходном коде (ключевые константы)

## Описание модулей исходного кода мобильного приложения
На чём написан (язык, фреймворк, ключевые библиотеки, используемая IDE)
Как склонировать проект, открыть его в IDE, установить зависимости и запустить
Основные модули (классы) и взаимодействие между ними (вкратце)
Основные настройки в исходном коде (ключевые константы)

## Развёртывание на сервере
Для развертывания приложения необходимы ПО: PostgreSQL, Nginx, pm2, git, nodejs.

Установка git:
1. git --version - Чаще всего гит уже установлен, поэтому следует сперва проверить его наличие.
2. sudo apt-get update - обновление информации репозиториев
3. sudo apt-get install git - установка гит
4. git --version - проверка в правильности установки

Установка PostgreSql:
1. Выбрать сервер PostgreSQL определенной версии;
2. apt-get update - Обновить информацию репозиториев;
3. apt-get install postgresql"номер версии"-server - установка Postgresql;
4. service postgresql start - запуск службы;

Установка Nginx:
1. sudo apt-get update - Обновление информации репозиториев;
2. sudo apt-get install nginx - Установка nginx;
3. systemctl status nginx - Проверка статуса nginx

Установка nodejs:
1. sudo apt-get dist-upgrade
2. sudo apt-get install node python gcc++ wget make
3. sudo npm install npm -g

Установка pm2:
1. sudo npm install pm2@latest -g
2. pm2 start app.js

Настройка сервера.
Скачиваем backend на сервер:
1. Заходим в настройки аккаунта GitHub ![](https://i.imgur.com/AXXpH8l.png)
2. Переходим в настройки разработчика и создаем токен личного доступа: ![](https://i.imgur.com/FKei5Dx.png)
3. После создания возвращаемся в консоль сервера и скачиваем репозиторий командой : 
git pull https://github.com/"login"/"name_project".git
4. В появившихся полях ввода следует вписать сперва username GitHub, а в поле ввода пароля - сгенерированный токен.

После установки backend следует настроить nginx:

1. sudo nano /etc/nginx/sites-available/default.conf - Открываем конфиг
2. Дальше следует дописать недостающиеся строки ![](https://i.imgur.com/SVcfDfL.png)
3. Сохраняем конфиг и закрываем его Ctrl + S, Ctrl + X
4. sudo nginx -t - проверяем на наличие ошибок синтаксиса в файлах nginx
6. sudo systemctl restart nginx - перезапускаем Веб-сервер

Следующий этап - создание базы данных:
1. psql -U postgres - осуществляем вход под администратором;
2. createuser -U postgres --no-superuser --no-createdb --no-createrole --encrypted --pwprompt ПОЛЬЗОВАТЕЛЬ - Создание пользователя;
3. createdb -U postgres -O [ПОЛЬЗОВАТЕЛЬ] [БАЗА] - Создание базы данных;
4. exit - выходим из postgreSQL
5. sudo systemctl restart postgreSQL - перезапускаем службу
6. sudo systemctl status postgreSQL - проверяем на наличие ошибок и активность postgreSQL

Последний этап - запуск приложения
1. pm2 start app.js - Производит запуск backend
2. pm2 startup systemd - Генерирует и настраивает скрипт запуска pm2 
3. sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u server_name --hp /home/'server_name' -  команда, которую нужно запустить с привилегиями суперпользователя для настройки запуска PM2 при загрузке.
4. pm2 save - сохранение процессов pm2 и соотвествующей среды.
5. sudo systemctl start pm2-"server_name" - запускает службу

Перечень необходимого ПО (веб-сервер, СУБД и др.), его установка и настройка (кратко)

### Миграции БД

npm i - установка всех модулей
npx seqeulize db:create - Создание миграций
npx seqeulize db:migrate - миграция БД
npx seqeulize db:migrate:undo - отмена последней миграции
npx seqeulize db:migrate:undo:all - отмена всех миграций
npx seqeulize db:drop - удаление миграции
npm run dev - запуск в тестовом режиме

### Настройка межсетевого экрана
Какие порты нужно открыть для нормальной работы приложения и как это сделать

В случае если SSL-сертификат еще не настроен, в файерволе требуется включить Nginx HTTP который открывает 80 порт - незашифрованный веб-трафик.
После настройки SSL-сертификата следует включить Nginx HTTPS, который откроет 443 порт с защищенным веб-трафиком 

### Управление приложением
Запуск, остановка, перезапуск модулей (бэк, фронт) и ПО (веб-сервер). 
sudo systemctl start "модуль";
sudo systemctl stop "модуль";
sudo systemctl restart "модуль";


Как убедиться, что все сервисы работают 

sudo systemctl status postgreSQL;
sudo systemctl status Nginx;
sudo systemctl status git;


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

В случае ошибок со стороны приложения или сайта требуется посмотреть лог pm2. Для этого в консоль нужно ввести pm2 monit, после которой откроется таблица с процессами, логами, метаданными и метрикой.![](https://i.imgur.com/ZOSMEnd.png)


Если же приложение полностью легло, то нужно посмотреть логи и статусы Nginx и PostgreSQL, введя команды:
sudo systemctl status postgreSQL;
sudo systemctl status Nginx;

## Управление публикацией мобильного приложения
Ключевые параметры и настройки публикации приложения в магазинах

### AppStore

#### Изменение названия и описания приложения
Если вы уже создали новую версию в ITC, вы можете изменить название и описание своих приложений, выполнив следующие действия:

В iTunes Connect щелкните ваше приложение, и вы увидите версии внизу страницы, нажмите "Просмотреть сведения" о вашей обновленной версии (например, 1.1).

Затем нажмите "Редактировать" рядом с "Метаданными и загрузками"

![](https://i.imgur.com/LqAAgZu.png)

Во всплывающем окне измените текст в полях "Название приложения" и "Описание"

![](https://i.imgur.com/7ztREDn.png)

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

#### Изменение иконки и онбординг приложения

Загрузите маркетинговые материалы

Загрузите до 5-ти скриншотов на каждое разрешение экрана. Скриншоты не должны содержать прозрачность.


Параметры разрешения должны быть следующими:
1242х2208, 2208х1242
и
1242х2688, 2688х1242 1284х2778 или 2778х1284

Загрузите иконки приложения. Иконка должна быть без скруглений и прозрачности. Для каждого девайса, существуют разные параметры:
— iPhone: 180×180 пикселей или 120×120 пикселей. Формат PNG или JPEG;

— iPad Pro: 167 пикселей;

— iPad, iPad mini: 152x152 пикселей;

— App Store: 1024x1024 пикселей.

### Google Play


#### Изменение названия и описания приложения

Откройте учетную запись разработчика 

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

Затем прокрутите немного вниз, вы увидите опцию « Список магазинов ». Нажмите на нее. справа вы можете увидеть поля заголовка, краткого и полного описания. Измените поля и отправьте на проверку.

![](https://i.imgur.com/YxZiG2C.png)


