Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 25f473b

Browse files
Updated API
1 parent 8797f24 commit 25f473b

File tree

5 files changed

+157
-37
lines changed

5 files changed

+157
-37
lines changed

‎.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
venv
22
*__pycache__
3-
.vscode
3+
.vscode
4+
*.db

‎data_generator.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from random import randrange
2+
from sqlite3 import Connection as SQLite3Connection
3+
from datetime import datetime
4+
from faker import Faker
5+
from sqlalchemy import event
6+
from sqlalchemy.engine import Engine
7+
from flask import Flask
8+
from flask_sqlalchemy import SQLAlchemy
9+
import server
10+
11+
# app
12+
app = Flask(__name__)
13+
14+
# config
15+
# app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///:memory:"
16+
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///database.db"
17+
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
18+
19+
20+
db = SQLAlchemy(app)
21+
faker = Faker()
22+
23+
# create dummy users
24+
for i in range(10):
25+
fname = faker.first_name()
26+
lname = faker.last_name()
27+
username = faker.user_name()
28+
dob = faker.date()
29+
30+
new_user = server.User(fname=fname, lname=lname, username=username, dob=dob)
31+
32+
db.session.add(new_user)
33+
db.session.commit()
34+
35+
# create dummy blog posts
36+
for i in range(10):
37+
title = faker.sentence(5)
38+
content = faker.paragraph(190)
39+
date = faker.date_time()
40+
user_id = randrange(1, 10)
41+
42+
new_blog_post = server.Post(
43+
title=title, content=content, date=date, user_id=user_id
44+
)
45+
db.session.add(new_blog_post)
46+
db.session.commit()

‎database.file

-24 KB
Binary file not shown.

‎linked_list.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,21 @@ def __init__(self):
99
self.head = None
1010
self.last_node = None
1111

12+
def to_list(self):
13+
# Check if linked list is empty, if so return an empty array
14+
llist = []
15+
if self.head is None:
16+
return llist
17+
18+
# traverse thro the linked list
19+
20+
node = self.head
21+
while node:
22+
llist.append(node.data)
23+
node = node.next_node
24+
25+
return llist
26+
1227
def print_ll(self):
1328
ll_string = ""
1429
node = self.head
@@ -40,3 +55,15 @@ def insert_end(self, data):
4055

4156
self.last_node.next_node = Node(data, None)
4257
self.last_node = self.last_node.next_node
58+
59+
def get_user_by_id(self, user_id):
60+
node = self.head
61+
62+
while node:
63+
if node.data["id"] is int(user_id):
64+
# if a match is found, return the user data(dict)
65+
return node.data
66+
# if not, keep looking
67+
node = node.next_node
68+
# user id not found, we return none
69+
return None

‎server.py

Lines changed: 82 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,11 @@
88

99

1010
app = Flask(__name__)
11-
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///database.file"
11+
# app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///:memory:"
12+
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///database.db"
1213
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
1314

1415

15-
# configure sqlite3 to enforce foreign key constraints
16-
@event.listens_for(Engine, "connect")
17-
def _set_sqlite_Pragma(dbapi_connection, connection_record):
18-
if isinstance(dbapi_connection, SQLite3Connection):
19-
cursor = dbapi_connection.cursor()
20-
cursor.execute("PRAGMA foreign_keys=ON;")
21-
cursor.close()
22-
2316
db = SQLAlchemy(app)
2417
now = datetime.now()
2518

@@ -28,68 +21,121 @@ class User(db.Model):
2821
id = db.Column(db.Integer, primary_key=True)
2922
fname = db.Column(db.String(50), nullable=False)
3023
lname = db.Column(db.String(50), nullable=False)
31-
username = db.Column(db.String(50), unique = True, nullable=False)
32-
dob = db.Column(db.String(50), unique = True, nullable=False)
33-
posts = db.relationship("Post")
24+
username = db.Column(db.String(50), unique=True, nullable=False)
25+
dob = db.Column(db.String(50), nullable=False)
26+
posts = db.relationship(
27+
"Post", backref=db.backref("posts", lazy=True), cascade="all, delete"
28+
)
29+
3430

