62 Commits

Author SHA1 Message Date
Sithas 12ca243c21 Настроенный запуск 2026-02-10 11:33:16 +03:00
Sithas 6cd277c754 Настроенный запуск(невидимый снаружи) 2026-02-10 10:53:47 +03:00
Sithas 69b97275a6 Настроенный запуск(невидимый снаружи) 2026-02-10 09:41:43 +03:00
Sithas 75a9e4cc14 Настроенный запуск(невидимый снаружи) 2026-02-08 11:02:38 +03:00
Sithas 40f8d48296 Настроенная сборка 2026-02-08 10:05:51 +03:00
Sithas d198317d4f Почти настроенная сборка 2026-02-08 09:25:10 +03:00
Sithas 9bd4187e9b База для сборки образа(MySQL+Boost+cmake) 2026-02-07 13:13:06 +03:00
Sithas bff937f9a7 Перепись с const std::string& на std::string_view 2026-02-07 09:44:03 +03:00
Sithas 0ee1beacfa Перепись с const std::string& на std::string_view 2026-01-30 09:21:13 +03:00
Sithas 513210a304 Перепись с const std::string& на std::string_view 2026-01-29 18:50:21 +03:00
Sithas 3f77cdc2bd Перепись с const std::string& на std::string_view 2026-01-29 18:45:16 +03:00
Sithas 9a7c9b7e7c Перепись с const std::string& на std::string_view 2026-01-29 09:33:38 +03:00
Sithas 91d20fcf01 Delete Diary 2026-01-29 07:45:40 +03:00
Sithas e4104e9707 Put Diary 2026-01-25 15:08:30 +03:00
Sithas b3007c1471 Post Diary 2026-01-25 11:18:07 +03:00
Sithas 66632855c2 Post Diary 2026-01-25 11:03:41 +03:00
Sithas 199659266f Post Diary 2026-01-25 10:02:15 +03:00
Sithas 7ff1bf10f8 Post Diary 2026-01-24 11:07:56 +03:00
Sithas 10f86a5a99 Post Diary 2026-01-24 11:02:17 +03:00
Sithas 3547ce3cb5 Добавление nodiscard 2026-01-23 08:11:16 +03:00
Sithas 14561b303e Добавление nodiscard 2026-01-22 08:38:55 +03:00
Sithas 05a135afc6 Ручка PostUserTreatmentScheme.h 2026-01-18 11:47:37 +03:00
Sithas c5c6058fb2 База для ручки GetUserDiariesExecutor.h 2026-01-17 22:02:39 +03:00
Sithas 80e171532f База для ручки GetUserDiariesExecutor.h 2026-01-17 11:33:39 +03:00
Sithas 22be5842be База для ручки GetUserDiariesExecutor.h 2026-01-17 11:24:12 +03:00
Sithas 8a61656343 База для ручки GetUserDiariesExecutor.h 2026-01-17 09:55:03 +03:00
Sithas 2027bbb513 База для ручки GetUserDiariesExecutor.h 2026-01-17 09:24:04 +03:00
Sithas 08943b5938 База для ручки GetUserDiariesExecutor.h 2026-01-16 08:08:11 +03:00
Sithas f56c14b3da База для ручки PostUserMedicationsExecutor.h 2026-01-16 07:40:00 +03:00
Sithas 11641e3fa1 База для ручки PostUserMedicationsExecutor.h 2026-01-13 08:33:54 +03:00
Sithas 5a77e9db8a База для ручки PostUserMedicationsExecutor.h 2026-01-12 09:04:27 +03:00
Sithas b13f145b4f База для ручки PostUserMedicationsExecutor.h 2026-01-11 16:25:13 +03:00
Sithas a81952e40e База для ручки PostUserMedicationsExecutor.h 2026-01-10 17:24:17 +03:00
Sithas 8eb44b6e45 База для ручки PostUserMedicationsExecutor.h 2026-01-10 13:32:44 +03:00
Sithas a4d5384fd3 База для ручки PostUserMedicationsExecutor.h 2026-01-09 18:29:22 +03:00
Sithas c79ec099e9 База для ручки PostUserMedicationsExecutor.h 2026-01-09 13:45:16 +03:00
Sithas a3e69b65fb База для ручки PostUserMedicationsExecutor.h 2026-01-08 16:04:57 +03:00
Sithas 50bad13f86 База для ручки PostUserMedicationsExecutor.h 2026-01-08 12:20:51 +03:00
Sithas 8657b2910b База для ручки PostUserMedicationsExecutor.h 2026-01-08 12:12:24 +03:00
Sithas 8e1db614bf База для ручки PostUserMedicationsExecutor.h 2026-01-08 12:05:50 +03:00
Sithas 1cb1a9d0eb Разработка ручки для GetAllMedications 2026-01-08 11:53:20 +03:00
Sithas f698196778 Разработка ручки для GetAllMedications 2026-01-08 11:28:43 +03:00
Sithas d929cbae02 Разработка ручки для GetAllMedications 2026-01-07 16:17:03 +03:00
Sithas f06d22febf Разработка ручки для GetAllMedications 2026-01-07 10:48:13 +03:00
Sithas 28a2f526bf Добавление ДАО для использования в новом маршруте 2026-01-06 09:52:30 +03:00
Sithas 8df55238be Добавление ДАО для использования в новом маршруте 2026-01-05 15:29:47 +03:00
Sithas 49a2913884 Постановка нового маршрута 2026-01-04 18:18:29 +03:00
Антон 96d1e4b6a5 AuthLogoutTest - 4 ok 0 fail 2025-12-13 13:19:38 +03:00
Антон 23c746b20b AuthLogoutTest - 4 ok 0 fail 2025-12-07 12:23:55 +03:00
Антон 660f44b197 AuthLogoutTest - 4 ok 0 fail 2025-12-07 09:56:33 +03:00
Антон 4ed21eb59d AuthLogoutTest - 4 ok 0 fail 2025-12-06 16:32:39 +03:00
Антон 4f08fd8b8b AuthLogoutTest - 4 ok 0 fail 2025-12-06 14:18:31 +03:00
Антон 4cff9c4638 AuthLogoutTest - 4 ok 0 fail 2025-11-27 06:22:58 +03:00
Антон 3a2750dcd1 AuthLogoutTest - 3 ok 0 fail 2025-11-27 06:18:19 +03:00
Антон 6c4dda143c AuthRefistrationTest - 4 ok 0 fail 2025-11-27 06:07:41 +03:00
Антон da75c7bbde AuthRefistrationTest - 3 ok 1 fail 2025-11-26 08:29:37 +03:00
Антон ac5aabb3c3 AuthRefistrationTest - 3 ok 1 fail 2025-11-26 07:47:50 +03:00
Антон 9b7e3e84a0 Починка тестов 2025-11-26 06:55:07 +03:00
Антон 0c7510f650 Починка тестов 2025-11-25 11:52:02 +03:00
Антон b4fc11c9ac UseCase редактирования дня в дневнике 2025-11-25 09:39:03 +03:00
Антон c560d99e85 UseCase редактирования дня в дневнике 2025-11-24 17:30:59 +03:00
Антон beb9672590 UseCase редактирования дня в дневнике 2025-11-24 09:25:25 +03:00
61 changed files with 2505 additions and 2296 deletions
+121 -90
View File
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.29.8) cmake_minimum_required(VERSION 3.28.3)
project(UpAndDown) project(UpAndDown)
set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD 23)
@@ -8,12 +8,14 @@ if (POLICY CMP0167)
cmake_policy(SET CMP0167 OLD) cmake_policy(SET CMP0167 OLD)
endif () endif ()
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON) set(Boost_USE_MULTITHREADED ON)
set(Boost_INCLUDE_DIR ${BOOST_ROOT})
set(Boost_LIBRARY_DIR "${BOOST_ROOT}/stage/lib")
find_package(Boost 1.88.0 REQUIRED COMPONENTS filesystem json log system filesystem) if (WIN32)
set(Boost_INCLUDE_DIR ${BOOST_ROOT})
set(Boost_LIBRARY_DIR "${BOOST_ROOT}/stage/lib")
endif ()
find_package(Boost 1.88.0 REQUIRED COMPONENTS filesystem json log system url log_setup)
if (Boost_FOUND) if (Boost_FOUND)
include_directories(${Boost_INCLUDE_DIR}) include_directories(${Boost_INCLUDE_DIR})
endif () endif ()
@@ -23,37 +25,56 @@ find_package(mysql-concpp REQUIRED)
set(THREADS_PREFER_PTHREAD_FLAG ON) set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
add_executable(App ./src/main.cpp add_executable(App
./src/helpers/helpers.h ${CMAKE_SOURCE_DIR}/src/main.cpp
./src/helpers/helpers.cpp ${CMAKE_SOURCE_DIR}/src/helpers/helpers.h
./src/endpoints_handlers/HandleRequest.h ${CMAKE_SOURCE_DIR}/src/helpers/helpers.cpp
./src/endpoints_handlers/IController.h ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/HandleRequest.h
./src/endpoints_handlers/Controller.h ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/IController.h
./src/session/HttpSession.h ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/Controller.h
./src/session/HttpSession.cpp ${CMAKE_SOURCE_DIR}/src/session/HttpSession.h
./src/session/WebsocketSession.h ${CMAKE_SOURCE_DIR}/src/session/HttpSession.cpp
./src/session/WebsocketSession.cpp ${CMAKE_SOURCE_DIR}/src/session/WebsocketSession.h
./src/listener/Listener.h ${CMAKE_SOURCE_DIR}/src/session/WebsocketSession.cpp
./src/listener/Listener.cpp ${CMAKE_SOURCE_DIR}/src/listener/Listener.h
./src/db/mysql_connector.cpp ${CMAKE_SOURCE_DIR}/src/listener/Listener.cpp
./src/db/mysql_connector.h ${CMAKE_SOURCE_DIR}/src/db/mysql_connector.cpp
./src/DAO/IUserDAO.h ${CMAKE_SOURCE_DIR}/src/db/mysql_connector.h
./src/entities/user.h ${CMAKE_SOURCE_DIR}/src/DAO/IUserDAO.h
./src/DAO/MySQLUserDAO.cpp ${CMAKE_SOURCE_DIR}/src/dtos/user_dto.h
./src/DAO/MySQLUserDAO.h ${CMAKE_SOURCE_DIR}/src/dtos/medication_dto.h
./src/endpoints_handlers/IExecutor.h ${CMAKE_SOURCE_DIR}/src/DAO/MySQLUserDAO.cpp
./src/endpoints_handlers/AuthRegistrationExecutor.h ${CMAKE_SOURCE_DIR}/src/DAO/MySQLUserDAO.h
./src/endpoints_handlers/RootExecutor.h ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/IExecutor.h
./src/DAO/IAuthDAO.h ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/AuthRegistrationExecutor.h
./src/DAO/MemoryAuthDAO.cpp ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/RootExecutor.h
./src/DAO/MemoryAuthDAO.h ${CMAKE_SOURCE_DIR}/src/DAO/IAuthDAO.h
./src/endpoints_handlers/AuthLogoutExecutor.h ${CMAKE_SOURCE_DIR}/src/DAO/MemoryAuthDAO.cpp
./src/endpoints_handlers/AuthLoginExecutor.h ${CMAKE_SOURCE_DIR}/src/DAO/MemoryAuthDAO.h
./src/exceptions/session_exception.cpp ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/AuthLogoutExecutor.h
./src/exceptions/session_exception.h ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/AuthLoginExecutor.h
src/log/Log.h ${CMAKE_SOURCE_DIR}/src/exceptions/session_exception.cpp
src/log/Log.cpp ${CMAKE_SOURCE_DIR}/src/exceptions/session_exception.h
tests/fixtures/AuthFixture.h ${CMAKE_SOURCE_DIR}/src/log/Log.h
${CMAKE_SOURCE_DIR}/src/log/Log.cpp
${CMAKE_SOURCE_DIR}/tests/fixtures/AuthFixture.h
${CMAKE_SOURCE_DIR}/src/endpoints_handlers/GetUserMedicationsExecutor.h
${CMAKE_SOURCE_DIR}/src/DAO/IMedicationsDAO.h
${CMAKE_SOURCE_DIR}/src/DAO/MySQLMedicationsDAO.h
${CMAKE_SOURCE_DIR}/src/DAO/MySQLMedicationsDAO.cpp
${CMAKE_SOURCE_DIR}/src/dtos/user_treatment_scheme_dto.h
${CMAKE_SOURCE_DIR}/src/DAO/IUserTreatmentSchemesDAO.h
${CMAKE_SOURCE_DIR}/src/DAO/MySQLUserTreatmentSchemesDAO.cpp
${CMAKE_SOURCE_DIR}/src/DAO/MySQLUserTreatmentSchemesDAO.h
${CMAKE_SOURCE_DIR}/src/endpoints_handlers/GetUserTreatmentSchemeExecutor.h
${CMAKE_SOURCE_DIR}/src/endpoints_handlers/GetDiariesExecutor.h
${CMAKE_SOURCE_DIR}/src/endpoints_handlers/PostDiaryExecutor.h
${CMAKE_SOURCE_DIR}/src/endpoints_handlers/PutDiaryExecutor.h
${CMAKE_SOURCE_DIR}/src/endpoints_handlers/DeleteDiaryExecutor.h
${CMAKE_SOURCE_DIR}/src/DAO/IDiariesDAO.h
${CMAKE_SOURCE_DIR}/src/dtos/diary_dto.h
${CMAKE_SOURCE_DIR}/src/DAO/MySQLDiariesDAO.cpp
${CMAKE_SOURCE_DIR}/src/DAO/MySQLDiariesDAO.h
) )
target_link_libraries(App PRIVATE Boost::boost target_link_libraries(App PRIVATE Boost::boost
@@ -61,6 +82,8 @@ target_link_libraries(App PRIVATE Boost::boost
Boost::log Boost::log
Boost::system Boost::system
Boost::filesystem Boost::filesystem
Boost::url
Boost::log_setup
Threads::Threads Threads::Threads
mysql::concpp) mysql::concpp)
@@ -68,89 +91,97 @@ if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
endif () endif ()
add_executable(HelpersTests ./tests/helpers/helpers_TEST.cpp add_executable(HelpersTests
./src/helpers/helpers.h ${CMAKE_SOURCE_DIR}/tests/helpers/helpers_TEST.cpp
./src/helpers/helpers.cpp) ${CMAKE_SOURCE_DIR}/src/helpers/helpers.h
${CMAKE_SOURCE_DIR}/src/helpers/helpers.cpp)
target_link_libraries(HelpersTests PRIVATE Boost::boost Boost::json Boost::log) target_link_libraries(HelpersTests PRIVATE Boost::boost Boost::json Boost::log)
add_test(HelpersTests HelpersTests) add_test(HelpersTests HelpersTests)
add_executable(ControllerTests ./tests/endpoint_handlers/Controller_TEST.cpp add_executable(ControllerTests
./src/endpoints_handlers/IController.h ${CMAKE_SOURCE_DIR}/tests/endpoint_handlers/Controller_TEST.cpp
./src/endpoints_handlers/Controller.h) ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/IController.h
${CMAKE_SOURCE_DIR}/src/endpoints_handlers/Controller.h)
target_link_libraries(ControllerTests PRIVATE Boost::boost) target_link_libraries(ControllerTests PRIVATE Boost::boost)
add_test(ControllerTests ControllerTests) add_test(ControllerTests ControllerTests)
add_executable(AuthRegistrationExecutorTests ./tests/endpoint_handlers/AuthRegistrationExecutor_TEST.cpp add_executable(AuthRegistrationExecutorTests
./src/endpoints_handlers/AuthRegistrationExecutor.h ${CMAKE_SOURCE_DIR}/tests/endpoint_handlers/AuthRegistrationExecutor_TEST.cpp
./src/exceptions/session_exception.cpp ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/AuthRegistrationExecutor.h
./src/exceptions/session_exception.h ${CMAKE_SOURCE_DIR}/src/exceptions/session_exception.cpp
./src/helpers/helpers.h ${CMAKE_SOURCE_DIR}/src/exceptions/session_exception.h
./src/helpers/helpers.cpp ${CMAKE_SOURCE_DIR}/src/helpers/helpers.h
./src/DAO/MemoryAuthDAO.h ${CMAKE_SOURCE_DIR}/src/helpers/helpers.cpp
./src/DAO/MemoryAuthDAO.cpp ${CMAKE_SOURCE_DIR}/src/DAO/MemoryAuthDAO.h
./src/DAO/MySQLUserDAO.h ${CMAKE_SOURCE_DIR}/src/DAO/MemoryAuthDAO.cpp
./src/DAO/MySQLUserDAO.cpp ${CMAKE_SOURCE_DIR}/src/DAO/MySQLUserDAO.h
./src/db/mysql_connector.h ${CMAKE_SOURCE_DIR}/src/DAO/MySQLUserDAO.cpp
./src/db/mysql_connector.cpp ${CMAKE_SOURCE_DIR}/src/db/mysql_connector.h
tests/fixtures/AuthFixture.h ${CMAKE_SOURCE_DIR}/src/db/mysql_connector.cpp
tests/fixtures/AuthFixture.cpp ${CMAKE_SOURCE_DIR}/tests/fixtures/AuthFixture.h
./tests/fixtures/fixture_session_initialization_helper.h ${CMAKE_SOURCE_DIR}/tests/fixtures/AuthFixture.cpp
./tests/fixtures/fixture_session_initialization_helper.cpp) ${CMAKE_SOURCE_DIR}/tests/fixtures/fixture_session_initialization_helper.h
${CMAKE_SOURCE_DIR}/tests/fixtures/fixture_session_initialization_helper.cpp)
target_link_libraries(AuthRegistrationExecutorTests PRIVATE Boost::boost target_link_libraries(AuthRegistrationExecutorTests PRIVATE Boost::boost
Boost::json Boost::json
Boost::log Boost::log
Boost::system Boost::system
Boost::filesystem Boost::filesystem
Boost::log_setup
Threads::Threads Threads::Threads
mysql::concpp) mysql::concpp)
add_test(AuthRegistrationExecutorTests AuthRegistrationExecutorTests) add_test(AuthRegistrationExecutorTests AuthRegistrationExecutorTests)
add_executable(AuthLoginExecutorTests ./tests/endpoint_handlers/AuthLoginExecutor_TEST.cpp add_executable(AuthLoginExecutorTests
./src/endpoints_handlers/AuthRegistrationExecutor.h ${CMAKE_SOURCE_DIR}/tests/endpoint_handlers/AuthLoginExecutor_TEST.cpp
./src/exceptions/session_exception.cpp ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/AuthRegistrationExecutor.h
./src/exceptions/session_exception.h ${CMAKE_SOURCE_DIR}/src/exceptions/session_exception.cpp
./src/helpers/helpers.h ${CMAKE_SOURCE_DIR}/src/exceptions/session_exception.h
./src/helpers/helpers.cpp ${CMAKE_SOURCE_DIR}/src/helpers/helpers.h
./src/DAO/MySQLUserDAO.h ${CMAKE_SOURCE_DIR}/src/helpers/helpers.cpp
./src/DAO/MySQLUserDAO.cpp ${CMAKE_SOURCE_DIR}/src/DAO/MySQLUserDAO.h
./src/DAO/MemoryAuthDAO.h ${CMAKE_SOURCE_DIR}/src/DAO/MySQLUserDAO.cpp
./src/DAO/MemoryAuthDAO.cpp ${CMAKE_SOURCE_DIR}/src/DAO/MemoryAuthDAO.h
./src/db/mysql_connector.h ${CMAKE_SOURCE_DIR}/src/DAO/MemoryAuthDAO.cpp
./src/db/mysql_connector.cpp ${CMAKE_SOURCE_DIR}/src/db/mysql_connector.h
tests/fixtures/AuthFixture.h ${CMAKE_SOURCE_DIR}/src/db/mysql_connector.cpp
tests/fixtures/AuthFixture.cpp ${CMAKE_SOURCE_DIR}/tests/fixtures/AuthFixture.h
./tests/fixtures/fixture_session_initialization_helper.h ${CMAKE_SOURCE_DIR}/tests/fixtures/AuthFixture.cpp
./tests/fixtures/fixture_session_initialization_helper.cpp) ${CMAKE_SOURCE_DIR}/tests/fixtures/fixture_session_initialization_helper.h
${CMAKE_SOURCE_DIR}/tests/fixtures/fixture_session_initialization_helper.cpp)
target_link_libraries(AuthLoginExecutorTests PRIVATE Boost::boost target_link_libraries(AuthLoginExecutorTests PRIVATE Boost::boost
Boost::json Boost::json
Boost::log Boost::log
Boost::system Boost::system
Boost::filesystem Boost::filesystem
Boost::log_setup
Threads::Threads Threads::Threads
mysql::concpp) mysql::concpp)
add_test(AuthLoginExecutorTests AuthLoginExecutorTests) add_test(AuthLoginExecutorTests AuthLoginExecutorTests)
add_executable(AuthLogoutExecutorTests ./tests/endpoint_handlers/AuthLogoutExecutor_TEST.cpp add_executable(AuthLogoutExecutorTests
./src/endpoints_handlers/AuthRegistrationExecutor.h ${CMAKE_SOURCE_DIR}/tests/endpoint_handlers/AuthLogoutExecutor_TEST.cpp
./src/exceptions/session_exception.cpp ${CMAKE_SOURCE_DIR}/src/endpoints_handlers/AuthRegistrationExecutor.h
./src/exceptions/session_exception.h ${CMAKE_SOURCE_DIR}/src/exceptions/session_exception.cpp
./src/helpers/helpers.h ${CMAKE_SOURCE_DIR}/src/exceptions/session_exception.h
./src/helpers/helpers.cpp ${CMAKE_SOURCE_DIR}/src/helpers/helpers.h
./src/DAO/MySQLUserDAO.h ${CMAKE_SOURCE_DIR}/src/helpers/helpers.cpp
./src/DAO/MySQLUserDAO.cpp ${CMAKE_SOURCE_DIR}/src/DAO/MySQLUserDAO.h
./src/DAO/MemoryAuthDAO.h ${CMAKE_SOURCE_DIR}/src/DAO/MySQLUserDAO.cpp
./src/DAO/MemoryAuthDAO.cpp ${CMAKE_SOURCE_DIR}/src/DAO/MemoryAuthDAO.h
./src/db/mysql_connector.h ${CMAKE_SOURCE_DIR}/src/DAO/MemoryAuthDAO.cpp
./src/db/mysql_connector.cpp ${CMAKE_SOURCE_DIR}/src/db/mysql_connector.h
tests/fixtures/AuthFixture.h ${CMAKE_SOURCE_DIR}/src/db/mysql_connector.cpp
tests/fixtures/AuthFixture.cpp ${CMAKE_SOURCE_DIR}/tests/fixtures/AuthFixture.h
./tests/fixtures/fixture_session_initialization_helper.h ${CMAKE_SOURCE_DIR}/tests/fixtures/AuthFixture.cpp
./tests/fixtures/fixture_session_initialization_helper.cpp) ${CMAKE_SOURCE_DIR}/tests/fixtures/fixture_session_initialization_helper.h
${CMAKE_SOURCE_DIR}/tests/fixtures/fixture_session_initialization_helper.cpp)
target_link_libraries(AuthLogoutExecutorTests PRIVATE Boost::boost target_link_libraries(AuthLogoutExecutorTests PRIVATE Boost::boost
Boost::json Boost::json
Boost::log Boost::log
Boost::system Boost::system
Boost::filesystem Boost::filesystem
Boost::log_setup
Threads::Threads Threads::Threads
mysql::concpp) mysql::concpp)
add_test(AuthLogoutExecutorTests AuthLogoutExecutorTests) add_test(AuthLogoutExecutorTests AuthLogoutExecutorTests)
+52
View File
@@ -0,0 +1,52 @@
FROM ubuntu:24.04
ARG CONCPP_VER=9.4.0
ARG CONCPP_TGZ=mysql-connector-c++-${CONCPP_VER}-linux-glibc2.28-x86-64bit.tar.gz
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates curl xz-utils \
&& rm -rf /var/lib/apt/lists/*
# MySQL xDevAPI install
RUN curl -fsSL -o concpp.tgz \
"https://dev.mysql.com/get/Downloads/Connector-C++/${CONCPP_TGZ}" \
&& mkdir -p /opt \
&& tar -xzf concpp.tgz -C /opt \
&& rm concpp.tgz \
&& found_dir="$(ls -1 /opt | grep -E '^mysql-connector-c\+\+-'"${CONCPP_VER}"'-')" \
&& mv "/opt/${found_dir}" /opt/mysql-concpp
# CMake install
RUN apt-get update && apt-get install -y --no-install-recommends \
cmake build-essential \
&& rm -rf /var/lib/apt/lists/*
# Boost install
RUN curl -L --retry 5 --retry-all-errors -o /tmp/boost.tar.gz "https://archives.boost.io/release/1.88.0/source/boost_1_88_0.tar.gz" \
&& ls -lh /tmp/boost.tar.gz \
&& tar -tzf /tmp/boost.tar.gz >/dev/null
RUN mkdir -p /tmp/boost-src \
&& tar -xzf /tmp/boost.tar.gz -C /tmp/boost-src --strip-components=1 \
&& cd /tmp/boost-src \
&& ./bootstrap.sh --prefix=/usr/local
RUN cd /tmp/boost-src \
&& ./b2 -j"$(nproc)" install
ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
# Project copy
WORKDIR /project
# COPY . /project
EXPOSE 8080
# Build & Run project
CMD ["bash", "-lc", "\
set -euo pipefail; \
test -f /project/CMakeLists.txt; \
mkdir -p /project/dist; \
cmake -S /project -B /project/dist -Dmysql-concpp_DIR=/opt/mysql-concpp; \
cmake --build /project/dist -j\"$(nproc)\"; \
exec /project/dist/App 0.0.0.0 8080 . 12 mysqlx://root:root@host.docker.internal:33060 \
"]
+104 -83
View File
@@ -1,10 +1,14 @@
# Запуск(Без Docker):
- cmake .. -DBOOST_ROOT=C:\Libs\boost_1_88_0 -Dmysql-concpp_DIR=C:\Libs\mysql_connector
- cmake --build .
# Запуск(С Docker):
- $env:DOCKER_BUILDKIT=1; docker build --progress=plain -t up_and_down .
- docker run --rm -v //c/CLionProjects/UpAndDown:/project -p 8080:8080 up_and_down
# TODO: # TODO:
- ~~Сделать реальные исполнители(executors) для регистрации, авторизации, логаута~~ - ~~Сделать реальные исполнители(executors) для регистрации, авторизации, логаута~~
- Посмотреть по поводу блокировок или тред пулла при использовании базы
- Посмотреть пулл соединений(Object pool) при использовании базы данных(посмотреть api MySQL-Connector)
- Посмотреть, что дает MySQL, какие там есть возможность
- Посмотреть и подумать, что лучше - корутины или многопоточность?
- ~~Покрыть тестами класс User и AuthRegistrationExecutor~~ - ~~Покрыть тестами класс User и AuthRegistrationExecutor~~
- ~~Добавить clang-format(через CLion)~~ - ~~Добавить clang-format(через CLion)~~
- ~~Перевести GetByUUID GetByLogin на const ref/string_view в IUserDAO - также не vector, а span(погуглить)~~ - span не применим - ~~Перевести GetByUUID GetByLogin на const ref/string_view в IUserDAO - также не vector, а span(погуглить)~~ - span не применим
@@ -18,11 +22,36 @@
- ~~Покрыть логами~~ - ~~Покрыть логами~~
- ~~Сделать один класс исключений, имеющих метод HTTP code - код и сообщение записывать уже в ловушке~~ - ~~Сделать один класс исключений, имеющих метод HTTP code - код и сообщение записывать уже в ловушке~~
- ~~Сделать интеграционный тест по ручкам~~ - ~~Сделать интеграционный тест по ручкам~~
- UseCase'ы по работе с личным кабинетом
- Научиться поднимать базы данных под каждый тест - научиться Docker - docker-compose - а если тест что-то должен заполнить, то он заполняет в самом начале()
- Возможно, сделать тесты на CI/CD - приоритет - низкий
- ~~Заменить internal_server_error на bad_request и перепроверить коды ошибок~~ - ~~Заменить internal_server_error на bad_request и перепроверить коды ошибок~~
- ~~Создание и удаление вспомогательных классов должно быть вынесено в фикстуру~~ - ~~Создание и удаление вспомогательных классов должно быть вынесено в фикстуру~~
- ~~К следующему занятию сделать ручку из кейса 3 + восстановить фикстуры из тестов~~
- Посмотреть по поводу блокировок или тред пулла при использовании базы
- Посмотреть пулл соединений(Object pool) при использовании базы данных(посмотреть api MySQL-Connector)
- Посмотреть и подумать, что лучше - корутины или многопоточность?
- UseCase'ы по работе с личным кабинетом
- Найти слабые места в C++ -- std::forward, universal reference, просмотреть про decltype(почитать статьи)
- ~~Разобрать decltype и auto по статье~~
- Подготовить резюме для тестовых собесов
- DockerHosting.ru - купить аренду после того, как будет готов фронт и бэк
До 27.01.2026
- ~~Подобрать сервер по параметрам. Использовать linux.~~
- ~~Перевести string на string_view~~
- ~~Попробовать nodiscard к executoru~~
- ~~Добить 2 ручки~~
До 10.02.2026
- Сделать 2-3 теста
- Продвинуться по фронтенду(форма авторизации и логина)
- Сделать Dockerfile & Docker-compose(очищать и заполнять базу после каждого тест-кейса)
- Возможно, сделать тесты на CI/CD - приоритет - низкий
- Научиться поднимать базы данных под каждый тест - научиться Docker - docker-compose - а если тест что-то должен заполнить, то он заполняет в самом начале
- Проставить const на немутабельные объекты
# План
1)Добить бэкенд(2 ручки) (до февраля)
2)Сделать деплой(до марта)
3)Сделать фронтенд для MVP
4)Делаем веб-чат и роль доктора
5)Читать книгу Мейерса "Эффективный и современный C++" до ???
# UseCase'ы приложения: # UseCase'ы приложения:
@@ -65,7 +94,6 @@
##### Требования к валидации: ##### Требования к валидации:
* login: 3-50 символов, ^[A-Za-z0-9_]+$, уникальное значение * login: 3-50 символов, ^[A-Za-z0-9_]+$, уникальное значение
* password: ≥ 5 символов * password: ≥ 5 символов
##### Response - 201 - Created ##### Response - 201 - Created
``` ```
{ {
@@ -75,7 +103,6 @@
} }
} }
``` ```
##### Errors ##### Errors
* `409 USER_EXISTS` — пользователь с таким логином уже есть(`B1`) * `409 USER_EXISTS` — пользователь с таким логином уже есть(`B1`)
* `422 VALIDATION_FAILED` — пустой логин/неправильный пароль(`B2`) * `422 VALIDATION_FAILED` — пустой логин/неправильный пароль(`B2`)
@@ -131,12 +158,10 @@
"token": af32df3bas739f272bd109c823 "token": af32df3bas739f272bd109c823
} }
``` ```
##### Errors ##### Errors
* `401 BAD_CREDENTIALS` — неверный логин/пароль (B1) * `401 BAD_CREDENTIALS` — неверный логин/пароль (B1)
* `422 VALIDATION_FAILED` — пустые поля (B2) * `422 VALIDATION_FAILED` — пустые поля (B2)
* `400 BAD_REQUEST` — сервер не смог десереализовать JSON * `400 BAD_REQUEST` — сервер не смог десереализовать JSON
#### Logout-Request #### Logout-Request
``` ```
{ {
@@ -178,8 +203,7 @@ null
* Пользователю доступны операции добавления, модификации и удаления записей, а также схем лечения * Пользователю доступны операции добавления, модификации и удаления записей, а также схем лечения
### 8.API-Маршруты ### 8.API-Маршруты
* `GET /api/v1/User/Diaries` - получить кусок дневника пользователя (требует Authorization: Bearer <token>) query-параметры: from (int, по умолч. 0), count (int, по умолч. 20) * `GET /api/v1/User/Diaries` - получить кусок дневника пользователя (требует Authorization: Bearer <token>) query-параметры: from (int, по умолч. 0), count (int, по умолч. 20)
* `GET /api/v1/User/TreatmentSchemes` - получить список схем пользователя (требует Authorization: Bearer <token>) query-параметры: from (int, по умолч. 0), count (int, по умолч. 20) * `GET /api/v1/UserTreatmentSchemes` - получить список схем пользователя (требует Authorization: Bearer <token>) query-параметры: from (int, по умолч. 0), count (int, по умолч. 20)
### 9.Контракт ### 9.Контракт
#### Diaries-Request #### Diaries-Request
##### Response - 200 - OK ##### Response - 200 - OK
@@ -197,63 +221,33 @@ null
"dream_level": 6, "dream_level": 6,
"anxiety_level": 7, "anxiety_level": 7,
"comment": "Накрыл психоз. Выпил одну таблетку аминазина" "comment": "Накрыл психоз. Выпил одну таблетку аминазина"
"treatment_scheme": { "user_treatment_scheme_uuid": bf6d1555-39e9-4d73-8928-4763627f4dd5
"uuid": "bf6d1555-39e9-4d73-8928-4763627f4dd5",
"treatment_name": "Bipolar I Scheme",
"instructions": "Контроль лития в крови раз в 2 месяца. Анализ крови через вену."
"medications": [
{
"uuid": "9bf2dfa9-3add-413c-9a0e-ff605088f1d5",
name: "Haloperidol",
dose: 10
unit: "mg",
"is_urgent": false
},
{
"uuid": "8af2dfa9-3add-413c-9a0e-ff605088f1d5",
"name": "Litii Carbonate",
"dose": 1800,
"unit": "mg",
"is_urgent": false
}
]
}
} }
] ]
} }
``` ```
##### Errors ##### Errors
* `401 TOKEN_REQUIRED|TOKEN_EXPIRED` — токен недействителен, либо отсутствует * `401 TOKEN_REQUIRED|TOKEN_EXPIRED` — токен недействителен, либо отсутствует
* `500 DATA_LOAD_FAILED` — ошибка при загрузке данных (`B1`) * `500 DATA_LOAD_FAILED` — ошибка при загрузке данных (`B1`)
#### UserTreatmentSchemes-Request
#### TreatmentSchemes-Request
##### Response - 200 - OK ##### Response - 200 - OK
``` ```
{ {
"treatment_schemes": [ "user_treatment_schemes": [
{ {
"uuid": "248313cb-a75e-4331-8379-d3f2fc36b68d" "uuid": "248313cb-a75e-4331-8379-d3f2fc36b68d"
"treatment_name": "Bipolar I Scheme Urgent", "treatment_name": "Bipolar I Scheme Urgent",
"instructions": "Схема для бытрого и жесткого купирования психозов. Аминазин пить каждый день.", "instructions": "Схема для быстрого и жесткого купирования психозов. Аминазин пить каждый день.",
"medications": [ "medications": [
{ "eda5a5f7-167a-44b9-900d-c5c6acfc249b"
"uuid": "eda5a5f7-167a-44b9-900d-c5c6acfc249b",
"name": "Aminazin",
"dose": 100,
"unit": "mg",
"is_urgent": true
}
] ]
} }
] ]
} }
``` ```
##### Errors ##### Errors
* `401 TOKEN_REQUIRED|TOKEN_EXPIRED` — токен недействителен, либо отсутствует * `401 TOKEN_REQUIRED|TOKEN_EXPIRED` — токен недействителен, либо отсутствует
* `500 DATA_LOAD_FAILED` — ошибка при загрузке данных (B1) * `500 DATA_LOAD_FAILED` — ошибка при загрузке данных (B1)
### 10. Используемые сущности ДБ ### 10. Используемые сущности ДБ
* diaries(uuid(PK), time , mania_level , depression_level , mood_level , activity_level , appetite_level , dream_level , anxiety_level, user_treatment_schemes_uuid) * diaries(uuid(PK), time , mania_level , depression_level , mood_level , activity_level , appetite_level , dream_level , anxiety_level, user_treatment_schemes_uuid)
* mania(level(PK)) * mania(level(PK))
@@ -289,7 +283,7 @@ null
### 7.Постусловия ### 7.Постусловия
* Пользователь добавил запись с указанной датой и прочими состояниями в БД * Пользователь добавил запись с указанной датой и прочими состояниями в БД
### 8.API-Маршруты ### 8.API-Маршруты
* `POST /api/v1/Auth/Diaries` - Создание записи в дневнике * `POST /api/v1/User/Diaries` - Создание записи в дневнике
### 9.Контракт ### 9.Контракт
#### Diaries-Request #### Diaries-Request
``` ```
@@ -310,7 +304,6 @@ null
##### Требования к валидации: ##### Требования к валидации:
* Все поля, кроме `comment` обязательны к заполнению * Все поля, кроме `comment` обязательны к заполнению
* `user_treatment_schemes_uuid` должен указывать на существующую схему лечения * `user_treatment_schemes_uuid` должен указывать на существующую схему лечения
##### Response - 201 - Created ##### Response - 201 - Created
``` ```
{ {
@@ -325,29 +318,14 @@ null
`dream_level`: "5", `dream_level`: "5",
`anxiety_level`: "9", `anxiety_level`: "9",
`comment`: "Сильная тревога. Пришлось выпить аминазин", `comment`: "Сильная тревога. Пришлось выпить аминазин",
`user_treatment_scheme`: { `user_treatment_scheme`: "51351bb1-7563-479d-a8e9-201d0ff934c2"
"uuid": "248313cb-a75e-4331-8379-d3f2fc36b68d"
"treatment_name": "Bipolar I Scheme Urgent",
"instructions": "Схема для быстрого и жесткого купирования психозов. Аминазин пить каждый день.",
"medications": [
{
"uuid": "eda5a5f7-167a-44b9-900d-c5c6acfc249b",
"name": "Aminazin",
"dose": 100,
"unit": "mg",
"is_urgent": true
}
]
},
} }
``` ```
##### Errors ##### Errors
* `400 BAD_REQUEST` — отсутствуют обязательные поля * `400 BAD_REQUEST` — отсутствуют обязательные поля
* `400 BAD_REQUEST` — сервер не смог десереализовать JSON * `400 BAD_REQUEST` — сервер не смог десереализовать JSON
* `422 UNPROCECCABLE_ENTITY` - Во `time` значение размерностей ниже, чем день, должно быть равно 0 * `422 UNPROCECCABLE_ENTITY` - Во `time` значение размерностей ниже, чем день, должно быть равно 0
* `422 TREATMENT_SCHEME_IS_NOT_EXISTS` - такой схемы лечения болезни не существует * `422 TREATMENT_SCHEME_IS_NOT_EXISTS` - такой схемы лечения болезни не существует
### 10. Используемые сущности ДБ ### 10. Используемые сущности ДБ
* diaries(uuid(PK), time , mania_level , depression_level , mood_level , activity_level , appetite_level , dream_level , anxiety_level, user_treatment_schemes_uuid) * diaries(uuid(PK), time , mania_level , depression_level , mood_level , activity_level , appetite_level , dream_level , anxiety_level, user_treatment_schemes_uuid)
* mania(level(PK)) * mania(level(PK))
@@ -384,9 +362,7 @@ null
### 7.Постусловия ### 7.Постусловия
* Пользователь изменил запись соглсано условиям выше в БД * Пользователь изменил запись соглсано условиям выше в БД
### 8.API-Маршруты ### 8.API-Маршруты
* `PUT /api/v1/Auth/Diaries/:diary_guid` - Изменение записи в дневнике * `PUT /api/v1/User/Diaries/:diary_guid` - Изменение записи в дневнике
### 9.Контракт ### 9.Контракт
#### Diaries-Request #### Diaries-Request
``` ```
@@ -408,7 +384,6 @@ null
##### Требования к валидации: ##### Требования к валидации:
* Все поля, кроме `comment` обязательны к заполнению * Все поля, кроме `comment` обязательны к заполнению
* `user_treatment_schemes_uuid` должен указывать на существующую схему лечения * `user_treatment_schemes_uuid` должен указывать на существующую схему лечения
##### Response - 201 - Updated ##### Response - 201 - Updated
``` ```
{ {
@@ -428,13 +403,7 @@ null
"treatment_name": "Bipolar I Scheme Urgent", "treatment_name": "Bipolar I Scheme Urgent",
"instructions": "Схема для быстрого и жесткого купирования психозов. Аминазин пить каждый день.", "instructions": "Схема для быстрого и жесткого купирования психозов. Аминазин пить каждый день.",
"medications": [ "medications": [
{ "eda5a5f7-167a-44b9-900d-c5c6acfc249b"
"uuid": "eda5a5f7-167a-44b9-900d-c5c6acfc249b",
"name": "Aminazin",
"dose": 100,
"unit": "mg",
"is_urgent": true
}
] ]
}, },
} }
@@ -444,7 +413,6 @@ null
* `400 BAD_REQUEST` — сервер не смог десереализовать JSON * `400 BAD_REQUEST` — сервер не смог десереализовать JSON
* `422 UNPROCECCABLE_ENTITY` - `time` не должно быть изменено * `422 UNPROCECCABLE_ENTITY` - `time` не должно быть изменено
* `422 TREATMENT_SCHEME_IS_NOT_EXISTS` - такой схемы лечения болезни не существует * `422 TREATMENT_SCHEME_IS_NOT_EXISTS` - такой схемы лечения болезни не существует
### 10. Используемые сущности ДБ ### 10. Используемые сущности ДБ
* diaries(uuid(PK), time , mania_level , depression_level , mood_level , activity_level , appetite_level , dream_level , anxiety_level, user_treatment_schemes_uuid) * diaries(uuid(PK), time , mania_level , depression_level , mood_level , activity_level , appetite_level , dream_level , anxiety_level, user_treatment_schemes_uuid)
* mania(level(PK)) * mania(level(PK))
@@ -463,7 +431,7 @@ null
### 3.Цель: Удаление ненужной записи в дневнике ### 3.Цель: Удаление ненужной записи в дневнике
### 4.Предусловия: ### 4.Предусловия:
* Пользователь авторизован в системе * Пользователь авторизован в системе
* Пользователю пен вывод целевой записи, которую необходимо удалить * Пользователю доступен вывод целевой записи, которую необходимо удалить
### 5.Основной поток: ### 5.Основной поток:
#### А1.Пользователь Удаляет существующую запись в дневнике #### А1.Пользователь Удаляет существующую запись в дневнике
* Пользователь нажимает на кнопку удаления записи * Пользователь нажимает на кнопку удаления записи
@@ -477,19 +445,72 @@ null
### 7.Постусловия ### 7.Постусловия
* Целевая запись отсутствует в БД * Целевая запись отсутствует в БД
### 8.API-Маршруты ### 8.API-Маршруты
* `DELETE /api/v1/Auth/Diaries/:diary_guid` - удаление записи в дневнике * `DELETE /api/v1/User/Diaries/:diary_guid` - удаление записи в дневнике
### 9.Контракт ### 9.Контракт
#### Diaries-Request #### Diaries-Request
##### Требования к валидации: ##### Требования к валидации:
* `:diary_guid` должен указывать на существующую страницу дневника * `:diary_guid` должен указывать на существующую страницу дневника
##### Response - 204 - Deleted ##### Response - 204 - Deleted
``` ```
null null
``` ```
##### Errors ##### Errors
* `404 NOT_FOUND` - такой схемы лечения болезни никогда не существовало или она уже удалена * `404 NOT_FOUND` - такой схемы лечения болезни никогда не существовало или она уже удалена
### 10. Используемые сущности ДБ ### 10. Используемые сущности ДБ
* diaries(uuid(PK)) * diaries(uuid(PK))
## UseCase №7
### 1.Название: Создание схемы лечения
### 2.Актор: Пользователь
### 3.Цель: Предоставление пользователю способа лечения
### 4.Предусловия:
* Пользователь авторизован в системе
* Пользователю доступен функционал создания схем лечения
### 5.Основной поток:
#### А1.Пользователь создает схему лечения
* Пользователь указывает название схемы
* Пользователь пишет к схема инструкцию
* Пользователь добавляет к схеме лекарства
### 6.Потоки исключений:
#### B1.Пользователь отказался заполнять схему леккарствами
* Схему нельзя создать в таком виде. На попытку создать схему выходит окно ошибок
### 7.Постусловия
* Схема создана и доступна для выбора в качестве лечения
### 8.API-маршруты
* `POST /api/v1/TreatmentScheme` - создание схемы лечения
### 9.Контракт
#### Diaries-Request
```
{
"treatment_name": "Bipolar I Scheme Urgent",
"instructions": "Схема для быстрого и жесткого купирования психозов. Аминазин пить каждый день.",
"medications": [
"eca5a5f7-167a-44b9-900d-c5c6acfc249b",
"eda5a5f7-167a-44b9-900d-c5c6acfc249b"
]
}
```
##### Требования к валидации:
* `treatment_name` обязателен к заполнению
* `medications` должен содержать хотя бы одно лекарство
##### Response - 200 - Updated
```
{
"uuid": "eda5a5f7-167a-44b9-900d-c5c6acfc249b"
"treatment_name": "Bipolar I Scheme Urgent",
"instructions": "Схема для быстрого и жесткого купирования психозов. Аминазин пить каждый день.",
"medications": [
"eca5a5f7-167a-44b9-900d-c5c6acfc249b",
"eda5a5f7-167a-44b9-900d-c5c6acfc249b"
]
}
```
##### Errors
* `400 BAD_REQUEST` — сервер не смог десереализовать JSON
* `400 BAD_REQUEST` — Обязательные поля заполнены неправильно
### 10. Используемые сущности ДБ
* user_treatment_schemes(uuid, user_uuid, treatment_name, instructions)
* medications(uuid, name, dose, unit, is_urgent)
* treatment_schemes(user_treatment_schemes_uuid, medication_uuid)
-42
View File
@@ -1,42 +0,0 @@
{
"graph_lock": {
"nodes": {
"0": {
"options": "boost:asio_no_deprecated=False\nboost:buildid=None\nboost:bzip2=True\nboost:debug_level=0\nboost:diagnostic_definitions=False\nboost:error_code_header_only=False\nboost:extra_b2_flags=None\nboost:filesystem_no_deprecated=False\nboost:filesystem_use_std_fs=False\nboost:filesystem_version=None\nboost:header_only=False\nboost:i18n_backend=deprecated\nboost:i18n_backend_iconv=off\nboost:i18n_backend_icu=False\nboost:layout=system\nboost:lzma=False\nboost:magic_autolink=False\nboost:multithreading=True\nboost:namespace=boost\nboost:namespace_alias=False\nboost:pch=True\nboost:python_executable=None\nboost:python_version=None\nboost:segmented_stacks=False\nboost:shared=False\nboost:system_no_deprecated=False\nboost:system_use_utf8=False\nboost:visibility=hidden\nboost:without_atomic=False\nboost:without_chrono=False\nboost:without_cobalt=True\nboost:without_container=False\nboost:without_context=False\nboost:without_contract=False\nboost:without_coroutine=False\nboost:without_date_time=False\nboost:without_exception=False\nboost:without_fiber=True\nboost:without_filesystem=False\nboost:without_graph=False\nboost:without_graph_parallel=True\nboost:without_iostreams=False\nboost:without_json=False\nboost:without_locale=False\nboost:without_log=False\nboost:without_math=False\nboost:without_mpi=True\nboost:without_nowide=False\nboost:without_program_options=False\nboost:without_python=True\nboost:without_random=False\nboost:without_regex=False\nboost:without_serialization=False\nboost:without_stacktrace=False\nboost:without_system=False\nboost:without_test=False\nboost:without_thread=False\nboost:without_timer=False\nboost:without_type_erasure=False\nboost:without_url=False\nboost:without_wave=False\nboost:zlib=True\nboost:zstd=False\nbzip2:build_executable=True\nbzip2:shared=False\nzlib:shared=False",
"requires": [
"1"
],
"path": "..\\conanfile.txt",
"context": "host"
},
"1": {
"ref": "boost/1.84.0",
"options": "asio_no_deprecated=False\nbuildid=None\nbzip2=True\ndebug_level=0\ndiagnostic_definitions=False\nerror_code_header_only=False\nextra_b2_flags=None\nfilesystem_no_deprecated=False\nfilesystem_use_std_fs=False\nfilesystem_version=None\nheader_only=False\ni18n_backend=deprecated\ni18n_backend_iconv=off\ni18n_backend_icu=False\nlayout=system\nlzma=False\nmagic_autolink=False\nmultithreading=True\nnamespace=boost\nnamespace_alias=False\npch=True\npython_executable=None\npython_version=None\nsegmented_stacks=False\nshared=False\nsystem_no_deprecated=False\nsystem_use_utf8=False\nvisibility=hidden\nwithout_atomic=False\nwithout_chrono=False\nwithout_cobalt=True\nwithout_container=False\nwithout_context=False\nwithout_contract=False\nwithout_coroutine=False\nwithout_date_time=False\nwithout_exception=False\nwithout_fiber=True\nwithout_filesystem=False\nwithout_graph=False\nwithout_graph_parallel=True\nwithout_iostreams=False\nwithout_json=False\nwithout_locale=False\nwithout_log=False\nwithout_math=False\nwithout_mpi=True\nwithout_nowide=False\nwithout_program_options=False\nwithout_python=True\nwithout_random=False\nwithout_regex=False\nwithout_serialization=False\nwithout_stacktrace=False\nwithout_system=False\nwithout_test=False\nwithout_thread=False\nwithout_timer=False\nwithout_type_erasure=False\nwithout_url=False\nwithout_wave=False\nzlib=True\nzstd=False\nbzip2:build_executable=True\nbzip2:shared=False\nzlib:shared=False",
"package_id": "e50863e182b9f1a9ce9e711c031065f1fe5f7f78",
"prev": "0",
"requires": [
"2",
"3"
],
"context": "host"
},
"2": {
"ref": "zlib/1.3.1",
"options": "shared=False",
"package_id": "5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b",
"prev": "0",
"context": "host"
},
"3": {
"ref": "bzip2/1.0.8",
"options": "build_executable=True\nshared=False",
"package_id": "53b5fd22ba061620078deefdae9a437c5f693201",
"prev": "0",
"context": "host"
}
},
"revisions_enabled": false
},
"version": "0.4",
"profile_host": "[settings]\narch=x86_64\narch_build=x86_64\nbuild_type=Release\ncompiler=Visual Studio\ncompiler.runtime=MD\ncompiler.version=17\nos=Windows\nos_build=Windows\n[options]\n[build_requires]\n[env]\n"
}
-1020
View File
@@ -1,1020 +0,0 @@
include(CMakeParseArguments)
macro(conan_find_apple_frameworks FRAMEWORKS_FOUND FRAMEWORKS SUFFIX BUILD_TYPE)
if(APPLE)
if(CMAKE_BUILD_TYPE)
set(_BTYPE ${CMAKE_BUILD_TYPE})
elseif(NOT BUILD_TYPE STREQUAL "")
set(_BTYPE ${BUILD_TYPE})
endif()
if(_BTYPE)
if(${_BTYPE} MATCHES "Debug|_DEBUG")
set(CONAN_FRAMEWORKS${SUFFIX} ${CONAN_FRAMEWORKS${SUFFIX}_DEBUG} ${CONAN_FRAMEWORKS${SUFFIX}})
set(CONAN_FRAMEWORK_DIRS${SUFFIX} ${CONAN_FRAMEWORK_DIRS${SUFFIX}_DEBUG} ${CONAN_FRAMEWORK_DIRS${SUFFIX}})
elseif(${_BTYPE} MATCHES "Release|_RELEASE")
set(CONAN_FRAMEWORKS${SUFFIX} ${CONAN_FRAMEWORKS${SUFFIX}_RELEASE} ${CONAN_FRAMEWORKS${SUFFIX}})
set(CONAN_FRAMEWORK_DIRS${SUFFIX} ${CONAN_FRAMEWORK_DIRS${SUFFIX}_RELEASE} ${CONAN_FRAMEWORK_DIRS${SUFFIX}})
elseif(${_BTYPE} MATCHES "RelWithDebInfo|_RELWITHDEBINFO")
set(CONAN_FRAMEWORKS${SUFFIX} ${CONAN_FRAMEWORKS${SUFFIX}_RELWITHDEBINFO} ${CONAN_FRAMEWORKS${SUFFIX}})
set(CONAN_FRAMEWORK_DIRS${SUFFIX} ${CONAN_FRAMEWORK_DIRS${SUFFIX}_RELWITHDEBINFO} ${CONAN_FRAMEWORK_DIRS${SUFFIX}})
elseif(${_BTYPE} MATCHES "MinSizeRel|_MINSIZEREL")
set(CONAN_FRAMEWORKS${SUFFIX} ${CONAN_FRAMEWORKS${SUFFIX}_MINSIZEREL} ${CONAN_FRAMEWORKS${SUFFIX}})
set(CONAN_FRAMEWORK_DIRS${SUFFIX} ${CONAN_FRAMEWORK_DIRS${SUFFIX}_MINSIZEREL} ${CONAN_FRAMEWORK_DIRS${SUFFIX}})
endif()
endif()
foreach(_FRAMEWORK ${FRAMEWORKS})
# https://cmake.org/pipermail/cmake-developers/2017-August/030199.html
find_library(CONAN_FRAMEWORK_${_FRAMEWORK}_FOUND NAMES ${_FRAMEWORK} PATHS ${CONAN_FRAMEWORK_DIRS${SUFFIX}} CMAKE_FIND_ROOT_PATH_BOTH)
if(CONAN_FRAMEWORK_${_FRAMEWORK}_FOUND)
list(APPEND ${FRAMEWORKS_FOUND} ${CONAN_FRAMEWORK_${_FRAMEWORK}_FOUND})
else()
message(FATAL_ERROR "Framework library ${_FRAMEWORK} not found in paths: ${CONAN_FRAMEWORK_DIRS${SUFFIX}}")
endif()
endforeach()
endif()
endmacro()
#################
### BOOST
#################
set(CONAN_BOOST_ROOT "C:/.conan/029ec3/1")
set(CONAN_INCLUDE_DIRS_BOOST "C:/.conan/029ec3/1/include")
set(CONAN_LIB_DIRS_BOOST "C:/.conan/029ec3/1/lib")
set(CONAN_BIN_DIRS_BOOST )
set(CONAN_RES_DIRS_BOOST )
set(CONAN_SRC_DIRS_BOOST )
set(CONAN_BUILD_DIRS_BOOST )
set(CONAN_FRAMEWORK_DIRS_BOOST )
set(CONAN_LIBS_BOOST libboost_contract libboost_coroutine libboost_context libboost_graph libboost_iostreams libboost_json libboost_locale libboost_log_setup libboost_log libboost_math_c99 libboost_math_c99f libboost_math_c99l libboost_math_tr1 libboost_math_tr1f libboost_math_tr1l libboost_nowide libboost_program_options libboost_random libboost_regex libboost_stacktrace_noop libboost_stacktrace_windbg libboost_stacktrace_windbg_cached libboost_timer libboost_type_erasure libboost_thread libboost_chrono libboost_container libboost_date_time libboost_unit_test_framework libboost_prg_exec_monitor libboost_test_exec_monitor libboost_exception libboost_url libboost_wave libboost_filesystem libboost_atomic libboost_wserialization libboost_serialization)
set(CONAN_PKG_LIBS_BOOST libboost_contract libboost_coroutine libboost_context libboost_graph libboost_iostreams libboost_json libboost_locale libboost_log_setup libboost_log libboost_math_c99 libboost_math_c99f libboost_math_c99l libboost_math_tr1 libboost_math_tr1f libboost_math_tr1l libboost_nowide libboost_program_options libboost_random libboost_regex libboost_stacktrace_noop libboost_stacktrace_windbg libboost_stacktrace_windbg_cached libboost_timer libboost_type_erasure libboost_thread libboost_chrono libboost_container libboost_date_time libboost_unit_test_framework libboost_prg_exec_monitor libboost_test_exec_monitor libboost_exception libboost_url libboost_wave libboost_filesystem libboost_atomic libboost_wserialization libboost_serialization)
set(CONAN_SYSTEM_LIBS_BOOST ole32 dbgeng bcrypt ntdll shell32 Advapi32 user32)
set(CONAN_FRAMEWORKS_BOOST )
set(CONAN_FRAMEWORKS_FOUND_BOOST "") # Will be filled later
set(CONAN_DEFINES_BOOST "-DBOOST_STACKTRACE_USE_NOOP"
"-DBOOST_STACKTRACE_USE_WINDBG"
"-DBOOST_STACKTRACE_USE_WINDBG_CACHED"
"-DBOOST_ALL_NO_LIB")
set(CONAN_BUILD_MODULES_PATHS_BOOST )
# COMPILE_DEFINITIONS are equal to CONAN_DEFINES without -D, for targets
set(CONAN_COMPILE_DEFINITIONS_BOOST "BOOST_STACKTRACE_USE_NOOP"
"BOOST_STACKTRACE_USE_WINDBG"
"BOOST_STACKTRACE_USE_WINDBG_CACHED"
"BOOST_ALL_NO_LIB")
set(CONAN_C_FLAGS_BOOST "")
set(CONAN_CXX_FLAGS_BOOST "")
set(CONAN_SHARED_LINKER_FLAGS_BOOST "")
set(CONAN_EXE_LINKER_FLAGS_BOOST "")
# For modern cmake targets we use the list variables (separated with ;)
set(CONAN_C_FLAGS_BOOST_LIST "")
set(CONAN_CXX_FLAGS_BOOST_LIST "")
set(CONAN_SHARED_LINKER_FLAGS_BOOST_LIST "")
set(CONAN_EXE_LINKER_FLAGS_BOOST_LIST "")
# Apple Frameworks
conan_find_apple_frameworks(CONAN_FRAMEWORKS_FOUND_BOOST "${CONAN_FRAMEWORKS_BOOST}" "_BOOST" "")
# Append to aggregated values variable
set(CONAN_LIBS_BOOST ${CONAN_PKG_LIBS_BOOST} ${CONAN_SYSTEM_LIBS_BOOST} ${CONAN_FRAMEWORKS_FOUND_BOOST})
#################
### ZLIB
#################
set(CONAN_ZLIB_ROOT "C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b")
set(CONAN_INCLUDE_DIRS_ZLIB "C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/include")
set(CONAN_LIB_DIRS_ZLIB "C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/lib")
set(CONAN_BIN_DIRS_ZLIB )
set(CONAN_RES_DIRS_ZLIB )
set(CONAN_SRC_DIRS_ZLIB )
set(CONAN_BUILD_DIRS_ZLIB "C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/")
set(CONAN_FRAMEWORK_DIRS_ZLIB )
set(CONAN_LIBS_ZLIB zlib)
set(CONAN_PKG_LIBS_ZLIB zlib)
set(CONAN_SYSTEM_LIBS_ZLIB )
set(CONAN_FRAMEWORKS_ZLIB )
set(CONAN_FRAMEWORKS_FOUND_ZLIB "") # Will be filled later
set(CONAN_DEFINES_ZLIB )
set(CONAN_BUILD_MODULES_PATHS_ZLIB )
# COMPILE_DEFINITIONS are equal to CONAN_DEFINES without -D, for targets
set(CONAN_COMPILE_DEFINITIONS_ZLIB )
set(CONAN_C_FLAGS_ZLIB "")
set(CONAN_CXX_FLAGS_ZLIB "")
set(CONAN_SHARED_LINKER_FLAGS_ZLIB "")
set(CONAN_EXE_LINKER_FLAGS_ZLIB "")
# For modern cmake targets we use the list variables (separated with ;)
set(CONAN_C_FLAGS_ZLIB_LIST "")
set(CONAN_CXX_FLAGS_ZLIB_LIST "")
set(CONAN_SHARED_LINKER_FLAGS_ZLIB_LIST "")
set(CONAN_EXE_LINKER_FLAGS_ZLIB_LIST "")
# Apple Frameworks
conan_find_apple_frameworks(CONAN_FRAMEWORKS_FOUND_ZLIB "${CONAN_FRAMEWORKS_ZLIB}" "_ZLIB" "")
# Append to aggregated values variable
set(CONAN_LIBS_ZLIB ${CONAN_PKG_LIBS_ZLIB} ${CONAN_SYSTEM_LIBS_ZLIB} ${CONAN_FRAMEWORKS_FOUND_ZLIB})
#################
### BZIP2
#################
set(CONAN_BZIP2_ROOT "C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201")
set(CONAN_INCLUDE_DIRS_BZIP2 "C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/include")
set(CONAN_LIB_DIRS_BZIP2 "C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/lib")
set(CONAN_BIN_DIRS_BZIP2 "C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/bin")
set(CONAN_RES_DIRS_BZIP2 )
set(CONAN_SRC_DIRS_BZIP2 )
set(CONAN_BUILD_DIRS_BZIP2 "C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/")
set(CONAN_FRAMEWORK_DIRS_BZIP2 )
set(CONAN_LIBS_BZIP2 bz2)
set(CONAN_PKG_LIBS_BZIP2 bz2)
set(CONAN_SYSTEM_LIBS_BZIP2 )
set(CONAN_FRAMEWORKS_BZIP2 )
set(CONAN_FRAMEWORKS_FOUND_BZIP2 "") # Will be filled later
set(CONAN_DEFINES_BZIP2 )
set(CONAN_BUILD_MODULES_PATHS_BZIP2 )
# COMPILE_DEFINITIONS are equal to CONAN_DEFINES without -D, for targets
set(CONAN_COMPILE_DEFINITIONS_BZIP2 )
set(CONAN_C_FLAGS_BZIP2 "")
set(CONAN_CXX_FLAGS_BZIP2 "")
set(CONAN_SHARED_LINKER_FLAGS_BZIP2 "")
set(CONAN_EXE_LINKER_FLAGS_BZIP2 "")
# For modern cmake targets we use the list variables (separated with ;)
set(CONAN_C_FLAGS_BZIP2_LIST "")
set(CONAN_CXX_FLAGS_BZIP2_LIST "")
set(CONAN_SHARED_LINKER_FLAGS_BZIP2_LIST "")
set(CONAN_EXE_LINKER_FLAGS_BZIP2_LIST "")
# Apple Frameworks
conan_find_apple_frameworks(CONAN_FRAMEWORKS_FOUND_BZIP2 "${CONAN_FRAMEWORKS_BZIP2}" "_BZIP2" "")
# Append to aggregated values variable
set(CONAN_LIBS_BZIP2 ${CONAN_PKG_LIBS_BZIP2} ${CONAN_SYSTEM_LIBS_BZIP2} ${CONAN_FRAMEWORKS_FOUND_BZIP2})
### Definition of global aggregated variables ###
set(CONAN_PACKAGE_NAME None)
set(CONAN_PACKAGE_VERSION None)
set(CONAN_SETTINGS_ARCH "x86_64")
set(CONAN_SETTINGS_ARCH_BUILD "x86_64")
set(CONAN_SETTINGS_BUILD_TYPE "Release")
set(CONAN_SETTINGS_COMPILER "Visual Studio")
set(CONAN_SETTINGS_COMPILER_RUNTIME "MD")
set(CONAN_SETTINGS_COMPILER_VERSION "17")
set(CONAN_SETTINGS_OS "Windows")
set(CONAN_SETTINGS_OS_BUILD "Windows")
set(CONAN_DEPENDENCIES boost zlib bzip2)
# Storing original command line args (CMake helper) flags
set(CONAN_CMD_CXX_FLAGS ${CONAN_CXX_FLAGS})
set(CONAN_CMD_SHARED_LINKER_FLAGS ${CONAN_SHARED_LINKER_FLAGS})
set(CONAN_CMD_C_FLAGS ${CONAN_C_FLAGS})
# Defining accumulated conan variables for all deps
set(CONAN_INCLUDE_DIRS "C:/.conan/029ec3/1/include"
"C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/include"
"C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/include" ${CONAN_INCLUDE_DIRS})
set(CONAN_LIB_DIRS "C:/.conan/029ec3/1/lib"
"C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/lib"
"C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/lib" ${CONAN_LIB_DIRS})
set(CONAN_BIN_DIRS "C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/bin" ${CONAN_BIN_DIRS})
set(CONAN_RES_DIRS ${CONAN_RES_DIRS})
set(CONAN_FRAMEWORK_DIRS ${CONAN_FRAMEWORK_DIRS})
set(CONAN_LIBS libboost_contract libboost_coroutine libboost_context libboost_graph libboost_iostreams libboost_json libboost_locale libboost_log_setup libboost_log libboost_math_c99 libboost_math_c99f libboost_math_c99l libboost_math_tr1 libboost_math_tr1f libboost_math_tr1l libboost_nowide libboost_program_options libboost_random libboost_regex libboost_stacktrace_noop libboost_stacktrace_windbg libboost_stacktrace_windbg_cached libboost_timer libboost_type_erasure libboost_thread libboost_chrono libboost_container libboost_date_time libboost_unit_test_framework libboost_prg_exec_monitor libboost_test_exec_monitor libboost_exception libboost_url libboost_wave libboost_filesystem libboost_atomic libboost_wserialization libboost_serialization zlib bz2 ${CONAN_LIBS})
set(CONAN_PKG_LIBS libboost_contract libboost_coroutine libboost_context libboost_graph libboost_iostreams libboost_json libboost_locale libboost_log_setup libboost_log libboost_math_c99 libboost_math_c99f libboost_math_c99l libboost_math_tr1 libboost_math_tr1f libboost_math_tr1l libboost_nowide libboost_program_options libboost_random libboost_regex libboost_stacktrace_noop libboost_stacktrace_windbg libboost_stacktrace_windbg_cached libboost_timer libboost_type_erasure libboost_thread libboost_chrono libboost_container libboost_date_time libboost_unit_test_framework libboost_prg_exec_monitor libboost_test_exec_monitor libboost_exception libboost_url libboost_wave libboost_filesystem libboost_atomic libboost_wserialization libboost_serialization zlib bz2 ${CONAN_PKG_LIBS})
set(CONAN_SYSTEM_LIBS ole32 dbgeng bcrypt ntdll shell32 Advapi32 user32 ${CONAN_SYSTEM_LIBS})
set(CONAN_FRAMEWORKS ${CONAN_FRAMEWORKS})
set(CONAN_FRAMEWORKS_FOUND "") # Will be filled later
set(CONAN_DEFINES "-DBOOST_STACKTRACE_USE_NOOP"
"-DBOOST_STACKTRACE_USE_WINDBG"
"-DBOOST_STACKTRACE_USE_WINDBG_CACHED"
"-DBOOST_ALL_NO_LIB" ${CONAN_DEFINES})
set(CONAN_BUILD_MODULES_PATHS ${CONAN_BUILD_MODULES_PATHS})
set(CONAN_CMAKE_MODULE_PATH "C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/"
"C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/" ${CONAN_CMAKE_MODULE_PATH})
set(CONAN_CXX_FLAGS " ${CONAN_CXX_FLAGS}")
set(CONAN_SHARED_LINKER_FLAGS " ${CONAN_SHARED_LINKER_FLAGS}")
set(CONAN_EXE_LINKER_FLAGS " ${CONAN_EXE_LINKER_FLAGS}")
set(CONAN_C_FLAGS " ${CONAN_C_FLAGS}")
# Apple Frameworks
conan_find_apple_frameworks(CONAN_FRAMEWORKS_FOUND "${CONAN_FRAMEWORKS}" "" "")
# Append to aggregated values variable: Use CONAN_LIBS instead of CONAN_PKG_LIBS to include user appended vars
set(CONAN_LIBS ${CONAN_LIBS} ${CONAN_SYSTEM_LIBS} ${CONAN_FRAMEWORKS_FOUND})
### Definition of macros and functions ###
macro(conan_define_targets)
if(${CMAKE_VERSION} VERSION_LESS "3.1.2")
message(FATAL_ERROR "TARGETS not supported by your CMake version!")
endif() # CMAKE > 3.x
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CONAN_CMD_CXX_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CONAN_CMD_C_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CONAN_CMD_SHARED_LINKER_FLAGS}")
set(_CONAN_PKG_LIBS_BOOST_DEPENDENCIES "${CONAN_SYSTEM_LIBS_BOOST} ${CONAN_FRAMEWORKS_FOUND_BOOST} CONAN_PKG::zlib CONAN_PKG::bzip2")
string(REPLACE " " ";" _CONAN_PKG_LIBS_BOOST_DEPENDENCIES "${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES}")
conan_package_library_targets("${CONAN_PKG_LIBS_BOOST}" "${CONAN_LIB_DIRS_BOOST}"
CONAN_PACKAGE_TARGETS_BOOST "${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES}"
"" boost)
set(_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_DEBUG "${CONAN_SYSTEM_LIBS_BOOST_DEBUG} ${CONAN_FRAMEWORKS_FOUND_BOOST_DEBUG} CONAN_PKG::zlib CONAN_PKG::bzip2")
string(REPLACE " " ";" _CONAN_PKG_LIBS_BOOST_DEPENDENCIES_DEBUG "${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_DEBUG}")
conan_package_library_targets("${CONAN_PKG_LIBS_BOOST_DEBUG}" "${CONAN_LIB_DIRS_BOOST_DEBUG}"
CONAN_PACKAGE_TARGETS_BOOST_DEBUG "${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_DEBUG}"
"debug" boost)
set(_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_RELEASE "${CONAN_SYSTEM_LIBS_BOOST_RELEASE} ${CONAN_FRAMEWORKS_FOUND_BOOST_RELEASE} CONAN_PKG::zlib CONAN_PKG::bzip2")
string(REPLACE " " ";" _CONAN_PKG_LIBS_BOOST_DEPENDENCIES_RELEASE "${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_RELEASE}")
conan_package_library_targets("${CONAN_PKG_LIBS_BOOST_RELEASE}" "${CONAN_LIB_DIRS_BOOST_RELEASE}"
CONAN_PACKAGE_TARGETS_BOOST_RELEASE "${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_RELEASE}"
"release" boost)
set(_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_RELWITHDEBINFO "${CONAN_SYSTEM_LIBS_BOOST_RELWITHDEBINFO} ${CONAN_FRAMEWORKS_FOUND_BOOST_RELWITHDEBINFO} CONAN_PKG::zlib CONAN_PKG::bzip2")
string(REPLACE " " ";" _CONAN_PKG_LIBS_BOOST_DEPENDENCIES_RELWITHDEBINFO "${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_RELWITHDEBINFO}")
conan_package_library_targets("${CONAN_PKG_LIBS_BOOST_RELWITHDEBINFO}" "${CONAN_LIB_DIRS_BOOST_RELWITHDEBINFO}"
CONAN_PACKAGE_TARGETS_BOOST_RELWITHDEBINFO "${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_RELWITHDEBINFO}"
"relwithdebinfo" boost)
set(_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_MINSIZEREL "${CONAN_SYSTEM_LIBS_BOOST_MINSIZEREL} ${CONAN_FRAMEWORKS_FOUND_BOOST_MINSIZEREL} CONAN_PKG::zlib CONAN_PKG::bzip2")
string(REPLACE " " ";" _CONAN_PKG_LIBS_BOOST_DEPENDENCIES_MINSIZEREL "${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_MINSIZEREL}")
conan_package_library_targets("${CONAN_PKG_LIBS_BOOST_MINSIZEREL}" "${CONAN_LIB_DIRS_BOOST_MINSIZEREL}"
CONAN_PACKAGE_TARGETS_BOOST_MINSIZEREL "${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_MINSIZEREL}"
"minsizerel" boost)
add_library(CONAN_PKG::boost INTERFACE IMPORTED)
# Property INTERFACE_LINK_FLAGS do not work, necessary to add to INTERFACE_LINK_LIBRARIES
set_property(TARGET CONAN_PKG::boost PROPERTY INTERFACE_LINK_LIBRARIES ${CONAN_PACKAGE_TARGETS_BOOST} ${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BOOST_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BOOST_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_BOOST_LIST}>
$<$<CONFIG:Release>:${CONAN_PACKAGE_TARGETS_BOOST_RELEASE} ${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_RELEASE}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BOOST_RELEASE_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BOOST_RELEASE_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_BOOST_RELEASE_LIST}>>
$<$<CONFIG:RelWithDebInfo>:${CONAN_PACKAGE_TARGETS_BOOST_RELWITHDEBINFO} ${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_RELWITHDEBINFO}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BOOST_RELWITHDEBINFO_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BOOST_RELWITHDEBINFO_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_BOOST_RELWITHDEBINFO_LIST}>>
$<$<CONFIG:MinSizeRel>:${CONAN_PACKAGE_TARGETS_BOOST_MINSIZEREL} ${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_MINSIZEREL}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BOOST_MINSIZEREL_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BOOST_MINSIZEREL_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_BOOST_MINSIZEREL_LIST}>>
$<$<CONFIG:Debug>:${CONAN_PACKAGE_TARGETS_BOOST_DEBUG} ${_CONAN_PKG_LIBS_BOOST_DEPENDENCIES_DEBUG}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BOOST_DEBUG_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BOOST_DEBUG_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_BOOST_DEBUG_LIST}>>)
set_property(TARGET CONAN_PKG::boost PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CONAN_INCLUDE_DIRS_BOOST}
$<$<CONFIG:Release>:${CONAN_INCLUDE_DIRS_BOOST_RELEASE}>
$<$<CONFIG:RelWithDebInfo>:${CONAN_INCLUDE_DIRS_BOOST_RELWITHDEBINFO}>
$<$<CONFIG:MinSizeRel>:${CONAN_INCLUDE_DIRS_BOOST_MINSIZEREL}>
$<$<CONFIG:Debug>:${CONAN_INCLUDE_DIRS_BOOST_DEBUG}>)
set_property(TARGET CONAN_PKG::boost PROPERTY INTERFACE_COMPILE_DEFINITIONS ${CONAN_COMPILE_DEFINITIONS_BOOST}
$<$<CONFIG:Release>:${CONAN_COMPILE_DEFINITIONS_BOOST_RELEASE}>
$<$<CONFIG:RelWithDebInfo>:${CONAN_COMPILE_DEFINITIONS_BOOST_RELWITHDEBINFO}>
$<$<CONFIG:MinSizeRel>:${CONAN_COMPILE_DEFINITIONS_BOOST_MINSIZEREL}>
$<$<CONFIG:Debug>:${CONAN_COMPILE_DEFINITIONS_BOOST_DEBUG}>)
set_property(TARGET CONAN_PKG::boost PROPERTY INTERFACE_COMPILE_OPTIONS ${CONAN_C_FLAGS_BOOST_LIST} ${CONAN_CXX_FLAGS_BOOST_LIST}
$<$<CONFIG:Release>:${CONAN_C_FLAGS_BOOST_RELEASE_LIST} ${CONAN_CXX_FLAGS_BOOST_RELEASE_LIST}>
$<$<CONFIG:RelWithDebInfo>:${CONAN_C_FLAGS_BOOST_RELWITHDEBINFO_LIST} ${CONAN_CXX_FLAGS_BOOST_RELWITHDEBINFO_LIST}>
$<$<CONFIG:MinSizeRel>:${CONAN_C_FLAGS_BOOST_MINSIZEREL_LIST} ${CONAN_CXX_FLAGS_BOOST_MINSIZEREL_LIST}>
$<$<CONFIG:Debug>:${CONAN_C_FLAGS_BOOST_DEBUG_LIST} ${CONAN_CXX_FLAGS_BOOST_DEBUG_LIST}>)
set(_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES "${CONAN_SYSTEM_LIBS_ZLIB} ${CONAN_FRAMEWORKS_FOUND_ZLIB} ")
string(REPLACE " " ";" _CONAN_PKG_LIBS_ZLIB_DEPENDENCIES "${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES}")
conan_package_library_targets("${CONAN_PKG_LIBS_ZLIB}" "${CONAN_LIB_DIRS_ZLIB}"
CONAN_PACKAGE_TARGETS_ZLIB "${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES}"
"" zlib)
set(_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_DEBUG "${CONAN_SYSTEM_LIBS_ZLIB_DEBUG} ${CONAN_FRAMEWORKS_FOUND_ZLIB_DEBUG} ")
string(REPLACE " " ";" _CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_DEBUG "${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_DEBUG}")
conan_package_library_targets("${CONAN_PKG_LIBS_ZLIB_DEBUG}" "${CONAN_LIB_DIRS_ZLIB_DEBUG}"
CONAN_PACKAGE_TARGETS_ZLIB_DEBUG "${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_DEBUG}"
"debug" zlib)
set(_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_RELEASE "${CONAN_SYSTEM_LIBS_ZLIB_RELEASE} ${CONAN_FRAMEWORKS_FOUND_ZLIB_RELEASE} ")
string(REPLACE " " ";" _CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_RELEASE "${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_RELEASE}")
conan_package_library_targets("${CONAN_PKG_LIBS_ZLIB_RELEASE}" "${CONAN_LIB_DIRS_ZLIB_RELEASE}"
CONAN_PACKAGE_TARGETS_ZLIB_RELEASE "${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_RELEASE}"
"release" zlib)
set(_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_RELWITHDEBINFO "${CONAN_SYSTEM_LIBS_ZLIB_RELWITHDEBINFO} ${CONAN_FRAMEWORKS_FOUND_ZLIB_RELWITHDEBINFO} ")
string(REPLACE " " ";" _CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_RELWITHDEBINFO "${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_RELWITHDEBINFO}")
conan_package_library_targets("${CONAN_PKG_LIBS_ZLIB_RELWITHDEBINFO}" "${CONAN_LIB_DIRS_ZLIB_RELWITHDEBINFO}"
CONAN_PACKAGE_TARGETS_ZLIB_RELWITHDEBINFO "${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_RELWITHDEBINFO}"
"relwithdebinfo" zlib)
set(_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_MINSIZEREL "${CONAN_SYSTEM_LIBS_ZLIB_MINSIZEREL} ${CONAN_FRAMEWORKS_FOUND_ZLIB_MINSIZEREL} ")
string(REPLACE " " ";" _CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_MINSIZEREL "${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_MINSIZEREL}")
conan_package_library_targets("${CONAN_PKG_LIBS_ZLIB_MINSIZEREL}" "${CONAN_LIB_DIRS_ZLIB_MINSIZEREL}"
CONAN_PACKAGE_TARGETS_ZLIB_MINSIZEREL "${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_MINSIZEREL}"
"minsizerel" zlib)
add_library(CONAN_PKG::zlib INTERFACE IMPORTED)
# Property INTERFACE_LINK_FLAGS do not work, necessary to add to INTERFACE_LINK_LIBRARIES
set_property(TARGET CONAN_PKG::zlib PROPERTY INTERFACE_LINK_LIBRARIES ${CONAN_PACKAGE_TARGETS_ZLIB} ${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_ZLIB_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_ZLIB_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_ZLIB_LIST}>
$<$<CONFIG:Release>:${CONAN_PACKAGE_TARGETS_ZLIB_RELEASE} ${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_RELEASE}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_ZLIB_RELEASE_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_ZLIB_RELEASE_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_ZLIB_RELEASE_LIST}>>
$<$<CONFIG:RelWithDebInfo>:${CONAN_PACKAGE_TARGETS_ZLIB_RELWITHDEBINFO} ${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_RELWITHDEBINFO}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_ZLIB_RELWITHDEBINFO_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_ZLIB_RELWITHDEBINFO_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_ZLIB_RELWITHDEBINFO_LIST}>>
$<$<CONFIG:MinSizeRel>:${CONAN_PACKAGE_TARGETS_ZLIB_MINSIZEREL} ${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_MINSIZEREL}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_ZLIB_MINSIZEREL_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_ZLIB_MINSIZEREL_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_ZLIB_MINSIZEREL_LIST}>>
$<$<CONFIG:Debug>:${CONAN_PACKAGE_TARGETS_ZLIB_DEBUG} ${_CONAN_PKG_LIBS_ZLIB_DEPENDENCIES_DEBUG}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_ZLIB_DEBUG_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_ZLIB_DEBUG_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_ZLIB_DEBUG_LIST}>>)
set_property(TARGET CONAN_PKG::zlib PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CONAN_INCLUDE_DIRS_ZLIB}
$<$<CONFIG:Release>:${CONAN_INCLUDE_DIRS_ZLIB_RELEASE}>
$<$<CONFIG:RelWithDebInfo>:${CONAN_INCLUDE_DIRS_ZLIB_RELWITHDEBINFO}>
$<$<CONFIG:MinSizeRel>:${CONAN_INCLUDE_DIRS_ZLIB_MINSIZEREL}>
$<$<CONFIG:Debug>:${CONAN_INCLUDE_DIRS_ZLIB_DEBUG}>)
set_property(TARGET CONAN_PKG::zlib PROPERTY INTERFACE_COMPILE_DEFINITIONS ${CONAN_COMPILE_DEFINITIONS_ZLIB}
$<$<CONFIG:Release>:${CONAN_COMPILE_DEFINITIONS_ZLIB_RELEASE}>
$<$<CONFIG:RelWithDebInfo>:${CONAN_COMPILE_DEFINITIONS_ZLIB_RELWITHDEBINFO}>
$<$<CONFIG:MinSizeRel>:${CONAN_COMPILE_DEFINITIONS_ZLIB_MINSIZEREL}>
$<$<CONFIG:Debug>:${CONAN_COMPILE_DEFINITIONS_ZLIB_DEBUG}>)
set_property(TARGET CONAN_PKG::zlib PROPERTY INTERFACE_COMPILE_OPTIONS ${CONAN_C_FLAGS_ZLIB_LIST} ${CONAN_CXX_FLAGS_ZLIB_LIST}
$<$<CONFIG:Release>:${CONAN_C_FLAGS_ZLIB_RELEASE_LIST} ${CONAN_CXX_FLAGS_ZLIB_RELEASE_LIST}>
$<$<CONFIG:RelWithDebInfo>:${CONAN_C_FLAGS_ZLIB_RELWITHDEBINFO_LIST} ${CONAN_CXX_FLAGS_ZLIB_RELWITHDEBINFO_LIST}>
$<$<CONFIG:MinSizeRel>:${CONAN_C_FLAGS_ZLIB_MINSIZEREL_LIST} ${CONAN_CXX_FLAGS_ZLIB_MINSIZEREL_LIST}>
$<$<CONFIG:Debug>:${CONAN_C_FLAGS_ZLIB_DEBUG_LIST} ${CONAN_CXX_FLAGS_ZLIB_DEBUG_LIST}>)
set(_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES "${CONAN_SYSTEM_LIBS_BZIP2} ${CONAN_FRAMEWORKS_FOUND_BZIP2} ")
string(REPLACE " " ";" _CONAN_PKG_LIBS_BZIP2_DEPENDENCIES "${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES}")
conan_package_library_targets("${CONAN_PKG_LIBS_BZIP2}" "${CONAN_LIB_DIRS_BZIP2}"
CONAN_PACKAGE_TARGETS_BZIP2 "${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES}"
"" bzip2)
set(_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_DEBUG "${CONAN_SYSTEM_LIBS_BZIP2_DEBUG} ${CONAN_FRAMEWORKS_FOUND_BZIP2_DEBUG} ")
string(REPLACE " " ";" _CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_DEBUG "${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_DEBUG}")
conan_package_library_targets("${CONAN_PKG_LIBS_BZIP2_DEBUG}" "${CONAN_LIB_DIRS_BZIP2_DEBUG}"
CONAN_PACKAGE_TARGETS_BZIP2_DEBUG "${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_DEBUG}"
"debug" bzip2)
set(_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_RELEASE "${CONAN_SYSTEM_LIBS_BZIP2_RELEASE} ${CONAN_FRAMEWORKS_FOUND_BZIP2_RELEASE} ")
string(REPLACE " " ";" _CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_RELEASE "${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_RELEASE}")
conan_package_library_targets("${CONAN_PKG_LIBS_BZIP2_RELEASE}" "${CONAN_LIB_DIRS_BZIP2_RELEASE}"
CONAN_PACKAGE_TARGETS_BZIP2_RELEASE "${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_RELEASE}"
"release" bzip2)
set(_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_RELWITHDEBINFO "${CONAN_SYSTEM_LIBS_BZIP2_RELWITHDEBINFO} ${CONAN_FRAMEWORKS_FOUND_BZIP2_RELWITHDEBINFO} ")
string(REPLACE " " ";" _CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_RELWITHDEBINFO "${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_RELWITHDEBINFO}")
conan_package_library_targets("${CONAN_PKG_LIBS_BZIP2_RELWITHDEBINFO}" "${CONAN_LIB_DIRS_BZIP2_RELWITHDEBINFO}"
CONAN_PACKAGE_TARGETS_BZIP2_RELWITHDEBINFO "${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_RELWITHDEBINFO}"
"relwithdebinfo" bzip2)
set(_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_MINSIZEREL "${CONAN_SYSTEM_LIBS_BZIP2_MINSIZEREL} ${CONAN_FRAMEWORKS_FOUND_BZIP2_MINSIZEREL} ")
string(REPLACE " " ";" _CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_MINSIZEREL "${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_MINSIZEREL}")
conan_package_library_targets("${CONAN_PKG_LIBS_BZIP2_MINSIZEREL}" "${CONAN_LIB_DIRS_BZIP2_MINSIZEREL}"
CONAN_PACKAGE_TARGETS_BZIP2_MINSIZEREL "${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_MINSIZEREL}"
"minsizerel" bzip2)
add_library(CONAN_PKG::bzip2 INTERFACE IMPORTED)
# Property INTERFACE_LINK_FLAGS do not work, necessary to add to INTERFACE_LINK_LIBRARIES
set_property(TARGET CONAN_PKG::bzip2 PROPERTY INTERFACE_LINK_LIBRARIES ${CONAN_PACKAGE_TARGETS_BZIP2} ${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BZIP2_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BZIP2_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_BZIP2_LIST}>
$<$<CONFIG:Release>:${CONAN_PACKAGE_TARGETS_BZIP2_RELEASE} ${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_RELEASE}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BZIP2_RELEASE_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BZIP2_RELEASE_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_BZIP2_RELEASE_LIST}>>
$<$<CONFIG:RelWithDebInfo>:${CONAN_PACKAGE_TARGETS_BZIP2_RELWITHDEBINFO} ${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_RELWITHDEBINFO}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BZIP2_RELWITHDEBINFO_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BZIP2_RELWITHDEBINFO_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_BZIP2_RELWITHDEBINFO_LIST}>>
$<$<CONFIG:MinSizeRel>:${CONAN_PACKAGE_TARGETS_BZIP2_MINSIZEREL} ${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_MINSIZEREL}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BZIP2_MINSIZEREL_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BZIP2_MINSIZEREL_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_BZIP2_MINSIZEREL_LIST}>>
$<$<CONFIG:Debug>:${CONAN_PACKAGE_TARGETS_BZIP2_DEBUG} ${_CONAN_PKG_LIBS_BZIP2_DEPENDENCIES_DEBUG}
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BZIP2_DEBUG_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:${CONAN_SHARED_LINKER_FLAGS_BZIP2_DEBUG_LIST}>
$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:${CONAN_EXE_LINKER_FLAGS_BZIP2_DEBUG_LIST}>>)
set_property(TARGET CONAN_PKG::bzip2 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CONAN_INCLUDE_DIRS_BZIP2}
$<$<CONFIG:Release>:${CONAN_INCLUDE_DIRS_BZIP2_RELEASE}>
$<$<CONFIG:RelWithDebInfo>:${CONAN_INCLUDE_DIRS_BZIP2_RELWITHDEBINFO}>
$<$<CONFIG:MinSizeRel>:${CONAN_INCLUDE_DIRS_BZIP2_MINSIZEREL}>
$<$<CONFIG:Debug>:${CONAN_INCLUDE_DIRS_BZIP2_DEBUG}>)
set_property(TARGET CONAN_PKG::bzip2 PROPERTY INTERFACE_COMPILE_DEFINITIONS ${CONAN_COMPILE_DEFINITIONS_BZIP2}
$<$<CONFIG:Release>:${CONAN_COMPILE_DEFINITIONS_BZIP2_RELEASE}>
$<$<CONFIG:RelWithDebInfo>:${CONAN_COMPILE_DEFINITIONS_BZIP2_RELWITHDEBINFO}>
$<$<CONFIG:MinSizeRel>:${CONAN_COMPILE_DEFINITIONS_BZIP2_MINSIZEREL}>
$<$<CONFIG:Debug>:${CONAN_COMPILE_DEFINITIONS_BZIP2_DEBUG}>)
set_property(TARGET CONAN_PKG::bzip2 PROPERTY INTERFACE_COMPILE_OPTIONS ${CONAN_C_FLAGS_BZIP2_LIST} ${CONAN_CXX_FLAGS_BZIP2_LIST}
$<$<CONFIG:Release>:${CONAN_C_FLAGS_BZIP2_RELEASE_LIST} ${CONAN_CXX_FLAGS_BZIP2_RELEASE_LIST}>
$<$<CONFIG:RelWithDebInfo>:${CONAN_C_FLAGS_BZIP2_RELWITHDEBINFO_LIST} ${CONAN_CXX_FLAGS_BZIP2_RELWITHDEBINFO_LIST}>
$<$<CONFIG:MinSizeRel>:${CONAN_C_FLAGS_BZIP2_MINSIZEREL_LIST} ${CONAN_CXX_FLAGS_BZIP2_MINSIZEREL_LIST}>
$<$<CONFIG:Debug>:${CONAN_C_FLAGS_BZIP2_DEBUG_LIST} ${CONAN_CXX_FLAGS_BZIP2_DEBUG_LIST}>)
set(CONAN_TARGETS CONAN_PKG::boost CONAN_PKG::zlib CONAN_PKG::bzip2)
endmacro()
macro(conan_basic_setup)
set(options TARGETS NO_OUTPUT_DIRS SKIP_RPATH KEEP_RPATHS SKIP_STD SKIP_FPIC)
cmake_parse_arguments(ARGUMENTS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
if(CONAN_EXPORTED)
conan_message(STATUS "Conan: called by CMake conan helper")
endif()
if(CONAN_IN_LOCAL_CACHE)
conan_message(STATUS "Conan: called inside local cache")
endif()
if(NOT ARGUMENTS_NO_OUTPUT_DIRS)
conan_message(STATUS "Conan: Adjusting output directories")
conan_output_dirs_setup()
endif()
if(NOT ARGUMENTS_TARGETS)
conan_message(STATUS "Conan: Using cmake global configuration")
conan_global_flags()
else()
conan_message(STATUS "Conan: Using cmake targets configuration")
conan_define_targets()
endif()
if(ARGUMENTS_SKIP_RPATH)
# Change by "DEPRECATION" or "SEND_ERROR" when we are ready
conan_message(WARNING "Conan: SKIP_RPATH is deprecated, it has been renamed to KEEP_RPATHS")
endif()
if(NOT ARGUMENTS_SKIP_RPATH AND NOT ARGUMENTS_KEEP_RPATHS)
# Parameter has renamed, but we keep the compatibility with old SKIP_RPATH
conan_set_rpath()
endif()
if(NOT ARGUMENTS_SKIP_STD)
conan_set_std()
endif()
if(NOT ARGUMENTS_SKIP_FPIC)
conan_set_fpic()
endif()
conan_check_compiler()
conan_set_libcxx()
conan_set_vs_runtime()
conan_set_find_paths()
conan_include_build_modules()
conan_set_find_library_paths()
endmacro()
macro(conan_set_find_paths)
# CMAKE_MODULE_PATH does not have Debug/Release config, but there are variables
# CONAN_CMAKE_MODULE_PATH_DEBUG to be used by the consumer
# CMake can find findXXX.cmake files in the root of packages
set(CMAKE_MODULE_PATH ${CONAN_CMAKE_MODULE_PATH} ${CMAKE_MODULE_PATH})
# Make find_package() to work
set(CMAKE_PREFIX_PATH ${CONAN_CMAKE_MODULE_PATH} ${CMAKE_PREFIX_PATH})
# Set the find root path (cross build)
set(CMAKE_FIND_ROOT_PATH ${CONAN_CMAKE_FIND_ROOT_PATH} ${CMAKE_FIND_ROOT_PATH})
if(CONAN_CMAKE_FIND_ROOT_PATH_MODE_PROGRAM)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ${CONAN_CMAKE_FIND_ROOT_PATH_MODE_PROGRAM})
endif()
if(CONAN_CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ${CONAN_CMAKE_FIND_ROOT_PATH_MODE_LIBRARY})
endif()
if(CONAN_CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ${CONAN_CMAKE_FIND_ROOT_PATH_MODE_INCLUDE})
endif()
endmacro()
macro(conan_set_find_library_paths)
# CMAKE_INCLUDE_PATH, CMAKE_LIBRARY_PATH does not have Debug/Release config, but there are variables
# CONAN_INCLUDE_DIRS_DEBUG/RELEASE CONAN_LIB_DIRS_DEBUG/RELEASE to be used by the consumer
# For find_library
set(CMAKE_INCLUDE_PATH ${CONAN_INCLUDE_DIRS} ${CMAKE_INCLUDE_PATH})
set(CMAKE_LIBRARY_PATH ${CONAN_LIB_DIRS} ${CMAKE_LIBRARY_PATH})
endmacro()
macro(conan_set_vs_runtime)
if(CONAN_LINK_RUNTIME)
conan_get_policy(CMP0091 policy_0091)
if(policy_0091 STREQUAL "NEW")
if(CONAN_LINK_RUNTIME MATCHES "MTd")
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebug")
elseif(CONAN_LINK_RUNTIME MATCHES "MDd")
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL")
elseif(CONAN_LINK_RUNTIME MATCHES "MT")
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded")
elseif(CONAN_LINK_RUNTIME MATCHES "MD")
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
endif()
else()
foreach(flag CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_MINSIZEREL)
if(DEFINED ${flag})
string(REPLACE "/MD" ${CONAN_LINK_RUNTIME} ${flag} "${${flag}}")
endif()
endforeach()
foreach(flag CMAKE_C_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG)
if(DEFINED ${flag})
string(REPLACE "/MDd" ${CONAN_LINK_RUNTIME} ${flag} "${${flag}}")
endif()
endforeach()
endif()
endif()
endmacro()
macro(conan_flags_setup)
# Macro maintained for backwards compatibility
conan_set_find_library_paths()
conan_global_flags()
conan_set_rpath()
conan_set_vs_runtime()
conan_set_libcxx()
endmacro()
function(conan_message MESSAGE_OUTPUT)
if(NOT CONAN_CMAKE_SILENT_OUTPUT)
message(${ARGV${0}})
endif()
endfunction()
function(conan_get_policy policy_id policy)
if(POLICY "${policy_id}")
cmake_policy(GET "${policy_id}" _policy)
set(${policy} "${_policy}" PARENT_SCOPE)
else()
set(${policy} "" PARENT_SCOPE)
endif()
endfunction()
function(conan_find_libraries_abs_path libraries package_libdir libraries_abs_path)
foreach(_LIBRARY_NAME ${libraries})
find_library(CONAN_FOUND_LIBRARY NAMES ${_LIBRARY_NAME} PATHS ${package_libdir}
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
if(CONAN_FOUND_LIBRARY)
conan_message(STATUS "Library ${_LIBRARY_NAME} found ${CONAN_FOUND_LIBRARY}")
set(CONAN_FULLPATH_LIBS ${CONAN_FULLPATH_LIBS} ${CONAN_FOUND_LIBRARY})
else()
conan_message(STATUS "Library ${_LIBRARY_NAME} not found in package, might be system one")
set(CONAN_FULLPATH_LIBS ${CONAN_FULLPATH_LIBS} ${_LIBRARY_NAME})
endif()
unset(CONAN_FOUND_LIBRARY CACHE)
endforeach()
set(${libraries_abs_path} ${CONAN_FULLPATH_LIBS} PARENT_SCOPE)
endfunction()
function(conan_package_library_targets libraries package_libdir libraries_abs_path deps build_type package_name)
unset(_CONAN_ACTUAL_TARGETS CACHE)
unset(_CONAN_FOUND_SYSTEM_LIBS CACHE)
foreach(_LIBRARY_NAME ${libraries})
find_library(CONAN_FOUND_LIBRARY NAMES ${_LIBRARY_NAME} PATHS ${package_libdir}
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
if(CONAN_FOUND_LIBRARY)
conan_message(STATUS "Library ${_LIBRARY_NAME} found ${CONAN_FOUND_LIBRARY}")
set(_LIB_NAME CONAN_LIB::${package_name}_${_LIBRARY_NAME}${build_type})
add_library(${_LIB_NAME} UNKNOWN IMPORTED)
set_target_properties(${_LIB_NAME} PROPERTIES IMPORTED_LOCATION ${CONAN_FOUND_LIBRARY})
set(CONAN_FULLPATH_LIBS ${CONAN_FULLPATH_LIBS} ${_LIB_NAME})
set(_CONAN_ACTUAL_TARGETS ${_CONAN_ACTUAL_TARGETS} ${_LIB_NAME})
else()
conan_message(STATUS "Library ${_LIBRARY_NAME} not found in package, might be system one")
set(CONAN_FULLPATH_LIBS ${CONAN_FULLPATH_LIBS} ${_LIBRARY_NAME})
set(_CONAN_FOUND_SYSTEM_LIBS "${_CONAN_FOUND_SYSTEM_LIBS};${_LIBRARY_NAME}")
endif()
unset(CONAN_FOUND_LIBRARY CACHE)
endforeach()
# Add all dependencies to all targets
string(REPLACE " " ";" deps_list "${deps}")
foreach(_CONAN_ACTUAL_TARGET ${_CONAN_ACTUAL_TARGETS})
set_property(TARGET ${_CONAN_ACTUAL_TARGET} PROPERTY INTERFACE_LINK_LIBRARIES "${_CONAN_FOUND_SYSTEM_LIBS};${deps_list}")
endforeach()
set(${libraries_abs_path} ${CONAN_FULLPATH_LIBS} PARENT_SCOPE)
endfunction()
macro(conan_set_libcxx)
if(DEFINED CONAN_LIBCXX)
conan_message(STATUS "Conan: C++ stdlib: ${CONAN_LIBCXX}")
if(CONAN_COMPILER STREQUAL "clang" OR CONAN_COMPILER STREQUAL "apple-clang")
if(CONAN_LIBCXX STREQUAL "libstdc++" OR CONAN_LIBCXX STREQUAL "libstdc++11" )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++")
elseif(CONAN_LIBCXX STREQUAL "libc++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
endif()
endif()
if(CONAN_COMPILER STREQUAL "sun-cc")
if(CONAN_LIBCXX STREQUAL "libCstd")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=Cstd")
elseif(CONAN_LIBCXX STREQUAL "libstdcxx")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=stdcxx4")
elseif(CONAN_LIBCXX STREQUAL "libstlport")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=stlport4")
elseif(CONAN_LIBCXX STREQUAL "libstdc++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -library=stdcpp")
endif()
endif()
if(CONAN_LIBCXX STREQUAL "libstdc++11")
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
elseif(CONAN_LIBCXX STREQUAL "libstdc++")
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
endif()
endif()
endmacro()
macro(conan_set_std)
conan_message(STATUS "Conan: Adjusting language standard")
# Do not warn "Manually-specified variables were not used by the project"
set(ignorevar "${CONAN_STD_CXX_FLAG}${CONAN_CMAKE_CXX_STANDARD}${CONAN_CMAKE_CXX_EXTENSIONS}")
if (CMAKE_VERSION VERSION_LESS "3.1" OR
(CMAKE_VERSION VERSION_LESS "3.12" AND ("${CONAN_CMAKE_CXX_STANDARD}" STREQUAL "20" OR "${CONAN_CMAKE_CXX_STANDARD}" STREQUAL "gnu20")))
if(CONAN_STD_CXX_FLAG)
conan_message(STATUS "Conan setting CXX_FLAGS flags: ${CONAN_STD_CXX_FLAG}")
set(CMAKE_CXX_FLAGS "${CONAN_STD_CXX_FLAG} ${CMAKE_CXX_FLAGS}")
endif()
else()
if(CONAN_CMAKE_CXX_STANDARD)
conan_message(STATUS "Conan setting CPP STANDARD: ${CONAN_CMAKE_CXX_STANDARD} WITH EXTENSIONS ${CONAN_CMAKE_CXX_EXTENSIONS}")
set(CMAKE_CXX_STANDARD ${CONAN_CMAKE_CXX_STANDARD})
set(CMAKE_CXX_EXTENSIONS ${CONAN_CMAKE_CXX_EXTENSIONS})
endif()
endif()
endmacro()
macro(conan_set_rpath)
conan_message(STATUS "Conan: Adjusting default RPATHs Conan policies")
if(APPLE)
# https://cmake.org/Wiki/CMake_RPATH_handling
# CONAN GUIDE: All generated libraries should have the id and dependencies to other
# dylibs without path, just the name, EX:
# libMyLib1.dylib:
# libMyLib1.dylib (compatibility version 0.0.0, current version 0.0.0)
# libMyLib0.dylib (compatibility version 0.0.0, current version 0.0.0)
# /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
# /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
# AVOID RPATH FOR *.dylib, ALL LIBS BETWEEN THEM AND THE EXE
# SHOULD BE ON THE LINKER RESOLVER PATH (./ IS ONE OF THEM)
set(CMAKE_SKIP_RPATH 1 CACHE BOOL "rpaths" FORCE)
# Policy CMP0068
# We want the old behavior, in CMake >= 3.9 CMAKE_SKIP_RPATH won't affect the install_name in OSX
set(CMAKE_INSTALL_NAME_DIR "")
endif()
endmacro()
macro(conan_set_fpic)
if(DEFINED CONAN_CMAKE_POSITION_INDEPENDENT_CODE)
conan_message(STATUS "Conan: Adjusting fPIC flag (${CONAN_CMAKE_POSITION_INDEPENDENT_CODE})")
set(CMAKE_POSITION_INDEPENDENT_CODE ${CONAN_CMAKE_POSITION_INDEPENDENT_CODE})
endif()
endmacro()
macro(conan_output_dirs_setup)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
endmacro()
macro(conan_split_version VERSION_STRING MAJOR MINOR)
#make a list from the version string
string(REPLACE "." ";" VERSION_LIST "${VERSION_STRING}")
#write output values
list(LENGTH VERSION_LIST _version_len)
list(GET VERSION_LIST 0 ${MAJOR})
if(${_version_len} GREATER 1)
list(GET VERSION_LIST 1 ${MINOR})
endif()
endmacro()
macro(conan_error_compiler_version)
message(FATAL_ERROR "Detected a mismatch for the compiler version between your conan profile settings and CMake: \n"
"Compiler version specified in your conan profile: ${CONAN_COMPILER_VERSION}\n"
"Compiler version detected in CMake: ${VERSION_MAJOR}.${VERSION_MINOR}\n"
"Please check your conan profile settings (conan profile show [default|your_profile_name])\n"
"P.S. You may set CONAN_DISABLE_CHECK_COMPILER CMake variable in order to disable this check."
)
endmacro()
set(_CONAN_CURRENT_DIR ${CMAKE_CURRENT_LIST_DIR})
function(conan_get_compiler CONAN_INFO_COMPILER CONAN_INFO_COMPILER_VERSION)
conan_message(STATUS "Current conanbuildinfo.cmake directory: " ${_CONAN_CURRENT_DIR})
if(NOT EXISTS ${_CONAN_CURRENT_DIR}/conaninfo.txt)
conan_message(STATUS "WARN: conaninfo.txt not found")
return()
endif()
file (READ "${_CONAN_CURRENT_DIR}/conaninfo.txt" CONANINFO)
# MATCHALL will match all, including the last one, which is the full_settings one
string(REGEX MATCH "full_settings.*" _FULL_SETTINGS_MATCHED ${CONANINFO})
string(REGEX MATCH "compiler=([-A-Za-z0-9_ ]+)" _MATCHED ${_FULL_SETTINGS_MATCHED})
if(DEFINED CMAKE_MATCH_1)
string(STRIP "${CMAKE_MATCH_1}" _CONAN_INFO_COMPILER)
set(${CONAN_INFO_COMPILER} ${_CONAN_INFO_COMPILER} PARENT_SCOPE)
endif()
string(REGEX MATCH "compiler.version=([-A-Za-z0-9_.]+)" _MATCHED ${_FULL_SETTINGS_MATCHED})
if(DEFINED CMAKE_MATCH_1)
string(STRIP "${CMAKE_MATCH_1}" _CONAN_INFO_COMPILER_VERSION)
set(${CONAN_INFO_COMPILER_VERSION} ${_CONAN_INFO_COMPILER_VERSION} PARENT_SCOPE)
endif()
endfunction()
function(check_compiler_version)
conan_split_version(${CMAKE_CXX_COMPILER_VERSION} VERSION_MAJOR VERSION_MINOR)
if(DEFINED CONAN_SETTINGS_COMPILER_TOOLSET)
conan_message(STATUS "Conan: Skipping compiler check: Declared 'compiler.toolset'")
return()
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
# MSVC_VERSION is defined since 2.8.2 at least
# https://cmake.org/cmake/help/v2.8.2/cmake.html#variable:MSVC_VERSION
# https://cmake.org/cmake/help/v3.14/variable/MSVC_VERSION.html
if(
# 1930 = VS 17.0 (v143 toolset)
(CONAN_COMPILER_VERSION STREQUAL "17" AND NOT((MSVC_VERSION EQUAL 1930) OR (MSVC_VERSION GREATER 1930))) OR
# 1920-1929 = VS 16.0 (v142 toolset)
(CONAN_COMPILER_VERSION STREQUAL "16" AND NOT((MSVC_VERSION GREATER 1919) AND (MSVC_VERSION LESS 1930))) OR
# 1910-1919 = VS 15.0 (v141 toolset)
(CONAN_COMPILER_VERSION STREQUAL "15" AND NOT((MSVC_VERSION GREATER 1909) AND (MSVC_VERSION LESS 1920))) OR
# 1900 = VS 14.0 (v140 toolset)
(CONAN_COMPILER_VERSION STREQUAL "14" AND NOT(MSVC_VERSION EQUAL 1900)) OR
# 1800 = VS 12.0 (v120 toolset)
(CONAN_COMPILER_VERSION STREQUAL "12" AND NOT VERSION_MAJOR STREQUAL "18") OR
# 1700 = VS 11.0 (v110 toolset)
(CONAN_COMPILER_VERSION STREQUAL "11" AND NOT VERSION_MAJOR STREQUAL "17") OR
# 1600 = VS 10.0 (v100 toolset)
(CONAN_COMPILER_VERSION STREQUAL "10" AND NOT VERSION_MAJOR STREQUAL "16") OR
# 1500 = VS 9.0 (v90 toolset)
(CONAN_COMPILER_VERSION STREQUAL "9" AND NOT VERSION_MAJOR STREQUAL "15") OR
# 1400 = VS 8.0 (v80 toolset)
(CONAN_COMPILER_VERSION STREQUAL "8" AND NOT VERSION_MAJOR STREQUAL "14") OR
# 1310 = VS 7.1, 1300 = VS 7.0
(CONAN_COMPILER_VERSION STREQUAL "7" AND NOT VERSION_MAJOR STREQUAL "13") OR
# 1200 = VS 6.0
(CONAN_COMPILER_VERSION STREQUAL "6" AND NOT VERSION_MAJOR STREQUAL "12") )
conan_error_compiler_version()
endif()
elseif(CONAN_COMPILER STREQUAL "gcc")
conan_split_version(${CONAN_COMPILER_VERSION} CONAN_COMPILER_MAJOR CONAN_COMPILER_MINOR)
set(_CHECK_VERSION ${VERSION_MAJOR}.${VERSION_MINOR})
set(_CONAN_VERSION ${CONAN_COMPILER_MAJOR}.${CONAN_COMPILER_MINOR})
if(NOT ${CONAN_COMPILER_VERSION} VERSION_LESS 5.0)
conan_message(STATUS "Conan: Compiler GCC>=5, checking major version ${CONAN_COMPILER_VERSION}")
conan_split_version(${CONAN_COMPILER_VERSION} CONAN_COMPILER_MAJOR CONAN_COMPILER_MINOR)
if("${CONAN_COMPILER_MINOR}" STREQUAL "")
set(_CHECK_VERSION ${VERSION_MAJOR})
set(_CONAN_VERSION ${CONAN_COMPILER_MAJOR})
endif()
endif()
conan_message(STATUS "Conan: Checking correct version: ${_CHECK_VERSION}")
if(NOT ${_CHECK_VERSION} VERSION_EQUAL ${_CONAN_VERSION})
conan_error_compiler_version()
endif()
elseif(CONAN_COMPILER STREQUAL "clang")
conan_split_version(${CONAN_COMPILER_VERSION} CONAN_COMPILER_MAJOR CONAN_COMPILER_MINOR)
set(_CHECK_VERSION ${VERSION_MAJOR}.${VERSION_MINOR})
set(_CONAN_VERSION ${CONAN_COMPILER_MAJOR}.${CONAN_COMPILER_MINOR})
if(NOT ${CONAN_COMPILER_VERSION} VERSION_LESS 8.0)
conan_message(STATUS "Conan: Compiler Clang>=8, checking major version ${CONAN_COMPILER_VERSION}")
if("${CONAN_COMPILER_MINOR}" STREQUAL "")
set(_CHECK_VERSION ${VERSION_MAJOR})
set(_CONAN_VERSION ${CONAN_COMPILER_MAJOR})
endif()
endif()
conan_message(STATUS "Conan: Checking correct version: ${_CHECK_VERSION}")
if(NOT ${_CHECK_VERSION} VERSION_EQUAL ${_CONAN_VERSION})
conan_error_compiler_version()
endif()
elseif(CONAN_COMPILER STREQUAL "apple-clang" OR CONAN_COMPILER STREQUAL "sun-cc" OR CONAN_COMPILER STREQUAL "mcst-lcc")
conan_split_version(${CONAN_COMPILER_VERSION} CONAN_COMPILER_MAJOR CONAN_COMPILER_MINOR)
if(${CONAN_COMPILER_MAJOR} VERSION_GREATER_EQUAL "13" AND "${CONAN_COMPILER_MINOR}" STREQUAL "" AND ${CONAN_COMPILER_MAJOR} VERSION_EQUAL ${VERSION_MAJOR})
# This is correct, 13.X is considered 13
elseif(NOT ${VERSION_MAJOR}.${VERSION_MINOR} VERSION_EQUAL ${CONAN_COMPILER_MAJOR}.${CONAN_COMPILER_MINOR})
conan_error_compiler_version()
endif()
elseif(CONAN_COMPILER STREQUAL "intel")
conan_split_version(${CONAN_COMPILER_VERSION} CONAN_COMPILER_MAJOR CONAN_COMPILER_MINOR)
if(NOT ${CONAN_COMPILER_VERSION} VERSION_LESS 19.1)
if(NOT ${VERSION_MAJOR}.${VERSION_MINOR} VERSION_EQUAL ${CONAN_COMPILER_MAJOR}.${CONAN_COMPILER_MINOR})
conan_error_compiler_version()
endif()
else()
if(NOT ${VERSION_MAJOR} VERSION_EQUAL ${CONAN_COMPILER_MAJOR})
conan_error_compiler_version()
endif()
endif()
else()
conan_message(STATUS "WARN: Unknown compiler '${CONAN_COMPILER}', skipping the version check...")
endif()
endfunction()
function(conan_check_compiler)
if(CONAN_DISABLE_CHECK_COMPILER)
conan_message(STATUS "WARN: Disabled conan compiler checks")
return()
endif()
if(NOT DEFINED CMAKE_CXX_COMPILER_ID)
if(DEFINED CMAKE_C_COMPILER_ID)
conan_message(STATUS "This project seems to be plain C, using '${CMAKE_C_COMPILER_ID}' compiler")
set(CMAKE_CXX_COMPILER_ID ${CMAKE_C_COMPILER_ID})
set(CMAKE_CXX_COMPILER_VERSION ${CMAKE_C_COMPILER_VERSION})
else()
message(FATAL_ERROR "This project seems to be plain C, but no compiler defined")
endif()
endif()
if(NOT CMAKE_CXX_COMPILER_ID AND NOT CMAKE_C_COMPILER_ID)
# This use case happens when compiler is not identified by CMake, but the compilers are there and work
conan_message(STATUS "*** WARN: CMake was not able to identify a C or C++ compiler ***")
conan_message(STATUS "*** WARN: Disabling compiler checks. Please make sure your settings match your environment ***")
return()
endif()
if(NOT DEFINED CONAN_COMPILER)
conan_get_compiler(CONAN_COMPILER CONAN_COMPILER_VERSION)
if(NOT DEFINED CONAN_COMPILER)
conan_message(STATUS "WARN: CONAN_COMPILER variable not set, please make sure yourself that "
"your compiler and version matches your declared settings")
return()
endif()
endif()
if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL ${CMAKE_SYSTEM_NAME})
set(CROSS_BUILDING 1)
endif()
# If using VS, verify toolset
if (CONAN_COMPILER STREQUAL "Visual Studio")
if (CONAN_SETTINGS_COMPILER_TOOLSET MATCHES "LLVM" OR
CONAN_SETTINGS_COMPILER_TOOLSET MATCHES "llvm" OR
CONAN_SETTINGS_COMPILER_TOOLSET MATCHES "clang" OR
CONAN_SETTINGS_COMPILER_TOOLSET MATCHES "Clang")
set(EXPECTED_CMAKE_CXX_COMPILER_ID "Clang")
elseif (CONAN_SETTINGS_COMPILER_TOOLSET MATCHES "Intel")
set(EXPECTED_CMAKE_CXX_COMPILER_ID "Intel")
else()
set(EXPECTED_CMAKE_CXX_COMPILER_ID "MSVC")
endif()
if (NOT CMAKE_CXX_COMPILER_ID MATCHES ${EXPECTED_CMAKE_CXX_COMPILER_ID})
message(FATAL_ERROR "Incorrect '${CONAN_COMPILER}'. Toolset specifies compiler as '${EXPECTED_CMAKE_CXX_COMPILER_ID}' "
"but CMake detected '${CMAKE_CXX_COMPILER_ID}'")
endif()
# Avoid checks when cross compiling, apple-clang crashes because its APPLE but not apple-clang
# Actually CMake is detecting "clang" when you are using apple-clang, only if CMP0025 is set to NEW will detect apple-clang
elseif((CONAN_COMPILER STREQUAL "gcc" AND NOT CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR
(CONAN_COMPILER STREQUAL "apple-clang" AND NOT CROSS_BUILDING AND (NOT APPLE OR NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")) OR
(CONAN_COMPILER STREQUAL "clang" AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR
(CONAN_COMPILER STREQUAL "sun-cc" AND NOT CMAKE_CXX_COMPILER_ID MATCHES "SunPro") )
message(FATAL_ERROR "Incorrect '${CONAN_COMPILER}', is not the one detected by CMake: '${CMAKE_CXX_COMPILER_ID}'")
endif()
if(NOT DEFINED CONAN_COMPILER_VERSION)
conan_message(STATUS "WARN: CONAN_COMPILER_VERSION variable not set, please make sure yourself "
"that your compiler version matches your declared settings")
return()
endif()
check_compiler_version()
endfunction()
macro(conan_set_flags build_type)
set(CMAKE_CXX_FLAGS${build_type} "${CMAKE_CXX_FLAGS${build_type}} ${CONAN_CXX_FLAGS${build_type}}")
set(CMAKE_C_FLAGS${build_type} "${CMAKE_C_FLAGS${build_type}} ${CONAN_C_FLAGS${build_type}}")
set(CMAKE_SHARED_LINKER_FLAGS${build_type} "${CMAKE_SHARED_LINKER_FLAGS${build_type}} ${CONAN_SHARED_LINKER_FLAGS${build_type}}")
set(CMAKE_EXE_LINKER_FLAGS${build_type} "${CMAKE_EXE_LINKER_FLAGS${build_type}} ${CONAN_EXE_LINKER_FLAGS${build_type}}")
endmacro()
macro(conan_global_flags)
if(CONAN_SYSTEM_INCLUDES)
include_directories(SYSTEM ${CONAN_INCLUDE_DIRS}
"$<$<CONFIG:Release>:${CONAN_INCLUDE_DIRS_RELEASE}>"
"$<$<CONFIG:RelWithDebInfo>:${CONAN_INCLUDE_DIRS_RELWITHDEBINFO}>"
"$<$<CONFIG:MinSizeRel>:${CONAN_INCLUDE_DIRS_MINSIZEREL}>"
"$<$<CONFIG:Debug>:${CONAN_INCLUDE_DIRS_DEBUG}>")
else()
include_directories(${CONAN_INCLUDE_DIRS}
"$<$<CONFIG:Release>:${CONAN_INCLUDE_DIRS_RELEASE}>"
"$<$<CONFIG:RelWithDebInfo>:${CONAN_INCLUDE_DIRS_RELWITHDEBINFO}>"
"$<$<CONFIG:MinSizeRel>:${CONAN_INCLUDE_DIRS_MINSIZEREL}>"
"$<$<CONFIG:Debug>:${CONAN_INCLUDE_DIRS_DEBUG}>")
endif()
link_directories(${CONAN_LIB_DIRS})
conan_find_libraries_abs_path("${CONAN_LIBS_DEBUG}" "${CONAN_LIB_DIRS_DEBUG}"
CONAN_LIBS_DEBUG)
conan_find_libraries_abs_path("${CONAN_LIBS_RELEASE}" "${CONAN_LIB_DIRS_RELEASE}"
CONAN_LIBS_RELEASE)
conan_find_libraries_abs_path("${CONAN_LIBS_RELWITHDEBINFO}" "${CONAN_LIB_DIRS_RELWITHDEBINFO}"
CONAN_LIBS_RELWITHDEBINFO)
conan_find_libraries_abs_path("${CONAN_LIBS_MINSIZEREL}" "${CONAN_LIB_DIRS_MINSIZEREL}"
CONAN_LIBS_MINSIZEREL)
add_compile_options(${CONAN_DEFINES}
"$<$<CONFIG:Debug>:${CONAN_DEFINES_DEBUG}>"
"$<$<CONFIG:Release>:${CONAN_DEFINES_RELEASE}>"
"$<$<CONFIG:RelWithDebInfo>:${CONAN_DEFINES_RELWITHDEBINFO}>"
"$<$<CONFIG:MinSizeRel>:${CONAN_DEFINES_MINSIZEREL}>")
conan_set_flags("")
conan_set_flags("_RELEASE")
conan_set_flags("_DEBUG")
endmacro()
macro(conan_target_link_libraries target)
if(CONAN_TARGETS)
target_link_libraries(${target} ${CONAN_TARGETS})
else()
target_link_libraries(${target} ${CONAN_LIBS})
foreach(_LIB ${CONAN_LIBS_RELEASE})
target_link_libraries(${target} optimized ${_LIB})
endforeach()
foreach(_LIB ${CONAN_LIBS_DEBUG})
target_link_libraries(${target} debug ${_LIB})
endforeach()
endif()
endmacro()
macro(conan_include_build_modules)
if(CMAKE_BUILD_TYPE)
if(${CMAKE_BUILD_TYPE} MATCHES "Debug")
set(CONAN_BUILD_MODULES_PATHS ${CONAN_BUILD_MODULES_PATHS_DEBUG} ${CONAN_BUILD_MODULES_PATHS})
elseif(${CMAKE_BUILD_TYPE} MATCHES "Release")
set(CONAN_BUILD_MODULES_PATHS ${CONAN_BUILD_MODULES_PATHS_RELEASE} ${CONAN_BUILD_MODULES_PATHS})
elseif(${CMAKE_BUILD_TYPE} MATCHES "RelWithDebInfo")
set(CONAN_BUILD_MODULES_PATHS ${CONAN_BUILD_MODULES_PATHS_RELWITHDEBINFO} ${CONAN_BUILD_MODULES_PATHS})
elseif(${CMAKE_BUILD_TYPE} MATCHES "MinSizeRel")
set(CONAN_BUILD_MODULES_PATHS ${CONAN_BUILD_MODULES_PATHS_MINSIZEREL} ${CONAN_BUILD_MODULES_PATHS})
endif()
endif()
foreach(_BUILD_MODULE_PATH ${CONAN_BUILD_MODULES_PATHS})
include(${_BUILD_MODULE_PATH})
endforeach()
endmacro()
### Definition of user declared vars (user_info) ###
set(CONAN_USER_BOOST_stacktrace_addr2line_available "False")
-353
View File
@@ -1,353 +0,0 @@
[includedirs]
C:/.conan/029ec3/1/include
C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/include
C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/include
[libdirs]
C:/.conan/029ec3/1/lib
C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/lib
C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/lib
[bindirs]
C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/bin
[resdirs]
[builddirs]
C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/
C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/
[libs]
libboost_contract
libboost_coroutine
libboost_context
libboost_graph
libboost_iostreams
libboost_json
libboost_locale
libboost_log_setup
libboost_log
libboost_math_c99
libboost_math_c99f
libboost_math_c99l
libboost_math_tr1
libboost_math_tr1f
libboost_math_tr1l
libboost_nowide
libboost_program_options
libboost_random
libboost_regex
libboost_stacktrace_noop
libboost_stacktrace_windbg
libboost_stacktrace_windbg_cached
libboost_timer
libboost_type_erasure
libboost_thread
libboost_chrono
libboost_container
libboost_date_time
libboost_unit_test_framework
libboost_prg_exec_monitor
libboost_test_exec_monitor
libboost_exception
libboost_url
libboost_wave
libboost_filesystem
libboost_atomic
libboost_wserialization
libboost_serialization
zlib
bz2
[system_libs]
ole32
dbgeng
bcrypt
ntdll
shell32
Advapi32
user32
[defines]
BOOST_STACKTRACE_USE_NOOP
BOOST_STACKTRACE_USE_WINDBG
BOOST_STACKTRACE_USE_WINDBG_CACHED
BOOST_ALL_NO_LIB
[cppflags]
[cxxflags]
[cflags]
[sharedlinkflags]
[exelinkflags]
[sysroot]
[frameworks]
[frameworkdirs]
[includedirs_boost]
C:/.conan/029ec3/1/include
[libdirs_boost]
C:/.conan/029ec3/1/lib
[bindirs_boost]
[resdirs_boost]
[builddirs_boost]
[libs_boost]
libboost_contract
libboost_coroutine
libboost_context
libboost_graph
libboost_iostreams
libboost_json
libboost_locale
libboost_log_setup
libboost_log
libboost_math_c99
libboost_math_c99f
libboost_math_c99l
libboost_math_tr1
libboost_math_tr1f
libboost_math_tr1l
libboost_nowide
libboost_program_options
libboost_random
libboost_regex
libboost_stacktrace_noop
libboost_stacktrace_windbg
libboost_stacktrace_windbg_cached
libboost_timer
libboost_type_erasure
libboost_thread
libboost_chrono
libboost_container
libboost_date_time
libboost_unit_test_framework
libboost_prg_exec_monitor
libboost_test_exec_monitor
libboost_exception
libboost_url
libboost_wave
libboost_filesystem
libboost_atomic
libboost_wserialization
libboost_serialization
[system_libs_boost]
ole32
dbgeng
bcrypt
ntdll
shell32
Advapi32
user32
[defines_boost]
BOOST_STACKTRACE_USE_NOOP
BOOST_STACKTRACE_USE_WINDBG
BOOST_STACKTRACE_USE_WINDBG_CACHED
BOOST_ALL_NO_LIB
[cppflags_boost]
[cxxflags_boost]
[cflags_boost]
[sharedlinkflags_boost]
[exelinkflags_boost]
[sysroot_boost]
[frameworks_boost]
[frameworkdirs_boost]
[rootpath_boost]
C:/.conan/029ec3/1
[name_boost]
boost
[version_boost]
1.84.0
[generatornames_boost]
cmake_find_package=Boost
cmake_find_package_multi=Boost
[generatorfilenames_boost]
cmake_find_package=Boost
cmake_find_package_multi=Boost
[includedirs_zlib]
C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/include
[libdirs_zlib]
C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/lib
[bindirs_zlib]
[resdirs_zlib]
[builddirs_zlib]
C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b/
[libs_zlib]
zlib
[system_libs_zlib]
[defines_zlib]
[cppflags_zlib]
[cxxflags_zlib]
[cflags_zlib]
[sharedlinkflags_zlib]
[exelinkflags_zlib]
[sysroot_zlib]
[frameworks_zlib]
[frameworkdirs_zlib]
[rootpath_zlib]
C:/Users/Антон/.conan/data/zlib/1.3.1/_/_/package/5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b
[name_zlib]
zlib
[version_zlib]
1.3.1
[generatornames_zlib]
cmake_find_package=ZLIB
cmake_find_package_multi=ZLIB
[generatorfilenames_zlib]
[includedirs_bzip2]
C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/include
[libdirs_bzip2]
C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/lib
[bindirs_bzip2]
C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/bin
[resdirs_bzip2]
[builddirs_bzip2]
C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201/
[libs_bzip2]
bz2
[system_libs_bzip2]
[defines_bzip2]
[cppflags_bzip2]
[cxxflags_bzip2]
[cflags_bzip2]
[sharedlinkflags_bzip2]
[exelinkflags_bzip2]
[sysroot_bzip2]
[frameworks_bzip2]
[frameworkdirs_bzip2]
[rootpath_bzip2]
C:/Users/Антон/.conan/data/bzip2/1.0.8/_/_/package/53b5fd22ba061620078deefdae9a437c5f693201
[name_bzip2]
bzip2
[version_bzip2]
1.0.8
[generatornames_bzip2]
cmake_find_package=BZip2
cmake_find_package_multi=BZip2
[generatorfilenames_bzip2]
[USER_boost]
stacktrace_addr2line_available=False
[USER_bzip2]
[USER_zlib]
[ENV_boost]
BOOST_ROOT=C:\.conan\029ec3\1
[ENV_zlib]
[ENV_bzip2]
PATH=["C:\Users\Антон\.conan\data\bzip2\1.0.8\_\_\package\53b5fd22ba061620078deefdae9a437c5f693201\bin"]
-102
View File
@@ -1,102 +0,0 @@
[settings]
arch=x86_64
build_type=Release
compiler=Visual Studio
compiler.runtime=MD
compiler.version=17
os=Windows
[requires]
boost/1.Y.Z
[options]
[full_settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=Visual Studio
compiler.runtime=MD
compiler.version=17
os=Windows
os_build=Windows
[full_requires]
boost/1.84.0:e50863e182b9f1a9ce9e711c031065f1fe5f7f78
bzip2/1.0.8:53b5fd22ba061620078deefdae9a437c5f693201
zlib/1.3.1:5a61a86bb3e07ce4262c80e1510f9c05e9b6d48b
[full_options]
boost:asio_no_deprecated=False
boost:buildid=None
boost:bzip2=True
boost:debug_level=0
boost:diagnostic_definitions=False
boost:error_code_header_only=False
boost:extra_b2_flags=None
boost:filesystem_no_deprecated=False
boost:filesystem_use_std_fs=False
boost:filesystem_version=None
boost:header_only=False
boost:i18n_backend=deprecated
boost:i18n_backend_iconv=off
boost:i18n_backend_icu=False
boost:layout=system
boost:lzma=False
boost:magic_autolink=False
boost:multithreading=True
boost:namespace=boost
boost:namespace_alias=False
boost:pch=True
boost:python_executable=None
boost:python_version=None
boost:segmented_stacks=False
boost:shared=False
boost:system_no_deprecated=False
boost:system_use_utf8=False
boost:visibility=hidden
boost:without_atomic=False
boost:without_chrono=False
boost:without_cobalt=True
boost:without_container=False
boost:without_context=False
boost:without_contract=False
boost:without_coroutine=False
boost:without_date_time=False
boost:without_exception=False
boost:without_fiber=True
boost:without_filesystem=False
boost:without_graph=False
boost:without_graph_parallel=True
boost:without_iostreams=False
boost:without_json=False
boost:without_locale=False
boost:without_log=False
boost:without_math=False
boost:without_mpi=True
boost:without_nowide=False
boost:without_program_options=False
boost:without_python=True
boost:without_random=False
boost:without_regex=False
boost:without_serialization=False
boost:without_stacktrace=False
boost:without_system=False
boost:without_test=False
boost:without_thread=False
boost:without_timer=False
boost:without_type_erasure=False
boost:without_url=False
boost:without_wave=False
boost:zlib=True
boost:zstd=False
bzip2:build_executable=True
bzip2:shared=False
zlib:shared=False
[recipe_hash]
[env]
-274
View File
@@ -1,274 +0,0 @@
{
"options": [
[
"boost:asio_no_deprecated",
"False"
],
[
"boost:buildid",
"None"
],
[
"boost:bzip2",
"True"
],
[
"boost:debug_level",
"0"
],
[
"boost:diagnostic_definitions",
"False"
],
[
"boost:error_code_header_only",
"False"
],
[
"boost:extra_b2_flags",
"None"
],
[
"boost:filesystem_no_deprecated",
"False"
],
[
"boost:filesystem_use_std_fs",
"False"
],
[
"boost:filesystem_version",
"None"
],
[
"boost:header_only",
"False"
],
[
"boost:i18n_backend",
"deprecated"
],
[
"boost:i18n_backend_iconv",
"off"
],
[
"boost:i18n_backend_icu",
"False"
],
[
"boost:layout",
"system"
],
[
"boost:lzma",
"False"
],
[
"boost:magic_autolink",
"False"
],
[
"boost:multithreading",
"True"
],
[
"boost:namespace",
"boost"
],
[
"boost:namespace_alias",
"False"
],
[
"boost:pch",
"True"
],
[
"boost:python_executable",
"None"
],
[
"boost:python_version",
"None"
],
[
"boost:segmented_stacks",
"False"
],
[
"boost:shared",
"False"
],
[
"boost:system_no_deprecated",
"False"
],
[
"boost:system_use_utf8",
"False"
],
[
"boost:visibility",
"hidden"
],
[
"boost:without_atomic",
"False"
],
[
"boost:without_chrono",
"False"
],
[
"boost:without_cobalt",
"True"
],
[
"boost:without_container",
"False"
],
[
"boost:without_context",
"False"
],
[
"boost:without_contract",
"False"
],
[
"boost:without_coroutine",
"False"
],
[
"boost:without_date_time",
"False"
],
[
"boost:without_exception",
"False"
],
[
"boost:without_fiber",
"True"
],
[
"boost:without_filesystem",
"False"
],
[
"boost:without_graph",
"False"
],
[
"boost:without_graph_parallel",
"True"
],
[
"boost:without_iostreams",
"False"
],
[
"boost:without_json",
"False"
],
[
"boost:without_locale",
"False"
],
[
"boost:without_log",
"False"
],
[
"boost:without_math",
"False"
],
[
"boost:without_mpi",
"True"
],
[
"boost:without_nowide",
"False"
],
[
"boost:without_program_options",
"False"
],
[
"boost:without_python",
"True"
],
[
"boost:without_random",
"False"
],
[
"boost:without_regex",
"False"
],
[
"boost:without_serialization",
"False"
],
[
"boost:without_stacktrace",
"False"
],
[
"boost:without_system",
"False"
],
[
"boost:without_test",
"False"
],
[
"boost:without_thread",
"False"
],
[
"boost:without_timer",
"False"
],
[
"boost:without_type_erasure",
"False"
],
[
"boost:without_url",
"False"
],
[
"boost:without_wave",
"False"
],
[
"boost:zlib",
"True"
],
[
"boost:zstd",
"False"
],
[
"bzip2:build_executable",
"True"
],
[
"bzip2:shared",
"False"
],
[
"zlib:shared",
"False"
]
],
"root": {
"name": null,
"version": null,
"user": null,
"channel": null
}
}
+3 -89
View File
@@ -1,5 +1,3 @@
-- Общая рекомендация - расписать use-case'ы
CREATE SCHEMA `up_and_down` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; CREATE SCHEMA `up_and_down` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
CREATE TABLE `up_and_down`.`users` ( CREATE TABLE `up_and_down`.`users` (
@@ -87,12 +85,13 @@ CREATE TABLE `up_and_down`.`diaries` (
); );
CREATE TABLE `up_and_down`.`medications` ( CREATE TABLE `up_and_down`.`medications` (
`uuid` CHAR(36) NOT NULL, `uuid` CHAR(36) NOT NULL,
`name` TEXT NOT NULL, `name` TEXT NOT NULL,
`dose` int8 NOT NULL, `dose` int8 NOT NULL,
`unit` CHAR(30), `unit` CHAR(30),
`is_urgent` BOOL NOT NULL, `is_urgent` BOOL NOT NULL,
PRIMARY KEY (`uuid`) PRIMARY KEY (`uuid`),
UNIQUE KEY `uniq_medication` (`name`(255), `dose`, `unit`, `is_urgent`)
); );
CREATE TABLE `up_and_down`.`treatment_schemes` ( CREATE TABLE `up_and_down`.`treatment_schemes` (
@@ -102,88 +101,3 @@ CREATE TABLE `up_and_down`.`treatment_schemes` (
FOREIGN KEY (`user_treatment_schemes_uuid`) REFERENCES `user_treatment_schemes`(`uuid`), FOREIGN KEY (`user_treatment_schemes_uuid`) REFERENCES `user_treatment_schemes`(`uuid`),
FOREIGN KEY (`medication_uuid`) REFERENCES `medications`(`uuid`) FOREIGN KEY (`medication_uuid`) REFERENCES `medications`(`uuid`)
); );
-- insert constants
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (1, 'Полное отсутствие мании');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (2, 'Слегка приподнятое настроение');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (3, 'Хорошее настроение');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (4, 'Очень хорошее настроение, но в рамках разумного');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (5, 'Гипомания I, характерная для циклотимии - приятная эйфория, повышенная активность');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (6, 'Гипомания II, характерная для БАР II - все, что в предыдущем пункте + белеет в глазах');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (7, 'Мания I - периодический не сильный отрыв от реальности');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (8, 'Мания II - сопровождается бредом и галлюцинациями - неадекватная речь');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (9, 'Мания III - сопровождается бредом и галлюцинациями - неадекватное поведение');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (10, 'Мания IV - сопровождается бредом и галлюцинациями - человек опасен для себя и других');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (1, 'Депрессия I');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (2, 'Депрессия II');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (3, 'Депрессия III');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (4, 'Депрессия IV');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (5, 'Депрессия V');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (6, 'Депрессия VI');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (7, 'Депрессия VII');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (8, 'Депрессия VIII');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (9, 'Депрессия IX');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (10, 'Депрессия X');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (1, 'Настроение I');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (2, 'Настроение II');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (3, 'Настроение III');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (4, 'Настроение IV');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (5, 'Настроение V');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (6, 'Настроение VI');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (7, 'Настроение VII');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (8, 'Настроение VIII');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (9, 'Настроение IX');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (10, 'Настроение X');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (1, 'Активность I');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (2, 'Активность II');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (3, 'Активность III');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (4, 'Активность IV');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (5, 'Активность V');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (6, 'Активность VI');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (7, 'Активность VII');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (8, 'Активность VIII');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (9, 'Активность IX');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (10, 'Активность X');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (1, 'Аппетит I');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (2, 'Аппетит II');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (3, 'Аппетит III');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (4, 'Аппетит IV');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (5, 'Аппетит V');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (6, 'Аппетит VI');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (7, 'Аппетит VII');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (8, 'Аппетит VIII');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (9, 'Аппетит IX');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (10, 'Аппетит X');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (1, 'Сон I');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (2, 'Сон II');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (3, 'Сон III');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (4, 'Сон IV');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (5, 'Сон V');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (6, 'Сон VI');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (7, 'Сон VII');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (8, 'Сон VIII');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (9, 'Сон IX');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (10, 'Сон X');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (1, 'Тревога I');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (2, 'Тревога II');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (3, 'Тревога III');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (4, 'Тревога IV');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (5, 'Тревога V');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (6, 'Тревога VI');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (7, 'Тревога VII');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (8, 'Тревога VIII');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (9, 'Тревога IX');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (10, 'Тревога X');
-- Заполнение пользователями
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('ab555fcb-b9ee-45f4-9de8-8f16daa5d03b', 'login1', 'Qwerty12345');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('56b7c993-392f-41f8-adb1-9766842dc5fd', 'login2', 'AVALON123456');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('a243b5f2-e265-4c25-82a9-dde4cc70643f', 'login3', 'Zxcvb123456');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('51351bb1-7563-479d-a8e9-201d0ff934c2', 'login4', 'Sadly846612');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'login5', 'Qwerty12345');
+7
View File
@@ -0,0 +1,7 @@
init
seed_states
seed_medications
seed_users
seed_user_treatment_schemes
seed_treatment_schemes
seed_diaries
+42
View File
@@ -0,0 +1,42 @@
CREATE TABLE IF NOT EXISTS `up_and_down`.`numbers` (
`n` INT NOT NULL PRIMARY KEY
);
INSERT INTO `up_and_down`.`numbers` (`n`)
VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
(11),(12),(13),(14),(15),(16),(17),(18),(19),(20);
INSERT INTO `up_and_down`.`diaries` (
`uuid`,
`user_uuid`,
`time`,
`mania_level`,
`depression_level`,
`mood_level`,
`activity_level`,
`appetite_level`,
`dream_level`,
`anxiety_level`,
`comment`,
`user_treatment_schemes_uuid`
)
SELECT
UUID() AS uuid,
uts.user_uuid,
DATE_ADD(TIMESTAMP('2025-01-01 08:00:00'), INTERVAL n.n DAY) AS time,
-- уровни от 1 до 10, чуть "перемешанные" через арифметику
((n.n * 3) % 10) + 1 AS mania_level,
((n.n * 5) % 10) + 1 AS depression_level,
((n.n * 7) % 10) + 1 AS mood_level,
((n.n * 2) % 10) + 1 AS activity_level,
((n.n * 4) % 10) + 1 AS appetite_level,
((n.n * 6) % 10) + 1 AS dream_level,
((n.n * 8) % 10) + 1 AS anxiety_level,
CONCAT('Auto-generated diary entry #', n.n,
' for treatment scheme ', uts.uuid) AS comment,
uts.uuid AS user_treatment_schemes_uuid
FROM `up_and_down`.`user_treatment_schemes` uts
JOIN `up_and_down`.`numbers` n ON 1=1;
@@ -0,0 +1,21 @@
INSERT INTO `up_and_down`.`medications` (`uuid`, `name`, `dose`, `unit`, `is_urgent`) VALUES
(UUID(), 'Литий карбонат', 300, 'mg', FALSE),
(UUID(), 'Вальпроевая кислота (Депакин)', 500, 'mg', FALSE),
(UUID(), 'Ламотриджин', 100, 'mg', FALSE),
(UUID(), 'Карбамазепин', 200, 'mg', FALSE),
(UUID(), 'Кветиапин', 100, 'mg', FALSE),
(UUID(), 'Оланзапин', 10, 'mg', FALSE),
(UUID(), 'Арипипразол', 15, 'mg', FALSE),
(UUID(), 'Рисперидон', 2, 'mg', FALSE),
(UUID(), 'Зипрасидон', 40, 'mg', FALSE),
(UUID(), 'Лурасидон', 20, 'mg', FALSE),
(UUID(), 'Аминосерин (Амилазин)', 50, 'mg', FALSE),
(UUID(), 'Флуоксетин', 20, 'mg', FALSE),
(UUID(), 'Сертралин', 50, 'mg', FALSE),
(UUID(), 'Венлафаксин', 75, 'mg', FALSE),
(UUID(), 'Дулоксетин', 30, 'mg', FALSE),
(UUID(), 'Тразодон', 150, 'mg', FALSE),
(UUID(), 'Габапентин', 300, 'mg', FALSE),
(UUID(), 'Топирамат', 50, 'mg', FALSE),
(UUID(), 'Пропранолол', 40, 'mg', TRUE),
(UUID(), 'Клоназепам', 1, 'mg', TRUE);
+77
View File
@@ -0,0 +1,77 @@
-- insert constants
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (1, 'Полное отсутствие мании');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (2, 'Слегка приподнятое настроение');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (3, 'Хорошее настроение');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (4, 'Очень хорошее настроение, но в рамках разумного');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (5, 'Гипомания I, характерная для циклотимии - приятная эйфория, повышенная активность');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (6, 'Гипомания II, характерная для БАР II - все, что в предыдущем пункте + белеет в глазах');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (7, 'Мания I - периодический не сильный отрыв от реальности');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (8, 'Мания II - сопровождается бредом и галлюцинациями - неадекватная речь');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (9, 'Мания III - сопровождается бредом и галлюцинациями - неадекватное поведение');
INSERT INTO `up_and_down`.`mania` (`level`, `description`) VALUES (10, 'Мания IV - сопровождается бредом и галлюцинациями - человек опасен для себя и других');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (1, 'Депрессия I');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (2, 'Депрессия II');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (3, 'Депрессия III');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (4, 'Депрессия IV');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (5, 'Депрессия V');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (6, 'Депрессия VI');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (7, 'Депрессия VII');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (8, 'Депрессия VIII');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (9, 'Депрессия IX');
INSERT INTO `up_and_down`.`depressions` (`level`, `description`) VALUES (10, 'Депрессия X');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (1, 'Настроение I');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (2, 'Настроение II');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (3, 'Настроение III');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (4, 'Настроение IV');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (5, 'Настроение V');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (6, 'Настроение VI');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (7, 'Настроение VII');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (8, 'Настроение VIII');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (9, 'Настроение IX');
INSERT INTO `up_and_down`.`moods` (`level`, `description`) VALUES (10, 'Настроение X');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (1, 'Активность I');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (2, 'Активность II');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (3, 'Активность III');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (4, 'Активность IV');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (5, 'Активность V');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (6, 'Активность VI');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (7, 'Активность VII');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (8, 'Активность VIII');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (9, 'Активность IX');
INSERT INTO `up_and_down`.`activities` (`level`, `description`) VALUES (10, 'Активность X');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (1, 'Аппетит I');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (2, 'Аппетит II');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (3, 'Аппетит III');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (4, 'Аппетит IV');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (5, 'Аппетит V');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (6, 'Аппетит VI');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (7, 'Аппетит VII');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (8, 'Аппетит VIII');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (9, 'Аппетит IX');
INSERT INTO `up_and_down`.`appetites` (`level`, `description`) VALUES (10, 'Аппетит X');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (1, 'Сон I');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (2, 'Сон II');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (3, 'Сон III');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (4, 'Сон IV');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (5, 'Сон V');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (6, 'Сон VI');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (7, 'Сон VII');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (8, 'Сон VIII');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (9, 'Сон IX');
INSERT INTO `up_and_down`.`dreams` (`level`, `description`) VALUES (10, 'Сон X');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (1, 'Тревога I');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (2, 'Тревога II');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (3, 'Тревога III');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (4, 'Тревога IV');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (5, 'Тревога V');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (6, 'Тревога VI');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (7, 'Тревога VII');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (8, 'Тревога VIII');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (9, 'Тревога IX');
INSERT INTO `up_and_down`.`anxiety` (`level`, `description`) VALUES (10, 'Тревога X');
@@ -0,0 +1,63 @@
DELIMITER $$
CREATE PROCEDURE `up_and_down`.`fill_treatment_schemes`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE v_uts_uuid CHAR(36);
DECLARE v_user_uuid CHAR(36);
DECLARE v_count INT;
DECLARE v_i INT;
DECLARE v_med_uuid CHAR(36);
-- курсор по всем схемам лечения пользователей
DECLARE cur CURSOR FOR
SELECT uuid, user_uuid
FROM `up_and_down`.`user_treatment_schemes`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
read_loop: LOOP
FETCH cur INTO v_uts_uuid, v_user_uuid;
IF done = 1 THEN
LEAVE read_loop;
END IF;
-- случайное количество препаратов от 1 до 5
SET v_count = FLOOR(RAND() * 5) + 1;
SET v_i = 0;
meds_loop: WHILE v_i < v_count DO
-- случайный препарат из уже существующих medications
SELECT m.uuid
INTO v_med_uuid
FROM `up_and_down`.`medications` m
ORDER BY RAND()
LIMIT 1;
-- чтобы не было дублей (один и тот же препарат в одной схеме)
IF NOT EXISTS (
SELECT 1
FROM `up_and_down`.`treatment_schemes` ts
WHERE ts.user_treatment_schemes_uuid = v_uts_uuid
AND ts.medication_uuid = v_med_uuid
) THEN
INSERT INTO `up_and_down`.`treatment_schemes` (
`user_treatment_schemes_uuid`,
`medication_uuid`
) VALUES (
v_uts_uuid,
v_med_uuid
);
SET v_i = v_i + 1;
END IF;
END WHILE;
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
CALL `up_and_down`.`fill_treatment_schemes`();
@@ -0,0 +1,195 @@
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d564e669-a822-4ea8-80cf-86d8a7bafb91', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 01 for login2', 'Standard treatment scheme 01 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('02d5ea5f-af43-473c-891e-8c2e3a5f78f0', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 02 for login2', 'Standard treatment scheme 02 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('5bd6c955-9161-43a0-b5e4-a93a9cd11203', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 03 for login2', 'Standard treatment scheme 03 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('03d2deb4-df6a-4d77-9e06-3385a4464e7f', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 04 for login2', 'Standard treatment scheme 04 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('4e318764-2375-40bb-ac75-7364ef8bedd1', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 05 for login2', 'Standard treatment scheme 05 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('711e1123-1653-479e-8dd5-1d3126accf9f', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 06 for login2', 'Standard treatment scheme 06 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('5e2e3ec9-e837-4c62-bd91-731e14fc7f09', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 07 for login2', 'Standard treatment scheme 07 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('5968e9ec-cc6a-4eae-92a4-510e0662b8e8', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 08 for login2', 'Standard treatment scheme 08 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('7c083461-c3a1-4597-9a7d-9eaae0b3961c', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 09 for login2', 'Standard treatment scheme 09 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('ecb08cad-0116-4dc9-8b8f-27f8124a6a6d', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 10 for login2', 'Standard treatment scheme 10 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('87acb419-c3a0-47ad-9328-66af7f3bd80d', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 11 for login2', 'Standard treatment scheme 11 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('c557941f-4542-44c6-9018-b59e090e0725', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 12 for login2', 'Standard treatment scheme 12 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('20dc7b61-f782-4afe-935a-548627af48d3', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 13 for login2', 'Standard treatment scheme 13 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('ff316668-6245-43ba-8400-70c6db064591', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 14 for login2', 'Standard treatment scheme 14 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('1b9e482e-a95d-4426-a901-aac82b65d6cc', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 15 for login2', 'Standard treatment scheme 15 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('cd46d9e6-610a-42b8-a532-a228a122ad56', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 16 for login2', 'Standard treatment scheme 16 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('7471d503-daac-4c9f-ac4f-39c6a1e70b46', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 17 for login2', 'Standard treatment scheme 17 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('1bea6a9c-5f06-42df-adbb-918878a29269', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 18 for login2', 'Standard treatment scheme 18 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('3c21c11f-d381-4da5-92c7-460b4845f3c2', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 19 for login2', 'Standard treatment scheme 19 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('50e679a9-56a5-4366-9dfb-12b0f9c146f9', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 20 for login2', 'Standard treatment scheme 20 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('f26226ba-f8e7-43cc-a2ed-dee72fddd544', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 21 for login2', 'Standard treatment scheme 21 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('1e11af86-fc3f-4fa1-9142-1c5818be5dd2', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 22 for login2', 'Standard treatment scheme 22 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('0cebf129-ae65-4e7a-92ea-e15c7c506e9b', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 23 for login2', 'Standard treatment scheme 23 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('628c0588-83a5-413c-9753-88979b76d8c1', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 24 for login2', 'Standard treatment scheme 24 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('81e73502-5246-4f63-acd0-e908b8b1dbff', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 25 for login2', 'Standard treatment scheme 25 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('98cb3eb4-7973-4820-9d1b-fab098f78a49', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 26 for login2', 'Standard treatment scheme 26 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('4e43d7f8-50e6-4aa2-ae31-b3ea97cd7258', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 27 for login2', 'Standard treatment scheme 27 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('ee6d4b13-80b1-45cb-816a-050a19085874', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 28 for login2', 'Standard treatment scheme 28 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('0e29597a-aeff-4de5-9187-7add1292f674', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 29 for login2', 'Standard treatment scheme 29 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('00185651-9aa7-4441-9b69-ab20b8570a19', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 30 for login2', 'Standard treatment scheme 30 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('f24db057-f24e-47fc-9f34-705d80471ad6', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 31 for login2', 'Standard treatment scheme 31 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('6448f06c-865a-4ea5-a0a6-88653f00dfae', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 32 for login2', 'Standard treatment scheme 32 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('83fea65f-d2a0-4aa9-b8c0-f663e0241aa4', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 33 for login2', 'Standard treatment scheme 33 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('be1f77b7-5f20-40cf-a3a3-9baf4f54d830', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 34 for login2', 'Standard treatment scheme 34 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d932e4c5-d9b7-40f6-9bb3-6febca382e91', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 35 for login2', 'Standard treatment scheme 35 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('1f24f27b-0996-41a3-9d3f-5792ea0579f4', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 36 for login2', 'Standard treatment scheme 36 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('593b2bde-7abb-4f63-a334-00a0e14b18da', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 37 for login2', 'Standard treatment scheme 37 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('b894cf25-4ea9-4bb7-8eee-7a9766fb6882', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 38 for login2', 'Standard treatment scheme 38 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('6df93f3c-68c8-4bf4-8e55-51863599f48e', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 39 for login2', 'Standard treatment scheme 39 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('fa511de0-e1e5-460a-b771-ee9caa500b01', '56b7c993-392f-41f8-adb1-9766842dc5fd', 'Treatment scheme 40 for login2', 'Standard treatment scheme 40 for login2');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('ea066091-f77d-48c9-9893-a2bcd848be62', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 01 for login3', 'Standard treatment scheme 01 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('f5862063-8dd6-4a47-9c35-a1116bc23f5e', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 02 for login3', 'Standard treatment scheme 02 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('14dd3e6e-50c4-4f16-b171-95bdd0e2c8a3', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 03 for login3', 'Standard treatment scheme 03 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('74e22b94-d3bb-4c52-a508-8cf958f7a728', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 04 for login3', 'Standard treatment scheme 04 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('b2ffe5c8-2377-46cc-8017-0d9d06051150', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 05 for login3', 'Standard treatment scheme 05 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('63011d38-8886-45e7-b883-5a83ae907a96', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 06 for login3', 'Standard treatment scheme 06 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('5b8f3afd-2a74-4ec9-b2e5-23919788f0bc', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 07 for login3', 'Standard treatment scheme 07 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('73d64fe3-b562-4b02-a7d8-9eca176b1c18', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 08 for login3', 'Standard treatment scheme 08 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('8ddcacfc-6d7f-45c9-adc5-30f689b91f6e', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 09 for login3', 'Standard treatment scheme 09 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('3f8bb381-8498-4727-b7f5-1c42a673d08e', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 10 for login3', 'Standard treatment scheme 10 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('a75224d4-57cc-4c5e-8dfc-ef604059df1f', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 11 for login3', 'Standard treatment scheme 11 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('65c3b073-b1de-4acf-9f99-52316c60858e', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 12 for login3', 'Standard treatment scheme 12 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('373bbeb4-dad9-4cae-a529-07b84dc1a2b0', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 13 for login3', 'Standard treatment scheme 13 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d1ebfe8e-4be4-4dd3-a31b-7bb3859e6f75', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 14 for login3', 'Standard treatment scheme 14 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('20e56586-74dc-40c4-9e15-2e9ea72793f7', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 15 for login3', 'Standard treatment scheme 15 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('f85cc1be-efa1-4b94-8131-674bc9ae45ff', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 16 for login3', 'Standard treatment scheme 16 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('b942b986-25d1-4048-b90a-b6d4389e2484', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 17 for login3', 'Standard treatment scheme 17 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('9939cd18-fd6f-4854-abd2-77829042a1f1', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 18 for login3', 'Standard treatment scheme 18 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('a2b4b42b-177d-4f1f-bfc0-576ed4e558ba', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 19 for login3', 'Standard treatment scheme 19 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('a5ef3ed5-6734-4cbd-8801-4034214f9e70', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 20 for login3', 'Standard treatment scheme 20 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('69aef932-049d-46b4-af96-c6344e2b3061', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 21 for login3', 'Standard treatment scheme 21 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('a563cd0c-4449-49f4-a39a-2226813b5481', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 22 for login3', 'Standard treatment scheme 22 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('6980c8ff-d49b-4e83-86ce-1ead13a9a8cd', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 23 for login3', 'Standard treatment scheme 23 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('3139c8f9-e44e-46c6-a499-b6c22ffbd3bf', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 24 for login3', 'Standard treatment scheme 24 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('6ef06a61-350b-4a0b-b893-4710dce94baf', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 25 for login3', 'Standard treatment scheme 25 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('6cbad25d-638f-47d3-9aee-fd1f5740b818', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 26 for login3', 'Standard treatment scheme 26 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d82ba023-9bfb-4d3c-8d3a-dc86f436b193', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 27 for login3', 'Standard treatment scheme 27 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('4dc77e76-4271-4e54-9dd8-4cbf781c9c87', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 28 for login3', 'Standard treatment scheme 28 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('adc5eb7c-7490-4230-8ee3-b0e9926b62c2', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 29 for login3', 'Standard treatment scheme 29 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d9be3f8e-3e6b-4c5e-b1f7-df7ddd3e7ccf', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 30 for login3', 'Standard treatment scheme 30 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('62cb5015-17a2-4f63-b1bc-882eca4f5f24', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 31 for login3', 'Standard treatment scheme 31 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('1e810b87-de35-4703-9663-aae4c39bee97', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 32 for login3', 'Standard treatment scheme 32 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('9ab45b0a-7851-4e33-8efd-5999dd8b6a6a', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 33 for login3', 'Standard treatment scheme 33 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('a79a4862-746f-4d5a-a99e-2057caf01a7d', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 34 for login3', 'Standard treatment scheme 34 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('28e2183c-bbb3-4b38-a029-88af7176a85d', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 35 for login3', 'Standard treatment scheme 35 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('7bb362d9-3cae-4b35-af7e-024d41bb947c', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 36 for login3', 'Standard treatment scheme 36 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('adf9e753-b51a-4f65-bb9e-822e38f0bcee', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 37 for login3', 'Standard treatment scheme 37 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('663984e1-7ccd-4dc1-a586-11ce05f524ca', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 38 for login3', 'Standard treatment scheme 38 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('672e072e-340d-4f6e-a925-af77f1df18b0', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 39 for login3', 'Standard treatment scheme 39 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('7484a1e6-a63b-4c01-9ff8-87f87e8b79d2', 'a243b5f2-e265-4c25-82a9-dde4cc70643f', 'Treatment scheme 40 for login3', 'Standard treatment scheme 40 for login3');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('bd99e5a5-e01f-4eed-9b54-cf8ebd33ec62', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 01 for login4', 'Standard treatment scheme 01 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('c9c7b51d-8a61-4d6a-9546-7efc32b53a9a', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 02 for login4', 'Standard treatment scheme 02 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('c5faf9e6-51e5-4213-9a0f-5979642b192f', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 03 for login4', 'Standard treatment scheme 03 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('bc99fd22-e127-4f9d-8ff8-50612b353a03', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 04 for login4', 'Standard treatment scheme 04 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('86b40e24-ec00-4f8c-9540-976dc950d415', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 05 for login4', 'Standard treatment scheme 05 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('6ded4022-6fc7-4b4c-8692-d7b36b6fd559', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 06 for login4', 'Standard treatment scheme 06 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('e7597e7c-0252-436a-b348-6b06a5ae3339', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 07 for login4', 'Standard treatment scheme 07 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('1736a35a-6d2c-427b-9281-946390896e25', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 08 for login4', 'Standard treatment scheme 08 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('6fadfd02-b069-4f41-be9e-fa87b932b0aa', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 09 for login4', 'Standard treatment scheme 09 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('dd2682e1-b01b-4bb2-b5ef-b4c34bd58dc1', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 10 for login4', 'Standard treatment scheme 10 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('e91c93af-4008-4a26-9114-16b5ff628e6b', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 11 for login4', 'Standard treatment scheme 11 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('fc0a531f-3095-4920-98c5-f6d937a8fa56', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 12 for login4', 'Standard treatment scheme 12 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('cf9fcb20-209c-4ba3-967a-1998762b58d3', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 13 for login4', 'Standard treatment scheme 13 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('325b507f-a342-4134-9ed9-9acd5d61afc9', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 14 for login4', 'Standard treatment scheme 14 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('9a4dcb63-a6f5-4d9c-a122-32b5fa303028', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 15 for login4', 'Standard treatment scheme 15 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('3d99c7b9-9498-4a36-9fe7-d1864ff1e8bb', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 16 for login4', 'Standard treatment scheme 16 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('3e5cc607-72e0-4f52-bcff-6a5328a602f4', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 17 for login4', 'Standard treatment scheme 17 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d5f40e6b-8508-48ab-a821-f40b31b2d631', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 18 for login4', 'Standard treatment scheme 18 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('cdb87916-f8d5-4c8d-a70c-c9ae472c3d44', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 19 for login4', 'Standard treatment scheme 19 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('b927456d-6107-4fca-bd44-438d76a9dd87', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 20 for login4', 'Standard treatment scheme 20 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('909e5904-2fd2-424d-86f2-feaddd1fefd8', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 21 for login4', 'Standard treatment scheme 21 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d7e19282-a91c-423d-9c8e-eeac9491db74', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 22 for login4', 'Standard treatment scheme 22 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('4ea5983a-b578-479b-b67f-757e6c2b3671', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 23 for login4', 'Standard treatment scheme 23 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('cb5cfa34-5420-42fb-90a7-3509652643a5', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 24 for login4', 'Standard treatment scheme 24 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('0b982048-7f48-4f24-8898-eefe66060c8c', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 25 for login4', 'Standard treatment scheme 25 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('2f725907-3b0e-476c-9d99-3355613be072', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 26 for login4', 'Standard treatment scheme 26 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('f915ab57-7e00-4701-8342-4cf03da1650f', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 27 for login4', 'Standard treatment scheme 27 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('831f0573-eea4-4607-ad85-6662c5bce422', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 28 for login4', 'Standard treatment scheme 28 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('c324367a-267c-4cb4-9533-d2c74b35134c', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 29 for login4', 'Standard treatment scheme 29 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('2e55cb10-2739-4341-b1d7-bb98b7d8c5af', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 30 for login4', 'Standard treatment scheme 30 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('47159f47-ebcb-4b75-a630-30124928f0a0', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 31 for login4', 'Standard treatment scheme 31 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d1c9f7c9-11ce-4da1-b6e6-116766a22da7', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 32 for login4', 'Standard treatment scheme 32 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('2e8c86af-d86c-4b7e-a3f3-f7de9f458ff0', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 33 for login4', 'Standard treatment scheme 33 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('b1b07ddb-34a0-4f3a-acd7-4553d892b250', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 34 for login4', 'Standard treatment scheme 34 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('1a7a1012-61ac-46bd-b9fd-26927a7f9219', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 35 for login4', 'Standard treatment scheme 35 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('4df8b6b1-a76f-4fc0-9f26-19b6096c77d4', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 36 for login4', 'Standard treatment scheme 36 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d26264d4-a4cf-4bba-bbd2-95eca0e342c1', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 37 for login4', 'Standard treatment scheme 37 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d8304fed-cef1-48c3-95c3-930078446e76', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 38 for login4', 'Standard treatment scheme 38 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('dbf1c714-5775-4f3a-b443-ae395b95b77a', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 39 for login4', 'Standard treatment scheme 39 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('b09f82d7-8f8a-4e37-aca4-8da8de6127a2', '51351bb1-7563-479d-a8e9-201d0ff934c2', 'Treatment scheme 40 for login4', 'Standard treatment scheme 40 for login4');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('72b290cb-d524-4c4d-b72d-28612086dbb5', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 01 for login5', 'Standard treatment scheme 01 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('8712fdb0-f08b-4e5d-9fff-f76a968a2b18', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 02 for login5', 'Standard treatment scheme 02 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('5db43cf5-6b2e-4415-b465-1b62eb9510dc', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 03 for login5', 'Standard treatment scheme 03 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('b6fd0069-3c78-4e47-8dfe-019167d35f2b', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 04 for login5', 'Standard treatment scheme 04 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('919fdc02-3bee-42db-a81a-a4807d6ac4ad', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 05 for login5', 'Standard treatment scheme 05 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('a562dd12-f1aa-4de1-a625-a21b20b75984', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 06 for login5', 'Standard treatment scheme 06 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('ad7d463e-8d8d-4d3a-a1c3-e1d2ffc270ed', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 07 for login5', 'Standard treatment scheme 07 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('c09e29cc-9b89-49a0-a45a-3bd8b30dbd9f', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 08 for login5', 'Standard treatment scheme 08 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('ee0fbe27-91d2-4a0f-9d24-2b037e125b2e', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 09 for login5', 'Standard treatment scheme 09 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('e0459a38-af20-4ab7-babd-b40b9f3b1661', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 10 for login5', 'Standard treatment scheme 10 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('311c412d-343b-47d2-9ad6-c47facd2ba06', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 11 for login5', 'Standard treatment scheme 11 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('8b625df8-503f-4a0e-9105-353d95fb3be6', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 12 for login5', 'Standard treatment scheme 12 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('850b3ba6-61fc-417b-ac8c-2ec1542fb4bd', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 13 for login5', 'Standard treatment scheme 13 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('ef55e7fc-02ec-4493-9cb8-0dfaf70eacc2', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 14 for login5', 'Standard treatment scheme 14 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('e96883dd-6baf-4daa-a142-af07014aee80', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 15 for login5', 'Standard treatment scheme 15 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('6348ff72-6216-470c-a3fb-9f87dcabdcde', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 16 for login5', 'Standard treatment scheme 16 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('cf14d92d-fded-4a01-ac3d-0debe7aad19f', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 17 for login5', 'Standard treatment scheme 17 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('3a8466f7-16b1-4d6c-ba4a-0c7217e59aec', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 18 for login5', 'Standard treatment scheme 18 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('b880932a-b6bb-4bb5-9e77-e1167ebc5b42', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 19 for login5', 'Standard treatment scheme 19 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('ca14f4b3-d99c-41b6-be38-6dbb397addeb', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 20 for login5', 'Standard treatment scheme 20 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('a34f5916-d60f-42fe-b8c8-dbd2d816d3eb', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 21 for login5', 'Standard treatment scheme 21 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('0c4cc519-7ee3-457d-b216-f541d2dc8bf8', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 22 for login5', 'Standard treatment scheme 22 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('1640c762-9b67-46dd-b662-3f8fcf59a304', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 23 for login5', 'Standard treatment scheme 23 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('7ad81eac-8760-4aa8-b6f4-274748cd3f7a', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 24 for login5', 'Standard treatment scheme 24 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('063ae7d4-a654-4009-94da-c07a9df2389f', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 25 for login5', 'Standard treatment scheme 25 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('61f11fed-c1f3-4159-ac53-01f22f38f927', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 26 for login5', 'Standard treatment scheme 26 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('50ab2efd-8c7d-4a14-bfd2-d89c74281fe0', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 27 for login5', 'Standard treatment scheme 27 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('915df5e1-a927-4930-8583-d0a1f07f2689', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 28 for login5', 'Standard treatment scheme 28 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('7cb089e1-b5f8-40c4-b4fd-504f5cfefbeb', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 29 for login5', 'Standard treatment scheme 29 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('959aeaa2-9524-4d06-87cf-27505df3c3b6', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 30 for login5', 'Standard treatment scheme 30 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('b067d2a2-60da-4f4c-b8d6-1f836ef48854', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 31 for login5', 'Standard treatment scheme 31 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('eb1e3c88-ee40-49a6-aced-3210500a7377', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 32 for login5', 'Standard treatment scheme 32 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('3f8f4b9d-7757-4678-9782-7d0dd8f04d2e', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 33 for login5', 'Standard treatment scheme 33 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('c75eb6ba-3448-440d-8b3a-6b8f84d48d7e', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 34 for login5', 'Standard treatment scheme 34 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('f0658d7b-e43e-4c79-9554-2048a1df7d36', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 35 for login5', 'Standard treatment scheme 35 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('8674a5f8-e7e4-48fa-83ec-011e0d0c0a48', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 36 for login5', 'Standard treatment scheme 36 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('89f22df7-f2d6-4ac7-b12c-7c4cd4a91bfa', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 37 for login5', 'Standard treatment scheme 37 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('bf5cf57a-1bf0-47b5-bf58-d973b584b155', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 38 for login5', 'Standard treatment scheme 38 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('5a855803-c4ec-4f85-be2c-dba874a56ccf', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 39 for login5', 'Standard treatment scheme 39 for login5');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('a3c7274b-d343-470a-aeaa-337debf999b5', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'Treatment scheme 40 for login5', 'Standard treatment scheme 40 for login5');
-- login6..login10: по 5 схем
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d54a8bd8-2278-4bd6-a05d-4e1930844b0d', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b7', 'Treatment scheme 01 for login6', 'Standard treatment scheme 01 for login6');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('e8f5e4bb-67f2-490d-96e4-63497de16acb', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b7', 'Treatment scheme 02 for login6', 'Standard treatment scheme 02 for login6');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('81e52566-531e-4d40-8209-755775f9d425', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b7', 'Treatment scheme 03 for login6', 'Standard treatment scheme 03 for login6');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('75b477f4-20bc-4c08-afdb-b098a6c502f7', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b7', 'Treatment scheme 04 for login6', 'Standard treatment scheme 04 for login6');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('df954ab8-1797-4098-b0a1-3ccc0d943d39', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b7', 'Treatment scheme 05 for login6', 'Standard treatment scheme 05 for login6');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('cf1132d9-3a43-4e5d-b34c-8b19b1bf9e8d', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b8', 'Treatment scheme 01 for login7', 'Standard treatment scheme 01 for login7');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('37bf2da1-9a6a-4c2f-8984-bb5fd6cc8d3f', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b8', 'Treatment scheme 02 for login7', 'Standard treatment scheme 02 for login7');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('62737a4a-71bd-4f04-bd5c-22151f927592', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b8', 'Treatment scheme 03 for login7', 'Standard treatment scheme 03 for login7');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('8acbb0b0-4d83-4be7-abba-b39a018662ed', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b8', 'Treatment scheme 04 for login7', 'Standard treatment scheme 04 for login7');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('df2a0c75-6732-4e1a-9093-872bb2a1342a', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b8', 'Treatment scheme 05 for login7', 'Standard treatment scheme 05 for login7');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('7740b026-4cc6-422e-8b9c-e7f6be9bd18b', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b9', 'Treatment scheme 01 for login8', 'Standard treatment scheme 01 for login8');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('ec42aa15-57e6-4d44-9837-fb17bf3da1ce', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b9', 'Treatment scheme 02 for login8', 'Standard treatment scheme 02 for login8');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('ab436b5c-4df1-4cae-bb34-e39637dfb539', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b9', 'Treatment scheme 03 for login8', 'Standard treatment scheme 03 for login8');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('b499addb-d9e4-45e7-b342-7a8618a21a3f', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b9', 'Treatment scheme 04 for login8', 'Standard treatment scheme 04 for login8');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('5de713fc-d0fc-4cc0-ba0f-ef6ecf256e82', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b9', 'Treatment scheme 05 for login8', 'Standard treatment scheme 05 for login8');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('949e3b71-0a2e-4890-a9a9-0b95c50a0f5d', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b0', 'Treatment scheme 01 for login9', 'Standard treatment scheme 01 for login9');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('9a153947-16fa-4b95-83fc-745dccb149cb', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b0', 'Treatment scheme 02 for login9', 'Standard treatment scheme 02 for login9');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('7287725a-42dd-4bd1-83ff-d3d82de7de86', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b0', 'Treatment scheme 03 for login9', 'Standard treatment scheme 03 for login9');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('afe4f407-1440-4b83-a3fb-1961df602e08', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b0', 'Treatment scheme 04 for login9', 'Standard treatment scheme 04 for login9');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('0ece3f52-f44c-465b-bf0f-5ab25a23b0f7', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b0', 'Treatment scheme 05 for login9', 'Standard treatment scheme 05 for login9');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('7ac7ad28-9e68-4aa7-b8ef-f7ffb7a7ca04', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b1', 'Treatment scheme 01 for login10', 'Standard treatment scheme 01 for login10');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('0e11eec4-8600-4ef8-a9fa-19d0133a3d6b', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b1', 'Treatment scheme 02 for login10', 'Standard treatment scheme 02 for login10');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('7133dd7a-73fc-4e00-8499-94b63aa21c02', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b1', 'Treatment scheme 03 for login10', 'Standard treatment scheme 03 for login10');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('ffad7a70-b797-4a44-9e4d-a39130cb18cc', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b1', 'Treatment scheme 04 for login10', 'Standard treatment scheme 04 for login10');
INSERT INTO `up_and_down`.`user_treatment_schemes` (`uuid`, `user_uuid`, `treatment_name`, `instructions`) VALUES ('d1a2a1d7-d2b6-4f78-b2ad-3bfb9bf075c8', 'c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b1', 'Treatment scheme 05 for login10', 'Standard treatment scheme 05 for login10');
+11
View File
@@ -0,0 +1,11 @@
-- Заполнение пользователями
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('ab555fcb-b9ee-45f4-9de8-8f16daa5d03c', 'login1', '649111DF29DD8B55');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('56b7c993-392f-41f8-adb1-9766842dc5fd', 'login2', '649111DF29DD8B55');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('a243b5f2-e265-4c25-82a9-dde4cc70643f', 'login3', '649111DF29DD8B55');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('51351bb1-7563-479d-a8e9-201d0ff934c2', 'login4', '649111DF29DD8B55');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b6', 'login5', '649111DF29DD8B55');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b7', 'login6', '649111DF29DD8B55');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b8', 'login7', '649111DF29DD8B55');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b9', 'login8', '649111DF29DD8B55');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b0', 'login9', '649111DF29DD8B55');
INSERT INTO `up_and_down`.`users` (`uuid`, `login`, `hashed_password`) VALUES ('c792bbe6-2bf2-4fe0-a781-ba96bfeaa3b1', 'login10', '649111DF29DD8B55');
+7 -5
View File
@@ -3,7 +3,7 @@
#include <cstdint> #include <cstdint>
#include "../entities/user.h" #include "../dtos/user_dto.h"
namespace uad namespace uad
{ {
@@ -11,12 +11,14 @@ class IAuthDAO
{ {
public: public:
virtual std::string Login( virtual std::string Login(
const std::string& registrated_user_uuid, std::string_view registrated_user_uuid,
const std::string& auth_token) = 0; std::string_view auth_token) = 0;
virtual bool HasAuthorized(const std::string& auth_token) = 0; virtual bool HasAuthorized(std::string_view auth_token) = 0;
virtual bool Logout(const std::string& user_token) = 0; virtual std::string_view GetUUID(std::string_view auth_token) = 0;
virtual bool Logout(std::string_view user_token) = 0;
virtual ~IAuthDAO() = default; virtual ~IAuthDAO() = default;
}; };
+33
View File
@@ -0,0 +1,33 @@
#pragma once
#include <vector>
#include <string>
#include "./../dtos/diary_dto.h"
namespace uad
{
class IDiariesDAO
{
public:
virtual std::vector<diary_dto> GetDiariesByUserUUID(std::string_view login) = 0;
virtual void СreateDiary(
std::string_view user_uuid,
const diary_dto& dto
) const = 0;
virtual void UpdateDiary(
std::string_view user_uuid,
std::string_view diary_uuid,
const diary_dto& dto
) const = 0;
virtual void DeleteDiary(
std::string_view user_uuid,
std::string_view diary_uuid
) const = 0;
virtual ~IDiariesDAO() = default;
};
}
+19
View File
@@ -0,0 +1,19 @@
#pragma once
#include <cstdint>
#include <vector>
#include "../dtos/medication_dto.h"
namespace uad
{
class IMedicationsDAO
{
public:
[[nodiscard]] virtual std::vector<medication_dto> GetAll() const = 0;
[[nodiscard]] virtual std::string Create(const medication_dto& m) const = 0;
virtual ~IMedicationsDAO() = default;
};
}
+7 -7
View File
@@ -4,24 +4,24 @@
#include <vector> #include <vector>
#include <optional> #include <optional>
#include "../entities/user.h" #include "../dtos/user_dto.h"
namespace uad namespace uad
{ {
class IUserDAO class IUserDAO
{ {
public: public:
virtual std::string Create(const user& created_user) = 0; virtual std::string Create(const user_dto& created_user) = 0;
virtual std::optional<user> GetByUUID(const std::string& uuid) = 0; virtual std::optional<user_dto> GetByUUID(std::string_view uuid) = 0;
virtual std::optional<user> GetByLogin(const std::string& login) = 0; virtual std::optional<user_dto> GetByLogin(std::string_view login) = 0;
virtual std::pair<bool, std::vector<user>> GetAll(size_t limit, size_t offset) = 0; virtual std::pair<bool, std::vector<user_dto>> GetAll(size_t limit, size_t offset) = 0;
virtual bool Update(const user& u) = 0; virtual bool Update(const user_dto& u) = 0;
virtual bool Delete(const std::string& uuid) = 0; virtual bool Delete(std::string_view uuid) = 0;
virtual ~IUserDAO() = default; virtual ~IUserDAO() = default;
}; };
+20
View File
@@ -0,0 +1,20 @@
#pragma once
#include <vector>
#include <string>
#include "./../dtos/user_treatment_scheme_dto.h"
namespace uad
{
class IUserTreatmentSchemeDAO {
public:
virtual std::vector<user_treatment_scheme_dto> FindByUserUUID(std::string_view login) = 0;
virtual void CreateUserTreatmentScheme(
std::string_view user_login,
const user_treatment_scheme_dto& dto
) = 0;
virtual ~IUserTreatmentSchemeDAO() = default;
};
}
+15 -10
View File
@@ -11,28 +11,33 @@ MemoryAuthDAO::MemoryAuthDAO(mysqlx::Session& session): session_(session)
} }
std::string MemoryAuthDAO::Login( std::string MemoryAuthDAO::Login(
const std::string& registrated_user_uuid, std::string_view registrated_user_uuid,
const std::string& auth_token) std::string_view auth_token)
{ {
users_uuids_to_auth_tokens_[registrated_user_uuid] = auth_token; users_uuids_to_auth_tokens_[registrated_user_uuid.data()] = auth_token;
auth_tokens_to_users_uuids_[auth_token] = registrated_user_uuid; auth_tokens_to_users_uuids_[auth_token.data()] = registrated_user_uuid;
return auth_token; return auth_token.data();
} }
bool MemoryAuthDAO::HasAuthorized(const std::string& auth_token) bool MemoryAuthDAO::HasAuthorized(std::string_view auth_token)
{ {
return auth_tokens_to_users_uuids_.count(auth_token) > 0; return auth_tokens_to_users_uuids_.count(auth_token.data()) > 0;
} }
bool MemoryAuthDAO::Logout(const std::string& auth_token) std::string_view MemoryAuthDAO::GetUUID(std::string_view auth_token)
{
return auth_tokens_to_users_uuids_.at(auth_token.data());
}
bool MemoryAuthDAO::Logout(std::string_view auth_token)
{ {
if (!HasAuthorized(auth_token)) return false; if (!HasAuthorized(auth_token)) return false;
string user_uuid = auth_tokens_to_users_uuids_[auth_token]; string user_uuid = auth_tokens_to_users_uuids_[auth_token.data()];
users_uuids_to_auth_tokens_.erase(user_uuid); users_uuids_to_auth_tokens_.erase(user_uuid);
auth_tokens_to_users_uuids_.erase(auth_token); auth_tokens_to_users_uuids_.erase(auth_token.data());
return true; return true;
} }
+6 -4
View File
@@ -20,11 +20,13 @@ public:
explicit MemoryAuthDAO(mysqlx::Session& session); explicit MemoryAuthDAO(mysqlx::Session& session);
std::string Login( std::string Login(
const std::string& registrated_user_uuid, std::string_view registrated_user_uuid,
const std::string& auth_token) override; std::string_view auth_token) override;
bool HasAuthorized(const std::string& auth_token) override; bool HasAuthorized(std::string_view auth_token) override;
bool Logout(const std::string& auth_token) override; std::string_view GetUUID(std::string_view auth_token) override;
bool Logout(std::string_view auth_token) override;
}; };
} }
+170
View File
@@ -0,0 +1,170 @@
#include "MySQLDiariesDAO.h"
#include "../exceptions/session_exception.h"
namespace uad
{
MySqlDiariesDAO::MySqlDiariesDAO(mysqlx::Session& session) : session_(session)
{
}
std::vector<diary_dto> MySqlDiariesDAO::GetDiariesByUserUUID(std::string_view user_uuid)
{
static const std::string query = R"(
SELECT
d.uuid,
UNIX_TIMESTAMP(d.time) * 1000,
d.mania_level,
d.depression_level,
d.mood_level,
d.activity_level,
d.appetite_level,
d.dream_level,
d.anxiety_level,
d.comment,
d.user_treatment_schemes_uuid
FROM up_and_down.diaries d
WHERE d.user_uuid = ?
ORDER BY d.time;
)";
mysqlx::SqlResult result = session_
.sql(query)
.bind(user_uuid.data())
.execute();
std::vector<diary_dto> diaries;
diaries.reserve(result.count());
for (const mysqlx::Row& row : result)
{
diary_dto dto;
dto.uuid = row[0].get<std::string>();
dto.time_ms = row[1].get<std::int64_t>();
dto.mania_level = row[2].get<int>();
dto.depression_level = row[3].get<int>();
dto.mood_level = row[4].get<int>();
dto.activity_level = row[5].get<int>();
dto.appetite_level = row[6].get<int>();
dto.dream_level = row[7].get<int>();
dto.anxiety_level = row[8].get<int>();
dto.comment = row[9].get<std::string>();
dto.user_treatment_scheme_uuid = row[10].get<std::string>();
diaries.push_back(std::move(dto));
}
return diaries;
}
void MySqlDiariesDAO::СreateDiary(std::string_view user_uuid, const diary_dto& dto) const
{
auto stmt = session_.sql(R"(
INSERT INTO `up_and_down`.`diaries` (
uuid,
user_uuid,
time,
mania_level,
depression_level,
mood_level,
activity_level,
appetite_level,
dream_level,
anxiety_level,
comment,
user_treatment_schemes_uuid
) VALUES (
?,
?,
FROM_UNIXTIME(? / 1000),
?,
?,
?,
?,
?,
?,
?,
?,
?
)
)");
stmt.bind(
dto.uuid,
user_uuid.data(),
dto.time_ms,
dto.mania_level,
dto.depression_level,
dto.mood_level,
dto.activity_level,
dto.appetite_level,
dto.dream_level,
dto.anxiety_level,
dto.comment,
dto.user_treatment_scheme_uuid
);
stmt.execute();
}
void MySqlDiariesDAO::UpdateDiary(
std::string_view user_uuid,
std::string_view diary_uuid,
const diary_dto& dto) const
{
auto stmt = session_.sql(R"(
UPDATE `up_and_down`.`diaries`
SET
mania_level = ?,
depression_level = ?,
mood_level = ?,
activity_level = ?,
appetite_level = ?,
dream_level = ?,
anxiety_level = ?,
comment = ?,
user_treatment_schemes_uuid = ?
WHERE uuid = ?
)");
stmt.bind(
dto.mania_level,
dto.depression_level,
dto.mood_level,
dto.activity_level,
dto.appetite_level,
dto.dream_level,
dto.anxiety_level,
dto.comment,
dto.user_treatment_scheme_uuid,
diary_uuid.data()
);
const auto res = stmt.execute();
if (res.getAffectedItemsCount() == 0) {
throw session_exception(boost::beast::http::status::not_found, "Diary not found");
}
}
void MySqlDiariesDAO::DeleteDiary(
std::string_view user_uuid,
std::string_view diary_uuid) const
{
auto stmt = session_.sql(R"(
DELETE FROM `up_and_down`.`diaries`
WHERE uuid = ? AND user_uuid = ?
)");
stmt.bind(diary_uuid.data(), user_uuid.data());
auto res = stmt.execute();
if (res.getAffectedItemsCount() == 0) {
throw session_exception(boost::beast::http::status::not_found, "Diary not found");
}
}
}
+36
View File
@@ -0,0 +1,36 @@
#pragma once
#include <vector>
#include <string>
#include "./../DAO/IDiariesDAO.h"
#include "./../db/mysql_connector.h"
namespace uad
{
class MySqlDiariesDAO final : public IDiariesDAO
{
mysqlx::Session& session_;
public:
explicit MySqlDiariesDAO(mysqlx::Session& session);
std::vector<diary_dto> GetDiariesByUserUUID(std::string_view user_uuid) override;
void СreateDiary(
std::string_view user_uuid,
const diary_dto& dto
) const override;
void UpdateDiary(
std::string_view user_uuid,
std::string_view diary_uuid,
const diary_dto& dto
) const override;
void DeleteDiary(
std::string_view user_uuid,
std::string_view diary_uuid
) const override;
};
}
+52
View File
@@ -0,0 +1,52 @@
#include <boost/uuid.hpp>
#include "MySQLMedicationsDAO.h"
using namespace std;
namespace uad
{
MySQLMedicationsDAO::MySQLMedicationsDAO(mysqlx::Session& session): session_(session)
{
}
std::vector<medication_dto> MySQLMedicationsDAO::GetAll() const
{
static const string sql_script = "SELECT uuid, name, dose, unit, is_urgent FROM up_and_down.medications;";
mysqlx::SqlResult sql_result = session_.sql(sql_script).execute();
list<mysqlx::Row> rows = sql_result.fetchAll();
vector<medication_dto> ret;
if (rows.empty()) return ret;
for (const auto& row : rows)
{
medication_dto m;
m.uuid = row[0].get<string>();
m.name = row[1].get<string>();
m.dose = row[2].get<int64_t>();
m.unit = row[3].get<string>();
m.is_urgent = row[4].get<bool>();
ret.push_back(m);
}
return ret;
}
std::string MySQLMedicationsDAO::Create(const medication_dto& m) const
{
boost::uuids::random_generator generator;
boost::uuids::uuid uuid = generator();
const std::string uuid_str = boost::uuids::to_string(uuid);
static const string sql_script = "INSERT INTO `up_and_down`.`medications` (`uuid`, `name`, `dose`, `unit`, `is_urgent`) VALUES ( ?, ?, ?, ?, ?);"s;
session_.sql(sql_script).bind(uuid_str, m.name, m.dose, m.unit, m.is_urgent).execute();
return uuid_str;
}
}
+21
View File
@@ -0,0 +1,21 @@
#pragma once
#include <mysqlx/xdevapi.h>
#include <cstdint>
#include <vector>
#include "IMedicationsDAO.h"
#include "../dtos/medication_dto.h"
namespace uad
{
class MySQLMedicationsDAO : public IMedicationsDAO
{
mysqlx::Session& session_;
public:
explicit MySQLMedicationsDAO(mysqlx::Session& session);
[[nodiscard]] std::vector<medication_dto> GetAll() const override;
[[nodiscard]] std::string Create(const medication_dto& m) const override;
};
}
+17 -17
View File
@@ -14,7 +14,7 @@ MySQLUserDAO::MySQLUserDAO(mysqlx::Session& session) :
{ {
} }
string MySQLUserDAO::Create(const user& created_user) string MySQLUserDAO::Create(const user_dto& created_user)
{ {
boost::uuids::random_generator generator; boost::uuids::random_generator generator;
boost::uuids::uuid uuid = generator(); boost::uuids::uuid uuid = generator();
@@ -31,29 +31,29 @@ string MySQLUserDAO::Create(const user& created_user)
return uuid_str; return uuid_str;
} }
optional<user> MySQLUserDAO::GetByUUID(const string& uuid) optional<user_dto> MySQLUserDAO::GetByUUID(std::string_view uuid)
{ {
static const string sql_script = "SELECT * FROM `up_and_down`.`users` WHERE (uuid = ?) LIMIT 1;"s; static const string sql_script = "SELECT * FROM `up_and_down`.`users` WHERE (uuid = ?) LIMIT 1;"s;
mysqlx::SqlResult sql_result = session_. mysqlx::SqlResult sql_result = session_.
sql(sql_script) sql(sql_script)
.bind(uuid) .bind(uuid.data())
.execute(); .execute();
return GetSingleUserBySQLResult(std::move(sql_result)); return GetSingleUserBySQLResult(std::move(sql_result));
} }
optional<user> MySQLUserDAO::GetByLogin(const string& login) optional<user_dto> MySQLUserDAO::GetByLogin(std::string_view login)
{ {
static const std::string sql_script = "SELECT * FROM `up_and_down`.`users` WHERE (login = ?) LIMIT 1;"s; static const std::string sql_script = "SELECT * FROM `up_and_down`.`users` WHERE (login = ?) LIMIT 1;"s;
mysqlx::SqlResult sql_result = session_. mysqlx::SqlResult sql_result = session_
sql(sql_script) .sql(sql_script)
.bind(login) .bind(login.data())
.execute(); .execute();
return GetSingleUserBySQLResult(std::move(sql_result)); return GetSingleUserBySQLResult(std::move(sql_result));
} }
pair<bool, vector<user>> MySQLUserDAO::GetAll(size_t limit, size_t offset) pair<bool, vector<user_dto>> MySQLUserDAO::GetAll(size_t limit, size_t offset)
{ {
static const string sql_script = "SELECT * FROM `up_and_down`.`users` LIMIT ? OFFSET ?;"s; static const string sql_script = "SELECT * FROM `up_and_down`.`users` LIMIT ? OFFSET ?;"s;
@@ -62,18 +62,18 @@ pair<bool, vector<user>> MySQLUserDAO::GetAll(size_t limit, size_t offset)
.bind(limit, offset) .bind(limit, offset)
.execute(); .execute();
list<mysqlx::Row> rows = sql_result.fetchAll(); list<mysqlx::Row> rows = sql_result.fetchAll();
pair<bool, vector<user>> ret; pair<bool, vector<user_dto>> ret;
if (!rows.size()) if (!rows.size())
{ {
ret.first = true; ret.first = true;
ret.second = vector<user>{}; ret.second = vector<user_dto>{};
return ret; return ret;
} }
ret.first = rows.size() < limit + 1; ret.first = rows.size() < limit + 1;
ret.second = vector<user>{}; ret.second = vector<user_dto>{};
ret.second.reserve(limit); ret.second.reserve(limit);
@@ -84,7 +84,7 @@ pair<bool, vector<user>> MySQLUserDAO::GetAll(size_t limit, size_t offset)
break; break;
} }
user user; user_dto user;
const string user_uuid = row[0].get<string>(); const string user_uuid = row[0].get<string>();
const string user_login = row[1].get<string>(); const string user_login = row[1].get<string>();
@@ -96,7 +96,7 @@ pair<bool, vector<user>> MySQLUserDAO::GetAll(size_t limit, size_t offset)
return ret; return ret;
} }
bool MySQLUserDAO::Update(const user& u) bool MySQLUserDAO::Update(const user_dto& u)
{ {
static const string sql_script = "UPDATE `up_and_down`.`users` SET `login` = ? WHERE `uuid` = ?;"s; static const string sql_script = "UPDATE `up_and_down`.`users` SET `login` = ? WHERE `uuid` = ?;"s;
@@ -107,18 +107,18 @@ bool MySQLUserDAO::Update(const user& u)
return !!schema.getAffectedItemsCount(); return !!schema.getAffectedItemsCount();
} }
bool MySQLUserDAO::Delete(const string& uuid) bool MySQLUserDAO::Delete(std::string_view uuid)
{ {
static const string sql_script = "DELETE FROM `up_and_down`.`users` WHERE `uuid` = ?;"; static const string sql_script = "DELETE FROM `up_and_down`.`users` WHERE `uuid` = ?;";
auto schema = session_.sql(sql_script) auto schema = session_.sql(sql_script)
.bind(uuid) .bind(uuid.data())
.execute(); .execute();
return !!schema.getAffectedItemsCount(); return !!schema.getAffectedItemsCount();
} }
std::optional<user> MySQLUserDAO::GetSingleUserBySQLResult(mysqlx::SqlResult&& sql_result) std::optional<user_dto> MySQLUserDAO::GetSingleUserBySQLResult(mysqlx::SqlResult&& sql_result)
{ {
list<mysqlx::Row> rows = sql_result.fetchAll(); list<mysqlx::Row> rows = sql_result.fetchAll();
@@ -133,7 +133,7 @@ std::optional<user> MySQLUserDAO::GetSingleUserBySQLResult(mysqlx::SqlResult&& s
const string user_login = row_data[1].get<string>(); const string user_login = row_data[1].get<string>();
const string user_hashed_password = row_data[2].get<string>(); const string user_hashed_password = row_data[2].get<string>();
return optional<user>({ return optional<user_dto>({
.uuid = user_uuid, .uuid = user_uuid,
.login = user_login, .login = user_login,
.hashed_password = user_hashed_password .hashed_password = user_hashed_password
+7 -7
View File
@@ -11,19 +11,19 @@ class MySQLUserDAO : public IUserDAO
public: public:
explicit MySQLUserDAO(mysqlx::Session& session); explicit MySQLUserDAO(mysqlx::Session& session);
std::string Create(const user& created_user) override; std::string Create(const user_dto& created_user) override;
std::optional<user> GetByUUID(const std::string& uuid) override; std::optional<user_dto> GetByUUID(std::string_view uuid) override;
std::optional<user> GetByLogin(const std::string& login) override; std::optional<user_dto> GetByLogin(std::string_view login) override;
std::pair<bool, std::vector<user>> GetAll(size_t limit, size_t offset) override; std::pair<bool, std::vector<user_dto>> GetAll(size_t limit, size_t offset) override;
bool Update(const user& u) override; bool Update(const user_dto& u) override;
bool Delete(const std::string& uuid) override; bool Delete(std::string_view uuid) override;
private: private:
std::optional<user> GetSingleUserBySQLResult(mysqlx::SqlResult&& sql_result); std::optional<user_dto> GetSingleUserBySQLResult(mysqlx::SqlResult&& sql_result);
}; };
} }
+112
View File
@@ -0,0 +1,112 @@
#include <mysqlx/xdevapi.h>
#include <unordered_map>
#include "MySQLUserTreatmentSchemesDAO.h"
namespace uad
{
MySQLUserTreatmentSchemesDAO::MySQLUserTreatmentSchemesDAO(mysqlx::Session& session)
: session_(session)
{
}
std::vector<user_treatment_scheme_dto> MySQLUserTreatmentSchemesDAO::FindByUserUUID(
std::string_view user_uuid)
{
static const std::string query = R"(
SELECT
uts.uuid,
uts.treatment_name,
uts.instructions,
ts.medication_uuid
FROM up_and_down.users u
JOIN up_and_down.user_treatment_schemes uts
ON uts.user_uuid = u.uuid
LEFT JOIN up_and_down.treatment_schemes ts
ON ts.user_treatment_schemes_uuid = uts.uuid
WHERE u.uuid = ?
ORDER BY uts.uuid
)";
mysqlx::SqlResult result = session_
.sql(query)
.bind(user_uuid.data())
.execute();
std::unordered_map<std::string, user_treatment_scheme_dto> scheme_map;
for (const mysqlx::Row& row : result)
{
const std::string scheme_uuid = row[0].get<std::string>();
if (scheme_map.find(scheme_uuid) == scheme_map.end())
{
user_treatment_scheme_dto dto;
dto.uuid = scheme_uuid;
dto.treatment_name = row[1].isNull() ? "" : row[1].get<std::string>();
dto.instructions = row[2].isNull() ? "" : row[2].get<std::string>();
scheme_map.emplace(scheme_uuid, std::move(dto));
}
if (!row[3].isNull())
{
scheme_map[scheme_uuid]
.medication_uuids
.push_back(row[3].get<std::string>());
}
}
std::vector<user_treatment_scheme_dto> schemes;
schemes.reserve(scheme_map.size());
for (auto& [_, dto] : scheme_map)
{
schemes.push_back(std::move(dto));
}
return std::move(schemes);
}
void MySQLUserTreatmentSchemesDAO::CreateUserTreatmentScheme(
std::string_view user_uuid,
const user_treatment_scheme_dto& dto)
{
session_.startTransaction();
try {
session_.sql(R"(
INSERT INTO up_and_down.user_treatment_schemes (
uuid,
user_uuid,
treatment_name,
instructions
) VALUES (?, ?, ?, ?)
)")
.bind(
dto.uuid,
user_uuid.data(),
dto.treatment_name,
dto.instructions
)
.execute();
for (const auto& medication_uuid : dto.medication_uuids) {
session_.sql(R"(
INSERT INTO up_and_down.treatment_schemes (
user_treatment_schemes_uuid,
medication_uuid
) VALUES (?, ?)
)")
.bind(dto.uuid, medication_uuid)
.execute();
}
session_.commit();
}
catch (...) {
session_.rollback();
throw;
}
}
} // uad
+21
View File
@@ -0,0 +1,21 @@
#pragma once
#include "IUserTreatmentSchemesDAO.h"
#include <mysqlx/xdevapi.h>
namespace uad
{
class MySQLUserTreatmentSchemesDAO : public IUserTreatmentSchemeDAO
{
mysqlx::Session& session_;
public:
explicit MySQLUserTreatmentSchemesDAO(mysqlx::Session& session);
std::vector<user_treatment_scheme_dto> FindByUserUUID(std::string_view uuid) override;
void CreateUserTreatmentScheme(
std::string_view user_login,
const user_treatment_scheme_dto& dto
) override;
};
} // uad
+22
View File
@@ -0,0 +1,22 @@
#pragma once
#include <string>
#include <cstdint>
namespace uad
{
struct diary_dto
{
std::string uuid;
int64_t time_ms;
int64_t mania_level;
int64_t depression_level;
int64_t mood_level;
int64_t activity_level;
int64_t appetite_level;
int64_t dream_level;
int64_t anxiety_level;
std::string comment;
std::string user_treatment_scheme_uuid;
};
}
+17
View File
@@ -0,0 +1,17 @@
#pragma once
#include <string>
#include "../helpers/helpers.h"
namespace uad
{
struct medication_dto
{
std::string uuid;
std::string name;
int64_t dose;
std::string unit;
bool is_urgent;
};
}
+1 -1
View File
@@ -6,7 +6,7 @@
namespace uad namespace uad
{ {
struct user struct user_dto
{ {
std::string uuid; std::string uuid;
std::string login; std::string login;
+16
View File
@@ -0,0 +1,16 @@
#pragma once
#include <string>
#include <vector>
namespace uad
{
struct user_treatment_scheme_dto {
std::string uuid;
std::string user_uuid;
std::string treatment_name;
std::string instructions;
std::vector<std::string> medication_uuids;
};
}
+2 -2
View File
@@ -30,7 +30,7 @@ public:
{ {
} }
boost::beast::http::response<ResponseType> operator ()( [[nodiscard]] boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req
) override ) override
{ {
@@ -64,7 +64,7 @@ public:
throw session_exception(http::status::unprocessable_entity, "Login or password are empty"s); throw session_exception(http::status::unprocessable_entity, "Login or password are empty"s);
} }
const std::optional<user> maybe_user = user_dao_->GetByLogin(login); const std::optional<user_dto> maybe_user = user_dao_->GetByLogin(login);
if (!maybe_user.has_value() || maybe_user.value().hashed_password != HashPassword(password)) if (!maybe_user.has_value() || maybe_user.value().hashed_password != HashPassword(password))
{ {
+1 -1
View File
@@ -23,7 +23,7 @@ public:
{ {
} }
boost::beast::http::response<ResponseType> operator ()( [[nodiscard]] boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req
) override ) override
{ {
@@ -24,7 +24,7 @@ public:
{ {
} }
boost::beast::http::response<ResponseType> operator ()( [[nodiscard]] boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req
) override ) override
{ {
@@ -66,7 +66,7 @@ public:
throw session_exception(http::status::conflict, "User with login "s + login + " exists"s); throw session_exception(http::status::conflict, "User with login "s + login + " exists"s);
} }
user user; user_dto user;
user.login = login; user.login = login;
user.hashed_password = HashPassword(password); user.hashed_password = HashPassword(password);
@@ -97,16 +97,16 @@ public:
} }
private: private:
bool ValidateLogin(const std::string& login) bool ValidateLogin(std::string_view login)
{ {
if (login.size() < 3 || login.size() > 50) return false; if (login.size() < 3 || login.size() > 50) return false;
std::regex pattern(std::string("^[A-Za-z0-9_]+$")); std::regex pattern(std::string("^[A-Za-z0-9_]+$"));
return std::regex_match(login, pattern); return std::regex_match(login.data(), pattern);
} }
bool ValidatePassword(const std::string& password) bool ValidatePassword(std::string_view password)
{ {
return password.size() >= 5; return password.size() >= 5;
} }
@@ -0,0 +1,79 @@
#pragma once
#include <boost/log/trivial.hpp>
#include <regex>
#include <boost/json.hpp>
#include <boost/mpl/vector/vector0.hpp>
#include <mysqlx/xdevapi.h>
#include "IExecutor.h"
#include "../DAO/IAuthDAO.h"
#include "../DAO/IDiariesDAO.h"
#include "../exceptions/session_exception.h"
namespace uad
{
template <class Body, class Allocator, class ResponseType>
class DeleteDiaryExecutor
{
mysqlx::Session& session_;
const std::shared_ptr<IAuthDAO>& auth_dao_;
const std::shared_ptr<IDiariesDAO>& diaries_dao_;
public:
DeleteDiaryExecutor(
mysqlx::Session& session,
const std::shared_ptr<IAuthDAO>& auth_dao,
const std::shared_ptr<IDiariesDAO>& diaries_dao
) : session_(session), auth_dao_(auth_dao), diaries_dao_(diaries_dao)
{
}
[[nodiscard]] boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req,
std::string diary_uuid
)
{
using namespace boost;
using namespace boost::json;
using namespace boost::beast;
using namespace std::string_literals;
using namespace std::string_view_literals;
constexpr std::string_view auth_prefix = "Bearer "sv;
static const std::string invalid_token_message =
"DELETE /api/v1/Diary - Response 401: Unauthorized"s;
BOOST_LOG_TRIVIAL(info) << "DELETE /api/v1/Diary - Request";
if (req[http::field::authorization].size() <= auth_prefix.size())
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
const std::string auth_token = {
req[http::field::authorization].begin() + auth_prefix.size(),
req[http::field::authorization].end()
};
if (!auth_dao_->HasAuthorized(auth_token))
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
std::string_view user_uuid_ref = auth_dao_->GetUUID(auth_token);
const std::string user_uuid{user_uuid_ref.begin(), user_uuid_ref.end()};
diaries_dao_->DeleteDiary(user_uuid, diary_uuid);
http::response<ResponseType> res{http::status::no_content, req.version()};
res.keep_alive(req.keep_alive());
BOOST_LOG_TRIVIAL(info) << "DELETE /api/v1/Diary - Response 204: Diary deleted";
return res;
}
};
}
+123
View File
@@ -0,0 +1,123 @@
#pragma once
#include <boost/log/trivial.hpp>
#include <regex>
#include <boost/json.hpp>
#include <boost/mpl/vector/vector0.hpp>
#include <mysqlx/xdevapi.h>
#include "IExecutor.h"
#include "../DAO/IAuthDAO.h"
#include "../DAO/IDiariesDAO.h"
#include "../DAO/IUserTreatmentSchemesDAO.h"
#include "../exceptions/session_exception.h"
namespace uad
{
template <class Body, class Allocator, class ResponseType>
class GetDiariesExecutor : public IExecutor<Body, Allocator, ResponseType>
{
mysqlx::Session& session_;
const std::shared_ptr<IAuthDAO>& auth_dao_;
const std::shared_ptr<IDiariesDAO>& diaries_dao_;
public:
GetDiariesExecutor(
mysqlx::Session& session,
const std::shared_ptr<IAuthDAO>& auth_dao,
const std::shared_ptr<IDiariesDAO>& diaries_dao
) : session_(session), auth_dao_(auth_dao), diaries_dao_(diaries_dao)
{
}
[[nodiscard]] boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req
) override
{
using namespace boost;
using namespace boost::json;
using namespace boost::beast;
using namespace std::string_literals;
using namespace std::string_view_literals;
constexpr std::string_view auth_prefix = "Bearer "sv;
static const std::string invalid_token_message =
"GET /api/v1/User/Medications - Response 401: Unauthorized"s;
BOOST_LOG_TRIVIAL(info) << "GET /api/v1/User/Medications - Request";
if (req[http::field::authorization].size() <= auth_prefix.size())
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
const std::string auth_token = {
req[http::field::authorization].begin() + auth_prefix.size(),
req[http::field::authorization].end()
};
if (!auth_dao_->HasAuthorized(auth_token))
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
std::string_view user_uuid_ref = auth_dao_->GetUUID(auth_token);
const std::string user_uuid{user_uuid_ref.begin(), user_uuid_ref.end()};
std::vector<diary_dto> diaries = diaries_dao_->GetDiariesByUserUUID(user_uuid);
http::response<ResponseType> res{http::status::ok, req.version()};
value response_body;
response_body.emplace_object();
response_body.as_object().emplace("diaries", toJSONArray(diaries));
res.body() = serialize(response_body);
res.set(http::field::content_type, "application/json");
res.content_length(res.body().size());
return res;
}
private:
boost::json::object ToJSON(const diary_dto& diary)
{
boost::json::object diary_json;
diary_json["uuid"] = diary.uuid;
diary_json["time"] = diary.time_ms;
diary_json["mania_level"] = diary.mania_level;
diary_json["depression_level"] = diary.depression_level;
diary_json["mood_level"] = diary.mood_level;
diary_json["activity_level"] = diary.activity_level;
diary_json["appetite_level"] = diary.appetite_level;
diary_json["dream_level"] = diary.dream_level;
diary_json["anxiety_level"] = diary.anxiety_level;
diary_json["comment"] = diary.comment;
diary_json["user_treatment_scheme_uuid"] =
diary.user_treatment_scheme_uuid;
return diary_json;
}
boost::json::array toJSONArray(const std::vector<diary_dto>& schemes)
{
using namespace boost;
using namespace boost::json;
using namespace boost::beast;
using namespace std::string_literals;
using namespace std::string_view_literals;
json::array arr;
for (const auto& m : schemes)
{
arr.emplace_back(ToJSON(m));
}
return std::move(arr);
}
};
}
@@ -0,0 +1,105 @@
#pragma once
#include <boost/log/trivial.hpp>
#include <regex>
#include <boost/json.hpp>
#include <boost/mpl/vector/vector0.hpp>
#include <mysqlx/xdevapi.h>
#include "IExecutor.h"
#include "../DAO/IAuthDAO.h"
#include "../DAO/IMedicationsDAO.h"
#include "../exceptions/session_exception.h"
namespace uad
{
template <class Body, class Allocator, class ResponseType>
class GetUserMedicationsExecutor : public IExecutor<Body, Allocator, ResponseType>
{
mysqlx::Session& session_;
const std::shared_ptr<IAuthDAO>& auth_dao_;
const std::shared_ptr<IMedicationsDAO>& medications_dao_;
public:
GetUserMedicationsExecutor(
mysqlx::Session& session,
const std::shared_ptr<IAuthDAO>& auth_dao,
const std::shared_ptr<IMedicationsDAO>& medications_dao
): session_(session), auth_dao_(auth_dao), medications_dao_(medications_dao)
{
}
[[nodiscard]] boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req
) override
{
using namespace boost;
using namespace boost::json;
using namespace boost::beast;
using namespace std::string_literals;
using namespace std::string_view_literals;
constexpr std::string_view auth_prefix = "Bearer "sv;
static const std::string invalid_token_message = "GET /api/v1/User/Medications - Response 401: Unauthorized"s;
BOOST_LOG_TRIVIAL(info) << "GET /api/v1/User/Medications - Request";
if (req[http::field::authorization].size() <= auth_prefix.size())
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
const std::string auth_token = {req[http::field::authorization].begin() + auth_prefix.size(), req[http::field::authorization].end()};
if (!auth_dao_->HasAuthorized(auth_token))
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
http::response<ResponseType> res{http::status::ok, req.version()};
const std::vector<medication_dto> medications = medications_dao_->GetAll();
value response_body;
response_body.emplace_object();
response_body.as_object().emplace("medications", toJSONArray(medications));
res.body() = serialize(response_body);
res.set(http::field::content_type, "application/json");
res.content_length(res.body().size());
return res;
}
private:
boost::json::object ToJSON(const medication_dto& m)
{
return {
{ "uuid", m.uuid },
{ "name", m.name },
{ "dose", m.dose },
{ "unit", m.unit },
{ "is_urgent", m.is_urgent }
};
}
boost::json::array toJSONArray(const std::vector<medication_dto>& medications)
{
using namespace boost;
using namespace boost::json;
using namespace boost::beast;
using namespace std::string_literals;
using namespace std::string_view_literals;
json::array arr;
for (const auto& m : medications)
{
arr.emplace_back(ToJSON(m));
}
return std::move(arr);
}
};
}
@@ -0,0 +1,120 @@
#pragma once
#include <boost/log/trivial.hpp>
#include <regex>
#include <boost/json.hpp>
#include <boost/mpl/vector/vector0.hpp>
#include <mysqlx/xdevapi.h>
#include "IExecutor.h"
#include "../DAO/IAuthDAO.h"
#include "../DAO/IUserTreatmentSchemesDAO.h"
#include "../exceptions/session_exception.h"
namespace uad
{
template <class Body, class Allocator, class ResponseType>
class GetUserTreatmentSchemeExecutor : public IExecutor<Body, Allocator, ResponseType>
{
mysqlx::Session& session_;
const std::shared_ptr<IAuthDAO>& auth_dao_;
const std::shared_ptr<IUserTreatmentSchemeDAO>& user_treatment_scheme_dao_;
public:
GetUserTreatmentSchemeExecutor(
mysqlx::Session& session,
const std::shared_ptr<IAuthDAO>& auth_dao,
const std::shared_ptr<IUserTreatmentSchemeDAO>& user_treatment_scheme_dao
) : session_(session), auth_dao_(auth_dao), user_treatment_scheme_dao_(user_treatment_scheme_dao)
{
}
[[nodiscard]] boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req
) override
{
using namespace boost;
using namespace boost::json;
using namespace boost::beast;
using namespace std::string_literals;
using namespace std::string_view_literals;
constexpr std::string_view auth_prefix = "Bearer "sv;
static const std::string invalid_token_message =
"GET /api/v1/UserTreatmentSchemes - Response 401: Unauthorized"s;
BOOST_LOG_TRIVIAL(info) << "GET /api/v1/UserTreatmentSchemes - Request";
if (req[http::field::authorization].size() <= auth_prefix.size())
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
const std::string auth_token = {
req[http::field::authorization].begin() + auth_prefix.size(),
req[http::field::authorization].end()
};
if (!auth_dao_->HasAuthorized(auth_token))
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
std::string_view user_uuid_ref = auth_dao_->GetUUID(auth_token);
const std::string user_uuid{user_uuid_ref.begin(), user_uuid_ref.end()};
std::vector<user_treatment_scheme_dto> schemes = user_treatment_scheme_dao_->FindByUserUUID(user_uuid);
http::response<ResponseType> res{http::status::ok, req.version()};
value response_body;
response_body.emplace_object();
response_body.as_object().emplace("user_treatment_schemes", ToJSONArray(schemes));
res.body() = serialize(response_body);
res.set(http::field::content_type, "application/json");
res.content_length(res.body().size());
return res;
}
private:
boost::json::object ToJSON(const user_treatment_scheme_dto& scheme)
{
boost::json::array medications_json;
medications_json.reserve(scheme.medication_uuids.size());
for (const auto& medication_uuid : scheme.medication_uuids) {
medications_json.emplace_back(medication_uuid);
}
boost::json::object scheme_json;
scheme_json["uuid"] = scheme.uuid;
scheme_json["treatment_name"] = scheme.treatment_name;
scheme_json["instructions"] = scheme.instructions;
scheme_json["medications"] = std::move(medications_json);
return scheme_json;
}
boost::json::array ToJSONArray(const std::vector<user_treatment_scheme_dto>& schemes)
{
using namespace boost;
using namespace boost::json;
using namespace boost::beast;
using namespace std::string_literals;
using namespace std::string_view_literals;
json::array arr;
for (const auto& m : schemes)
{
arr.emplace_back(ToJSON(m));
}
return std::move(arr);
}
};
}
+11 -1
View File
@@ -4,10 +4,14 @@
#include "../db/mysql_connector.h" #include "../db/mysql_connector.h"
#include "../DAO/IUserDAO.h" #include "../DAO/IUserDAO.h"
#include "../DAO/IMedicationsDAO.h"
#include "../DAO/MySQLUserTreatmentSchemesDAO.h"
#include "AuthRegistrationExecutor.h" #include "AuthRegistrationExecutor.h"
#include "RootExecutor.h" #include "RootExecutor.h"
#include "../DAO/MemoryAuthDAO.h" #include "../DAO/MemoryAuthDAO.h"
#include "../DAO/MySQLUserDAO.h" #include "../DAO/MySQLUserDAO.h"
#include "../DAO/MySQLMedicationsDAO.h"
#include "../DAO/MySQLDiariesDAO.h"
namespace uad namespace uad
{ {
@@ -19,11 +23,17 @@ void HandleRequest(
{ {
static std::shared_ptr<IUserDAO> user_dao = std::make_shared<MySQLUserDAO>(GetMySqlSession()); static std::shared_ptr<IUserDAO> user_dao = std::make_shared<MySQLUserDAO>(GetMySqlSession());
static std::shared_ptr<IAuthDAO> auth_dao = std::make_shared<MemoryAuthDAO>(GetMySqlSession()); static std::shared_ptr<IAuthDAO> auth_dao = std::make_shared<MemoryAuthDAO>(GetMySqlSession());
static std::shared_ptr<IMedicationsDAO> medications_dao = std::make_shared<MySQLMedicationsDAO>(GetMySqlSession());
static std::shared_ptr<IUserTreatmentSchemeDAO> user_treatment_schemes_dao = std::make_shared<MySQLUserTreatmentSchemesDAO>(GetMySqlSession());
static std::shared_ptr<IDiariesDAO> diaries_dao = std::make_shared<MySqlDiariesDAO>(GetMySqlSession());
static RootExecutor<Body, Allocator, boost::beast::http::string_body, Send> root_executor( static RootExecutor<Body, Allocator, boost::beast::http::string_body, Send> root_executor(
GetMySqlSession(), GetMySqlSession(),
user_dao, user_dao,
auth_dao auth_dao,
medications_dao,
user_treatment_schemes_dao,
diaries_dao
); );
root_executor(doc_root, std::move(req), std::forward<Send>(send)); root_executor(doc_root, std::move(req), std::forward<Send>(send));
+22 -1
View File
@@ -8,9 +8,30 @@ template <class Body, class Allocator, class ResponseType>
class IExecutor class IExecutor
{ {
public: public:
virtual boost::beast::http::response<ResponseType> operator ()( [[nodiscard]] virtual boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req
) = 0; ) = 0;
virtual ~IExecutor() = default; virtual ~IExecutor() = default;
}; };
// class IAuthorizable : public IExecutor
// {
// IExecutor& next_executor_;
// public:
// IAuthorizable(IExecutor& next_executor): next_executor_(next_executor)
// {
//
// }
//
// boost::beast::http::response<ResponseType> operator ()(
// boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req
// ) override
// {
// // Логика проверки авторизации
// // передать управление следующему executorу - возврат req
// // посмотреть chain of responsibility, composite
// // выбрасывать исключение здесь
// return next_executor_(req);
// }
// };
} }
+140
View File
@@ -0,0 +1,140 @@
#pragma once
#include <boost/log/trivial.hpp>
#include <regex>
#include <boost/json.hpp>
#include <boost/mpl/vector/vector0.hpp>
#include <mysqlx/xdevapi.h>
#include "IExecutor.h"
#include "../DAO/IAuthDAO.h"
#include "../DAO/IDiariesDAO.h"
#include "../DAO/IUserTreatmentSchemesDAO.h"
#include "../exceptions/session_exception.h"
namespace uad
{
template <class Body, class Allocator, class ResponseType>
class PostDiaryExecutor : public IExecutor<Body, Allocator, ResponseType>
{
mysqlx::Session& session_;
const std::shared_ptr<IAuthDAO>& auth_dao_;
const std::shared_ptr<IDiariesDAO>& diaries_dao_;
public:
PostDiaryExecutor(
mysqlx::Session& session,
const std::shared_ptr<IAuthDAO>& auth_dao,
const std::shared_ptr<IDiariesDAO>& diaries_dao
) : session_(session), auth_dao_(auth_dao), diaries_dao_(diaries_dao)
{
}
[[nodiscard]] boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req
) override
{
using namespace boost;
using namespace boost::json;
using namespace boost::beast;
using namespace std::string_literals;
using namespace std::string_view_literals;
constexpr std::string_view auth_prefix = "Bearer "sv;
static const std::string invalid_token_message =
"POST /api/v1/Diary - Response 401: Unauthorized"s;
BOOST_LOG_TRIVIAL(info) << "POST /api/v1/Diary - Request";
if (req[http::field::authorization].size() <= auth_prefix.size())
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
const std::string auth_token = {
req[http::field::authorization].begin() + auth_prefix.size(),
req[http::field::authorization].end()
};
if (!auth_dao_->HasAuthorized(auth_token))
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
std::string_view user_uuid_ref = auth_dao_->GetUUID(auth_token);
const std::string user_uuid{user_uuid_ref.begin(), user_uuid_ref.end()};
value val = json::parse(req.body());
object& obj = val.as_object();
diary_dto dto;
dto.uuid = GenerateUUID();
dto.time_ms = obj["time_ms"].as_int64();
dto.mania_level = obj["mania_level"].as_int64();
dto.depression_level = obj["depression_level"].as_int64();
dto.mood_level = obj["mood_level"].as_int64();
dto.activity_level = obj["activity_level"].as_int64();
dto.appetite_level = obj["appetite_level"].as_int64();
dto.dream_level = obj["dream_level"].as_int64();
dto.anxiety_level = obj["anxiety_level"].as_int64();
dto.comment = obj["comment"].as_string().c_str();
dto.user_treatment_scheme_uuid =
obj["user_treatment_scheme_uuid"].as_string().c_str();
try
{
session_.startTransaction();
diaries_dao_->СreateDiary(user_uuid, dto);
session_.commit();
}
catch (const mysqlx::Error& e)
{
session_.rollback();
BOOST_LOG_TRIVIAL(error) << "MySQL Error: " << e.what();
throw session_exception(http::status::internal_server_error, "Internal Server Error");
}
catch (const std::exception& e)
{
session_.rollback();
BOOST_LOG_TRIVIAL(error) << "Unexpected Error: " << e.what();
throw session_exception(http::status::internal_server_error, "Internal Server Error");
}
http::response<ResponseType> res{http::status::ok, req.version()};
value response_body;
response_body.emplace_object();
response_body.as_object().emplace("diary", ToJSON(dto));
res.body() = serialize(response_body);
res.set(http::field::content_type, "application/json");
res.content_length(res.body().size());
return res;
}
private:
boost::json::object ToJSON(const diary_dto& diary)
{
boost::json::object diary_json;
diary_json["uuid"] = diary.uuid;
diary_json["time"] = diary.time_ms;
diary_json["mania_level"] = diary.mania_level;
diary_json["depression_level"] = diary.depression_level;
diary_json["mood_level"] = diary.mood_level;
diary_json["activity_level"] = diary.activity_level;
diary_json["appetite_level"] = diary.appetite_level;
diary_json["dream_level"] = diary.dream_level;
diary_json["anxiety_level"] = diary.anxiety_level;
diary_json["comment"] = diary.comment;
diary_json["user_treatment_scheme_uuid"] =
diary.user_treatment_scheme_uuid;
return diary_json;
}
};
}
@@ -0,0 +1,111 @@
#pragma once
#include <boost/log/trivial.hpp>
#include <regex>
#include <boost/json.hpp>
#include <boost/mpl/vector/vector0.hpp>
#include <mysqlx/xdevapi.h>
#include "IExecutor.h"
#include "../DAO/IAuthDAO.h"
#include "../DAO/IMedicationsDAO.h"
#include "../exceptions/session_exception.h"
namespace uad
{
template <class Body, class Allocator, class ResponseType>
class PostUserMedicationsExecutor : public IExecutor<Body, Allocator, ResponseType>
{
mysqlx::Session& session_;
const std::shared_ptr<IAuthDAO>& auth_dao_;
const std::shared_ptr<IMedicationsDAO>& medications_dao_;
public:
PostUserMedicationsExecutor(
mysqlx::Session& session,
const std::shared_ptr<IAuthDAO>& auth_dao,
const std::shared_ptr<IMedicationsDAO>& medications_dao
): session_(session), auth_dao_(auth_dao), medications_dao_(medications_dao)
{
}
[[nodiscard]] boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req
) override
{
using namespace boost;
using namespace boost::json;
using namespace boost::beast;
using namespace std::string_literals;
using namespace std::string_view_literals;
constexpr std::string_view auth_prefix = "Bearer "sv;
static const std::string invalid_token_message = "POST /api/v1/User/Medications - Response 401: Unauthorized"s;
BOOST_LOG_TRIVIAL(info) << "POST /api/v1/User/Medications - Request";
if (req[http::field::authorization].size() <= auth_prefix.size())
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
const std::string auth_token = {req[http::field::authorization].begin() + auth_prefix.size(), req[http::field::authorization].end()};
if (!auth_dao_->HasAuthorized(auth_token))
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
const auto body = req.body();
value req_json;
medication_dto m;
try
{
req_json = json::parse(body);
}
catch (const system::system_error& err)
{
BOOST_LOG_TRIVIAL(error) << "POST /api/v1/User/Medications - Response 400: Cannot deserialize json";
throw session_exception(http::status::bad_request, "Cannot deserialize json");
}
m.name = req_json.as_object().at("name").as_string().c_str();
m.dose = req_json.as_object().at("dose").as_int64();
m.unit = req_json.as_object().at("unit").as_string().c_str();
m.is_urgent = req_json.as_object().at("is_urgent").as_bool();
try
{
m.uuid = medications_dao_->Create(m);
}
catch (const std::runtime_error& err)
{
BOOST_LOG_TRIVIAL(error) << "POST /api/v1/User/Medications - Response 409: This medication already exists";
throw session_exception(http::status::conflict, "This medication already exists");
}
http::response<ResponseType> res{http::status::ok, req.version()};
res.body() = serialize(ToJSON(m));
res.set(http::field::content_type, "application/json");
res.content_length(res.body().size());
return res;
}
private:
boost::json::object ToJSON(const medication_dto& m)
{
return {
{ "uuid", m.uuid },
{ "name", m.name },
{ "dose", m.dose },
{ "unit", m.unit },
{ "is_urgent", m.is_urgent }
};
}
};
}
@@ -0,0 +1,144 @@
#pragma once
#include <boost/log/trivial.hpp>
#include <regex>
#include <boost/json.hpp>
#include <boost/mpl/vector/vector0.hpp>
#include <mysqlx/xdevapi.h>
#include "IExecutor.h"
#include "../DAO/IAuthDAO.h"
#include "../DAO/IUserTreatmentSchemesDAO.h"
#include "../exceptions/session_exception.h"
namespace uad
{
template <class Body, class Allocator, class ResponseType>
class PostUserTreatmentSchemeExecutor : public IExecutor<Body, Allocator, ResponseType>
{
mysqlx::Session& session_;
const std::shared_ptr<IAuthDAO>& auth_dao_;
const std::shared_ptr<IUserTreatmentSchemeDAO>& user_treatment_scheme_dao_;
public:
PostUserTreatmentSchemeExecutor(
mysqlx::Session& session,
const std::shared_ptr<IAuthDAO>& auth_dao,
const std::shared_ptr<IUserTreatmentSchemeDAO>& user_treatment_scheme_dao
) : session_(session), auth_dao_(auth_dao), user_treatment_scheme_dao_(user_treatment_scheme_dao)
{
}
[[nodiscard]] boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req
) override
{
using namespace boost;
using namespace boost::json;
using namespace boost::beast;
using namespace std::string_literals;
using namespace std::string_view_literals;
constexpr std::string_view auth_prefix = "Bearer "sv;
static const std::string invalid_token_message =
"POST /api/v1/UserTreatmentSchemes - Response 401: Unauthorized"s;
BOOST_LOG_TRIVIAL(info) << "POST /api/v1/UserTreatmentSchemes - Request";
if (req[http::field::authorization].size() <= auth_prefix.size())
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
const std::string auth_token = {
req[http::field::authorization].begin() + auth_prefix.size(),
req[http::field::authorization].end()
};
if (!auth_dao_->HasAuthorized(auth_token))
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
std::string_view user_uuid_ref = auth_dao_->GetUUID(auth_token);
const std::string user_uuid{user_uuid_ref.begin(), user_uuid_ref.end()};
const auto body = req.body();
value req_json;
try
{
req_json = json::parse(body);
}
catch (const system::system_error& err)
{
BOOST_LOG_TRIVIAL(error) <<
"POST /api/v1/UserTreatmentSchemes - Response 400: Cannot deserialize json";
throw session_exception(http::status::bad_request, "Cannot deserialize json");
}
user_treatment_scheme_dto utsd = FromJSON(req_json);
utsd.uuid = GenerateUUID();
try
{
user_treatment_scheme_dao_->CreateUserTreatmentScheme(user_uuid, utsd);
}
catch (...)
{
BOOST_LOG_TRIVIAL(error) <<
"POST /api/v1/UserTreatmentSchemes - Response 400: Cannot write entity";
throw session_exception(http::status::bad_request, "Cannot write entity");
}
http::response<ResponseType> res{http::status::ok, req.version()};
json::value res_json = ToJSON(utsd);
res.body() = serialize(res_json);
res.set(http::field::content_type, "application/json");
res.content_length(res.body().size());
return res;
}
private:
user_treatment_scheme_dto FromJSON(const boost::json::value& scheme)
{
user_treatment_scheme_dto dto;
dto.treatment_name =
scheme.at("treatment_name").as_string().c_str();
dto.instructions =
scheme.at("instructions").as_string().c_str();
for (const auto& med : scheme.at("medications").as_array())
{
dto.medication_uuids.push_back(
med.as_string().c_str()
);
}
return dto;
}
boost::json::object ToJSON(const user_treatment_scheme_dto& utsd)
{
boost::json::array medications_json;
medications_json.reserve(utsd.medication_uuids.size());
for (const auto& medication_uuid : utsd.medication_uuids) {
medications_json.emplace_back(medication_uuid);
}
boost::json::object scheme_json;
scheme_json["uuid"] = utsd.uuid;
scheme_json["treatment_name"] = utsd.treatment_name;
scheme_json["instructions"] = utsd.instructions;
scheme_json["medications"] = std::move(medications_json);
return scheme_json;
}
};
}
+119
View File
@@ -0,0 +1,119 @@
#pragma once
#include <boost/log/trivial.hpp>
#include <regex>
#include <boost/json.hpp>
#include <boost/mpl/vector/vector0.hpp>
#include <mysqlx/xdevapi.h>
#include "IExecutor.h"
#include "../DAO/IAuthDAO.h"
#include "../DAO/IDiariesDAO.h"
#include "../DAO/IUserTreatmentSchemesDAO.h"
#include "../exceptions/session_exception.h"
namespace uad
{
template <class Body, class Allocator, class ResponseType>
class PutDiaryExecutor
{
mysqlx::Session& session_;
const std::shared_ptr<IAuthDAO>& auth_dao_;
const std::shared_ptr<IDiariesDAO>& diaries_dao_;
public:
PutDiaryExecutor(
mysqlx::Session& session,
const std::shared_ptr<IAuthDAO>& auth_dao,
const std::shared_ptr<IDiariesDAO>& diaries_dao
) : session_(session), auth_dao_(auth_dao), diaries_dao_(diaries_dao)
{
}
[[nodiscard]] boost::beast::http::response<ResponseType> operator ()(
boost::beast::http::request<Body, boost::beast::http::basic_fields<Allocator>>&& req,
std::string diary_uuid
)
{
using namespace boost;
using namespace boost::json;
using namespace boost::beast;
using namespace std::string_literals;
using namespace std::string_view_literals;
constexpr std::string_view auth_prefix = "Bearer "sv;
static const std::string invalid_token_message =
"PUT /api/v1/Diary - Response 401: Unauthorized"s;
BOOST_LOG_TRIVIAL(info) << "PUT /api/v1/Diary - Request";
if (req[http::field::authorization].size() <= auth_prefix.size())
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
const std::string auth_token = {
req[http::field::authorization].begin() + auth_prefix.size(),
req[http::field::authorization].end()
};
if (!auth_dao_->HasAuthorized(auth_token))
{
BOOST_LOG_TRIVIAL(error) << invalid_token_message;
throw session_exception(http::status::unauthorized, "Unauthorized");
}
std::string_view user_uuid_ref = auth_dao_->GetUUID(auth_token);
const std::string user_uuid{user_uuid_ref.begin(), user_uuid_ref.end()};
value val = json::parse(req.body());
object& obj = val.as_object();
diary_dto dto;
dto.uuid = diary_uuid;
dto.mania_level = obj["mania_level"].as_int64();
dto.depression_level = obj["depression_level"].as_int64();
dto.mood_level = obj["mood_level"].as_int64();
dto.activity_level = obj["activity_level"].as_int64();
dto.appetite_level = obj["appetite_level"].as_int64();
dto.dream_level = obj["dream_level"].as_int64();
dto.anxiety_level = obj["anxiety_level"].as_int64();
dto.comment = obj["comment"].as_string().c_str();
dto.user_treatment_scheme_uuid = obj["user_treatment_scheme_uuid"].as_string().c_str();
diaries_dao_->UpdateDiary(user_uuid, diary_uuid, dto);
http::response<ResponseType> res{http::status::ok, req.version()};
value response_body = ToJSON(dto);
res.body() = serialize(response_body);
res.set(http::field::content_type, "application/json");
res.content_length(res.body().size());
return res;
}
private:
boost::json::object ToJSON(const diary_dto& diary)
{
boost::json::object diary_json;
diary_json["uuid"] = diary.uuid;
diary_json["time"] = diary.time_ms;
diary_json["mania_level"] = diary.mania_level;
diary_json["depression_level"] = diary.depression_level;
diary_json["mood_level"] = diary.mood_level;
diary_json["activity_level"] = diary.activity_level;
diary_json["appetite_level"] = diary.appetite_level;
diary_json["dream_level"] = diary.dream_level;
diary_json["anxiety_level"] = diary.anxiety_level;
diary_json["comment"] = diary.comment;
diary_json["user_treatment_scheme_uuid"] =
diary.user_treatment_scheme_uuid;
return diary_json;
}
};
}
+171 -34
View File
@@ -1,3 +1,6 @@
#pragma once
#include <boost/url.hpp>
#include <mysqlx/xdevapi.h> #include <mysqlx/xdevapi.h>
#include <mysqlx/common/api.h> #include <mysqlx/common/api.h>
@@ -7,8 +10,19 @@
#include "AuthRegistrationExecutor.h" #include "AuthRegistrationExecutor.h"
#include "AuthLoginExecutor.h" #include "AuthLoginExecutor.h"
#include "AuthLogoutExecutor.h" #include "AuthLogoutExecutor.h"
#include "GetUserMedicationsExecutor.h"
#include "GetUserTreatmentSchemeExecutor.h"
#include "PostUserTreatmentSchemeExecutor.h"
#include "PostUserMedicationsExecutor.h"
#include "GetDiariesExecutor.h"
#include "PostDiaryExecutor.h"
#include "PutDiaryExecutor.h"
#include "DeleteDiaryExecutor.h"
#include "../DAO/IUserDAO.h" #include "../DAO/IUserDAO.h"
#include "../DAO/IAuthDAO.h" #include "../DAO/IAuthDAO.h"
#include "../DAO/IDiariesDAO.h"
#include "../DAO/IMedicationsDAO.h"
#include "../DAO/IUserTreatmentSchemesDAO.h"
#include "./../helpers/helpers.h" #include "./../helpers/helpers.h"
#include "./../exceptions/session_exception.h" #include "./../exceptions/session_exception.h"
@@ -24,6 +38,23 @@ class RootExecutor
Body, Allocator, boost::beast::http::string_body>; Body, Allocator, boost::beast::http::string_body>;
using RouteAuthLogoutExecutor = AuthLogoutExecutor< using RouteAuthLogoutExecutor = AuthLogoutExecutor<
Body, Allocator, boost::beast::http::string_body>; Body, Allocator, boost::beast::http::string_body>;
using RouteGetUserMedicationsExecutor = GetUserMedicationsExecutor<
Body, Allocator, boost::beast::http::string_body>;
using RoutePostUserMedicationsExecutor = PostUserMedicationsExecutor<
Body, Allocator, boost::beast::http::string_body>;
using RouteGetUserTreatmentSchemeExecutor = GetUserTreatmentSchemeExecutor<
Body, Allocator, boost::beast::http::string_body>;
using RoutePostUserTreatmentSchemeExecutor = PostUserTreatmentSchemeExecutor<
Body, Allocator, boost::beast::http::string_body>;
using RouteGetDiariesExecutor = GetDiariesExecutor<
Body, Allocator, boost::beast::http::string_body>;
using RoutePostDiaryExecutor = PostDiaryExecutor<
Body, Allocator, boost::beast::http::string_body>;
using RoutePutDiaryExecutor = PutDiaryExecutor<
Body, Allocator, boost::beast::http::string_body>;
using RouteDeleteDiaryExecutor = DeleteDiaryExecutor<
Body, Allocator, boost::beast::http::string_body>;
using IRouteController = IController<Body, Allocator, boost::beast::http::string_body>; using IRouteController = IController<Body, Allocator, boost::beast::http::string_body>;
using RouteController = Controller<Body, Allocator, boost::beast::http::string_body>; using RouteController = Controller<Body, Allocator, boost::beast::http::string_body>;
using RoutesPathes = std::unordered_map<std::string, std::unique_ptr<IRouteController>>; using RoutesPathes = std::unordered_map<std::string, std::unique_ptr<IRouteController>>;
@@ -37,35 +68,96 @@ private:
mysqlx::Session& session_; mysqlx::Session& session_;
const std::shared_ptr<IUserDAO>& user_dao_; const std::shared_ptr<IUserDAO>& user_dao_;
const std::shared_ptr<IAuthDAO>& auth_dao_; const std::shared_ptr<IAuthDAO>& auth_dao_;
const std::shared_ptr<IMedicationsDAO>& medications_dao_;
const std::shared_ptr<IUserTreatmentSchemeDAO>& user_treatment_scheme_dao_;
const std::shared_ptr<IDiariesDAO>& diaries_dao_;
public: public:
RootExecutor( RootExecutor(
mysqlx::Session& session, mysqlx::Session& session,
const std::shared_ptr<IUserDAO>& user_dao, const std::shared_ptr<IUserDAO>& user_dao,
const std::shared_ptr<IAuthDAO>& auth_dao) : const std::shared_ptr<IAuthDAO>& auth_dao,
session_(session), user_dao_(user_dao), auth_dao_(auth_dao) const std::shared_ptr<IMedicationsDAO>& medications_dao,
const std::shared_ptr<IUserTreatmentSchemeDAO>& user_treatment_scheme_dao,
const std::shared_ptr<IDiariesDAO>& diaries_dao
) :
session_(session),
user_dao_(user_dao),
auth_dao_(auth_dao),
medications_dao_(medications_dao),
user_treatment_scheme_dao_(user_treatment_scheme_dao),
diaries_dao_(diaries_dao)
{ {
routes_pathes_["/api/v1/Auth/Register"] = std::make_unique<RouteController>( routes_pathes_["/api/v1/Auth/Register"] = std::make_unique<RouteController>(
typename RouteController::HTTPMethodsToExecutors{ typename RouteController::HTTPMethodsToExecutors{
{boost::beast::http::verb::post, std::make_shared<RouteAuthRegistrationExecutor>( {
session_, boost::beast::http::verb::post, std::make_shared<RouteAuthRegistrationExecutor>(
user_dao_ session_,
)} user_dao_
} )
}
}
); );
routes_pathes_["/api/v1/Auth/Login"] = std::make_unique<RouteController>( routes_pathes_["/api/v1/Auth/Login"] = std::make_unique<RouteController>(
typename RouteController::HTTPMethodsToExecutors{ typename RouteController::HTTPMethodsToExecutors{
{boost::beast::http::verb::post, {
std::make_shared<RouteAuthLoginExecutor>(session_, user_dao_, auth_dao_)} boost::beast::http::verb::post,
} std::make_shared<RouteAuthLoginExecutor>(session_, user_dao_, auth_dao_)
}
}
); );
routes_pathes_["/api/v1/Auth/Logout"] = std::make_unique<RouteController>( routes_pathes_["/api/v1/Auth/Logout"] = std::make_unique<RouteController>(
typename RouteController::HTTPMethodsToExecutors{ typename RouteController::HTTPMethodsToExecutors{
{boost::beast::http::verb::post, {
std::make_shared<RouteAuthLogoutExecutor>(session_, auth_dao_)} boost::beast::http::verb::post,
} std::make_shared<RouteAuthLogoutExecutor>(session_, auth_dao_)
}
}
);
routes_pathes_["/api/v1/User/Medications"] = std::make_unique<RouteController>(
typename RouteController::HTTPMethodsToExecutors{
{
boost::beast::http::verb::get,
std::make_shared<RouteGetUserMedicationsExecutor>(session_, auth_dao_, medications_dao_)
},
{
boost::beast::http::verb::post,
std::make_shared<RoutePostUserMedicationsExecutor>(session_, auth_dao_, medications_dao_)
},
}
);
routes_pathes_["/api/v1/UserTreatmentSchemes"] = std::make_unique<RouteController>(
typename RouteController::HTTPMethodsToExecutors{
{
boost::beast::http::verb::get,
std::make_shared<RouteGetUserTreatmentSchemeExecutor>(session_, auth_dao_,
user_treatment_scheme_dao_)
},
{
boost::beast::http::verb::post,
std::make_shared<RoutePostUserTreatmentSchemeExecutor>(session_, auth_dao_,
user_treatment_scheme_dao_)
}
}
);
routes_pathes_["/api/v1/Diaries"] = std::make_unique<RouteController>(
typename RouteController::HTTPMethodsToExecutors{
{
boost::beast::http::verb::get,
std::make_shared<RouteGetDiariesExecutor>(session_, auth_dao_,
diaries_dao_)
},
{
boost::beast::http::verb::post,
std::make_shared<RoutePostDiaryExecutor>(session_, auth_dao_,
diaries_dao_)
},
}
); );
} }
@@ -73,15 +165,16 @@ public:
boost::beast::string_view doc_root, boost::beast::string_view doc_root,
Request&& req, Request&& req,
Send&& send Send&& send
) )
{ {
const std::string& route = req.target(); namespace urls = boost::urls;
const bool is_match_route = routes_pathes_.count(route);
const bool is_match_route = routes_pathes_.count(req.target());
if (is_match_route) if (is_match_route)
{ {
std::optional<std::shared_ptr<IRouteExecutor>> maybe_executor_ptr = routes_pathes_ std::optional<std::shared_ptr<IRouteExecutor>> maybe_executor_ptr = routes_pathes_
.at(route) .at(req.target())
->FindExecutor(req.method()); ->FindExecutor(req.method());
if (maybe_executor_ptr.has_value()) if (maybe_executor_ptr.has_value())
@@ -96,21 +189,50 @@ public:
} }
catch (const session_exception& e) catch (const session_exception& e)
{ {
boost::beast::http::response<ResponseType> res{e.code, req.version()}; return send(SendSessionExceptionError(std::move(req), e));
boost::json::value response_body;
response_body.emplace_object();
response_body.as_object().emplace("Result", e.what());
res.body() = serialize(response_body);
res.set(boost::beast::http::field::content_type, "application/json");
res.content_length(res.body().size());
return send(std::move(res));
} }
} }
} }
urls::url_view parsed_view = urls::parse_uri_reference(req.target()).value();
auto segs = parsed_view.segments();
std::vector<std::string> parts;
for (auto s : segs)
parts.push_back(s);
if (parts.size() == 4 &&
parts[0] == "api" &&
parts[2] == "Diaries")
{
try
{
std::string uuid = std::string(parts[3]);
if (req.method() == boost::beast::http::verb::put)
{
return send(RoutePutDiaryExecutor(
session_,
auth_dao_,
diaries_dao_
)(std::move(req), uuid));
}
if (req.method() == boost::beast::http::verb::delete_)
{
return send(RouteDeleteDiaryExecutor(
session_,
auth_dao_,
diaries_dao_
)(std::move(req), uuid));
}
}
catch (const session_exception& e)
{
return send(SendSessionExceptionError(std::move(req), e));
}
}
if (req.method() != boost::beast::http::verb::get && if (req.method() != boost::beast::http::verb::get &&
req.method() != boost::beast::http::verb::head) req.method() != boost::beast::http::verb::head)
return send(SendBadRequest(std::move(req), "Unknown boost::beast::HTTP-method")); return send(SendBadRequest(std::move(req), "Unknown boost::beast::HTTP-method"));
@@ -163,7 +285,7 @@ private:
StringResponse SendBadRequest( StringResponse SendBadRequest(
Request&& req, Request&& req,
boost::beast::string_view why boost::beast::string_view why
) )
{ {
StringResponse res{ StringResponse res{
boost::beast::http::status::bad_request, req.version() boost::beast::http::status::bad_request, req.version()
@@ -179,7 +301,7 @@ private:
StringResponse SendNotFound( StringResponse SendNotFound(
Request&& req, Request&& req,
boost::beast::string_view target boost::beast::string_view target
) )
{ {
StringResponse res{ StringResponse res{
boost::beast::http::status::not_found, req.version() boost::beast::http::status::not_found, req.version()
@@ -195,7 +317,7 @@ private:
StringResponse SendServerError( StringResponse SendServerError(
Request&& req, Request&& req,
boost::beast::string_view what boost::beast::string_view what
) )
{ {
StringResponse res{ StringResponse res{
boost::beast::http::status::internal_server_error, req.version() boost::beast::http::status::internal_server_error, req.version()
@@ -207,5 +329,20 @@ private:
res.prepare_payload(); res.prepare_payload();
return res; return res;
} }
StringResponse SendSessionExceptionError(Request&& req, const session_exception& e)
{
StringResponse res{e.code, req.version()};
boost::json::value response_body;
response_body.emplace_object();
response_body.as_object().emplace("Result", e.what());
res.body() = serialize(response_body);
res.set(boost::beast::http::field::content_type, "application/json");
res.content_length(res.body().size());
return res;
}
}; };
} }
+1 -1
View File
@@ -4,7 +4,7 @@ using namespace std;
namespace uad namespace uad
{ {
char const* session_exception::what() const char const* session_exception::what() const noexcept
{ {
return message.c_str(); return message.c_str();
} }
+1 -1
View File
@@ -15,6 +15,6 @@ struct session_exception : std::exception
session_exception(const boost::beast::http::status ec, const std::string info) session_exception(const boost::beast::http::status ec, const std::string info)
: code(ec), comment(info), message(std::to_string(static_cast<uint64_t>(ec)) + " - " + comment) : code(ec), comment(info), message(std::to_string(static_cast<uint64_t>(ec)) + " - " + comment)
{} {}
char const* what() const override; [[nodiscard]] char const* what() const noexcept override;
}; };
} }
+2 -2
View File
@@ -117,9 +117,9 @@ std::string ToHex(std::byte* src, size_t len)
return ret; return ret;
} }
std::string HashPassword(const std::string& password) std::string HashPassword(std::string_view password)
{ {
size_t calculated_hash = std::hash<string>{}(password); size_t calculated_hash = std::hash<std::string_view>{}(password);
return ToHex((byte*)&calculated_hash, sizeof(calculated_hash)); return ToHex((byte*)&calculated_hash, sizeof(calculated_hash));
} }
+1 -1
View File
@@ -12,7 +12,7 @@ void Fail(boost::beast::error_code ec, char const* what);
std::string ToHex(std::byte* src, size_t len); std::string ToHex(std::byte* src, size_t len);
std::string HashPassword(const std::string& password); std::string HashPassword(std::string_view password);
std::string GenerateUUID(); std::string GenerateUUID();
+5 -5
View File
@@ -1,5 +1,3 @@
#pragma once
#include <boost/log/trivial.hpp> #include <boost/log/trivial.hpp>
#include <boost/log/utility/setup/file.hpp> #include <boost/log/utility/setup/file.hpp>
#include <boost/log/utility/setup/common_attributes.hpp> #include <boost/log/utility/setup/common_attributes.hpp>
@@ -14,9 +12,11 @@ void InitLogs()
logging::keywords::file_name = "app_%Y-%m-%d_%H-%M-%S.log", logging::keywords::file_name = "app_%Y-%m-%d_%H-%M-%S.log",
logging::keywords::rotation_size = 10 * 1024 * 1024, logging::keywords::rotation_size = 10 * 1024 * 1024,
logging::keywords::time_based_rotation = logging::keywords::time_based_rotation =
logging::sinks::file::rotation_at_time_point(0, 0, 0), logging::sinks::file::rotation_at_time_point(0, 0, 0),
logging::keywords::format = "[%TimeStamp%] [%Severity%]: %Message%" logging::keywords::format =
); "[%TimeStamp%] [%Severity%]: %Message%"
);
logging::add_common_attributes(); logging::add_common_attributes();
} }
} }
+2 -4
View File
@@ -20,7 +20,7 @@
#include "./session/WebsocketSession.h" #include "./session/WebsocketSession.h"
#include "./listener/Listener.h" #include "./listener/Listener.h"
#include "./db/mysql_connector.h" #include "./db/mysql_connector.h"
#include "entities/user.h" #include "dtos/user_dto.h"
#include "log/Log.h" #include "log/Log.h"
namespace beast = boost::beast; namespace beast = boost::beast;
@@ -50,8 +50,6 @@ int main(int argc, char* argv[])
InitLogs(); InitLogs();
// Добавление общих атрибутов (включая время)
uad::SetMySqlSession(new mysqlx::Session(mysql_credentials)); uad::SetMySqlSession(new mysqlx::Session(mysql_credentials));
net::io_context ioc{threads}; net::io_context ioc{threads};
@@ -61,7 +59,7 @@ int main(int argc, char* argv[])
net::signal_set signals(ioc, SIGINT, SIGTERM); net::signal_set signals(ioc, SIGINT, SIGTERM);
signals.async_wait([&](beast::error_code const&, int) { ioc.stop(); }); signals.async_wait([&](beast::error_code const&, int) { ioc.stop(); });
BOOST_LOG_TRIVIAL(info) << "Приложение запущено2"; BOOST_LOG_TRIVIAL(info) << "Приложение запущено";
std::vector<std::thread> v; std::vector<std::thread> v;
v.reserve(threads - 1); v.reserve(threads - 1);
@@ -18,8 +18,6 @@
#include "./../../src/helpers/helpers.h" #include "./../../src/helpers/helpers.h"
#include "../fixtures/AuthFixture.h" #include "../fixtures/AuthFixture.h"
const std::string kUUID = std::to_string(uad::Random());
using namespace std; using namespace std;
using namespace uad; using namespace uad;
using namespace boost; using namespace boost;
@@ -29,24 +27,10 @@ using namespace json;
using RouteAuthLoginExecutor = AuthLoginExecutor<beast::http::string_body, using RouteAuthLoginExecutor = AuthLoginExecutor<beast::http::string_body,
std::allocator<char>, std::allocator<char>,
beast::http::string_body>; beast::http::string_body>;
using Request = boost::beast::http::request<beast::http::string_body,
beast::http::basic_fields<std::allocator<char>>>;
BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Cannot_Serialize_JSON, AuthFixture) BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Cannot_Serialize_JSON, AuthFixture)
{ {
auto& argv = boost::unit_test::framework::master_test_suite().argv; RouteAuthLoginExecutor executor(GetMySqlSession(), user_dao, auth_dao);
const std::string mysql_credentials = argv[1];
mysqlx::Session* mysql_session = new mysqlx::Session(mysql_credentials);
uad::SetMySqlSession(mysql_session);
auto user_dao = make_shared<MySQLUserDAO>(GetMySqlSession());
auto auth_dao = make_shared<MemoryAuthDAO>(GetMySqlSession());
auto executor = RouteAuthLoginExecutor(GetMySqlSession(), user_dao, auth_dao);
Request req;
req.body() = "{ \"login\": ABS3 }"s; req.body() = "{ \"login\": ABS3 }"s;
req.content_length(req.body().size()); req.content_length(req.body().size());
@@ -56,31 +40,17 @@ BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Cannot_Serialize_JSON, AuthFixt
{ {
return e.code == beast::http::status::bad_request; return e.code == beast::http::status::bad_request;
}); });
mysql_session->close();
delete mysql_session;
} }
BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Invalid_Login_Data, AuthFixture) BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Invalid_Login_Data, AuthFixture)
{ {
auto& argv = boost::unit_test::framework::master_test_suite().argv; RouteAuthLoginExecutor executor(GetMySqlSession(), user_dao, auth_dao);
const std::string mysql_credentials = argv[1];
mysqlx::Session* mysql_session = new mysqlx::Session(mysql_credentials);
uad::SetMySqlSession(mysql_session);
auto user_dao = make_shared<MySQLUserDAO>(GetMySqlSession());
auto auth_dao = make_shared<MemoryAuthDAO>(GetMySqlSession());
auto executor = RouteAuthLoginExecutor(GetMySqlSession(), user_dao, auth_dao);
Request req;
value req_body; value req_body;
req_body.emplace_object(); req_body.emplace_object();
req_body.as_object().emplace("login"s, "MyLogin123456780"s + kUUID); req_body.as_object().emplace("login"s, "MyLogin123456780"s + uuid);
req_body.as_object().emplace("password"s, "Qwerty123456"s); req_body.as_object().emplace("password"s, "Qwerty123456"s);
req.body() = serialize(req_body); req.body() = serialize(req_body);
@@ -90,26 +60,12 @@ BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Invalid_Login_Data, AuthFixture
{ {
return e.code == beast::http::status::forbidden; return e.code == beast::http::status::forbidden;
}); });
mysql_session->close();
delete mysql_session;
} }
BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Invalid_Fields, AuthFixture) BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Invalid_Fields, AuthFixture)
{ {
auto& argv = boost::unit_test::framework::master_test_suite().argv; RouteAuthLoginExecutor executor(GetMySqlSession(), user_dao, auth_dao);
const std::string mysql_credentials = argv[1];
mysqlx::Session* mysql_session = new mysqlx::Session(mysql_credentials);
uad::SetMySqlSession(mysql_session);
auto user_dao = make_shared<MySQLUserDAO>(GetMySqlSession());
auto auth_dao = make_shared<MemoryAuthDAO>(GetMySqlSession());
auto executor = RouteAuthLoginExecutor(GetMySqlSession(), user_dao, auth_dao);
Request req;
value req_body; value req_body;
req_body.emplace_object(); req_body.emplace_object();
@@ -124,33 +80,19 @@ BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Invalid_Fields, AuthFixture)
{ {
return e.code == beast::http::status::unprocessable_entity; return e.code == beast::http::status::unprocessable_entity;
}); });
mysql_session->close();
delete mysql_session;
} }
BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Succesful_Login, AuthFixture) BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Succesful_Login, AuthFixture)
{ {
auto& argv = boost::unit_test::framework::master_test_suite().argv; RouteAuthLoginExecutor executor(GetMySqlSession(), user_dao, auth_dao);
const std::string mysql_credentials = argv[1];
mysqlx::Session* mysql_session = new mysqlx::Session(mysql_credentials);
uad::SetMySqlSession(mysql_session);
auto user_dao = make_shared<MySQLUserDAO>(GetMySqlSession());
auto auth_dao = make_shared<MemoryAuthDAO>(GetMySqlSession());
auto executor = RouteAuthLoginExecutor(GetMySqlSession(), user_dao, auth_dao);
Request req;
value req_body; value req_body;
user_dao->Create({""s, "MyLogin123456780"s + kUUID, HashPassword("Qwerty123456"s)}); user_dao->Create({""s, "MyLogin123456780"s + uuid, HashPassword("Qwerty123456"s)});
req_body.emplace_object(); req_body.emplace_object();
req_body.as_object().emplace("login"s, "MyLogin123456780"s + kUUID); req_body.as_object().emplace("login"s, "MyLogin123456780"s + uuid);
req_body.as_object().emplace("password"s, "Qwerty123456"s); req_body.as_object().emplace("password"s, "Qwerty123456"s);
req.body() = serialize(req_body); req.body() = serialize(req_body);
@@ -162,7 +104,4 @@ BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Succesful_Login, AuthFixture)
auto response_body = parse(response.body()); auto response_body = parse(response.body());
BOOST_CHECK(response_body.as_object().count("token"s) == 1); BOOST_CHECK(response_body.as_object().count("token"s) == 1);
mysql_session->close();
delete mysql_session;
} }
@@ -18,8 +18,6 @@
#include "./../../src/helpers/helpers.h" #include "./../../src/helpers/helpers.h"
#include "../fixtures/AuthFixture.h" #include "../fixtures/AuthFixture.h"
const std::string kUUID = std::to_string(uad::Random());
using namespace std; using namespace std;
using namespace uad; using namespace uad;
using namespace boost; using namespace boost;
@@ -34,18 +32,8 @@ using Request = boost::beast::http::request<beast::http::string_body,
BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Cant_Find_User_Token, AuthFixture) BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Cant_Find_User_Token, AuthFixture)
{ {
auto& argv = boost::unit_test::framework::master_test_suite().argv; RouteAuthLogoutExecutor executor(GetMySqlSession(), auth_dao);
const std::string mysql_credentials = argv[1];
mysqlx::Session* mysql_session = new mysqlx::Session(mysql_credentials);
uad::SetMySqlSession(mysql_session);
auto auth_dao = make_shared<MemoryAuthDAO>(GetMySqlSession());
auto executor = RouteAuthLogoutExecutor(GetMySqlSession(), auth_dao);
Request req;
value req_body; value req_body;
req_body.emplace_object(); req_body.emplace_object();
@@ -59,25 +47,12 @@ BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Cant_Find_User_Token, AuthFixtu
{ {
return e.code == beast::http::status::bad_request; return e.code == beast::http::status::bad_request;
}); });
mysql_session->close();
delete mysql_session;
} }
BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Cant_Revoke_Token, AuthFixture) BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Cant_Revoke_Token, AuthFixture)
{ {
auto& argv = boost::unit_test::framework::master_test_suite().argv; RouteAuthLogoutExecutor executor(GetMySqlSession(), auth_dao);
const std::string mysql_credentials = argv[1];
mysqlx::Session* mysql_session = new mysqlx::Session(mysql_credentials);
uad::SetMySqlSession(mysql_session);
auto auth_dao = make_shared<MemoryAuthDAO>(GetMySqlSession());
auto executor = RouteAuthLogoutExecutor(GetMySqlSession(), auth_dao);
Request req;
value req_body; value req_body;
req_body.emplace_object(); req_body.emplace_object();
@@ -91,25 +66,12 @@ BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Cant_Revoke_Token, AuthFixture)
{ {
return e.code == beast::http::status::bad_request; return e.code == beast::http::status::bad_request;
}); });
mysql_session->close();
delete mysql_session;
} }
BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Succesful_Auth, AuthFixture) BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Succesful_Auth, AuthFixture)
{ {
auto& argv = boost::unit_test::framework::master_test_suite().argv; RouteAuthLogoutExecutor executor(GetMySqlSession(), auth_dao);
const std::string mysql_credentials = argv[1];
mysqlx::Session* mysql_session = new mysqlx::Session(mysql_credentials);
uad::SetMySqlSession(mysql_session);
auto auth_dao = make_shared<MemoryAuthDAO>(GetMySqlSession());
auto executor = RouteAuthLogoutExecutor(GetMySqlSession(), auth_dao);
Request req;
value req_body; value req_body;
auth_dao->Login("SomethingUser", "1234567890"); auth_dao->Login("SomethingUser", "1234567890");
@@ -123,7 +85,4 @@ BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Succesful_Auth, AuthFixture)
auto response = executor(std::move(req)); auto response = executor(std::move(req));
BOOST_CHECK(response.result() == http::status::ok); BOOST_CHECK(response.result() == http::status::ok);
mysql_session->close();
delete mysql_session;
} }
@@ -15,8 +15,6 @@
#include "./../../src/helpers/helpers.h" #include "./../../src/helpers/helpers.h"
#include "./../fixtures/AuthFixture.h" #include "./../fixtures/AuthFixture.h"
const std::string kUUID = std::to_string(uad::Random());
using namespace std; using namespace std;
using namespace uad; using namespace uad;
using namespace boost; using namespace boost;
@@ -31,6 +29,8 @@ using Request = boost::beast::http::request<beast::http::string_body,
BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Failed_Parse_Payload, AuthFixture) BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Failed_Parse_Payload, AuthFixture)
{ {
RouteAuthRegistrationExecutor executor(GetMySqlSession(), user_dao);
req.body() = "{ \"login\": ABS3 }"s; req.body() = "{ \"login\": ABS3 }"s;
BOOST_CHECK_EXCEPTION(executor(std::move(req)), session_exception, [](const session_exception& e) -> bool BOOST_CHECK_EXCEPTION(executor(std::move(req)), session_exception, [](const session_exception& e) -> bool
@@ -41,6 +41,8 @@ BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Failed_Parse_Payload, AuthFixtu
BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Invalid_Login_Data, AuthFixture) BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Invalid_Login_Data, AuthFixture)
{ {
RouteAuthRegistrationExecutor executor(GetMySqlSession(), user_dao);
value req_body; value req_body;
req_body.emplace_object(); req_body.emplace_object();
@@ -58,11 +60,13 @@ BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Invalid_Login_Data, AuthFixture
BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Succesfull_User_Login, AuthFixture) BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Succesfull_User_Login, AuthFixture)
{ {
RouteAuthRegistrationExecutor executor(GetMySqlSession(), user_dao);
value req_body; value req_body;
req_body.emplace_object(); req_body.emplace_object();
req_body.as_object().emplace("login"s, "MyLogin123456780"s + kUUID); req_body.as_object().emplace("login"s, "MyLogin123456780"s + uuid);
req_body.as_object().emplace("password"s, "Qwerty123456"s); req_body.as_object().emplace("password"s, "Qwerty123456"s);
req.body() = serialize(req_body); req.body() = serialize(req_body);
@@ -72,13 +76,21 @@ BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Succesfull_User_Login, AuthFixt
BOOST_CHECK_EQUAL(response.result(), http::status::created); BOOST_CHECK_EQUAL(response.result(), http::status::created);
} }
BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Unsuccesfull_User_Login, AuthFixture) BOOST_FIXTURE_TEST_CASE(AuthRegistrationExecutor_Unsuccesfull_User_Registration, AuthFixture)
{ {
RouteAuthRegistrationExecutor executor(GetMySqlSession(), user_dao);
user_dao->Create(
user_dto {
.login = "MyLogin123456780"s + uuid,
.hashed_password = HashPassword("Qwerty123456"s)}
);
value req_body; value req_body;
req_body.emplace_object(); req_body.emplace_object();
req_body.as_object().emplace("login"s, "MyLogin123456780"s + kUUID); req_body.as_object().emplace("login"s, "MyLogin123456780"s + uuid);
req_body.as_object().emplace("password"s, "Qwerty123456"s); req_body.as_object().emplace("password"s, "Qwerty123456"s);
req.body() = serialize(req_body); req.body() = serialize(req_body);
+6 -6
View File
@@ -51,12 +51,12 @@ BOOST_AUTO_TEST_CASE(Should_Be_Initiated_With_Unordered_Map_HTTP_Methods_To_Exec
{ {
IControllerMock::HTTPMethodsToExecutors executors; IControllerMock::HTTPMethodsToExecutors executors;
executors[beast::http::verb::get] = make_shared<MockExecutor>(); executors[beast::http::verb::get] = std::make_shared<MockExecutor>();
executors[beast::http::verb::post] = make_shared<MockExecutor>(); executors[beast::http::verb::post] = std::make_shared<MockExecutor>();
executors[beast::http::verb::put] = make_shared<MockExecutor>(); executors[beast::http::verb::put] = std::make_shared<MockExecutor>();
executors[beast::http::verb::delete_] = make_shared<MockExecutor>(); executors[beast::http::verb::delete_] = std::make_shared<MockExecutor>();
executors[beast::http::verb::head] = make_shared<MockExecutor>(); executors[beast::http::verb::head] = std::make_shared<MockExecutor>();
executors[beast::http::verb::options] = make_shared<MockExecutor>(); executors[beast::http::verb::options] = std::make_shared<MockExecutor>();
IControllerMock my_controller(std::move(executors)); IControllerMock my_controller(std::move(executors));
+2 -2
View File
@@ -12,13 +12,13 @@ using namespace std;
namespace uad namespace uad
{ {
AuthFixture::AuthFixture() : AuthFixture::AuthFixture() :
uuid(std::to_string(uad::Random())),
argv(boost::unit_test::framework::master_test_suite().argv), argv(boost::unit_test::framework::master_test_suite().argv),
mysql_credentials(argv[1]), mysql_credentials(argv[1]),
mysql_session(new mysqlx::Session(mysql_credentials)), mysql_session(new mysqlx::Session(mysql_credentials)),
helper(mysql_session), helper(mysql_session),
user_dao(std::make_shared<MySQLUserDAO>(GetMySqlSession())), user_dao(std::make_shared<MySQLUserDAO>(GetMySqlSession())),
auth_dao(make_shared<MemoryAuthDAO>(GetMySqlSession())), auth_dao(make_shared<MemoryAuthDAO>(GetMySqlSession()))
executor(RouteAuthRegistrationExecutor(GetMySqlSession(), user_dao))
{ {
BOOST_TEST_MESSAGE("Setup RouteAuthRegistrationExecutor fixture"); BOOST_TEST_MESSAGE("Setup RouteAuthRegistrationExecutor fixture");
} }
+8 -7
View File
@@ -3,6 +3,7 @@
#include <string> #include <string>
#include <boost/beast.hpp> #include <boost/beast.hpp>
#include <memory> #include <memory>
#include <boost/test/unit_test.hpp>
#include <mysqlx/xdevapi.h> #include <mysqlx/xdevapi.h>
#include "./../../src/endpoints_handlers/AuthRegistrationExecutor.h" #include "./../../src/endpoints_handlers/AuthRegistrationExecutor.h"
@@ -13,13 +14,13 @@
namespace uad namespace uad
{ {
class AuthFixture { using Request = boost::beast::http::request<boost::beast::http::string_body,
boost::beast::http::basic_fields<std::allocator<char>>>;
class AuthFixture
{
public: public:
using RouteAuthRegistrationExecutor = AuthRegistrationExecutor<boost::beast::http::string_body, const std::string uuid;
std::allocator<char>,
boost::beast::http::string_body>;
using Request = boost::beast::http::request<boost::beast::http::string_body,
boost::beast::http::basic_fields<std::allocator<char>>>;
char** argv; char** argv;
const std::string mysql_credentials; const std::string mysql_credentials;
@@ -29,11 +30,11 @@ public:
std::shared_ptr<IUserDAO> user_dao; std::shared_ptr<IUserDAO> user_dao;
std::shared_ptr<MemoryAuthDAO> auth_dao; std::shared_ptr<MemoryAuthDAO> auth_dao;
RouteAuthRegistrationExecutor executor;
Request req; Request req;
AuthFixture(); AuthFixture();
~AuthFixture(); ~AuthFixture();
}; };
} }