diff --git a/crud.py b/crud.py deleted file mode 100644 index 7f64109b776a5438ac11984ea362cd7faec46345..0000000000000000000000000000000000000000 --- 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 62838e6c7cea268804fdb8ca51c0fe12b99f318f..0000000000000000000000000000000000000000 --- 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 8a2b9ebe2043bb60fc88ca93f82718c880e3cbad..0000000000000000000000000000000000000000 --- 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 Binary files /dev/null and b/microservices/bikes_service/__pycache__/main.cpython-39.pyc differ diff --git a/microservices/bikes_service/bikes.db b/microservices/bikes_service/bikes.db index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..352ef9786f33f0f7db1862f23eac8f9f8674509c 100644 Binary files a/microservices/bikes_service/bikes.db and b/microservices/bikes_service/bikes.db differ diff --git a/microservices/bikes_service/bikes.py b/microservices/bikes_service/bikes.py deleted file mode 100644 index 5b09376eff2362bc233bd990046c6f04d2ff031e..0000000000000000000000000000000000000000 --- 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 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..22834e6cffc9dce74ca1467e64e5212d2d187831 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 Binary files /dev/null and b/microservices/reviews_service/__pycache__/main.cpython-39.pyc differ diff --git a/microservices/reviews_service/main.py b/microservices/reviews_service/main.py index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fef99cc98a5f5f9f828e61d5db897c1501def2f9 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 Binary files a/microservices/reviews_service/review.db and b/microservices/reviews_service/review.db differ diff --git a/microservices/reviews_service/reviews.py b/microservices/reviews_service/reviews.py deleted file mode 100644 index 7034387f149d8537381a76a8e4f4bde86582700e..0000000000000000000000000000000000000000 --- 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 Binary files /dev/null and b/microservices/users_service/__pycache__/main.cpython-39.pyc differ diff --git a/microservices/users_service/bikes.db b/microservices/users_service/bikes.db index 84b1acb9efcb41e46f039ef3d17b61e2da479c4e..cda0f3126502b897de95355f5de66de3ee9fa967 100644 Binary files a/microservices/users_service/bikes.db and b/microservices/users_service/bikes.db differ diff --git a/microservices/users_service/main.py b/microservices/users_service/main.py index f95802ca91c65d956255e5094e462061f8905d8b..f93f5efb9f390e543dd919169c875aa463d30c67 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 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/models.py b/models.py deleted file mode 100644 index 3041a3da64b67c73cd35726d5d639f915950b6e6..0000000000000000000000000000000000000000 --- 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 cf51ac28795ba7de747850323b500a9b6149451a..0000000000000000000000000000000000000000 --- 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 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000