From f78c2199e1f863a6f14ee399272acd0a5a125e0f Mon Sep 17 00:00:00 2001 From: richardtekula Date: Tue, 11 Nov 2025 17:06:39 +0100 Subject: [PATCH] Fix: Rename directory to remove & character causing shell issues Renamed ebook_backend&admin_panel to ebook_backend_admin_panel The & character was being interpreted by shell as background process operator, causing 'Dockerfile not found' errors in Coolify. --- docker-compose.yml | 2 +- .../.env.example | 0 .../.gitignore | 0 .../Dockerfile | 0 .../README.md | 0 .../admin-backend/init_db.py | 0 .../admin-backend/main.py | 0 .../admin-backend/manage_test_db.py | 0 .../admin-backend/models/coupon.py | 0 .../admin-backend/models/user.py | 0 .../admin-backend/pytest.ini | 0 .../admin-backend/routes/auth.py | 0 .../admin-backend/schemas.py | 0 .../admin-backend/tests/conftest.py | 0 .../admin-backend/tests/test_auth_routes.py | 0 .../admin-backend/tests/test_coupon_routes.py | 0 .../admin-backend/tests/test_main.py | 0 .../admin-backend/tests/test_models.py | 0 .../admin-backend/tests/test_schemas.py | 0 .../tests/test_translation_routes.py | 0 .../admin-backend/tests/test_utils.py | 0 .../admin-backend/translationfile/metadata.txt | 1 + .../translationfile/translation.xlsx | Bin 0 -> 55240 bytes .../admin-backend/utils/auth.py | 0 .../admin-backend/utils/coupon_utils.py | 0 .../admin-backend/utils/exceptions.py | 0 .../admin-backend/utils/logger.py | 0 .../admin-backend/utils/template_loader.py | 0 .../admin-backend/utils/timezone_utils.py | 0 .../admin-frontend/admin_dashboard.html | 0 .../admin-frontend/admin_dashboard.js | 0 .../admin-frontend/admin_login.html | 0 .../admin-frontend/admin_login.js | 0 .../requirements.txt | 0 .../start.sh | 0 35 files changed, 2 insertions(+), 1 deletion(-) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/.env.example (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/.gitignore (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/Dockerfile (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/README.md (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/init_db.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/main.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/manage_test_db.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/models/coupon.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/models/user.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/pytest.ini (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/routes/auth.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/schemas.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/tests/conftest.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/tests/test_auth_routes.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/tests/test_coupon_routes.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/tests/test_main.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/tests/test_models.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/tests/test_schemas.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/tests/test_translation_routes.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/tests/test_utils.py (100%) create mode 100644 ebook_backend_admin_panel/admin-backend/translationfile/metadata.txt create mode 100644 ebook_backend_admin_panel/admin-backend/translationfile/translation.xlsx rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/utils/auth.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/utils/coupon_utils.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/utils/exceptions.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/utils/logger.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/utils/template_loader.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-backend/utils/timezone_utils.py (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-frontend/admin_dashboard.html (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-frontend/admin_dashboard.js (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-frontend/admin_login.html (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/admin-frontend/admin_login.js (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/requirements.txt (100%) rename {ebook_backend&admin_panel => ebook_backend_admin_panel}/start.sh (100%) diff --git a/docker-compose.yml b/docker-compose.yml index c1da22a..15c1ef9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,7 +28,7 @@ services: # Backend API + Frontend backend: build: - context: ./ebook_backend&admin_panel + context: ./ebook_backend_admin_panel dockerfile: Dockerfile container_name: ebook_backend restart: unless-stopped diff --git a/ebook_backend&admin_panel/.env.example b/ebook_backend_admin_panel/.env.example similarity index 100% rename from ebook_backend&admin_panel/.env.example rename to ebook_backend_admin_panel/.env.example diff --git a/ebook_backend&admin_panel/.gitignore b/ebook_backend_admin_panel/.gitignore similarity index 100% rename from ebook_backend&admin_panel/.gitignore rename to ebook_backend_admin_panel/.gitignore diff --git a/ebook_backend&admin_panel/Dockerfile b/ebook_backend_admin_panel/Dockerfile similarity index 100% rename from ebook_backend&admin_panel/Dockerfile rename to ebook_backend_admin_panel/Dockerfile diff --git a/ebook_backend&admin_panel/README.md b/ebook_backend_admin_panel/README.md similarity index 100% rename from ebook_backend&admin_panel/README.md rename to ebook_backend_admin_panel/README.md diff --git a/ebook_backend&admin_panel/admin-backend/init_db.py b/ebook_backend_admin_panel/admin-backend/init_db.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/init_db.py rename to ebook_backend_admin_panel/admin-backend/init_db.py diff --git a/ebook_backend&admin_panel/admin-backend/main.py b/ebook_backend_admin_panel/admin-backend/main.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/main.py rename to ebook_backend_admin_panel/admin-backend/main.py diff --git a/ebook_backend&admin_panel/admin-backend/manage_test_db.py b/ebook_backend_admin_panel/admin-backend/manage_test_db.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/manage_test_db.py rename to ebook_backend_admin_panel/admin-backend/manage_test_db.py diff --git a/ebook_backend&admin_panel/admin-backend/models/coupon.py b/ebook_backend_admin_panel/admin-backend/models/coupon.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/models/coupon.py rename to ebook_backend_admin_panel/admin-backend/models/coupon.py diff --git a/ebook_backend&admin_panel/admin-backend/models/user.py b/ebook_backend_admin_panel/admin-backend/models/user.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/models/user.py rename to ebook_backend_admin_panel/admin-backend/models/user.py diff --git a/ebook_backend&admin_panel/admin-backend/pytest.ini b/ebook_backend_admin_panel/admin-backend/pytest.ini similarity index 100% rename from ebook_backend&admin_panel/admin-backend/pytest.ini rename to ebook_backend_admin_panel/admin-backend/pytest.ini diff --git a/ebook_backend&admin_panel/admin-backend/routes/auth.py b/ebook_backend_admin_panel/admin-backend/routes/auth.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/routes/auth.py rename to ebook_backend_admin_panel/admin-backend/routes/auth.py diff --git a/ebook_backend&admin_panel/admin-backend/schemas.py b/ebook_backend_admin_panel/admin-backend/schemas.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/schemas.py rename to ebook_backend_admin_panel/admin-backend/schemas.py diff --git a/ebook_backend&admin_panel/admin-backend/tests/conftest.py b/ebook_backend_admin_panel/admin-backend/tests/conftest.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/tests/conftest.py rename to ebook_backend_admin_panel/admin-backend/tests/conftest.py diff --git a/ebook_backend&admin_panel/admin-backend/tests/test_auth_routes.py b/ebook_backend_admin_panel/admin-backend/tests/test_auth_routes.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/tests/test_auth_routes.py rename to ebook_backend_admin_panel/admin-backend/tests/test_auth_routes.py diff --git a/ebook_backend&admin_panel/admin-backend/tests/test_coupon_routes.py b/ebook_backend_admin_panel/admin-backend/tests/test_coupon_routes.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/tests/test_coupon_routes.py rename to ebook_backend_admin_panel/admin-backend/tests/test_coupon_routes.py diff --git a/ebook_backend&admin_panel/admin-backend/tests/test_main.py b/ebook_backend_admin_panel/admin-backend/tests/test_main.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/tests/test_main.py rename to ebook_backend_admin_panel/admin-backend/tests/test_main.py diff --git a/ebook_backend&admin_panel/admin-backend/tests/test_models.py b/ebook_backend_admin_panel/admin-backend/tests/test_models.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/tests/test_models.py rename to ebook_backend_admin_panel/admin-backend/tests/test_models.py diff --git a/ebook_backend&admin_panel/admin-backend/tests/test_schemas.py b/ebook_backend_admin_panel/admin-backend/tests/test_schemas.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/tests/test_schemas.py rename to ebook_backend_admin_panel/admin-backend/tests/test_schemas.py diff --git a/ebook_backend&admin_panel/admin-backend/tests/test_translation_routes.py b/ebook_backend_admin_panel/admin-backend/tests/test_translation_routes.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/tests/test_translation_routes.py rename to ebook_backend_admin_panel/admin-backend/tests/test_translation_routes.py diff --git a/ebook_backend&admin_panel/admin-backend/tests/test_utils.py b/ebook_backend_admin_panel/admin-backend/tests/test_utils.py similarity index 100% rename from ebook_backend&admin_panel/admin-backend/tests/test_utils.py rename to ebook_backend_admin_panel/admin-backend/tests/test_utils.py diff --git a/ebook_backend_admin_panel/admin-backend/translationfile/metadata.txt b/ebook_backend_admin_panel/admin-backend/translationfile/metadata.txt new file mode 100644 index 0000000..da7e3b9 --- /dev/null +++ b/ebook_backend_admin_panel/admin-backend/translationfile/metadata.txt @@ -0,0 +1 @@ +demo (1).xlsx \ No newline at end of file diff --git a/ebook_backend_admin_panel/admin-backend/translationfile/translation.xlsx b/ebook_backend_admin_panel/admin-backend/translationfile/translation.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9885400a4495731962860c5ccf75b77c950e2a06 GIT binary patch literal 55240 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 i08a-yJ1