{
    "openapi": "3.0.0",
    "info": {
        "title": "SwingFamily App configuration server API",
        "description": "API удалённого конфигурирования и обновления для мобильного приложения SwingFamily",
        "version": "1.0.1"
    },
    "servers": [
        {
            "url": "."
        }
    ],
    "paths": {
        "/api/common/check-state-freshness": {
            "get": {
                "tags": [
                    "Common"
                ],
                "summary": "Проверяет, есть ли обновления состояний данных на сервере.",
                "operationId": "commonCheckStateFreshness",
                "parameters": [
                    {
                        "name": "configLastModified",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "userLastModified",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "successful operation",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/CheckFressnessResultDto"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/common/config": {
            "get": {
                "tags": [
                    "Common"
                ],
                "summary": "Get common configs",
                "operationId": "commonGetConfig",
                "responses": {
                    "200": {
                        "description": "successful operation",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ConfigDto"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "BoolResultDto": {
                "title": "BoolResult DTO",
                "description": "BoolResult object DTO",
                "required": [
                    "resultValue"
                ],
                "properties": {
                    "resultValue": {
                        "title": "Term ID",
                        "description": "Term ID",
                        "type": "boolean",
                        "example": true
                    },
                    "cause": {
                        "title": "Term name",
                        "description": "Term name",
                        "type": "string",
                        "example": "Hip-Hop"
                    },
                    "errorMessage": {
                        "title": "Term full description",
                        "description": "Term full description",
                        "type": "string",
                        "example": "Hip-Hop is a..."
                    },
                    "successMessage": {
                        "title": "Term short description",
                        "description": "Term short description",
                        "type": "string",
                        "example": "Hip-Hop is a..."
                    },
                    "errorCode": {
                        "title": "URL к файлу изображения",
                        "description": "URL к файлу изображения",
                        "type": "string",
                        "example": "https://<site>/sites/default/files/users/1/avatar/ava.png"
                    }
                },
                "type": "object"
            },
            "CheckFressnessResultDto": {
                "title": "CheckFressnessResult DTO",
                "description": "CheckFressnessResult DTO",
                "required": [
                    "configWasModified",
                    "userWasModified"
                ],
                "properties": {
                    "configWasModified": {
                        "title": "Требует ли обновления конфиг приложения",
                        "description": "Требует ли обновления конфиг приложения",
                        "type": "boolean",
                        "example": true
                    },
                    "userWasModified": {
                        "title": "Требует ли обновления аккаунт пользователя",
                        "description": "Требует ли обновления аккаунт пользователя",
                        "type": "boolean",
                        "example": true
                    },
                    "timestamp": {
                        "title": "Таймстемп времени последней проверки",
                        "description": "Таймстемп времени последней проверки.",
                        "type": "integer"
                    }
                },
                "type": "object"
            },
            "ConfigDto": {
                "title": "Config DTO",
                "description": "Config DTO",
                "required": [
                    "apiCurrentVersion",
                    "webServerBaseUrls",
                    "apiServerBaseUrls",
                    "updateServerBaseUrls",
                    "versions",
                    "pullingEnabled",
                    "pullingMinInterval",
                    "modifiedAt",
                    "allowInAppUpdate"
                ],
                "properties": {
                    "apiCurrentVersion": {
                        "title": "Current Api version",
                        "description": "Current Api version",
                        "type": "string",
                        "example": "1.0.0"
                    },
                    "webServerBaseUrls": {
                        "title": "Список хостов, где располагаются веб-серверы",
                        "description": "Список хостов, где располагаются веб-серверы",
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "apiServerBaseUrls": {
                        "title": "Список хостов, где располагаются экзепляры api-серверов",
                        "description": "Список хостов, где располагаются экзепляры api-серверов",
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "updateServerBaseUrls": {
                        "title": "Список хостов, где хранятся файлы для обновления приложения",
                        "description": "Список хостов, где хранятся файлы для обновления приложения",
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "versions": {
                        "title": "Массив с информацией обо всех версиях",
                        "description": "Массив с информацией обо всех версиях. Сортировка: по убыванию, наверху всегда текущая версия",
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/VersionInfoDto"
                        }
                    },
                    "pullingEnabled": {
                        "title": "Разрешить пуллинг",
                        "description": "Разрешить пуллинг для обновления настроек приложения",
                        "type": "boolean",
                        "example": true
                    },
                    "pullingMinInterval": {
                        "title": "Минимальный интервал между пуллингами (в сек)",
                        "description": "Минимальный интервал между пуллингами для проверки обновлений настроек приложения и аккаунта (в сек). ",
                        "type": "integer"
                    },
                    "checkAppUpdatesEnabled": {
                        "title": "Разрешить enableCheckAppUpdates",
                        "description": "Разрешить проверку наличия новых версий приложения (только для RuStore)",
                        "type": "boolean",
                        "example": true
                    },
                    "allowInAppUpdate": {
                        "title": "Разрешить inApp update",
                        "description": "Разрешить установку обновлений напрямую прямо из приложения",
                        "type": "boolean",
                        "example": false
                    },
                    "checkAppUpdatesMinInterval": {
                        "title": "Минимальный интервал между проверками обновлений",
                        "description": "Минимальный интервал между проверками наличий обновлений приложения (в сек).",
                        "type": "integer"
                    },
                    "modifiedAt": {
                        "title": "Таймстемп времени последнего изменения",
                        "description": "Таймстемп времени последнего изменения настроек.",
                        "type": "integer"
                    }
                },
                "type": "object"
            },
            "VersionInfoDto": {
                "title": "Version info DTO",
                "description": "Version info DTO",
                "required": [
                    "versionNumber",
                    "semver",
                    "publishedAt",
                    "isActive",
                    "isImportant",
                    "updatePageUrl",
                    "updateFileUrl"
                ],
                "properties": {
                    "versionNumber": {
                        "title": "Version number",
                        "description": "Version number",
                        "type": "integer"
                    },
                    "semver": {
                        "title": "Version semver",
                        "description": "Version semver",
                        "type": "string"
                    },
                    "title": {
                        "title": "Version title",
                        "description": "Version title",
                        "type": "string"
                    },
                    "description": {
                        "title": "Version description",
                        "description": "Version description",
                        "type": "string",
                        "nullable": true
                    },
                    "message": {
                        "title": "Сообщение для показа пользователю",
                        "description": "Сообщение пользователю",
                        "type": "string",
                        "nullable": true
                    },
                    "changes": {
                        "title": "Описание изменений в этой версии",
                        "description": "Описание изменений в этой версии",
                        "type": "string",
                        "example": "Исправлены ошибки"
                    },
                    "updatePageUrl": {
                        "title": "URL страниц с инструкциями по обновлению",
                        "description": "URL страниц с инструкциями по обновлению",
                        "type": "string",
                        "example": "https://../sfapp-update/v2"
                    },
                    "updateFileUrl": {
                        "title": "URL страниц с инструкциями по обновлению",
                        "description": "URL страниц с инструкциями по обновлению",
                        "type": "string",
                        "example": "https://../public/download/app-release-v2.apk"
                    },
                    "publishedTimestemp": {
                        "description": "Таймстемп времени публикации версии",
                        "type": "integer",
                        "example": 1231231232
                    },
                    "isActive": {
                        "title": "Флаг: Активна ли данная версия",
                        "description": "Флаг: Активна ли данная версия",
                        "type": "boolean",
                        "example": true
                    },
                    "isImportant": {
                        "title": "Флаг: Данное обновление важно и обязательно должно быть установлено",
                        "description": "Флаг: Данное обновление важно",
                        "type": "boolean",
                        "example": true
                    }
                },
                "type": "object"
            }
        }
    },
    "tags": [
        {
            "name": "Common",
            "description": "Разные операции"
        }
    ]
}