-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
110 lines (81 loc) · 3.15 KB
/
main.py
File metadata and controls
110 lines (81 loc) · 3.15 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
from typing import Optional, Union
from fastapi import FastAPI, Response, status, HTTPException
from fastapi.params import Body
from pydantic import BaseModel
from random import randrange
import psycopg2
from psycopg2.extras import RealDictCursor
import time
app = FastAPI()
class Post(BaseModel):
title: str
content: str
published: bool = True
while True:
try:
conn = psycopg2.connect(host='localhost', database=<database_name>, user=<username>, password=<password>,
cursor_factory=RealDictCursor)
cursor = conn.cursor()
print("Database connected successfully!")
break
except Exception as error:
print("Database connection unsuccessful!")
print("Error:", error)
time.sleep(2)
my_posts = [{"title": "title of post 1", "content": "content of post 1", "id": 1}, {
"title": "favorite cars", "content": "I like ford trucks", "id": 2}]
def find_post(id):
for p in my_posts:
if p["id"] == id:
return p
def find_index_post(id):
for i, p in enumerate(my_posts):
if p['id'] == id:
return i
@app.get("/")
def root():
return {"message": "Hello world"}
@app.get("/posts")
def get_posts():
cursor.execute("""SELECT * FROM posts """)
posts = cursor.fetchall()
return {"data": posts}
@app.post("/posts", status_code=status.HTTP_201_CREATED)
def create_post(post: Post):
cursor.execute("""INSERT INTO posts (title, content, published) VALUES (%s, %s, %s) RETURNING * """,(
post.title, post.content, post.published))
new_post = cursor.fetchone()
conn.commit()
return{"data": new_post}
@app.get("/posts/latest")
def get_latest_post():
cursor.execute("""SELECT * FROM posts WHERE created_at in ( SELECT MAX(created_at) from posts)""")
post = cursor.fetchone()
return{"detail": post}
@app.get("/posts/{id}")
def get_post(id: int):
cursor.execute("""SELECT * FROM posts WHERE id = %s""", (str(id)))
post = cursor.fetchone()
if not post:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND,
detail = f"Post with id; {id} was not found")
return {"post_detail": post}
@app.put("/posts/{id}")
def update_post(id: int, post: Post):
cursor.execute("""UPDATE posts SET title = %s, content = %s, published = %s WHERE id = %s RETURNING *""",(
post.title, post.content, post.published, str(id)))
updated_post = cursor.fetchone()
conn.commit()
if updated_post == None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND,
detail= f"Post with id: {id} does not exist")
return {"data": updated_post}
@app.delete("/posts/{id}",status_code=status.HTTP_204_NO_CONTENT)
def delete_post(id: int):
cursor.execute("""DELETE FROM posts WHERE id = %s RETURNING *""", (str(id)))
deleted_post = cursor.fetchone()
conn.commit()
if deleted_post == None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND,
detail= f"Post with id: {id} does not exist")
return Response(status_code=status.HTTP_204_NO_CONTENT)