From 0f415ebbc8d3f8ded352107e3c5ee19ecc8c0df6 Mon Sep 17 00:00:00 2001
From: Navin Chandra <nc01009@surrey.ac.uk>
Date: Wed, 1 May 2024 23:30:13 +0530
Subject: [PATCH] adding docker code for microservices

---
 docker-compose.yml                            |  28 ++++++++++
 microservices/admins_service/DockerFIle       |  19 +++++++
 microservices/admins_service/requirements.txt |  34 ++++++++++++
 microservices/bikes_service/Dockerfile        |  18 ++++++
 microservices/bikes_service/local_bike.db     | Bin 0 -> 61440 bytes
 microservices/bikes_service/main.py           |   7 +++
 microservices/bikes_service/requirements.txt  |  34 ++++++++++++
 microservices/rentals_service/DockerFIle      |  17 ++++++
 microservices/rentals_service/rentals.db      | Bin 8192 -> 0 bytes
 .../rentals_service/requirements.txt          |  34 ++++++++++++
 microservices/reviews_service/DockerFIle      |  19 +++++++
 .../reviews_service/requirements.txt          |  34 ++++++++++++
 microservices/reviews_service/review.db       | Bin 8192 -> 0 bytes
 microservices/users_service/DockerFIle        |  19 +++++++
 microservices/users_service/main.py           |  52 ------------------
 microservices/users_service/requirements.txt  |  34 ++++++++++++
 16 files changed, 297 insertions(+), 52 deletions(-)
 create mode 100644 docker-compose.yml
 create mode 100644 microservices/admins_service/DockerFIle
 create mode 100644 microservices/bikes_service/Dockerfile
 create mode 100644 microservices/bikes_service/local_bike.db
 create mode 100644 microservices/rentals_service/DockerFIle
 delete mode 100644 microservices/rentals_service/rentals.db
 create mode 100644 microservices/reviews_service/DockerFIle
 delete mode 100644 microservices/reviews_service/review.db
 create mode 100644 microservices/users_service/DockerFIle

diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..4b5c430
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,28 @@
+version: '3'
+
+services:
+  bikes_service:
+    build: ./bikes_service
+    ports:
+      - "8001:8001"
+
+  admins_service:
+    build: ./admins_service
+    ports:
+      - "8002:8002"
+
+  rentals_service:
+    build: ./rentals_service
+    ports:
+      - "8003:8003"
+  
+  reviews_service:
+    build: ./bikes_service
+    ports:
+      - "8001:8001"
+
+  users_service:
+    build: ./admins_service
+    ports:
+      - "8002:8002"
+
diff --git a/microservices/admins_service/DockerFIle b/microservices/admins_service/DockerFIle
new file mode 100644
index 0000000..1b85985
--- /dev/null
+++ b/microservices/admins_service/DockerFIle
@@ -0,0 +1,19 @@
+# Use the official Python image as the base image
+FROM python:3.9-slim
+
+# Set the working directory in the container
+WORKDIR /app
+
+# Copy the dependencies file to the working directory
+COPY requirements.txt .
+
+# Install any dependencies
+RUN pip install --no-cache-dir -r requirements.txt
+
+# Copy the rest of the application code to the working directory
+COPY . .
+
+EXPOSE 8002
+
+# Command to run the application
+CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8002"]
diff --git a/microservices/admins_service/requirements.txt b/microservices/admins_service/requirements.txt
index e69de29..6c5d0fd 100644
--- a/microservices/admins_service/requirements.txt
+++ b/microservices/admins_service/requirements.txt
@@ -0,0 +1,34 @@
+annotated-types==0.6.0
+anyio==4.3.0
+certifi==2024.2.2
+click==8.1.7
+dnspython==2.6.1
+email_validator==2.1.1
+exceptiongroup==1.2.0
+fastapi==0.110.0
+greenlet==3.0.3
+h11==0.14.0
+httpcore==1.0.5
+httptools==0.6.1
+httpx==0.27.0
+idna==3.6
+itsdangerous==2.1.2
+Jinja2==3.1.3
+MarkupSafe==2.1.5
+orjson==3.10.0
+pydantic==2.6.4
+pydantic-extra-types==2.6.0
+pydantic-settings==2.2.1
+pydantic_core==2.16.3
+python-dotenv==1.0.1
+python-multipart==0.0.9
+PyYAML==6.0.1
+sniffio==1.3.1
+SQLAlchemy==2.0.29
+starlette==0.36.3
+typing_extensions==4.10.0
+ujson==5.9.0
+uvicorn==0.29.0
+uvloop==0.19.0
+watchfiles==0.21.0
+websockets==12.0
diff --git a/microservices/bikes_service/Dockerfile b/microservices/bikes_service/Dockerfile
new file mode 100644
index 0000000..6780237
--- /dev/null
+++ b/microservices/bikes_service/Dockerfile
@@ -0,0 +1,18 @@
+# Use the official Python image as the base image
+FROM python:3.9-slim
+
+# Set the working directory in the container
+WORKDIR /app
+
+# Copy the dependencies file to the working directory
+COPY requirements.txt .
+
+# Install any dependencies
+RUN pip install --no-cache-dir -r requirements.txt
+
+# Copy the rest of the application code to the working directory
+COPY . .
+EXPOSE 8001
+
+# Command to run the application
+CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001"]
diff --git a/microservices/bikes_service/local_bike.db b/microservices/bikes_service/local_bike.db
new file mode 100644
index 0000000000000000000000000000000000000000..865b2b7182c807dfa9118534660eb75e09466302
GIT binary patch
literal 61440
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

literal 0
HcmV?d00001

diff --git a/microservices/bikes_service/main.py b/microservices/bikes_service/main.py
index 4fd56d7..3db3954 100644
--- a/microservices/bikes_service/main.py
+++ b/microservices/bikes_service/main.py
@@ -25,6 +25,13 @@ parent_directory = Path(__file__).resolve().parent.parent
 
 # Specify the path to the SQLite database file in the data directory
 db_file_path = parent_directory / "my_ride.db"
+
+# Check if the database file exists
+if not db_file_path.exists():
+    # If the database file doesn't exist, use a local database file from the same location
+    local_db_file_path = Path(__file__).resolve().parent / "local_bike.db"
+    db_file_path = local_db_file_path
+
 # print(db_file_path)
 conn = sqlite3.connect(db_file_path)
 
diff --git a/microservices/bikes_service/requirements.txt b/microservices/bikes_service/requirements.txt
index e69de29..6c5d0fd 100644
--- a/microservices/bikes_service/requirements.txt
+++ b/microservices/bikes_service/requirements.txt
@@ -0,0 +1,34 @@
+annotated-types==0.6.0
+anyio==4.3.0
+certifi==2024.2.2
+click==8.1.7
+dnspython==2.6.1
+email_validator==2.1.1
+exceptiongroup==1.2.0
+fastapi==0.110.0
+greenlet==3.0.3
+h11==0.14.0
+httpcore==1.0.5
+httptools==0.6.1
+httpx==0.27.0
+idna==3.6
+itsdangerous==2.1.2
+Jinja2==3.1.3
+MarkupSafe==2.1.5
+orjson==3.10.0
+pydantic==2.6.4
+pydantic-extra-types==2.6.0
+pydantic-settings==2.2.1
+pydantic_core==2.16.3
+python-dotenv==1.0.1
+python-multipart==0.0.9
+PyYAML==6.0.1
+sniffio==1.3.1
+SQLAlchemy==2.0.29
+starlette==0.36.3
+typing_extensions==4.10.0
+ujson==5.9.0
+uvicorn==0.29.0
+uvloop==0.19.0
+watchfiles==0.21.0
+websockets==12.0
diff --git a/microservices/rentals_service/DockerFIle b/microservices/rentals_service/DockerFIle
new file mode 100644
index 0000000..4314cb6
--- /dev/null
+++ b/microservices/rentals_service/DockerFIle
@@ -0,0 +1,17 @@
+# Use the official Python image as the base image
+FROM python:3.9-slim
+
+# Set the working directory in the container
+WORKDIR /app
+
+# Copy the dependencies file to the working directory
+COPY requirements.txt .
+
+# Install any dependencies
+RUN pip install --no-cache-dir -r requirements.txt
+
+# Copy the rest of the application code to the working directory
+COPY . .
+
+# Command to run the application
+CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8003"]
diff --git a/microservices/rentals_service/rentals.db b/microservices/rentals_service/rentals.db
deleted file mode 100644
index b9e3d839ec0a26d0ceca6587137ffe766d990c68..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8192
zcmeI#K~KUk6bJCmn2?x|c+-T-JC1~S(0F%XAw(Qn@W9CwSEK<pvUMTcJ@`ev_$lmg
zuz;c`FXsQUrD@-L&HCG^z59+fibhd9lZGzXF>@StMZ_3$?0aC}b!79y^~8?Z{I_t}
z+33A&tDN#1vkw9S5P$##AOHafKmY;|fB*#kQsCv(DV<a*&TGlY;Zz9~8aYk!;h-V7
z*XPvt>K#t`BDqJDN4%<j)B&~qK5ubBccOjki2>d4L2Xm^nJ?yPqT;-%SRCq!`m(rG
zGS2oc%EnQ;vyv#8MB#4LR0ncN^=`MrJ-=vQMDaw2&)?^iG-I{1yHT?_UGs)LR>!@p
z(RsDlO#YM{r!yUBv)tFb&|#3wl?wJ1JVj|}wvW~93f^w{nJ&4xVwD7Ma>4xu@6m&m
zO*Wb0OSc+x>8-}P)lb}YX7%T)+1=b;`VkO-00bZa0SG_<0uX=z1Rwwb2>fG#4@zN?
ANB{r;

diff --git a/microservices/rentals_service/requirements.txt b/microservices/rentals_service/requirements.txt
index e69de29..6c5d0fd 100644
--- a/microservices/rentals_service/requirements.txt
+++ b/microservices/rentals_service/requirements.txt
@@ -0,0 +1,34 @@
+annotated-types==0.6.0
+anyio==4.3.0
+certifi==2024.2.2
+click==8.1.7
+dnspython==2.6.1
+email_validator==2.1.1
+exceptiongroup==1.2.0
+fastapi==0.110.0
+greenlet==3.0.3
+h11==0.14.0
+httpcore==1.0.5
+httptools==0.6.1
+httpx==0.27.0
+idna==3.6
+itsdangerous==2.1.2
+Jinja2==3.1.3
+MarkupSafe==2.1.5
+orjson==3.10.0
+pydantic==2.6.4
+pydantic-extra-types==2.6.0
+pydantic-settings==2.2.1
+pydantic_core==2.16.3
+python-dotenv==1.0.1
+python-multipart==0.0.9
+PyYAML==6.0.1
+sniffio==1.3.1
+SQLAlchemy==2.0.29
+starlette==0.36.3
+typing_extensions==4.10.0
+ujson==5.9.0
+uvicorn==0.29.0
+uvloop==0.19.0
+watchfiles==0.21.0
+websockets==12.0
diff --git a/microservices/reviews_service/DockerFIle b/microservices/reviews_service/DockerFIle
new file mode 100644
index 0000000..b34fe12
--- /dev/null
+++ b/microservices/reviews_service/DockerFIle
@@ -0,0 +1,19 @@
+# Use the official Python image as the base image
+FROM python:3.9-slim
+
+# Set the working directory in the container
+WORKDIR /app
+
+# Copy the dependencies file to the working directory
+COPY requirements.txt .
+
+# Install any dependencies
+RUN pip install --no-cache-dir -r requirements.txt
+
+# Copy the rest of the application code to the working directory
+COPY . .
+
+EXPOSE 8004
+
+# Command to run the application
+CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8004"]
diff --git a/microservices/reviews_service/requirements.txt b/microservices/reviews_service/requirements.txt
index e69de29..6c5d0fd 100644
--- a/microservices/reviews_service/requirements.txt
+++ b/microservices/reviews_service/requirements.txt
@@ -0,0 +1,34 @@
+annotated-types==0.6.0
+anyio==4.3.0
+certifi==2024.2.2
+click==8.1.7
+dnspython==2.6.1
+email_validator==2.1.1
+exceptiongroup==1.2.0
+fastapi==0.110.0
+greenlet==3.0.3
+h11==0.14.0
+httpcore==1.0.5
+httptools==0.6.1
+httpx==0.27.0
+idna==3.6
+itsdangerous==2.1.2
+Jinja2==3.1.3
+MarkupSafe==2.1.5
+orjson==3.10.0
+pydantic==2.6.4
+pydantic-extra-types==2.6.0
+pydantic-settings==2.2.1
+pydantic_core==2.16.3
+python-dotenv==1.0.1
+python-multipart==0.0.9
+PyYAML==6.0.1
+sniffio==1.3.1
+SQLAlchemy==2.0.29
+starlette==0.36.3
+typing_extensions==4.10.0
+ujson==5.9.0
+uvicorn==0.29.0
+uvloop==0.19.0
+watchfiles==0.21.0
+websockets==12.0
diff --git a/microservices/reviews_service/review.db b/microservices/reviews_service/review.db
deleted file mode 100644
index 2d07e1bc5127de7eeaae96265f68529a2dc32ee0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8192
zcmeI#&q~8E90%}Z42FV#ZXR~|2_80ZI;#(0w`HTaP0cFUlXNy4LAOF%_25l>ET6<j
z@F`47+!PV<D13jUO`H7E{Q9|Nbl%sQqDh?0!i)~tCgYqP6EVh0_A*@&+}z9dIq&lK
z-=f6!CU0vdi?6>h(-07V00bZa0SG_<0uX=z1Rwx`KMOp$ys}lT^5-B6$G1wVd#xT)
z+m+f<xV|9YZS@7&L8`5ijikuF(h+$>U-X2eGwBUn8PJIcb{A=PsY-0pa&W9~)VIMT
z%=CPke{Gp~9nWTJo{=vuKaJY0qtG0@JElh88;Iqa?x_@BZ<v=sHM@PCr05DMhHWvT
z3sX|MnE7F$E%D33mMJ@}easZUSTD}z8?VeX1Oy-e0SG_<0uX=z1Rwwb2tWV=|4v|s
gSJ(>Y``eFYosmu{q-h*Sl%M~dgGSS7I8Ep19YK|ASpWb4

diff --git a/microservices/users_service/DockerFIle b/microservices/users_service/DockerFIle
new file mode 100644
index 0000000..0ec1be9
--- /dev/null
+++ b/microservices/users_service/DockerFIle
@@ -0,0 +1,19 @@
+# Use the official Python image as the base image
+FROM python:3.9-slim
+
+# Set the working directory in the container
+WORKDIR /app
+
+# Copy the dependencies file to the working directory
+COPY requirements.txt .
+
+# Install any dependencies
+RUN pip install --no-cache-dir -r requirements.txt
+
+# Copy the rest of the application code to the working directory
+COPY . .
+
+EXPOSE 8005
+
+# Command to run the application
+CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8005"]
diff --git a/microservices/users_service/main.py b/microservices/users_service/main.py
index 4ab60be..7d9f1f0 100644
--- a/microservices/users_service/main.py
+++ b/microservices/users_service/main.py
@@ -123,58 +123,6 @@ async def create_user(user: User):
     return user
 
 
-# # Routes
-# @app.post("/users/", response_model=User)
-# async def create_user(user: User):
-#     print('hit')
-#     cursor.execute('''
-#         INSERT INTO Users 
-#         (username, password, email, phone_number, credit_card_info, registration_date, last_login) 
-#         VALUES (?, ?, Optional[str]?, ?, ?, ?, ?)
-#     ''', (
-#         user.username, user.password, user.email, user.phone_number,
-#         user.credit_card_info, user.registration_date, user.last_login
-#     ))
-#     conn.commit()
-#     return user
-
-
-# @app.get("/users/", response_model=List[User])
-# async def read_users():
-#     cursor.execute('SELECT * FROM Users')
-#     print("got record")
-#     users = cursor.fetchall()
-#     return users
-
-# @app.get("/users/", response_model=List[User])
-# async def read_users():
-#     cursor.execute('SELECT * FROM Users')
-#     print("got record")
-#     users = cursor.fetchall()
-#     # Convert each row into a dictionary
-#     user_dicts = []
-#     for user in users:
-#         # user_dict = {
-#         #     "user_id": user[0],
-#         #     "username": user[1],
-#         #     # "password": user[2],
-#         #     "email": user[3],
-#         #     "phone_number": user[4],
-#         #     # "credit_card_info": user[5],
-#         #     "registration_date": user[6],
-#         #     # "last_login": user[7]
-#         # }
-#         user_dict = {
-#             "user_id": user[0],
-#             "username": user[1],
-#             "email": user[2],
-#             "phone_number": user[3],
-#             "registration_date": user[4],
-#             # "last_login": user[7]
-#         }
-#         user_dicts.append(user_dict)
-#     return user_dicts
-
 
 @app.get("/users/{user_id}", response_model=User)
 async def read_user(user_id: int):
diff --git a/microservices/users_service/requirements.txt b/microservices/users_service/requirements.txt
index e69de29..6c5d0fd 100644
--- a/microservices/users_service/requirements.txt
+++ b/microservices/users_service/requirements.txt
@@ -0,0 +1,34 @@
+annotated-types==0.6.0
+anyio==4.3.0
+certifi==2024.2.2
+click==8.1.7
+dnspython==2.6.1
+email_validator==2.1.1
+exceptiongroup==1.2.0
+fastapi==0.110.0
+greenlet==3.0.3
+h11==0.14.0
+httpcore==1.0.5
+httptools==0.6.1
+httpx==0.27.0
+idna==3.6
+itsdangerous==2.1.2
+Jinja2==3.1.3
+MarkupSafe==2.1.5
+orjson==3.10.0
+pydantic==2.6.4
+pydantic-extra-types==2.6.0
+pydantic-settings==2.2.1
+pydantic_core==2.16.3
+python-dotenv==1.0.1
+python-multipart==0.0.9
+PyYAML==6.0.1
+sniffio==1.3.1
+SQLAlchemy==2.0.29
+starlette==0.36.3
+typing_extensions==4.10.0
+ujson==5.9.0
+uvicorn==0.29.0
+uvloop==0.19.0
+watchfiles==0.21.0
+websockets==12.0
-- 
GitLab