-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
96 lines (71 loc) · 2.54 KB
/
app.py
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
# imports
from flask import Flask, request
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy_serializer import SerializerMixin
# initialise flask app
app = Flask(__name__)
# app db config
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
# MODELS
class Product(db.Model,SerializerMixin):
id = db.Column(db.Integer, primary_key=True)
desc = db.Column(db.String(50))
reviews = db.relationship('Review', backref='product')
serialize_rules = ('-reviews.product' ,)
class Buyer(db.Model,SerializerMixin):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
reviews = db.relationship('Review', backref='buyer')
serialize_rules = ('-reviews.buyer' ,)
class Review(db.Model,SerializerMixin):
id = db.Column(db.Integer, primary_key=True)
comment = db.Column(db.String(100))
product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
buyer_id = db.Column(db.Integer, db.ForeignKey('buyer.id'))
serialize_rules = ('-product.reviews' , '-buyer.reviews')
# buyer buys many products
# products are bought by many buyers
# so many-to-many needs join table
# how used??
buyer_product = db.Table('buyer_product',
db.Column('buyer_id', db.Integer, db.ForeignKey('buyer.id'), primary_key=True),
db.Column('product_id', db.Integer, db.ForeignKey('product.id'), primary_key=True)
)
# ROUTES / ENDPOINTS
# test route
@app.route('/test', methods=['GET'])
def test():
return {"hello": "world"}
# get all products
@app.route('/product', methods=['GET'])
def get_products():
all_products = Product.query.all()
return [ product.to_dict() for product in all_products ] # list
# add a new product
@app.route('/product', methods=['POST'])
def add_product():
prod_desc = request.json['prod_desc']
new_product = Product(desc=prod_desc)
db.session.add(new_product)
db.session.commit()
return new_product.to_dict()
# get all buyers
@app.route('/buyer', methods=['GET'])
def get_buyers():
all_buyers = Buyer.query.all()
return [ buyer.to_dict() for buyer in all_buyers ]
# get one product by id
@app.route('/product/<prod_id>', methods=['GET'])
def get_product(prod_id):
product = Product.query.get(prod_id)
return product.to_dict()
# get one buyer by id
@app.route('/buyer/<buyer_id>', methods=['GET'])
def get_buyer(buyer_id):
buyer = Buyer.query.get(buyer_id)
return buyer.to_dict()
# start flask server
if __name__ == '__main__':
app.run(debug=True)