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