3531
class Post(db.Model):
3632
id = db.Column(db.Integer, primary_key=True)
37-
title = db.Column(db.String, unique=True, nullable=False)
38-
content = db.Column(db.Text,nullable=False)
39-
date =db.Column(db.Date)
33+
title = db.Column(db.String, nullable=False)
34+
content = db.Column(db.Text,nullable=False)
35+
date =db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
4036
user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
4137

4238

43-
44-
4539
# Create a new user
46-
@app.route("/user", methods=['POST'])
40+
@app.route("/user", methods=["POST"])
4741
def create_user():
4842

4943
data = request.get_json()
5044
new_user = User(
51-
fname=data["fname"],
52-
lname=data["lname"],
53-
username=data["username"],
54-
dob=data["dob"]
45+
fname=data["fname"],
46+
lname=data["lname"],
47+
username=data["username"],
48+
dob=data["dob"],
5549
)
5650

5751
db.session.add(new_user)
5852
db.session.commit()
5953

6054
return jsonify({"message": "user created"}), 200
6155

62-
@app.route("/user/descending_id", methods=['GET'])
63-
def get_all_users_descending():
64-
pass
6556

66-
@app.route("/user/ascending_id", methods=['GET'])
57+
@app.route("/user/descending_id", methods=["GET"])
58+
def get_all_users_descending():
59+
users = User.query.all()
60+
all_users_ll = linked_list.LinkedList()
61+
62+
for user in users:
63+
all_users_ll.insert_begining(
64+
{
65+
"id": user.id,
66+
"first name": user.fname,
67+
"last name": user.lname,
68+
"username": user.username,
69+
"date of birth": user.dob,
70+
}
71+
)
72+
return jsonify(all_users_ll.to_list()), 200
73+
74+
75+
@app.route("/user/ascending_id", methods=["GET"])
6776
def get_all_users_ascending():
68-
pass
69-
70-
@app.route("/user/<user_id>", methods=['GET'])
77+
users = User.query.all()
78+
all_users_ll = linked_list.LinkedList()
79+
80+
for user in users:
81+
all_users_ll.insert_end(
82+
{
83+
"id": user.id,
84+
"first name": user.fname,
85+
"last name": user.lname,
86+
"username": user.username,
87+
"date of birth": user.dob,
88+
}
89+
)
90+
return jsonify(all_users_ll.to_list()), 200
91+
92+
93+
@app.route("/user/<user_id>", methods=["GET"])
7194
def get_user(user_id):
72-
pass
95+
users = User.query.all()
96+
all_users_ll = linked_list.LinkedList()
97+
98+
for user in users:
99+
all_users_ll.insert_begining(
100+
{
101+
"id": user.id,
102+
"first name": user.fname,
103+
"last name": user.lname,
104+
"username": user.username,
105+
"date of birth": user.dob,
106+
}
107+
)
108+
109+
user = all_users_ll.get_user_by_id(user_id)
110+
111+
return jsonify(user), 200
112+
73113

74-
@app.route("/user/<user_id>", methods=['DELETE'])
114+
@app.route("/user/<user_id>", methods=["DELETE"])
75115
def delete_user(user_id):
76-
pass
116+
user = User.query.filter_by(id=user_id).first()
117+
db.session.delete(user)
118+
db.session.commit()
119+
120+
return jsonify({}), 204
77121

78-
@app.route("/blog_post/<user_id>", methods=['POST'])
122+
123+
@app.route("/blog_post/<user_id>", methods=["POST"])
79124
def create_blog_post(user_id):
80125
pass
81126

82-
@app.route("/user/<user_id>", methods=['GET'])
127+
128+
@app.route("/user/<user_id>", methods=["GET"])
83129
def get_all_blog_posts(user_id):
84130
pass
85131

86132

87-
@app.route("/blog_post/<blog_post_id>", methods=['GET'])
133+
@app.route("/blog_post/<blog_post_id>", methods=["GET"])
88134
def get_one_blog_post(blog_post_id):
89135
pass
90136

91137

92-
@app.route("/blog_post/<blog_post_id>", methods=['DELETE'])
138+
@app.route("/blog_post/<blog_post_id>", methods=["DELETE"])
93139
def delete_blog_post(blog_post_id):
94140
pass
95141

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /