From db38ce2f15c71ecd9bdcd5f8daa5715eb9de89ba Mon Sep 17 00:00:00 2001
From: Navin Chandra <nc01009@surrey.ac.uk>
Date: Wed, 1 May 2024 04:22:25 +0530
Subject: [PATCH] updated code for sommon database

---
 .../__pycache__/main.cpython-39.pyc           | Bin 2596 -> 3248 bytes
 microservices/admins_service/main.py          |  52 +++++--
 microservices/bikes_service/main.py           |  38 +++--
 microservices/my_ride.db                      | Bin 0 -> 53248 bytes
 microservices/rentals_service/main.py         | 131 ++++++++++++++++--
 microservices/reviews_service/main.py         |  18 ++-
 microservices/users_service/main.py           |   9 +-
 7 files changed, 208 insertions(+), 40 deletions(-)
 create mode 100644 microservices/my_ride.db

diff --git a/microservices/admins_service/__pycache__/main.cpython-39.pyc b/microservices/admins_service/__pycache__/main.cpython-39.pyc
index 1904b053b79bfcbac7d8579d77b369c94bc1cd95..687606db4c306a7c3087b29661218edc17c01d2f 100644
GIT binary patch
delta 1682
zcmZux&2QsG6rZsj+ew|&ZPTP_`VDO{^kZoST2QH$kE#;vwpE)wFbD-VGfiDNv3KmS
zbcK{dd*IT;$`TUN9ul;dy>a2M*u!$*WO0H&V?pr7*-hALZM`@1=KW^oH}Acf$N67M
zD|R-ULGZQf@1FcVgwS8Y`2VMYaSJ3M_~FV%n<AQW^+uYcF@nD8W*S3es9_MJktJD-
z7`{Lx$8u-GOr=^KQ@xI8`e&T<Ggm1<q?vhvJ0o3mHhMNn#@HAgDkG9-T4$W)yO<PM
zp;PQ4Qe?%>1U0%C<`g=mF2ZQHjcAtUE)mT!<w7QtyNC``6KpfF%dqhj9bsiUdL^+*
zI`#<DJRQGOE-;w}-wgP&tXx9EPYbkoiNG_PcqRZZX3fzO%$lU-WY#?R7HHqM2B4`&
z5}l?qiTe$f>%2)Py7<MkSvr@DFH+?QS@Y2nUT^0<-9J3K<523d`!;8L7LJtzJ3O`I
zSl{<U$7|YdoT{{Zm&M9$CkSKwcEwU+d3UD*$o->AEFavh5cRX2+dGvVOCed?b-nvl
zk2`gz8IX~lS>uedX6V>%@DkBr;c3~UefyNzl=0v}rg2{74rS3X{%vXlvda*`6cOnz
zVlq=G-a;(J<PwTLm-et4{Um*u<DwFtAU**NpNRgD4&Tc`_XbFygUVnX8z5Ya)<9nQ
zWUy|51WVDTwAfC<lZvw+(}vSLWP$HB1IC8|z(<4{1+{0T_?R&ALX8Vm5UMCtk43*%
z61_=K?}G#?C_x9vh_MIyx-Iqz)-6nO9CnL{yozr|Kgi34Q2!pCNgxVHib_{9Bu<Wg
zmBY4tjgXa&)mn=O9*;Hl9jmp%7nDudWWYOCYF@JmP_NN&!h``Y3&eo4pc@;IFgs+`
zgxg0j5{QE$NllsmN`EVwp<@Xv;{S&)L_aFeHu*I8t=^$5DVEl5@F^I%zHnyCg(`yW
z{q4i(aq6ZzBS5p!pQ*)-YaE7v0_`yf_5c+appYbjr>3Oms>YY257eh$_ErEF(N9=d
zJN253i<CZ*xCPDYX$;o>3NS(P&Pcf=F9zl-V%|H^*V@xNmd^Vd^kV*MMERV+&L<Ou
zx^@Vo<<ov3X>_2E<JIUyfB3~<(ZK?5y>0=@T=p^(_W+Po5K6f6b+E0a=#%t9n-ov%
zAhdmFt<k^EYc-DtJOv=41@~MhWSg<(!}WHZV=f9YR>O1OY1Whb!^KVEX)!F@zE5&C
zrPaY=v0km7I4-MJV-4!mbH8P=>cgYa42kKtlTMX7oYg{)pA&-~_uyi`SQBLjo?f&D
zXHViLE@e`RvEq9{$QKd{br$mFq~|olBqOoxw?e)u#?)R^k^m$j|K@t&^{s|STQ1wi
zfDg7oneYUNN5H^&NtKnPfF-PA<+++Mu`XpKUCyNSjH#NMflbrI83S6~z@t#^{{iLf
BcT@lX

delta 1052
zcmZuv%}*0S6rb6T+39v$mbOsp0SyA$gaE;qs3C}YFh=wsTxeoU-5GGDAM5NkQKR7i
zClgJ`TsgFf7vjZ#z`uZt@!(;v-i&82n&_KdS_ok_`{vF2{LSyp=gP;@Og)#g5v*@N
z=Qp-82>noplgog^GW_9hv^TS`&G8PZQEqiJ%<SQs&FyZshiX}#?K+I~Fh*d>^$<pP
z5wjTGMT~M|N3Z2MeLlo8JkRX+8p!NEW)92k8aue=f^Qgngy$<r`B|O~?IQ3L5|4Y7
zRb=;uA+5lQNm>b<BW&P=pwhm^M%ZZL9p$uJW^NDjB2!sqHkR1On6Zkg75NU&<%|_S
zj2^zGPyH<(%2n+vo|TV{DfvKO#-{wB-^d&w;lk~OE5GZH$^_JNiVO<E#x(f^k-v=F
z__CZcFOfG0ifgiAM%y$dUPpv&5nKEv_c{?5mMW!k1yGHIVm>y!cB=)U?Pk-DL_yip
zj!GL=5soK#J>pO5tm(HVz!EwjkVZ`RpZ3?VC>9ksd&<~f8j^3xmzz~R?Kx;y#X?=8
zs>RyuyeNWtx|_Y&08#)>uykEEt!rdN1&zv2*3`l&U|GP$Qdr?th&sZhh#{u-hgf1<
zYV>eDtpEWvy1^swS-ZuB4#xvcT!8It7{|5mKunmtQZ1h_?qG3I<xR-x%;AzKCAt!)
z@Hw4;4TxJ&Rr<sg`ovAjHGA*=0H7$VGGj`dKdT_)4c?!`x+<v1L<uZ04H~?w`Rv4Y
zOrlqT-`W%=*lJezqTxsUO03s|Ahy)Jxfi9ajyoq!Rk_#*+F_K8G}bqHB*v9d_ghhN
z>sSvuk(g9AlEO(kpSZhw3!LfGp^MEn>ooWh22-dIy4Zn_YD9-I>2`)1E_JY5aIu|(
J9rS`j@qhI@)ztt1

diff --git a/microservices/admins_service/main.py b/microservices/admins_service/main.py
index bfa1cb5..df9bf56 100644
--- a/microservices/admins_service/main.py
+++ b/microservices/admins_service/main.py
@@ -1,12 +1,28 @@
 from fastapi import FastAPI, HTTPException
 from pydantic import BaseModel
-from typing import List
+from fastapi.middleware.cors import CORSMiddleware
 import sqlite3
+from pathlib import Path
+from typing import Optional, Tuple, List
 
 app = FastAPI()
 
+# Allow requests from all origins
+app.add_middleware(
+    CORSMiddleware,
+    allow_origins=["*"],
+    allow_credentials=True,
+    allow_methods=["GET", "POST", "PUT", "DELETE"],
+    allow_headers=["*"],
+)
+
+# SQLite connection
 # SQLite connection
-conn = sqlite3.connect('bikes.db')
+parent_directory = Path(__file__).resolve().parent.parent
+db_file_path = parent_directory / "my_ride.db"
+# print(db_file_path)
+conn = sqlite3.connect(db_file_path)
+
 cursor = conn.cursor()
 
 # Create the Admins table if it doesn't exist
@@ -23,15 +39,26 @@ conn.commit()
 
 
 # Admin model
+# class Admin(BaseModel):
+#     username: str
+#     password: str
+#     email: str
+#     phone_number: str
+
 class Admin(BaseModel):
     username: str
-    password: str
+    password: Optional[str]
+    email: str
+    phone_number: str
+
+class AdminResponse(BaseModel):
+    username: str
     email: str
     phone_number: str
 
 
 # Routes
-@app.post("/admins/", response_model=Admin)
+@app.post("/admins/", response_model=AdminResponse)
 async def create_admin(admin: Admin):
     cursor.execute('''
         INSERT INTO Admins 
@@ -41,21 +68,19 @@ async def create_admin(admin: Admin):
         admin.username, admin.password, admin.email, admin.phone_number
     ))
     conn.commit()
-    return admin
-
+    return AdminResponse(
+        username=admin.username,
+        email=admin.email,
+        phone_number=admin.phone_number
+    )
 
-# @app.get("/admins/", response_model=List[Admin])
-# async def read_admins():
-#     cursor.execute('SELECT * FROM Admins')
-#     admins = cursor.fetchall()
-#     return admins
 
-@app.get("/admins/", response_model=List[Admin])
+@app.get("/admins/", response_model=List[AdminResponse])
 async def read_admins():
     cursor.execute('SELECT username, email, phone_number FROM Admins')
     admins_data: List[Tuple[str, str, str]] = cursor.fetchall()
     admins = [
-        Admin(
+        AdminResponse(
             username=admin[0],
             email=admin[1],
             phone_number=admin[2]
@@ -63,7 +88,6 @@ async def read_admins():
     ]
     return admins
 
-
 @app.get("/admins/{admin_id}", response_model=Admin)
 async def read_admin(admin_id: int):
     cursor.execute('SELECT * FROM Admins WHERE admin_id = ?', (admin_id,))
diff --git a/microservices/bikes_service/main.py b/microservices/bikes_service/main.py
index 22834e6..e2ef2a8 100644
--- a/microservices/bikes_service/main.py
+++ b/microservices/bikes_service/main.py
@@ -1,12 +1,33 @@
 from fastapi import FastAPI, HTTPException
 from pydantic import BaseModel
+from fastapi.middleware.cors import CORSMiddleware
 from typing import List
 import sqlite3
+from pathlib import Path
+from typing import Optional
 
 app = FastAPI()
 
+# Allow requests from all origins
+app.add_middleware(
+    CORSMiddleware,
+    allow_origins=["*"],
+    allow_credentials=True,
+    allow_methods=["GET", "POST", "PUT", "DELETE"],
+    allow_headers=["*"],
+)
+
 # SQLite connection
-conn = sqlite3.connect('bikes.db')
+# conn = sqlite3.connect('bikes.db')
+# Get the path to the parent directory of your FastAPI application
+parent_directory = Path(__file__).resolve().parent.parent
+# print(parent_directory)
+
+# Specify the path to the SQLite database file in the data directory
+db_file_path = parent_directory / "my_ride.db"
+# print(db_file_path)
+conn = sqlite3.connect(db_file_path)
+
 cursor = conn.cursor()
 
 # Create the Bikes table if it doesn't exist
@@ -28,14 +49,12 @@ conn.commit()
 # Bike model
 class Bike(BaseModel):
     model: str
-    status: str
+    status: Optional[str]
     location: str
     condition: str
     price_per_hour: float
     last_maintenance_date: str
     maintenance_history: str
-    
-
 
 # Routes
 @app.post("/bikes/", response_model=Bike)
@@ -52,6 +71,7 @@ async def create_bike(bike: Bike):
     return bike
 
 
+
 @app.get("/bikes/", response_model=List[Bike])
 async def read_bikes():
     cursor.execute('SELECT * FROM Bikes')
@@ -59,15 +79,17 @@ async def read_bikes():
     bike_objects = []
     for bike in bikes:
         bike_obj = Bike(
-            brand=bike[0],
             model=bike[1],
-            year=bike[2],
-            price=bike[3]
+            status=bike[2],
+            location=bike[3],
+            condition=bike[4],
+            price_per_hour=bike[5],
+            last_maintenance_date=bike[6],
+            maintenance_history=bike[7]
         )
         bike_objects.append(bike_obj)
     return bike_objects
 
-
 @app.get("/bikes/{bike_id}", response_model=Bike)
 async def read_bike(bike_id: int):
     cursor.execute('SELECT * FROM Bikes WHERE bike_id = ?', (bike_id,))
diff --git a/microservices/my_ride.db b/microservices/my_ride.db
new file mode 100644
index 0000000000000000000000000000000000000000..bb4f85488514110d898318b5d2972870eb635a51
GIT binary patch
literal 53248
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
U0ulj<fJESfMu4&a@b&-y2K<Hj*Z=?k

literal 0
HcmV?d00001

diff --git a/microservices/rentals_service/main.py b/microservices/rentals_service/main.py
index e204743..ebeb17d 100644
--- a/microservices/rentals_service/main.py
+++ b/microservices/rentals_service/main.py
@@ -1,12 +1,30 @@
 from fastapi import FastAPI, HTTPException
 from pydantic import BaseModel
+from fastapi.middleware.cors import CORSMiddleware
 from typing import List
 import sqlite3
+from pathlib import Path
+from typing import Optional
+from fastapi import HTTPException
 
 app = FastAPI()
 
+# Allow requests from all origins
+app.add_middleware(
+    CORSMiddleware,
+    allow_origins=["*"],
+    allow_credentials=True,
+    allow_methods=["GET", "POST", "PUT", "DELETE"],
+    allow_headers=["*"],
+)
+
 # SQLite connection
-conn = sqlite3.connect('rentals.db')
+parent_directory = Path(__file__).resolve().parent.parent
+db_file_path = parent_directory / "my_ride.db"
+# print(db_file_path)
+conn = sqlite3.connect(db_file_path)
+
+
 cursor = conn.cursor()
 
 # Create the Rentals table if it doesn't exist
@@ -36,7 +54,6 @@ conn.commit()
 
 # Rental model
 class Rental(BaseModel):
-    id: int
     user_id: int
     bike_id: int
     year: int
@@ -52,20 +69,88 @@ class Rental(BaseModel):
     count: int
 
 
-# Routes
+# # Routes
+# @app.post("/rentals/", response_model=Rental)
+# async def create_rental(rental: Rental):
+#     cursor.execute('''
+#         INSERT INTO Rentals 
+#         (id, user_id, bike_id, year, hour, season, holiday, workingday, weather, temp, atemp, humidity, windspeed, count) 
+#         VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#     ''', (
+#         rental.id, rental.user_id, rental.bike_id, rental.year, rental.hour,
+#         rental.season, rental.holiday, rental.workingday, rental.weather,
+#         rental.temp, rental.atemp, rental.humidity, rental.windspeed, rental.count
+#     ))
+#     conn.commit()
+#     return rental
+
+
+# @app.post("/rentals/", response_model=Rental)
+# async def create_rental(rental: Rental):
+#     try:
+#         cursor.execute('''
+#             INSERT INTO Rentals 
+#             (id, user_id, bike_id, year, hour, season, holiday, workingday, weather, temp, atemp, humidity, windspeed, count) 
+#             VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#         ''', (
+#             rental.id, rental.user_id, rental.bike_id, rental.year, rental.hour,
+#             rental.season, rental.holiday, rental.workingday, rental.weather,
+#             rental.temp, rental.atemp, rental.humidity, rental.windspeed, rental.count
+#         ))
+#         conn.commit()
+#         return rental
+#     except Exception as e:
+#         # Log the exception
+#         print(f"Error creating rental: {e}")
+#         # Raise an HTTPException with status code 422 and error message
+#         raise HTTPException(status_code=422, detail=str(e))
+
+
+# @app.post("/rentals/", response_model=Rental)
+# async def create_rental(rental: Rental):
+#     try:
+#         cursor.execute('''
+#             INSERT INTO Rentals 
+#             (id, user_id, bike_id, year, hour, season, holiday, workingday, weather, temp, atemp, humidity, windspeed, count) 
+#             VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+#         ''', (
+#             rental.id, rental.user_id, rental.bike_id, rental.year, rental.hour,
+#             rental.season, rental.holiday, rental.workingday, rental.weather,
+#             rental.temp, rental.atemp, rental.humidity, rental.windspeed, rental.count
+#         ))
+#         conn.commit()
+#         return rental
+#     except Exception as e:
+#         # Log the exception
+#         print(f"Error creating rental: {e}")
+#         # Raise an HTTPException with status code 422 and error message
+#         raise HTTPException(status_code=422, detail=str(e))
+
+
 @app.post("/rentals/", response_model=Rental)
 async def create_rental(rental: Rental):
-    cursor.execute('''
-        INSERT INTO Rentals 
-        (id, user_id, bike_id, year, hour, season, holiday, workingday, weather, temp, atemp, humidity, windspeed, count) 
-        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
-    ''', (
-        rental.id, rental.user_id, rental.bike_id, rental.year, rental.hour,
-        rental.season, rental.holiday, rental.workingday, rental.weather,
-        rental.temp, rental.atemp, rental.humidity, rental.windspeed, rental.count
-    ))
-    conn.commit()
-    return rental
+    try:
+        cursor.execute('''
+            INSERT INTO Rentals 
+            (user_id, bike_id, year, hour, season, holiday, workingday, weather, temp, atemp, humidity, windspeed, count) 
+            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+        ''', (
+            rental.user_id, rental.bike_id, rental.year, rental.hour,
+            rental.season, rental.holiday, rental.workingday, rental.weather,
+            rental.temp, rental.atemp, rental.humidity, rental.windspeed, rental.count
+        ))
+        conn.commit()
+        # Get the auto-generated id of the new rental
+        rental_id = cursor.lastrowid
+        # Return the created rental with the generated id
+        rental.id = rental_id
+        return rental
+    except Exception as e:
+        # Log the exception
+        print(f"Error creating rental: {e}")
+        # Raise an HTTPException with status code 422 and error message
+        raise HTTPException(status_code=422, detail=str(e))
+
 
 
 @app.get("/rentals/", response_model=List[Rental])
@@ -73,9 +158,25 @@ async def read_rentals():
     cursor.execute('SELECT * FROM Rentals')
     rentals = cursor.fetchall()
     rental_objects = []
+    # for rental in rentals:
+    #     rental_objects.append(Rental(
+    #         id=rental[0],
+    #         user_id=rental[1],
+    #         bike_id=rental[2],
+    #         year=rental[3],
+    #         hour=rental[4],
+    #         season=rental[5],
+    #         holiday=bool(rental[6]),
+    #         workingday=bool(rental[7]),
+    #         weather=rental[8],
+    #         temp=float(rental[9]),
+    #         atemp=float(rental[10]),
+    #         humidity=float(rental[11]),
+    #         windspeed=float(rental[12]),
+    #         count=int(rental[13])  # Convert to integer
+    #     ))
     for rental in rentals:
         rental_objects.append(Rental(
-            id=rental[0],
             user_id=rental[1],
             bike_id=rental[2],
             year=rental[3],
diff --git a/microservices/reviews_service/main.py b/microservices/reviews_service/main.py
index fef99cc..8a5d39e 100644
--- a/microservices/reviews_service/main.py
+++ b/microservices/reviews_service/main.py
@@ -1,12 +1,28 @@
 from fastapi import FastAPI, HTTPException
 from pydantic import BaseModel
+from fastapi.middleware.cors import CORSMiddleware
 from typing import List
 import sqlite3
+from pathlib import Path
+from typing import Optional
 
 app = FastAPI()
+# Allow requests from all origins
+app.add_middleware(
+    CORSMiddleware,
+    allow_origins=["*"],
+    allow_credentials=True,
+    allow_methods=["GET", "POST", "PUT", "DELETE"],
+    allow_headers=["*"],
+)
+
 
 # SQLite connection
-conn = sqlite3.connect('review.db')
+parent_directory = Path(__file__).resolve().parent.parent
+db_file_path = parent_directory / "my_ride.db"
+# print(db_file_path)
+conn = sqlite3.connect(db_file_path)
+
 cursor = conn.cursor()
 
 # Create the Reviews table if it doesn't exist
diff --git a/microservices/users_service/main.py b/microservices/users_service/main.py
index 4634780..4ab60be 100644
--- a/microservices/users_service/main.py
+++ b/microservices/users_service/main.py
@@ -3,6 +3,7 @@ from pydantic import BaseModel
 from fastapi.middleware.cors import CORSMiddleware
 from typing import List
 import sqlite3
+from pathlib import Path
 from typing import Optional
 
 app = FastAPI()
@@ -17,7 +18,11 @@ app.add_middleware(
 )
 
 # SQLite connection
-conn = sqlite3.connect('bikes.db')
+parent_directory = Path(__file__).resolve().parent.parent
+db_file_path = parent_directory / "my_ride.db"
+# print(db_file_path)
+conn = sqlite3.connect(db_file_path)
+
 cursor = conn.cursor()
 
 # Create the Users table if it doesn't exist
@@ -38,7 +43,7 @@ conn.commit()
 
 class User(BaseModel):
     username: str
-    password: str
+    password: str 
     email: str
     phone_number: str
     credit_card_info: Optional[str] = None
-- 
GitLab