diff --git a/backend/.dockerignore b/.dockerignore similarity index 76% rename from backend/.dockerignore rename to .dockerignore index 689e954..7389e1f 100644 --- a/backend/.dockerignore +++ b/.dockerignore @@ -4,5 +4,5 @@ __pycache__ .git .env *.log -.idea +backend/.idea .venv diff --git a/README.md b/README.md index 362f533..b8b8fc0 100644 --- a/README.md +++ b/README.md @@ -19,9 +19,6 @@ ## Run dev using docker ``` -cd deployment/dev/ -``` -``` docker-compose up -d ``` **Frontend** @@ -53,7 +50,7 @@ http://localhost:8000/docs ## Run backend tests using docker ```sh -cd deployment/test/ +cd ./backend ``` ``` docker-compose up -d diff --git a/backend/requests.rest b/backend/requests.rest deleted file mode 100644 index de1bab7..0000000 --- a/backend/requests.rest +++ /dev/null @@ -1,1128 +0,0 @@ -@authToken = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2NzYzNjQ3ZmM1Zjg2YWVlOTdhZjcyZDQiLCJyb2xlIjoid29ya2VyIiwiZXhwIjoxNzM0NTY5MTE1fQ.pRJaSBMtaNdb2XNIxr2JtQgNCnVbmResqWhbMgTVLiE - -### -POST http://localhost:8000/api/auth/token/ -Content-Type: application/json - -{ - "email": "worker@example.com", - "password": "worker_123" -} - -### -GET http://localhost:8000/api/data/export -Authorization: Bearer {{authToken}} - -### -POST http://localhost:8000/api/data/import -Authorization: Bearer {{authToken}} -Content-Type: application/json - -{ - "workers": [ - { - "email": "worker@example.com", - "password": "$2b$12$6osWoQyXJQCuUKdn76sUweeHcZ0FiIux9M3htL0LghHQbGr3TQZe.", - "created_at": "2024-11-28T15:39:13.050000", - "updated_at": "2024-11-28T15:39:13.050000", - "name": "Антон", - "surname": "Петров", - "phone": "+71234567890", - "jobTitle": "Главный работник", - "date": "2024-11-28T15:39:13.050000", - "image": "http://0.0.0.0:8080/api/resources/images/workers/c0999ff2f2c730678f0356603e424516b674ccb0d599b87dedb7a9a1bc89646f/1.png", - "_id": "67488ea1e0b092cfb2fe6911" - } - ], - "clients": [ - { - "email": "client_1@example.com", - "password": "$2b$12$.RzxPWac/e4RISJEnw69YuqMw8PLmBACZdGWZPeLAIw6M.IiWT4rq", - "created_at": "2024-12-18T14:05:22.519000", - "updated_at": "2024-12-18T14:10:29.924000", - "name": "Иван", - "surname": "Петров", - "phone": "+79161234567", - "image": "http://0.0.0.0:8080/api/resources/images/clients/d89b750bd5a875c166119bf523fa5dabd5b3e2d263ea63b68aa26cd0411af1f3/1.png", - "_id": "6762d6a2f6292fe72b752b5e" - }, - { - "email": "client_2@example.com", - "password": "$2b$12$pWggz5PL/5gtaRrS56nNPupZfyKB/DCcNznf/.au4KCoEhZLpGLnm", - "created_at": "2024-12-18T14:06:17.859000", - "updated_at": "2024-12-18T14:10:53.606000", - "name": "Ольга", - "surname": "Смирнова", - "phone": "+79991234567", - "image": "http://0.0.0.0:8080/api/resources/images/clients/4d1732f83c592083c1d3c77ec3b45ec1c950f7c974c938fc1affaed81cf6f084/1.png", - "_id": "6762d6d9f6292fe72b752b5f" - }, - { - "email": "client_3@example.com", - "password": "$2b$12$Ujrol9/uLzk8tV6rn5S.w.mAJJFhjO1OtO.IwpT5WRk1g/XZt41s.", - "created_at": "2024-12-18T14:06:35.724000", - "updated_at": "2024-12-18T14:11:20.467000", - "name": "Алексей", - "surname": "Васильев", - "phone": "+79271234567", - "image": "http://0.0.0.0:8080/api/resources/images/clients/263dc3e1633465f5cc6cfc17daec3627764a43cdbba3ebcbe9eca18aa2acb105/1.png", - "_id": "6762d6ebf6292fe72b752b60" - } - ], - "tools": [ - { - "name": "Молоток-гвоздодер Kraftool", - "dailyPrice": 40.0, - "totalPrice": 850.0, - "images": [ - "http://0.0.0.0:8080/api/resources/images/tools/5d25e3d8154a07b5edc4ed1c9c09930494980b1942f1d979b867c4391baf1e2f/1.png", - "http://0.0.0.0:8080/api/resources/images/tools/5d25e3d8154a07b5edc4ed1c9c09930494980b1942f1d979b867c4391baf1e2f/2.png" - ], - "features": { - "Вес": "500 г", - "Материал": "Закаленная сталь", - "Ручка": "Эргономичная резиновая", - "Назначение": "Работа с гвоздями" - }, - "rating": 3.0, - "reviews_count": 2, - "ordersNumber": 0, - "category": "Ручной инструмент", - "type": "Молоток", - "description": "Многофункциональный молоток с гвоздодером. Подходит для легких строительных работ и ремонта.", - "created_at": "2024-12-18T14:26:18.458000", - "updated_at": "2024-12-18T14:26:18.458000", - "_id": "6762db8ad5595612f0a21207" - }, - { - "name": "Молоток слесарный Matrix", - "dailyPrice": 50.0, - "totalPrice": 700.0, - "images": [], - "features": { - "Вес": "1000 г", - "Материал": "Сталь с антикоррозийным покрытием", - "Ручка": "Двухкомпонентная ручка", - "Назначение": "Слесарные работы" - }, - "rating": 4.5, - "reviews_count": 2, - "ordersNumber": 0, - "category": "Ручной инструмент", - "type": "Молоток", - "description": "Тяжелый молоток для выполнения слесарных работ. Удобная двухкомпонентная ручка снижает вибрацию при работе.", - "created_at": "2024-12-18T14:27:51.127000", - "updated_at": "2024-12-18T14:27:51.127000", - "_id": "6762dbe7d5595612f0a21208" - }, - { - "name": "Молоток столярный Stanley", - "dailyPrice": 30.0, - "totalPrice": 500.0, - "images": [], - "features": { - "Вес": "300 г", - "Материал": "Углеродистая сталь", - "Ручка": "Деревянная", - "Назначение": "Столярные работы" - }, - "rating": 4.0, - "reviews_count": 1, - "ordersNumber": 0, - "category": "Ручной инструмент", - "type": "Молоток", - "description": "Легкий молоток, идеально подходящий для столярных и плотницких работ. Деревянная ручка обеспечивает комфортный захват.", - "created_at": "2024-12-18T14:27:59.391000", - "updated_at": "2024-12-18T14:27:59.391000", - "_id": "6762dbefd5595612f0a21209" - }, - { - "name": "Отвертка крестовая PH2 Vira", - "dailyPrice": 20.0, - "totalPrice": 150.0, - "images": [], - "features": { - "Размер": "PH2", - "Материал": "Хром-ванадиевая сталь", - "Ручка": "Эргономичная резиновая", - "Назначение": "Работа с шурупами" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Ручной инструмент", - "type": "Отвертка", - "description": "Качественная крестовая отвертка для сборки мебели и ремонта. Удобная ручка обеспечивает надежный хват.", - "created_at": "2024-12-18T14:28:24.878000", - "updated_at": "2024-12-18T14:28:24.878000", - "_id": "6762dc08d5595612f0a2120a" - }, - { - "name": "Отвертка плоская Stayer", - "dailyPrice": 15.0, - "totalPrice": 120.0, - "images": [], - "features": { - "Размер": "4 мм", - "Материал": "Закаленная сталь", - "Ручка": "Пластиковая", - "Назначение": "Работа с плоскими крепежами" - }, - "rating": 4.0, - "reviews_count": 1, - "ordersNumber": 0, - "category": "Ручной инструмент", - "type": "Отвертка", - "description": "Прочная плоская отвертка для мелких бытовых и профессиональных работ. Подходит для любых стандартных крепежей.", - "created_at": "2024-12-18T14:28:37.612000", - "updated_at": "2024-12-18T14:28:37.612000", - "_id": "6762dc15d5595612f0a2120b" - }, - { - "name": "Отвертка с набором бит Kraftool", - "dailyPrice": 50.0, - "totalPrice": 950.0, - "images": [], - "features": { - "Биты": "12 штук", - "Материал": "Хром-ванадиевая сталь", - "Ручка": "Противоскользящая", - "Назначение": "Многофункциональная работа" - }, - "rating": 5.0, - "reviews_count": 1, - "ordersNumber": 0, - "category": "Ручной инструмент", - "type": "Отвертка", - "description": "Отвертка с комплектом сменных бит, идеальна для универсального использования. Надежный инструмент для дома и работы.", - "created_at": "2024-12-18T14:28:55.614000", - "updated_at": "2024-12-18T14:28:55.614000", - "_id": "6762dc27d5595612f0a2120c" - }, - { - "name": "Ключ рожковый 10x12 мм Sparta", - "dailyPrice": 25.0, - "totalPrice": 200.0, - "images": [], - "features": { - "Размер": "10x12 мм", - "Материал": "Хром-ванадиевая сталь", - "Покрытие": "Антикоррозийное", - "Назначение": "Работа с болтами и гайками" - }, - "rating": 5.0, - "reviews_count": 1, - "ordersNumber": 0, - "category": "Ручной инструмент", - "type": "Рожковый ключ", - "description": "Универсальный рожковый ключ для работы с крепежами среднего размера. Прочный и удобный в использовании.", - "created_at": "2024-12-18T14:29:08.978000", - "updated_at": "2024-12-18T14:29:08.978000", - "_id": "6762dc34d5595612f0a2120d" - }, - { - "name": "Ключ комбинированный 13 мм Stanley", - "dailyPrice": 30.0, - "totalPrice": 350.0, - "images": [], - "features": { - "Размер": "13 мм", - "Материал": "Хром-ванадиевая сталь", - "Форма": "Рожковая и кольцевая", - "Назначение": "Профессиональный инструмент" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Ручной инструмент", - "type": "Рожковый ключ", - "description": "Комбинированный ключ с двумя рабочими поверхностями. Подходит для профессионального использования.", - "created_at": "2024-12-18T14:29:14.567000", - "updated_at": "2024-12-18T14:29:14.567000", - "_id": "6762dc3ad5595612f0a2120e" - }, - { - "name": "Ключ рожковый 17x19 мм Kraftool", - "dailyPrice": 35.0, - "totalPrice": 450.0, - "images": [], - "features": { - "Размер": "17x19 мм", - "Материал": "Инструментальная сталь", - "Покрытие": "Матовое", - "Назначение": "Работа с крупными крепежами" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Ручной инструмент", - "type": "Рожковый ключ", - "description": "Прочный и надежный рожковый ключ для работы с крупногабаритными крепежами. Подходит для автосервиса и строительства.", - "created_at": "2024-12-18T14:29:20.463000", - "updated_at": "2024-12-18T14:29:20.463000", - "_id": "6762dc40d5595612f0a2120f" - }, - { - "name": "Дрель ударная Bosch GSB 13 RE", - "dailyPrice": 300.0, - "totalPrice": 6500.0, - "images": [], - "features": { - "Мощность": "600 Вт", - "Частота вращения": "2800 об/мин", - "Режим": "Ударный", - "Назначение": "Сверление и бурение" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Электроинструмент", - "type": "Дрель", - "description": "Компактная ударная дрель от Bosch для работы с бетоном, деревом и металлом. Эргономичная ручка для комфортной работы.", - "created_at": "2024-12-18T14:29:29.832000", - "updated_at": "2024-12-18T14:29:29.832000", - "_id": "6762dc49d5595612f0a21210" - }, - { - "name": "Дрель DeWalt DWD024", - "dailyPrice": 350.0, - "totalPrice": 7500.0, - "images": [], - "features": { - "Мощность": "700 Вт", - "Частота вращения": "2800 об/мин", - "Вес": "1.8 кг", - "Назначение": "Профессиональная работа" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Электроинструмент", - "type": "Дрель", - "description": "Мощная дрель от DeWalt с высокой производительностью. Подходит для интенсивного использования на стройке.", - "created_at": "2024-12-18T14:29:34.365000", - "updated_at": "2024-12-18T14:29:34.365000", - "_id": "6762dc4ed5595612f0a21211" - }, - { - "name": "Дрель-шуруповерт Makita DF330DWE", - "dailyPrice": 400.0, - "totalPrice": 9500.0, - "images": [ - "http://0.0.0.0:8080/api/resources/images/tools/d56b0d31b3a81077bb50df1f37a30f94fe23ebdbef02d6c6e5d4ef3385279c5c/1.png", - "http://0.0.0.0:8080/api/resources/images/tools/d56b0d31b3a81077bb50df1f37a30f94fe23ebdbef02d6c6e5d4ef3385279c5c/2.png" - ], - "features": { - "Аккумулятор": "10.8 В", - "Частота вращения": "1300 об/мин", - "Тип": "Аккумуляторный", - "Назначение": "Сборка мебели" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Электроинструмент", - "type": "Дрель", - "description": "Аккумуляторная дрель-шуруповерт от Makita. Идеальный инструмент для сборки мебели и мелких работ.", - "created_at": "2024-12-18T14:29:40.820000", - "updated_at": "2024-12-18T14:29:40.820000", - "_id": "6762dc54d5595612f0a21212" - }, - { - "name": "Угловая шлифмашина Bosch GWS 7-125", - "dailyPrice": 400.0, - "totalPrice": 6000.0, - "images": [], - "features": { - "Мощность": "720 Вт", - "Диаметр диска": "125 мм", - "Частота вращения": "11000 об/мин", - "Назначение": "Шлифовка и резка" - }, - "rating": 5.0, - "reviews_count": 1, - "ordersNumber": 0, - "category": "Электроинструмент", - "type": "Болгарка", - "description": "Компактная болгарка для точной резки и шлифовки металла и камня. Эргономичный дизайн обеспечивает комфортную работу.", - "created_at": "2024-12-18T14:29:59.731000", - "updated_at": "2024-12-18T14:29:59.731000", - "_id": "6762dc67d5595612f0a21213" - }, - { - "name": "Болгарка Makita GA5030", - "dailyPrice": 350.0, - "totalPrice": 5500.0, - "images": [], - "features": { - "Мощность": "720 Вт", - "Диаметр диска": "125 мм", - "Частота вращения": "11000 об/мин", - "Вес": "1.8 кг" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Электроинструмент", - "type": "Болгарка", - "description": "Удобная и мощная углошлифовальная машина, предназначенная для различных строительных и ремонтных работ.", - "created_at": "2024-12-18T14:30:07.428000", - "updated_at": "2024-12-18T14:30:07.428000", - "_id": "6762dc6fd5595612f0a21214" - }, - { - "name": "Угловая шлифмашина DeWalt DWE4051", - "dailyPrice": 500.0, - "totalPrice": 7200.0, - "images": [], - "features": { - "Мощность": "800 Вт", - "Диаметр диска": "115 мм", - "Частота вращения": "11000 об/мин", - "Защита": "Электронная защита двигателя" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Электроинструмент", - "type": "Болгарка", - "description": "Мощная болгарка с компактными размерами, идеальная для профессиональных работ с металлом и бетоном.", - "created_at": "2024-12-18T14:30:27.499000", - "updated_at": "2024-12-18T14:30:27.499000", - "_id": "6762dc83d5595612f0a21215" - }, - { - "name": "Перфоратор Bosch GBH 2-26 DRE", - "dailyPrice": 500.0, - "totalPrice": 11000.0, - "images": [], - "features": { - "Мощность": "800 Вт", - "Режимы работы": "3 (сверление, долбление, комбинированный)", - "Сила удара": "2.7 Дж", - "Назначение": "Работа с бетоном и кирпичом" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Электроинструмент", - "type": "Перфоратор", - "description": "Перфоратор для тяжелых строительных работ. Обеспечивает мощное долбление и высокую производительность.", - "created_at": "2024-12-18T14:30:48.504000", - "updated_at": "2024-12-18T14:30:48.504000", - "_id": "6762dc98d5595612f0a21216" - }, - { - "name": "Перфоратор Makita HR2470", - "dailyPrice": 450.0, - "totalPrice": 9500.0, - "images": [], - "features": { - "Мощность": "780 Вт", - "Режимы работы": "3 (сверление, долбление, комбинированный)", - "Сила удара": "2.4 Дж", - "Назначение": "Универсальные строительные работы" - }, - "rating": 4.0, - "reviews_count": 1, - "ordersNumber": 0, - "category": "Электроинструмент", - "type": "Перфоратор", - "description": "Универсальный перфоратор от Makita для работы с бетоном, кирпичом и металлом. Надежный инструмент для строительных задач.", - "created_at": "2024-12-18T14:30:57.622000", - "updated_at": "2024-12-18T14:30:57.622000", - "_id": "6762dca1d5595612f0a21217" - }, - { - "name": "Перфоратор DeWalt D25133K", - "dailyPrice": 550.0, - "totalPrice": 12500.0, - "images": [], - "features": { - "Мощность": "800 Вт", - "Сила удара": "2.9 Дж", - "Режимы работы": "3 (сверление, долбление, комбинированный)", - "Вес": "2.6 кг" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Электроинструмент", - "type": "Перфоратор", - "description": "Мощный перфоратор DeWalt для интенсивного использования. Обеспечивает высокую производительность и комфорт в работе.", - "created_at": "2024-12-18T14:31:01.918000", - "updated_at": "2024-12-18T14:31:01.918000", - "_id": "6762dca5d5595612f0a21218" - }, - { - "name": "Рулетка измерительная Stanley 5 м", - "dailyPrice": 20.0, - "totalPrice": 400.0, - "images": [], - "features": { - "Длина": "5 м", - "Ширина ленты": "19 мм", - "Материал корпуса": "Пластик с резиновым покрытием", - "Назначение": "Измерение длины" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Измерительные инструменты", - "type": "Рулетка", - "description": "Классическая рулетка с прочной лентой для строительных и бытовых нужд. Обеспечивает точные измерения.", - "created_at": "2024-12-18T14:31:07.660000", - "updated_at": "2024-12-18T14:31:07.660000", - "_id": "6762dcabd5595612f0a21219" - }, - { - "name": "Рулетка лазерная Bosch GLM 50", - "dailyPrice": 200.0, - "totalPrice": 8000.0, - "images": [ - "http://0.0.0.0:8080/api/resources/images/tools/5ce2f7f4ec7ee5709c101dc011b25001041196e54cab1a44c3911bec2fcc5444/1.png", - "http://0.0.0.0:8080/api/resources/images/tools/5ce2f7f4ec7ee5709c101dc011b25001041196e54cab1a44c3911bec2fcc5444/2.png" - ], - "features": { - "Дальность": "50 м", - "Точность": "± 1.5 мм", - "Дисплей": "Цветной с подсветкой", - "Назначение": "Измерение больших расстояний" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Измерительные инструменты", - "type": "Рулетка", - "description": "Лазерная рулетка для измерения больших расстояний с высокой точностью. Подходит для профессионалов и любителей.", - "created_at": "2024-12-18T14:31:17.525000", - "updated_at": "2024-12-18T14:31:17.525000", - "_id": "6762dcb5d5595612f0a2121a" - }, - { - "name": "Рулетка измерительная Kraftool", - "dailyPrice": 30.0, - "totalPrice": 600.0, - "images": [], - "features": { - "Длина": "7.5 м", - "Ширина ленты": "25 мм", - "Материал корпуса": "Прорезиненный пластик", - "Механизм": "Автоматический стопор" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Измерительные инструменты", - "type": "Рулетка", - "description": "Рулетка с увеличенной длиной для профессионального использования. Эргономичный корпус для удобства.", - "created_at": "2024-12-18T14:31:52.889000", - "updated_at": "2024-12-18T14:31:52.889000", - "_id": "6762dcd8d5595612f0a2121b" - }, - { - "name": "Уровень строительный Stabila 60 см", - "dailyPrice": 50.0, - "totalPrice": 1200.0, - "images": [], - "features": { - "Длина": "60 см", - "Материал": "Алюминий", - "Точность измерения": "0.5 мм/м", - "Назначение": "Проверка горизонтальности и вертикальности" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Измерительные инструменты", - "type": "Уровень", - "description": "Компактный строительный уровень для точных измерений. Подходит для использования дома и на стройке.", - "created_at": "2024-12-18T14:32:28.599000", - "updated_at": "2024-12-18T14:32:28.599000", - "_id": "6762dcfcd5595612f0a2121c" - }, - { - "name": "Уровень магнитный Kraftool 80 см", - "dailyPrice": 70.0, - "totalPrice": 1500.0, - "images": [], - "features": { - "Длина": "80 см", - "Магнит": "Да", - "Материал": "Усиленный алюминий", - "Точность": "0.5 мм/м" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Измерительные инструменты", - "type": "Уровень", - "description": "Магнитный уровень с прочным корпусом, идеально подходит для работы с металлическими конструкциями.", - "created_at": "2024-12-18T14:32:34.536000", - "updated_at": "2024-12-18T14:32:34.536000", - "_id": "6762dd02d5595612f0a2121d" - }, - { - "name": "Лазерный уровень Bosch GLL 2-15", - "dailyPrice": 300.0, - "totalPrice": 9500.0, - "images": [], - "features": { - "Дальность": "15 м", - "Точность": "± 0.3 мм/м", - "Тип линии": "Горизонтальная и вертикальная", - "Назначение": "Высокоточные строительные работы" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Измерительные инструменты", - "type": "Уровень", - "description": "Лазерный уровень для точного выравнивания линий на строительных площадках. Компактный и удобный в использовании.", - "created_at": "2024-12-18T14:32:44.504000", - "updated_at": "2024-12-18T14:32:44.504000", - "_id": "6762dd0cd5595612f0a2121e" - }, - { - "name": "Очки защитные Зубр Эксперт", - "dailyPrice": 20.0, - "totalPrice": 300.0, - "images": [], - "features": { - "Материал линз": "Поликарбонат", - "Антизапотевающее покрытие": "Да", - "Защита": "От механических повреждений", - "Назначение": "Работа с инструментами" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Защитное оборудование", - "type": "Очки защитные", - "description": "Прочные защитные очки для работы с электроинструментами. Защищают глаза от пыли и осколков.", - "created_at": "2024-12-18T14:33:40.545000", - "updated_at": "2024-12-18T14:33:40.545000", - "_id": "6762dd44d5595612f0a2121f" - }, - { - "name": "Очки открытого типа Uvex", - "dailyPrice": 30.0, - "totalPrice": 500.0, - "images": [], - "features": { - "Материал линз": "Пластик", - "УФ-защита": "Да", - "Регулировка": "По ширине", - "Назначение": "Работа на улице и в помещении" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Защитное оборудование", - "type": "Очки защитные", - "description": "Легкие очки с УФ-защитой для использования в разных условиях. Регулируемые дужки обеспечивают комфортную посадку.", - "created_at": "2024-12-18T14:33:48.300000", - "updated_at": "2024-12-18T14:33:48.300000", - "_id": "6762dd4cd5595612f0a21220" - }, - { - "name": "Очки закрытого типа Makita", - "dailyPrice": 40.0, - "totalPrice": 700.0, - "images": [], - "features": { - "Материал линз": "Поликарбонат", - "Вентиляция": "Пассивная", - "Назначение": "Работа с пылью и химикатами", - "Защита": "Полная" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Защитное оборудование", - "type": "Очки защитные", - "description": "Закрытые очки с вентиляцией для защиты от пыли и мелких частиц. Подходят для строительных и ремонтных работ.", - "created_at": "2024-12-18T14:33:54.824000", - "updated_at": "2024-12-18T14:33:54.824000", - "_id": "6762dd52d5595612f0a21221" - }, - { - "name": "Каска строительная белая Зубр", - "dailyPrice": 30.0, - "totalPrice": 600.0, - "images": [ - "http://0.0.0.0:8080/api/resources/images/tools/1049c30b152de23ffe9667fba626782eb566c9ef5476b0fb08a714051475f500/1.png", - "http://0.0.0.0:8080/api/resources/images/tools/1049c30b152de23ffe9667fba626782eb566c9ef5476b0fb08a714051475f500/2.png" - ], - "features": { - "Материал": "Полипропилен", - "Регулировка": "Обхват головы", - "Защита": "Механическая", - "Назначение": "Строительные работы" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Защитное оборудование", - "type": "Каска", - "description": "Прочная строительная каска с регулируемым размером. Надежная защита головы на стройплощадке.", - "created_at": "2024-12-18T14:34:03.882000", - "updated_at": "2024-12-18T14:34:03.882000", - "_id": "6762dd5bd5595612f0a21222" - }, - { - "name": "Каска Ударопрочная красная", - "dailyPrice": 40.0, - "totalPrice": 750.0, - "images": [], - "features": { - "Материал": "Усиленный поликарбонат", - "Регулировка": "Обхват и посадка", - "Вентиляция": "Есть", - "Назначение": "Работа на высоте" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Защитное оборудование", - "type": "Каска", - "description": "Ударопрочная каска с вентиляцией для работы на высоте. Обеспечивает комфорт и надежную защиту.", - "created_at": "2024-12-18T14:34:11.830000", - "updated_at": "2024-12-18T14:34:11.830000", - "_id": "6762dd63d5595612f0a21223" - }, - { - "name": "Каска с козырьком Safetop", - "dailyPrice": 50.0, - "totalPrice": 1000.0, - "images": [], - "features": { - "Материал": "ABS-пластик", - "Особенность": "Козырек", - "Регулировка": "Размер головы", - "Назначение": "Промышленные работы" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Защитное оборудование", - "type": "Каска", - "description": "Каска с козырьком для работы на открытых площадках. Защищает от солнца и ударов.", - "created_at": "2024-12-18T14:34:16.941000", - "updated_at": "2024-12-18T14:34:16.941000", - "_id": "6762dd68d5595612f0a21224" - }, - { - "name": "Перчатки нитриловые Зубр", - "dailyPrice": 10.0, - "totalPrice": 150.0, - "images": [], - "features": { - "Материал": "Нитрил", - "Защита": "От химикатов и масел", - "Размер": "Универсальный", - "Назначение": "Работа с химическими веществами" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Защитное оборудование", - "type": "Перчатки рабочие", - "description": "Прочные нитриловые перчатки, подходящие для работы с химикатами. Отлично защищают руки и обеспечивают комфорт.", - "created_at": "2024-12-18T14:34:22.213000", - "updated_at": "2024-12-18T14:34:22.213000", - "_id": "6762dd6ed5595612f0a21225" - }, - { - "name": "Перчатки кожаные сварщика", - "dailyPrice": 30.0, - "totalPrice": 500.0, - "images": [], - "features": { - "Материал": "Натуральная кожа", - "Защита": "От высоких температур", - "Размер": "L", - "Назначение": "Сварочные работы" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Защитное оборудование", - "type": "Перчатки рабочие", - "description": "Кожаные перчатки, обеспечивающие надежную защиту при сварочных работах. Выдерживают высокие температуры.", - "created_at": "2024-12-18T14:34:49.124000", - "updated_at": "2024-12-18T14:34:49.124000", - "_id": "6762dd89d5595612f0a21226" - }, - { - "name": "Перчатки х/б с ПВХ покрытием", - "dailyPrice": 5.0, - "totalPrice": 80.0, - "images": [], - "features": { - "Материал": "Хлопок и ПВХ", - "Защита": "От механических повреждений", - "Размер": "Универсальный", - "Назначение": "Строительные и садовые работы" - }, - "rating": 0.0, - "reviews_count": 0, - "ordersNumber": 0, - "category": "Защитное оборудование", - "type": "Перчатки рабочие", - "description": "Доступные и удобные перчатки с ПВХ покрытием для универсального использования. Обеспечивают хороший захват.", - "created_at": "2024-12-18T14:34:49.124000", - "updated_at": "2024-12-18T14:34:49.124000", - "_id": "6762dd89d5595612f0a21227" - } - ], - "orders": [ - { - "tools": [ - "6762db8ad5595612f0a21207", - "6762dbe7d5595612f0a21208" - ], - "start_leasing": "2024-12-12T15:00:35.437000", - "end_leasing": "2024-12-30T15:00:35.437000", - "price": 1620.0, - "client": "6762d6a2f6292fe72b752b5e", - "delivery_type": "to_door", - "delivery_state": "delivered", - "payment_type": "cash", - "payment_state": "paid", - "create_order_time": "2024-12-12T15:00:35.437000", - "_id": "6762e4905644d6846bbf246f" - }, - { - "tools": [ - "6762db8ad5595612f0a21207", - "6762dbe7d5595612f0a21208", - "6762dbefd5595612f0a21209", - "6762dc34d5595612f0a2120d" - ], - "start_leasing": "2024-12-12T15:00:35.437000", - "end_leasing": "2025-01-30T15:00:35.437000", - "price": 7105.0, - "client": "6762d6d9f6292fe72b752b5f", - "delivery_type": "to_door", - "delivery_state": "delivered", - "payment_type": "cash", - "payment_state": "paid", - "create_order_time": "2024-12-12T15:00:35.437000", - "_id": "6762e517561db75d683b6941" - }, - { - "tools": [ - "6762dbefd5595612f0a21209", - "6762dc34d5595612f0a2120d" - ], - "start_leasing": "2024-12-18T10:00:00", - "end_leasing": "2024-12-25T10:00:00", - "price": 275.0, - "client": "6762d6a2f6292fe72b752b5e", - "delivery_type": "to_door", - "delivery_state": "delivered", - "payment_type": "cash", - "payment_state": "paid", - "create_order_time": "2024-12-18T10:00:00", - "_id": "6762f80747f9d95025a19268" - }, - { - "tools": [ - "6762dc15d5595612f0a2120b", - "6762dc27d5595612f0a2120c" - ], - "start_leasing": "2024-12-18T15:00:00", - "end_leasing": "2024-12-20T15:00:00", - "price": 130.0, - "client": "6762d6ebf6292fe72b752b60", - "delivery_type": "to_door", - "delivery_state": "delivered", - "payment_type": "cash", - "payment_state": "paid", - "create_order_time": "2024-12-18T15:00:00", - "_id": "6762f94047f9d95025a1926b" - }, - { - "tools": [ - "6762dc67d5595612f0a21213", - "6762dca1d5595612f0a21217" - ], - "start_leasing": "2024-12-18T16:34:15.069000", - "end_leasing": "2025-01-01T15:00:00", - "price": 11050.0, - "client": "6762d6ebf6292fe72b752b60", - "delivery_type": "to_door", - "delivery_state": "delivered", - "payment_type": "cash", - "payment_state": "paid", - "create_order_time": "2024-12-18T16:34:15.069000", - "_id": "6762f98747f9d95025a1926e" - }, - { - "tools": [ - "6762dc67d5595612f0a21213", - "6762dca1d5595612f0a21217" - ], - "start_leasing": "2024-12-18T16:51:47.919000", - "end_leasing": "2025-01-01T15:00:00", - "price": 11050.0, - "client": "6762d6d9f6292fe72b752b5f", - "delivery_type": "to_door", - "delivery_state": "delivered", - "payment_type": "cash", - "payment_state": "paid", - "create_order_time": "2024-12-18T19:51:47.922000", - "_id": "6762fda347f9d95025a1926f" - } - ], - "categories": [ - { - "name": "Ручной инструмент", - "types": [ - "6762d9526b4835df660bce67", - "6762d9656b4835df660bce68", - "6762d96c6b4835df660bce69" - ], - "_id": "6762d9126b4835df660bce63" - }, - { - "name": "Электроинструмент", - "types": [ - "6762d9776b4835df660bce6a", - "6762d97d6b4835df660bce6b", - "6762d9816b4835df660bce6c" - ], - "_id": "6762d91b6b4835df660bce64" - }, - { - "name": "Измерительные инструменты", - "types": [ - "6762d98e6b4835df660bce6d", - "6762d9946b4835df660bce6e" - ], - "_id": "6762d9226b4835df660bce65" - }, - { - "name": "Защитное оборудование", - "types": [ - "6762d9bd6b4835df660bce70", - "6762d9c76b4835df660bce71", - "6762d9d16b4835df660bce72" - ], - "_id": "6762d92d6b4835df660bce66" - } - ], - "types": [ - { - "name": "Молоток", - "category_name": "Ручной инструмент", - "tools": [ - "6762db8ad5595612f0a21207", - "6762dbe7d5595612f0a21208", - "6762dbefd5595612f0a21209" - ], - "_id": "6762d9526b4835df660bce67" - }, - { - "name": "Отвертка", - "category_name": "Ручной инструмент", - "tools": [ - "6762dc08d5595612f0a2120a", - "6762dc15d5595612f0a2120b", - "6762dc27d5595612f0a2120c" - ], - "_id": "6762d9656b4835df660bce68" - }, - { - "name": "Рожковый ключ", - "category_name": "Ручной инструмент", - "tools": [ - "6762dc34d5595612f0a2120d", - "6762dc3ad5595612f0a2120e", - "6762dc40d5595612f0a2120f" - ], - "_id": "6762d96c6b4835df660bce69" - }, - { - "name": "Дрель", - "category_name": "Электроинструмент", - "tools": [ - "6762dc49d5595612f0a21210", - "6762dc4ed5595612f0a21211", - "6762dc54d5595612f0a21212" - ], - "_id": "6762d9776b4835df660bce6a" - }, - { - "name": "Болгарка", - "category_name": "Электроинструмент", - "tools": [ - "6762dc67d5595612f0a21213", - "6762dc6fd5595612f0a21214", - "6762dc83d5595612f0a21215" - ], - "_id": "6762d97d6b4835df660bce6b" - }, - { - "name": "Перфоратор", - "category_name": "Электроинструмент", - "tools": [ - "6762dc98d5595612f0a21216", - "6762dca1d5595612f0a21217", - "6762dca5d5595612f0a21218" - ], - "_id": "6762d9816b4835df660bce6c" - }, - { - "name": "Рулетка", - "category_name": "Измерительные инструменты", - "tools": [ - "6762dcabd5595612f0a21219", - "6762dcb5d5595612f0a2121a", - "6762dcd8d5595612f0a2121b" - ], - "_id": "6762d98e6b4835df660bce6d" - }, - { - "name": "Уровень", - "category_name": "Измерительные инструменты", - "tools": [ - "6762dcfcd5595612f0a2121c", - "6762dd02d5595612f0a2121d", - "6762dd0cd5595612f0a2121e" - ], - "_id": "6762d9946b4835df660bce6e" - }, - { - "name": "Очки защитные", - "category_name": "Защитное оборудование", - "tools": [ - "6762dd44d5595612f0a2121f", - "6762dd4cd5595612f0a21220", - "6762dd52d5595612f0a21221" - ], - "_id": "6762d9bd6b4835df660bce70" - }, - { - "name": "Каска", - "category_name": "Защитное оборудование", - "tools": [ - "6762dd5bd5595612f0a21222", - "6762dd63d5595612f0a21223", - "6762dd68d5595612f0a21224" - ], - "_id": "6762d9c76b4835df660bce71" - }, - { - "name": "Перчатки рабочие", - "category_name": "Защитное оборудование", - "tools": [ - "6762dd6ed5595612f0a21225", - "6762dd89d5595612f0a21226", - "6762dd89d5595612f0a21227" - ], - "_id": "6762d9d16b4835df660bce72" - } - ], - "reviews": [ - { - "toolId": "6762db8ad5595612f0a21207", - "reviewerId": "6762d6a2f6292fe72b752b5e", - "rating": 4, - "date": "2024-12-19T15:22:28.835000", - "text": "Очень удобный молоток-гвоздодер! Ручка не скользит, а вес идеально подходит для работы. Однако металл на гвоздодере немного мягче, чем ожидалось, и чуть согнулся после работы с твердыми гвоздями.", - "_id": "6762ea83cf5e24ef1c7ce0f1" - }, - { - "toolId": "6762db8ad5595612f0a21207", - "reviewerId": "6762d6d9f6292fe72b752b5f", - "rating": 2, - "date": "2024-12-18T15:22:28.835000", - "text": "Молоток оказался неудобным в использовании. Ручка хоть и прорезиненная, но скользит в руках при длительной работе. Гвоздодер согнулся после первой же попытки вытащить плотный гвоздь. За такую цену ожидал большего качества.", - "_id": "6762ed4e2333862c37e6b76a" - }, - { - "toolId": "6762dbe7d5595612f0a21208", - "reviewerId": "6762d6a2f6292fe72b752b5e", - "rating": 5, - "date": "2024-12-19T15:22:28.835000", - "text": "Отличный молоток! Прочный, тяжелый и идеально подходит для слесарных работ. Двухкомпонентная ручка действительно снижает вибрацию, работать с ним комфортно даже длительное время. Полностью доволен покупкой.", - "_id": "6762eda72333862c37e6b76b" - }, - { - "toolId": "6762dbe7d5595612f0a21208", - "reviewerId": "6762d6d9f6292fe72b752b5f", - "rating": 4, - "date": "2024-12-18T15:22:28.835000", - "text": "Хороший молоток, тяжёлый и качественный. Ручка удобная, но покрытие немного стирается после долгого использования. В остальном инструмент оправдал ожидания.", - "_id": "6762ee022333862c37e6b76c" - }, - { - "toolId": "6762dbefd5595612f0a21209", - "reviewerId": "6762d6a2f6292fe72b752b5e", - "rating": 4, - "date": "2024-12-26T10:00:00", - "text": "Отличный столярный молоток, но немного легковат для крупных задач.", - "_id": "6762f8ac47f9d95025a19269" - }, - { - "toolId": "6762dc34d5595612f0a2120d", - "reviewerId": "6762d6d9f6292fe72b752b5f", - "rating": 5, - "date": "2024-12-26T10:00:00", - "text": "Ключ удобный, антикоррозийное покрытие работает отлично. Рекомендую!", - "_id": "6762f8d747f9d95025a1926a" - }, - { - "toolId": "6762dc15d5595612f0a2120b", - "reviewerId": "6762d6ebf6292fe72b752b60", - "rating": 4, - "date": "2024-12-22T10:00:00", - "text": "Отвертка плоская оказалась надежной, но ручка чуть скользила.", - "_id": "6762f95247f9d95025a1926c" - }, - { - "toolId": "6762dc27d5595612f0a2120c", - "reviewerId": "6762d6ebf6292fe72b752b60", - "rating": 5, - "date": "2024-12-22T10:00:00", - "text": "Набор бит Kraftool спас много раз. Отличный инструмент!", - "_id": "6762f96a47f9d95025a1926d" - }, - { - "toolId": "6762dc67d5595612f0a21213", - "reviewerId": "6762d6d9f6292fe72b752b5f", - "rating": 5, - "date": "2025-01-02T15:00:00", - "text": "Шлифмашина Bosch показала себя идеально! Рекомендую.", - "_id": "6762fdc747f9d95025a19270" - }, - { - "toolId": "6762dca1d5595612f0a21217", - "reviewerId": "6762d6ebf6292fe72b752b60", - "rating": 4, - "date": "2025-01-02T15:00:00", - "text": "Перфоратор мощный, но немного тяжеловат для долгой работы.", - "_id": "6762fdd947f9d95025a19271" - } - ] -} - -### -GET http://localhost:8000/api/data/import -Authorization: Bearer {{authToken}} - -### -GET http://localhost:8000/api/orders/worker/ -Authorization: Bearer {{authToken}} - -### -GET http://localhost:8000/api/tools/paginated -Authorization: Bearer {{authToken}} - -### -GET http://localhost:8000/api/orders/6762e4905644d6846bbf246f -Authorization: Bearer {{authToken}} - - diff --git a/backend/src/infrastructure/repo_implementations/im_ex_repo/im_ex_repo.py b/backend/src/infrastructure/repo_implementations/im_ex_repo/im_ex_repo.py index a9fb549..95d34e5 100644 --- a/backend/src/infrastructure/repo_implementations/im_ex_repo/im_ex_repo.py +++ b/backend/src/infrastructure/repo_implementations/im_ex_repo/im_ex_repo.py @@ -12,6 +12,7 @@ from src.core.exceptions.server_error import DatabaseError from src.core.repositories.im_ex_repo.iim_ex_repo import IImExRepository from src.infrastructure.repo_implementations.helpers.id_mapper import str_to_objectId +from test.integration.repositories.test_mongo_worker_repo import worker class MongoImExRepository(IImExRepository): @@ -59,20 +60,30 @@ async def import_data(self, data: DBModelCreate) -> None: try: if data.workers: await self.worker_collection.delete_many({}) - await self.worker_collection.insert_many([worker.model_dump() for worker in data.workers]) + workers = [worker.model_dump() for worker in data.workers] + for worker in workers: + worker["_id"] = str_to_objectId(worker.pop("id")) + await self.worker_collection.insert_many(workers) if data.clients: await self.client_collection.delete_many({}) - await self.client_collection.insert_many([client.model_dump() for client in data.clients]) + clients = [client.model_dump() for client in data.clients] + for client in clients: + client["_id"] = str_to_objectId(client.pop("id")) + await self.client_collection.insert_many(clients) if data.tools: await self.tool_collection.delete_many({}) - await self.tool_collection.insert_many([tool.model_dump() for tool in data.tools]) + tools = [tool.model_dump() for tool in data.tools] + for tool in tools: + tool["_id"] = str_to_objectId(tool.pop("id")) + await self.tool_collection.insert_many(tools) if data.orders: await self.order_collection.delete_many({}) orders = [order.model_dump() for order in data.orders] for order in orders: + order["_id"] = str_to_objectId(order.pop("id")) order["client"] = str_to_objectId(order.get("client")) order["tools"] = [str_to_objectId(tool) for tool in order["tools"]] await self.order_collection.insert_many(orders) @@ -81,6 +92,7 @@ async def import_data(self, data: DBModelCreate) -> None: await self.category_collection.delete_many({}) categories = [category.model_dump() for category in data.categories] for category in categories: + category["_id"] = str_to_objectId(category.pop("id")) category["types"] = [str_to_objectId(type) for type in category["types"]] await self.category_collection.insert_many(categories) @@ -88,6 +100,7 @@ async def import_data(self, data: DBModelCreate) -> None: await self.type_collection.delete_many({}) types = [typee.model_dump() for typee in data.types] for typee in types: + typee["_id"] = str_to_objectId(typee.pop("id")) typee["tools"] = [str_to_objectId(tool) for tool in typee["tools"]] await self.type_collection.insert_many(types) @@ -95,6 +108,7 @@ async def import_data(self, data: DBModelCreate) -> None: await self.review_collection.delete_many({}) reviews = [review.model_dump() for review in data.reviews] for review in reviews: + review["_id"] = str_to_objectId(review.pop("id")) review["toolId"] = str_to_objectId(review["toolId"]) review["reviewerId"] = str_to_objectId(review["reviewerId"]) await self.review_collection.insert_many(reviews) diff --git a/docker-compose.yml b/docker-compose.yml index 1dfcfad..b2501cb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,8 +4,6 @@ services: db: container_name: mongodb hostname: mongodb - ports: - - "127.0.0.1:27017:27017" # для просмотра коллекций в mongoDB compass build: context: db dockerfile: Dockerfile