Вариант: 21. Система управления арендой автомобилей.
- второй backend хранения на
MongoDBбез изменения HTTP API; - runtime-переключение backend'а через
--data-backend postgres|mongo; - MongoDB document model для
users,cars,rentals,outbox_events; - MongoDB validation через
$jsonSchema; - MongoDB seed и набор CRUD/aggregation запросов;
- Docker Compose для запуска
MongoDB + APIв режиме lab04.
../../schema_design.md— проектирование документной модели и обоснованиеembedded/references.../../data.js— тестовые данные для MongoDB.../../queries.js— CRUD-запросы и aggregation pipeline.../../validation.js— создание коллекций, индексов,$jsonSchemaи проверка невалидных вставок.../../Dockerfile,../../docker-compose.yml— запуск API и MongoDB.
./build/car_rental_api \
--host 127.0.0.1 \
--port 8080 \
--data-backend mongo \
--mongo-url 'mongodb://127.0.0.1:27017/?replicaSet=rs0' \
--mongo-db car_rental \
--jwt-secret local-dev-secretDATA_BACKENDDATABASE_URLMONGO_URLMONGO_DB_NAME
PostgreSQL backend сохранён для совместимости с предыдущими лабораторными, но для lab04 основной режим — mongo.
docker compose up --buildЧто делает compose:
- поднимает
mongoв режиме single-node replica setrs0; - запускает одноразовый
mongo-init, который выполняетvalidation.jsиdata.js; - запускает
apiсDATA_BACKEND=mongo.
После запуска:
- API:
http://localhost:8080 - MongoDB:
mongodb://localhost:27017/?replicaSet=rs0
После поднятия MongoDB:
mongosh 'mongodb://127.0.0.1:27017/car_rental?replicaSet=rs0' --file validation.js
mongosh 'mongodb://127.0.0.1:27017/car_rental?replicaSet=rs0' --file data.js
mongosh 'mongodb://127.0.0.1:27017/car_rental?replicaSet=rs0' --file queries.jsОсновной режим lab04:
export CAR_RENTAL_TEST_BACKEND=mongo
export CAR_RENTAL_TEST_MONGO_URL='mongodb://127.0.0.1:27017/?replicaSet=rs0'
cmake -S ../.. -B ../../build
cmake --build ../../build
ctest --test-dir ../../build --output-on-failureРегрессия PostgreSQL backend:
export CAR_RENTAL_TEST_BACKEND=postgres
export CAR_RENTAL_TEST_ADMIN_URL='postgresql://postgres:postgres@127.0.0.1:5432/postgres'
cmake -S ../.. -B ../../build
cmake --build ../../build
ctest --test-dir ../../build --output-on-failure