-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
136 lines (110 loc) · 4.39 KB
/
Copy pathmain.py
File metadata and controls
136 lines (110 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel
from typing import Annotated, Optional, List
import models
from database import engine, sessionLocal
from sqlalchemy.orm import Session
app = FastAPI()
models.Base.metadata.create_all(bind=engine) #will create all tables and columns in postgres
class User(BaseModel):
firstName: str
lastName: str
email: str
phone_number: str
class updateUser(BaseModel):
firstName: Optional[str] = None
lastName: Optional[str] = None
email: Optional[str] = None
phone_number: Optional[str] = None
def getDb():
db = sessionLocal()
try:
yield db
finally:
db.close()
# db_dependency = Annotated(Session, Depends(getDb))
#creating users
@app.post("/users/")
async def create_User(user: User, db: Session = Depends(getDb)):
current_user = db.query(models.Users).filter(models.Users.email == user.email).first()
if current_user:
raise HTTPException(status_code=400, detail="user already exitsts in the database")
db_user = models.Users(firstName=user.firstName, lastName=user.lastName, email=user.email, phone_number=user.phone_number)
db.add(db_user)
db.commit()
db.refresh(db_user)
return {"user created successfully, user: ": db_user}
#getting users with the id
@app.get("/users/by-id{user_id}")
async def get_user(user_id: int, db: Session = Depends(getDb)):
result = db.query(models.Users).filter(models.Users.id == user_id).first()
if not result:
raise HTTPException(status_code=404, detail="user is not found")
return result
#getting users with the email
@app.get("/users/by-email/{user_email}")
async def get_user_by_email(user_email: str, db: Session = Depends(getDb)):
result = db.query(models.Users).filter(models.Users.email == user_email).first()
if not result:
raise HTTPException(status_code=404, detail="user is not found")
return result
#updating user with user id
@app.put("/users/by-id{user_id}")
async def update_existing_user(user_id: int, user: updateUser, db: Session = Depends(getDb)):
db_user = db.query(models.Users).filter(models.Users.id == user_id).first()
if not db_user:
raise HTTPException(status_code=404, detail="user is not found")
if user.firstName:
db_user.firstName = user.firstName
if user.lastName:
db_user.lastName = user.lastName
if user.email:
db_user.email = user.email
if user.phone_number:
db_user.phone_number = user.phone_number
db.commit()
db.refresh(db_user)
return {"user updated successfully, user ": db_user}
#updating user with email
@app.put("/users/by-email/{user_email}")
async def update_existing_user(user_email: str, user: updateUser, db: Session = Depends(getDb)):
db_user = db.query(models.Users).filter(models.Users.email == user_email).first()
if not db_user:
raise HTTPException(status_code=404, detail="user is not found")
if user.firstName:
db_user.firstName = user.firstName
if user.lastName:
db_user.lastName = user.lastName
if user.email:
db_user.email = user.email
if user.phone_number:
db_user.phone_number = user.phone_number
db.commit()
db.refresh(db_user)
return {"user updated successfully, user ": db_user}
#deleting user with email
@app.delete("/users/by-email/{user_email}")
async def delete_user(user_email: str, db: Session = Depends(getDb)):
db_user = db.query(models.Users).filter(models.Users.email == user_email).first()
if not db_user:
raise HTTPException(status_code=404, detail="user is not found")
db.delete(db_user)
db.commit()
return {f"user with email {user_email} deleted"}
#deleting user with email
@app.delete("/users/by-id/{user_id}")
async def delete_user(user_id: str, user: User, db: Session = Depends(getDb)):
db_user = db.query(models.Users).filter(models.Users.id == user_id).first()
if not db_user:
raise HTTPException(status_code=404, detail="user is not found")
db.delete(db_user)
db.commit()
return {f"user with email {user_id} deleted"}
#get all users
@app.get("/users/", response_model = List[User])
async def get_all_users(db: Session = Depends(getDb)):
users = db.query(models.Users).all()
return users
@app.get("/")
async def root():
return {"message": "Hello World"}