From 7325b6f82dd445e9dfb6265241626b4257fda5a4 Mon Sep 17 00:00:00 2001 From: Navin Chandra <nc01009@surrey.ac.uk> Date: Tue, 30 Apr 2024 13:27:12 +0530 Subject: [PATCH] code changes modifed into microservices --- crud.py | 36 ------- database.py | 13 --- main.py | 53 ---------- .../__pycache__/main.cpython-39.pyc | Bin 0 -> 2691 bytes microservices/bikes_service/bikes.db | Bin 0 -> 8192 bytes microservices/bikes_service/bikes.py | 90 ---------------- microservices/bikes_service/main.py | 99 ++++++++++++++++++ .../__pycache__/main.cpython-39.pyc | Bin 0 -> 2781 bytes microservices/reviews_service/main.py | 95 +++++++++++++++++ microservices/reviews_service/review.db | Bin 0 -> 8192 bytes microservices/reviews_service/reviews.py | 85 --------------- .../__pycache__/main.cpython-39.pyc | Bin 0 -> 3974 bytes microservices/users_service/bikes.db | Bin 8192 -> 8192 bytes microservices/users_service/main.py | 67 ++++++++++-- microservices/users_service/users.py | 0 models.py | 26 ----- schemas.py | 37 ------- sql_app.db | 0 18 files changed, 250 insertions(+), 351 deletions(-) delete mode 100644 crud.py delete mode 100644 database.py delete mode 100644 main.py create mode 100644 microservices/bikes_service/__pycache__/main.cpython-39.pyc delete mode 100644 microservices/bikes_service/bikes.py create mode 100644 microservices/reviews_service/__pycache__/main.cpython-39.pyc delete mode 100644 microservices/reviews_service/reviews.py create mode 100644 microservices/users_service/__pycache__/main.cpython-39.pyc delete mode 100644 microservices/users_service/users.py delete mode 100644 models.py delete mode 100644 schemas.py delete mode 100644 sql_app.db diff --git a/crud.py b/crud.py deleted file mode 100644 index 7f64109..0000000 --- a/crud.py +++ /dev/null @@ -1,36 +0,0 @@ -from sqlalchemy.orm import Session - -from . import models, schemas - - -def get_user(db: Session, user_id: int): - return db.query(models.User).filter(models.User.id == user_id).first() - - -def get_user_by_email(db: Session, email: str): - return db.query(models.User).filter(models.User.email == email).first() - - -def get_users(db: Session, skip: int = 0, limit: int = 100): - return db.query(models.User).offset(skip).limit(limit).all() - - -def create_user(db: Session, user: schemas.UserCreate): - fake_hashed_password = user.password + "notreallyhashed" - db_user = models.User(email=user.email, hashed_password=fake_hashed_password) - db.add(db_user) - db.commit() - db.refresh(db_user) - return db_user - - -def get_items(db: Session, skip: int = 0, limit: int = 100): - return db.query(models.Item).offset(skip).limit(limit).all() - - -def create_user_item(db: Session, item: schemas.ItemCreate, user_id: int): - db_item = models.Item(**item.dict(), owner_id=user_id) - db.add(db_item) - db.commit() - db.refresh(db_item) - return db_item \ No newline at end of file diff --git a/database.py b/database.py deleted file mode 100644 index 62838e6..0000000 --- a/database.py +++ /dev/null @@ -1,13 +0,0 @@ -from sqlalchemy import create_engine -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker - -SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db" -# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db" - -engine = create_engine( - SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False} -) -SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) - -Base = declarative_base() \ No newline at end of file diff --git a/main.py b/main.py deleted file mode 100644 index 8a2b9eb..0000000 --- a/main.py +++ /dev/null @@ -1,53 +0,0 @@ -from fastapi import Depends, FastAPI, HTTPException -from sqlalchemy.orm import Session - -from curd import crud, models, schemas -from database import SessionLocal, engine - -models.Base.metadata.create_all(bind=engine) - -app = FastAPI() - - -# Dependency -def get_db(): - db = SessionLocal() - try: - yield db - finally: - db.close() - - -@app.post("/users/", response_model=schemas.User) -def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)): - db_user = crud.get_user_by_email(db, email=user.email) - if db_user: - raise HTTPException(status_code=400, detail="Email already registered") - return crud.create_user(db=db, user=user) - - -@app.get("/users/", response_model=list[schemas.User]) -def read_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): - users = crud.get_users(db, skip=skip, limit=limit) - return users - - -@app.get("/users/{user_id}", response_model=schemas.User) -def read_user(user_id: int, db: Session = Depends(get_db)): - db_user = crud.get_user(db, user_id=user_id) - if db_user is None: - raise HTTPException(status_code=404, detail="User not found") - return db_user - - -@app.post("/users/{user_id}/items/", response_model=schemas.Item) -def create_item_for_user( - user_id: int, item: schemas.ItemCreate, db: Session = Depends(get_db) -): - return crud.create_user_item(db=db, item=item, user_id=user_id) - - -@app.get("/items/", response_model=list[schemas.Item]) -def read_items(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): - items = crud.get_items(db, skip=skip, limit=limit) - return items \ No newline at end of file diff --git a/microservices/bikes_service/__pycache__/main.cpython-39.pyc b/microservices/bikes_service/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15982096213a2d18b2dddc1f6f3da28cf06c055b GIT binary patch literal 2691 zcmZuy&2!U66xT|!B!9#hLI~;SPH8(a<H7V}+UX1h5+Wc&Fqy<q&_yG(>qJzR%t{85 zhD%|3<J2BGB-2w){UbX4Cv@$p|3D9Ihv|DOM@fuj@6+zSebW2*{hqw3sfq&E&%a*m z{Zv+zKXGyN(qVBGM)EfZrZ5sJed3V5>Zk<QYN+*fN0)OgEcFe?kaImW9g~w6ieqte zx6Dd=#HsMgZgo#_s=T^eW5ymK3hYenDMY!UFq2s?6=re$h33?`_2>jE^E#`%QbAT< z6INqWFZCD1X@Kq|=nP(;Q&7+9?8Hk2G^eDdF|wLwC&B6zo0e9mK{vw+9h^D+T4gir zjMSdt*6u88>=B+@&9bv{|18tjmFC=E5WCV;GxNHaqzkLd+0@N$ch!F8^FbQKQIlll zMK9sEW5z>R=qo{zcDAjD!S_75z#e+DL{Tafu4`-dLf59<g~b({E?=jeJ6&quUtaI7 z(?vW?=jAaxipFlh=yIoP->}!{>e}+{g|!Ftmi?er9O~m6Y1h8rJ={xDFC8Xhn_=vG z=<3+EA4e>hus;xi&)oqR?q)m`bjiL3FJGDe>|%?4-aLF&2<dS9UJ#``@*=QcUdrhb zgm`%7sCpCf5{oVAgp8qC@iDbWFAWw~VI<c<aK#}^an!pC*SOBerTngr?%L?C!@UIh z(r9gr?&c)`6cn(W>6qTEB=eOSd5SXYAS+q9NJLgY9(y)3G01FsLR_7uky)-Ad42A> zS;ckXb;A(nHP?MS^um!wOHz@Ya9uBoVkj1rC4n=gUKo4nz9LRT;8Of^tGyZbc{}o+ z1W|h__J@5QrAhlKf0%NAv%MkW;ouwBf7<Q`zK9bpo<P}>w#1z~TDH;A3xh3Tz+>OX z#MVJnh;`&Ab=zic*lrT1E_gBkw>XBt!+pRsKGX*s7Z=X4cl-_``4U8`>=H(Hlt(HI z4TcV*1jB$~!mxVg9(0Ygyjwxe?<i0jwX^+O0q5n;y1mv#$ln?9p-|0BM_M#5U5g%+ zu0@N|wdnEE!J$d`Y|#m&YtrIP_ZC*}+Us=wN{f#FoAS_pH8cF7NMezh{2BL$DHkTh zFDw+$L=}N~5mgj56jLBF9UP6oGVb?-RGh*6qS9gpPgH%ufj};%x(OSyQi^Jn8l?6{ z{ZF?nBCvwTID=(C&d4(0Q}Z%lbA_3@r#vqbJ-u$P*w?!BJiWel=XRdqrY7dVNW25W zv3fl9H@y&=m{XD{8h5b*9x~}*@-<i_2r5NIG>H#jw%r(E=m)fh_VpZ~V~*y>(4)d> z{I*E9FTmsgJv|~ZlDkfJfc`^8oKH2TGL7l4)E{9Fa8v4Re=;E)`rS=?%`TefxAaQz z3uI`!z6kzMpd0PQ!-zpIujWW{eE_&)FrIor*wo)jMjUa0>D^Zag`1c~F;=&7k(A4z zP2>kvtxJB@h&YE9AA#^O=7S682oM?nS1=jHPk=oH*h7Fl1lU7>Jp|Z89$7m|&pO5* z%meV}j{>@PSF!hwQ)k`oQpp|)={R6eK0jblzABiMFN?<>r`5=E618&G1bU&Oc-&hh zk{WRqk|6Ump5E$kfZr8~x*KrlfEGrB)ZeK8>SX}m$FP44Ur37rUkJ@He5tz{_8>%6 zfO*tA+vk>m9+196a=eYE%<S_d@izGOoJ15fN1k#<lc5itH|Y(-aO)_F#Jlin@g9l~ zQH&v{n%m3J?ty;9C&Z5U6xPi-$Lv9-y+I%lF%pW7HP~WaltRzP2s0zy8U)dXD8a%p zlgD9@@-H&Y8w@fNdk**0+>L_hxkJd^OdrJXHNvivX&XG1EY39eqD$On+F+Q<<Yqt- z3{|>yBn%ml>|WNT{Bw61Q=g#s(6-=bsfGp(LaWp)y-}-?##Dn;47gi0a;k2T{{d2& Bi=zMl literal 0 HcmV?d00001 diff --git a/microservices/bikes_service/bikes.db b/microservices/bikes_service/bikes.db index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..352ef9786f33f0f7db1862f23eac8f9f8674509c 100644 GIT binary patch literal 8192 zcmeI#&r8EF6bJBR2!fyp9txh`af2cL_y_E^Aj2wJdvK?cwHXVx%}BF@SMfjf=3il2 zoRuMX@*>|y)AC+lN%OhAhx<r7MGIp~>F9zTGS1m05o3(|)$?l;O}?{9{Ikh_3(ig! z@B6-sAG|StAs_$&2tWV=5P$##AOHafKmY=NCGc|0cY`3{uSZVK3pLVDs%~$+aV)|_ zP!f(JL2Zfpd-NG|-<Rr~rniZ>5;5Jy)0;4!(Y2TjznV&utAY~om~^$;Nw==IiiOFf z)27-gXQs;a5A~JRnMzm6rc1N7G!bLJdDK5U9n$%r+p3VYOG~LMrz%<bFLLRJ`H4SN u*Yo}LQrFJd=k_PsGYp#9+z<T-2tWV=5P$##AOHafKmY;|fB*#kvA_pMFII2> literal 0 HcmV?d00001 diff --git a/microservices/bikes_service/bikes.py b/microservices/bikes_service/bikes.py deleted file mode 100644 index 5b09376..0000000 --- a/microservices/bikes_service/bikes.py +++ /dev/null @@ -1,90 +0,0 @@ -from fastapi import FastAPI, HTTPException -from pydantic import BaseModel -from typing import List -import sqlite3 - -app = FastAPI() - -# SQLite connection -conn = sqlite3.connect('bikes.db') -cursor = conn.cursor() - -# Create the Bikes table if it doesn't exist -cursor.execute(''' - CREATE TABLE IF NOT EXISTS Bikes ( - bike_id INTEGER PRIMARY KEY, - model TEXT, - status TEXT, - location TEXT, - condition TEXT, - price_per_hour DECIMAL(10, 2), - last_maintenance_date DATE, - maintenance_history TEXT - ) -''') -conn.commit() - - -# Bike model -class Bike(BaseModel): - model: str - status: str - location: str - condition: str - price_per_hour: float - last_maintenance_date: str - maintenance_history: str - - - -# Routes -@app.post("/bikes/", response_model=Bike) -async def create_bike(bike: Bike): - cursor.execute(''' - INSERT INTO Bikes - (model, status, location, condition, price_per_hour, last_maintenance_date, maintenance_history) - VALUES (?, ?, ?, ?, ?, ?, ?) - ''', ( - bike.model, bike.status, bike.location, bike.condition, - bike.price_per_hour, bike.last_maintenance_date, bike.maintenance_history - )) - conn.commit() - return bike - - -@app.get("/bikes/", response_model=List[Bike]) -async def read_bikes(): - cursor.execute('SELECT * FROM Bikes') - bikes = cursor.fetchall() - return bikes - - -@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,)) - bike = cursor.fetchone() - if bike is None: - raise HTTPException(status_code=404, detail="Bike not found") - return bike - - -@app.put("/bikes/{bike_id}", response_model=Bike) -async def update_bike(bike_id: int, bike: Bike): - cursor.execute(''' - UPDATE Bikes - SET model = ?, status = ?, location = ?, condition = ?, - price_per_hour = ?, last_maintenance_date = ?, maintenance_history = ? - WHERE bike_id = ? - ''', ( - bike.model, bike.status, bike.location, bike.condition, - bike.price_per_hour, bike.last_maintenance_date, bike.maintenance_history, bike_id - )) - conn.commit() - return bike - - -@app.delete("/bikes/{bike_id}") -async def delete_bike(bike_id: int): - cursor.execute('DELETE FROM Bikes WHERE bike_id = ?', (bike_id,)) - conn.commit() - return {"message": "Bike deleted successfully"} diff --git a/microservices/bikes_service/main.py b/microservices/bikes_service/main.py index e69de29..22834e6 100644 --- a/microservices/bikes_service/main.py +++ b/microservices/bikes_service/main.py @@ -0,0 +1,99 @@ +from fastapi import FastAPI, HTTPException +from pydantic import BaseModel +from typing import List +import sqlite3 + +app = FastAPI() + +# SQLite connection +conn = sqlite3.connect('bikes.db') +cursor = conn.cursor() + +# Create the Bikes table if it doesn't exist +cursor.execute(''' + CREATE TABLE IF NOT EXISTS Bikes ( + bike_id INTEGER PRIMARY KEY, + model TEXT, + status TEXT, + location TEXT, + condition TEXT, + price_per_hour DECIMAL(10, 2), + last_maintenance_date DATE, + maintenance_history TEXT + ) +''') +conn.commit() + + +# Bike model +class Bike(BaseModel): + model: str + status: str + location: str + condition: str + price_per_hour: float + last_maintenance_date: str + maintenance_history: str + + + +# Routes +@app.post("/bikes/", response_model=Bike) +async def create_bike(bike: Bike): + cursor.execute(''' + INSERT INTO Bikes + (model, status, location, condition, price_per_hour, last_maintenance_date, maintenance_history) + VALUES (?, ?, ?, ?, ?, ?, ?) + ''', ( + bike.model, bike.status, bike.location, bike.condition, + bike.price_per_hour, bike.last_maintenance_date, bike.maintenance_history + )) + conn.commit() + return bike + + +@app.get("/bikes/", response_model=List[Bike]) +async def read_bikes(): + cursor.execute('SELECT * FROM Bikes') + bikes = cursor.fetchall() + bike_objects = [] + for bike in bikes: + bike_obj = Bike( + brand=bike[0], + model=bike[1], + year=bike[2], + price=bike[3] + ) + 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,)) + bike = cursor.fetchone() + if bike is None: + raise HTTPException(status_code=404, detail="Bike not found") + return bike + + +@app.put("/bikes/{bike_id}", response_model=Bike) +async def update_bike(bike_id: int, bike: Bike): + cursor.execute(''' + UPDATE Bikes + SET model = ?, status = ?, location = ?, condition = ?, + price_per_hour = ?, last_maintenance_date = ?, maintenance_history = ? + WHERE bike_id = ? + ''', ( + bike.model, bike.status, bike.location, bike.condition, + bike.price_per_hour, bike.last_maintenance_date, bike.maintenance_history, bike_id + )) + conn.commit() + return bike + + +@app.delete("/bikes/{bike_id}") +async def delete_bike(bike_id: int): + cursor.execute('DELETE FROM Bikes WHERE bike_id = ?', (bike_id,)) + conn.commit() + return {"message": "Bike deleted successfully"} diff --git a/microservices/reviews_service/__pycache__/main.cpython-39.pyc b/microservices/reviews_service/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8404ca9f3a0c6afcbf3856038ea1b197ba97a44b GIT binary patch literal 2781 zcma)8PjlNu6yKF(Np|eSP18SV2S&g^<4&lVDFXvjXp=^1JtR)XaiA5$XcX-_Rj?&@ zS8f~ExzHZC^v1D=WH{w>@GW%Z)GxpR7~t(nR{pe|LGnKBzV}wz_uJolYp+r%A-F#N z^^?x$(ED8sj$axKZb9RJfFOwAF6v<i_Y_CLVytx4p5|z>uXYPP-O*)V>l%(h@iXL@ z)YvbQ!U1+lw6s5QfSd_Bv0o<o0mcY4l>>y)9YhRbK1al)+B4Oeq~^{PDbh(&dZB=v zc!^1wRGw?kuu}!w8L;Veaux|YnIu!s5m=_BrJBt;OU}ToX>wN1ngQE6lH0&%=A}Z; zk@M1eo|^j?Nc8~Ibk+rOQR*)eZ3ES2UqS4srX<F)$K!?dMpC)kZm-)<eA<tLD6HY6 zxae`Z8WGxsfwmIxxH&8``Y51}uaPb9ON>y-g6nq6UTE7^dtq_Kwi?S;bFFRJ_Zl1R z4XY)+xiu#pg>yRJ4T#lfw(UE1%UW+WRu@|Lt#9o6^SRrAQ<ga$DYt?j>1#^n#X-0& z-ge~ZN4*{mW2<f7JEqM(O}v;|OR(a0W7R&Iv%J=_8+V#w8P;6(`I^<Tm+h9_ylrn- zo3JFFTi!A;TjGg{i?D1yH@3(SYb9U6fBaHma0?p$3<O0ECdg4X5ml*1@Qw7TWKR{I z1<-5Rvv30u9X8cS^c3;L$RbFL?7NAc0+kpUILX8@JeoB<F<m$Gden83lI!*&GU$qa z*>xWdyl!SugD_5}T-OW3C<fr8kb{rPV|IwxG%Q?-KUeDyq8_b>-lHI_FGc=9>;|tt zrdu)fAJn&5H0Xcf`j6|qz-JNQ`Y7-zucr&*Zl<XBydb>R-(@<y_#FX_Nb3?dvs>zi z#qqRy4Lg&J@;)qziU4T$5JT9Kf<BNnzeL}J_8T-l4<bhUnBWoGQJ|^NG-w5AdZ%yz zH6b?kO_9+f1RyKT;nSR_jpl~kY76$Q<z&x|W3tR!*(S_e=_bru*(QKOF3%ODtXcWY zZx>cJfpT*<=dGh(O_~pjiS7>=k62>RC)6Lrlo=2M6A`hZ5CSGP0V2`-C=9_L@*#-X zjL_%1#Lfzjiq9x~+fCQ;5vX_>1XA?E%)iRtnqgvg8OA60Dhg;0U>gQ0fTH+8PdPw) zXdCSTpiAh7Pxq8q9VtYaMIcovH7N^H>QL~E7ll1_g!i?PD&Fz%(g*|4W^=f>VXxS? z+g8Tr{|ThE+*(^5ZwC{*{YnZ&^hBP$5&_f-Z^aEv7r=vE1mTz+8v75tZddXx(Y=13 zhNPxBM#fjcI#CqeXlsZ1F=yw*w9=9CH0EW1oMede>)^~Ufk29&wgyeX`uP4!H_Dj3 z2iD<CPV}eQs{^tJ49`k36vh)I7r}}!CCRTrXH4=AmXuES36G%83=q2-s|0q3XfKqX zKnLg-n!{R#{?!wJTHoD;k~k(V6!NdEo53#t@UYsFI9N~{tWGolkd$PCL!B6K*N1#` zbV6e<=+?B?;Eh7c#LgTl>;rg62v5TX1uKVb37lj(K+2>n2Y`|wFZ&RLFJd2GqA#-I zG!7V&9YeBXNOla#j(7AC>gXrZUEl!e{&Sv}o9p7>7*p#gUpMTWqXLecr|BR&qNHJb zG|54>kMcwUMgEyLAS`X{JOm;`JdI6d&=+sXNVN)Xd=i96<0{twfkZYTk*|Q}1W80% z<Rp0)2B%1(?5m>g32Foa46Ql5vIHp!7#z>BH&G%ndX#f-n+`8$w19$4V@fPO@S)oC z&Y;`fJx&ES3kzT(71;YioUT;q{4B)p!Gnu~AteB-L9aIJ7#;XG<Mjh3wp}vHG5fp3 z3u8EGM5Kux@Alyj11rG5G5Eu75Yy|43Rx|V#xR5oP8X6_fOJXXTZz_>;H(q%Fj2Q@ zEEAJW!BCPfQTu~ff}8-;MX+*N#{!Wd$+~OaNRQaB#TIZu-6}4_Z7RA7bwDkZO|4oi R<7&BzOI3K9WjtLm@qgM3mJI*^ literal 0 HcmV?d00001 diff --git a/microservices/reviews_service/main.py b/microservices/reviews_service/main.py index e69de29..fef99cc 100644 --- a/microservices/reviews_service/main.py +++ b/microservices/reviews_service/main.py @@ -0,0 +1,95 @@ +from fastapi import FastAPI, HTTPException +from pydantic import BaseModel +from typing import List +import sqlite3 + +app = FastAPI() + +# SQLite connection +conn = sqlite3.connect('review.db') +cursor = conn.cursor() + +# Create the Reviews table if it doesn't exist +cursor.execute(''' + CREATE TABLE IF NOT EXISTS Reviews ( + review_id INTEGER PRIMARY KEY, + user_id INT, + bike_id INT, + rating INT, + comment TEXT, + review_date DATETIME, + FOREIGN KEY (user_id) REFERENCES Users(user_id), + FOREIGN KEY (bike_id) REFERENCES Bikes(bike_id) + ) +''') +conn.commit() + + +# Review model +class Review(BaseModel): + user_id: int + bike_id: int + rating: int + comment: str + review_date: str + + +# Routes +@app.post("/reviews/", response_model=Review) +async def create_review(review: Review): + cursor.execute(''' + INSERT INTO Reviews + (user_id, bike_id, rating, comment, review_date) + VALUES (?, ?, ?, ?, ?) + ''', ( + review.user_id, review.bike_id, review.rating, review.comment, review.review_date + )) + conn.commit() + return review + + +@app.get("/reviews/", response_model=List[Review]) +async def read_reviews(): + cursor.execute('SELECT user_id, bike_id, rating, comment, review_date FROM Reviews') + reviews = cursor.fetchall() + review_objects = [] + for review in reviews: + review_obj = Review( + user_id=review[0], + bike_id=review[1], + rating=review[2], + comment=review[3], + review_date=review[4] + ) + review_objects.append(review_obj) + return review_objects + + +@app.get("/reviews/{review_id}", response_model=Review) +async def read_review(review_id: int): + cursor.execute('SELECT * FROM Reviews WHERE review_id = ?', (review_id,)) + review = cursor.fetchone() + if review is None: + raise HTTPException(status_code=404, detail="Review not found") + return review + + +@app.put("/reviews/{review_id}", response_model=Review) +async def update_review(review_id: int, review: Review): + cursor.execute(''' + UPDATE Reviews + SET user_id = ?, bike_id = ?, rating = ?, comment = ?, review_date = ? + WHERE review_id = ? + ''', ( + review.user_id, review.bike_id, review.rating, review.comment, + review.review_date, review_id + )) + conn.commit() + return review + + +@app.delete("/reviews/{review_id}") +async def delete_review(review_id: int): + cursor.execute('DELETE FROM Reviews WHERE review_id = ?', (review_id,)) + conn.commit() + return {"message": "Review deleted successfully"} diff --git a/microservices/reviews_service/review.db b/microservices/reviews_service/review.db index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2d07e1bc5127de7eeaae96265f68529a2dc32ee0 100644 GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/microservices/reviews_service/reviews.py b/microservices/reviews_service/reviews.py deleted file mode 100644 index 7034387..0000000 --- a/microservices/reviews_service/reviews.py +++ /dev/null @@ -1,85 +0,0 @@ -from fastapi import FastAPI, HTTPException -from pydantic import BaseModel -from typing import List -import sqlite3 - -app = FastAPI() - -# SQLite connection -conn = sqlite3.connect('bikes.db') -cursor = conn.cursor() - -# Create the Reviews table if it doesn't exist -cursor.execute(''' - CREATE TABLE IF NOT EXISTS Reviews ( - review_id INTEGER PRIMARY KEY, - user_id INT, - bike_id INT, - rating INT, - comment TEXT, - review_date DATETIME, - FOREIGN KEY (user_id) REFERENCES Users(user_id), - FOREIGN KEY (bike_id) REFERENCES Bikes(bike_id) - ) -''') -conn.commit() - - -# Review model -class Review(BaseModel): - user_id: int - bike_id: int - rating: int - comment: str - review_date: str - - -# Routes -@app.post("/reviews/", response_model=Review) -async def create_review(review: Review): - cursor.execute(''' - INSERT INTO Reviews - (user_id, bike_id, rating, comment, review_date) - VALUES (?, ?, ?, ?, ?) - ''', ( - review.user_id, review.bike_id, review.rating, review.comment, review.review_date - )) - conn.commit() - return review - - -@app.get("/reviews/", response_model=List[Review]) -async def read_reviews(): - cursor.execute('SELECT * FROM Reviews') - reviews = cursor.fetchall() - return reviews - - -@app.get("/reviews/{review_id}", response_model=Review) -async def read_review(review_id: int): - cursor.execute('SELECT * FROM Reviews WHERE review_id = ?', (review_id,)) - review = cursor.fetchone() - if review is None: - raise HTTPException(status_code=404, detail="Review not found") - return review - - -@app.put("/reviews/{review_id}", response_model=Review) -async def update_review(review_id: int, review: Review): - cursor.execute(''' - UPDATE Reviews - SET user_id = ?, bike_id = ?, rating = ?, comment = ?, review_date = ? - WHERE review_id = ? - ''', ( - review.user_id, review.bike_id, review.rating, review.comment, - review.review_date, review_id - )) - conn.commit() - return review - - -@app.delete("/reviews/{review_id}") -async def delete_review(review_id: int): - cursor.execute('DELETE FROM Reviews WHERE review_id = ?', (review_id,)) - conn.commit() - return {"message": "Review deleted successfully"} diff --git a/microservices/users_service/__pycache__/main.cpython-39.pyc b/microservices/users_service/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7bbb65aad6d812c8095dd550bcab4eea8af8d10 GIT binary patch literal 3974 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 Rb+t|#zlLVj>FTmY{{wXzs9^vA literal 0 HcmV?d00001 diff --git a/microservices/users_service/bikes.db b/microservices/users_service/bikes.db index 84b1acb9efcb41e46f039ef3d17b61e2da479c4e..cda0f3126502b897de95355f5de66de3ee9fa967 100644 GIT binary patch delta 144 zcmZp0XmFSy&B!uQ#+jdmK`-qUF9QPuBj0NVzSkQItN1p*;FDn#VB=lFz~9F&#kYV@ zllM9Al8uEEctsr9I2q)Xbrl&D8M5*-^5RqSQ;jDtl$Vw_G%_|ZH8Z!cG%z&MH89aN bGB7f7VC7_xg(#jpQ(jpFo0`p<a@QFFI=~`K delta 58 zcmZp0XmFSy&B!!S#+jdqL9eWfmw|zSk?%DF-|LNqReYOY@X0Xpu<&Uz@b~dc@h#xf O+*l~dw^>u}IwJtCrViTx diff --git a/microservices/users_service/main.py b/microservices/users_service/main.py index f95802c..f93f5ef 100644 --- a/microservices/users_service/main.py +++ b/microservices/users_service/main.py @@ -26,15 +26,14 @@ cursor.execute(''' conn.commit() -# User model class User(BaseModel): username: str password: str email: str phone_number: str - credit_card_info: Optional[str] + credit_card_info: Optional[str] = None registration_date: str - last_login: Optional[str] + last_login: Optional[str] = None class UserResponse(BaseModel): @@ -63,22 +62,68 @@ async def read_users(): user_objects.append(user_obj) return user_objects + # 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 - )) + # Use a tuple to conditionally include the optional fields in the SQL query + if user.credit_card_info is None and user.last_login is None: + cursor.execute(''' + INSERT INTO Users + (username, password, email, phone_number, registration_date) + VALUES (?, ?, ?, ?, ?) + ''', ( + user.username, user.password, user.email, user.phone_number, + user.registration_date + )) + elif user.credit_card_info is None: + cursor.execute(''' + INSERT INTO Users + (username, password, email, phone_number, registration_date, last_login) + VALUES (?, ?, ?, ?, ?, ?) + ''', ( + user.username, user.password, user.email, user.phone_number, + user.registration_date, user.last_login + )) + elif user.last_login is None: + cursor.execute(''' + INSERT INTO Users + (username, password, email, phone_number, credit_card_info, registration_date) + VALUES (?, ?, ?, ?, ?, ?) + ''', ( + user.username, user.password, user.email, user.phone_number, + user.credit_card_info, user.registration_date + )) + else: + cursor.execute(''' + INSERT INTO Users + (username, password, email, phone_number, credit_card_info, registration_date, last_login) + VALUES (?, ?, ?, ?, ?, ?, ?) + ''', ( + user.username, user.password, user.email, user.phone_number, + user.credit_card_info, user.registration_date, user.last_login + )) conn.commit() 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') diff --git a/microservices/users_service/users.py b/microservices/users_service/users.py deleted file mode 100644 index e69de29..0000000 diff --git a/models.py b/models.py deleted file mode 100644 index 3041a3d..0000000 --- a/models.py +++ /dev/null @@ -1,26 +0,0 @@ -from sqlalchemy import Boolean, Column, ForeignKey, Integer, String -from sqlalchemy.orm import relationship - -from .database import Base - - -class User(Base): - __tablename__ = "users" - - id = Column(Integer, primary_key=True) - email = Column(String, unique=True, index=True) - hashed_password = Column(String) - is_active = Column(Boolean, default=True) - - items = relationship("Item", back_populates="owner") - - -class Item(Base): - __tablename__ = "items" - - id = Column(Integer, primary_key=True) - title = Column(String, index=True) - description = Column(String, index=True) - owner_id = Column(Integer, ForeignKey("users.id")) - - owner = relationship("User", back_populates="items") \ No newline at end of file diff --git a/schemas.py b/schemas.py deleted file mode 100644 index cf51ac2..0000000 --- a/schemas.py +++ /dev/null @@ -1,37 +0,0 @@ -from typing import Union - -from pydantic import BaseModel - - -class ItemBase(BaseModel): - title: str - description: Union[str, None] = None - - -class ItemCreate(ItemBase): - pass - - -class Item(ItemBase): - id: int - owner_id: int - - class Config: - orm_mode = True - - -class UserBase(BaseModel): - email: str - - -class UserCreate(UserBase): - password: str - - -class User(UserBase): - id: int - is_active: bool - items: list[Item] = [] - - class Config: - orm_mode = True \ No newline at end of file diff --git a/sql_app.db b/sql_app.db deleted file mode 100644 index e69de29..0000000 -- GitLab