From 85764f349e465c85f5c154ae5c4a9d24eba7ba8f Mon Sep 17 00:00:00 2001 From: shakti2002 Date: Fri, 7 Mar 2025 13:24:17 +0530 Subject: [PATCH] Assignment completed : shakti chaturvedi --- database.py | 10 ++++++++ main.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++ models.py | 14 +++++++++++ schemas.py | 27 ++++++++++++++++++++ 4 files changed, 122 insertions(+) create mode 100644 database.py create mode 100644 main.py create mode 100644 models.py create mode 100644 schemas.py diff --git a/database.py b/database.py new file mode 100644 index 0000000..6725683 --- /dev/null +++ b/database.py @@ -0,0 +1,10 @@ +# database.py +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker + +SQLALCHEMY_DATABASE_URL = "sqlite:///./users.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 new file mode 100644 index 0000000..d0e78f9 --- /dev/null +++ b/main.py @@ -0,0 +1,71 @@ +from fastapi import FastAPI, HTTPException, Depends +from sqlalchemy.orm import Session +from database import SessionLocal, engine +import models, schemas +from pydantic import EmailStr + +app = FastAPI() + +models.Base.metadata.create_all(bind=engine) + +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 = models.User(**user.dict()) + db.add(db_user) + db.commit() + db.refresh(db_user) + return db_user + +@app.get("/users/", response_model=list[schemas.User]) +def read_users(db: Session = Depends(get_db)): + return db.query(models.User).all() + +@app.get("/users/{user_id}", response_model=schemas.User) +def read_user(user_id: int, db: Session = Depends(get_db)): + user = db.query(models.User).filter(models.User.id == user_id).first() + if user is None: + raise HTTPException(status_code=404, detail="User not found") + return user + +@app.put("/users/{user_id}", response_model=schemas.User) +def update_user(user_id: int, user: schemas.UserUpdate, db: Session = Depends(get_db)): + db_user = db.query(models.User).filter(models.User.id == user_id).first() + if db_user is None: + raise HTTPException(status_code=404, detail="User not found") + for key, value in user.dict(exclude_unset=True).items(): + setattr(db_user, key, value) + db.commit() + db.refresh(db_user) + return db_user + +@app.delete("/users/{user_id}", response_model=schemas.User) +def delete_user(user_id: int, db: Session = Depends(get_db)): + db_user = db.query(models.User).filter(models.User.id == user_id).first() + if db_user is None: + raise HTTPException(status_code=404, detail="User not found") + db.delete(db_user) + db.commit() + return db_user + +@app.get("/users/{user_id}/matches", response_model=list[schemas.User]) +def find_matches(user_id: int, db: Session = Depends(get_db)): + user = db.query(models.User).filter(models.User.id == user_id).first() + if user is None: + raise HTTPException(status_code=404, detail="User not found") + potential_matches = db.query(models.User).filter( + models.User.id != user_id, + models.User.gender != user.gender, + models.User.city == user.city, + models.User.interests==user.interests + ).all() + return potential_matches + + + diff --git a/models.py b/models.py new file mode 100644 index 0000000..b506a83 --- /dev/null +++ b/models.py @@ -0,0 +1,14 @@ +# models.py +from sqlalchemy import Column, Integer, String +from database import Base + +class User(Base): + __tablename__ = "users" + + id = Column(Integer, primary_key=True, index=True) + name = Column(String, index=True) + age = Column(Integer) + gender = Column(String) + email = Column(String, unique=True, index=True) + city = Column(String) + interests = Column(String) diff --git a/schemas.py b/schemas.py new file mode 100644 index 0000000..3e241cb --- /dev/null +++ b/schemas.py @@ -0,0 +1,27 @@ + +from pydantic import BaseModel, EmailStr +from typing import Optional + +class UserBase(BaseModel): + name: str + age: int + gender: str + email: EmailStr + city: str + interests: str + +class UserCreate(UserBase): + pass + +class UserUpdate(BaseModel): + name: Optional[str] = None + age: Optional[int] = None + gender: Optional[str] = None + email: Optional[EmailStr] = None + city: Optional[str] = None + interests: Optional[str] = None + +class User(UserBase): + id: int + class Config: + orm_mode = True