Skip to content

Commit a9353de

Browse files
author
Shafaf
committed
Improve: api updated
1 parent 843a6bf commit a9353de

6 files changed

Lines changed: 107 additions & 16 deletions

File tree

api/v1/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
from .views import *
77
from .plan import *
88
from .subscription import *
9+
from .user import *

api/v1/plan.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,6 @@ def post(self):
5050
db.session.add(plan)
5151
db.session.commit()
5252

53-
return jsonify({"id": plan.id})
53+
return jsonify({"id": plan.id}), 201
5454

5555
v1.add_url_rule("/plan", view_func=Plans.as_view("plan"))

api/v1/subscription.py

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,59 @@
1-
from flask import jsonify
1+
from flask import jsonify, request
22
from flask.views import MethodView
33

44
from . import v1
5+
from model.subscription import Subscription, Plan, User
6+
from extension import db
57

6-
class Subscription(MethodView):
8+
9+
class Subscriptions(MethodView):
710
def get(self):
8-
return jsonify({"value": "yes, test is working....:)"})
11+
subscription = Subscription.query.all()
12+
sub_obj = [
13+
{
14+
"id" : sub.id,
15+
"plan_id" : sub.plan_id,
16+
"razorpay_user_id" : sub.razorpay_user_id,
17+
"subscription_id" : sub.subscription_id,
18+
"user_id": sub.user_id,
19+
"subscription_status" : sub.subscription_status
20+
}
21+
for sub in subscription
22+
]
23+
return jsonify(sub_obj), 200
24+
25+
def post(self):
26+
req: dict = request.get_json()
27+
plan_id = req.get("plan_id")
28+
29+
if plan_id is None:
30+
return jsonify({"message": "plan_id is required"}), 400
31+
32+
# check is valid plan id
33+
if not Plan.query.filter_by(id=plan_id).all():
34+
return jsonify({"message" : "Not a valid plan_id"})
35+
36+
if not Plan.query.filter_by(id=plan_id).all():
37+
return jsonify({"message" : "Not a valid plan_id"})
38+
39+
# check is valid user_id
40+
user_id = req.get("user_id")
41+
if user_id is not None:
42+
user_exists = User.query.filter_by(id=user_id).first()
43+
if not user_exists:
44+
return jsonify({"message": "Not a valid user_id"}), 400
45+
46+
sub = Subscription(
47+
plan_id = req.get("plan_id"),
48+
razorpay_user_id = req.get("razorpay_user_id"),
49+
subscription_id = req.get("subscription_id"),
50+
user_id = user_id,
51+
subscription_status = req.get("subscription_status")
52+
)
53+
54+
db.session.add(sub)
55+
db.session.commit()
56+
57+
return jsonify({"id": sub.id}), 201
958

10-
v1.add_url_rule("/subscription", view_func=Subscription.as_view("subscription"))
59+
v1.add_url_rule("/subscription", view_func=Subscriptions.as_view("subscription"))

api/v1/user.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from flask import jsonify, request
2+
from flask.views import MethodView
3+
4+
from . import v1
5+
from model.subscription import User
6+
from extension import db
7+
8+
class Users(MethodView):
9+
10+
def get(self):
11+
users = User.query.all()
12+
user_obj = [
13+
{
14+
"id" : user.id,
15+
"name" : user.name,
16+
"email" : user.email,
17+
"phone_number" : user.phone_number
18+
}
19+
for user in users
20+
]
21+
return jsonify(user_obj), 200
22+
23+
def post(self):
24+
req: dict = request.get_json()
25+
26+
# check and validate user input.
27+
username = req.get("name")
28+
email = req.get("email")
29+
phone_number = req.get("phone_number")
30+
31+
if not username:
32+
return jsonify({"message" : "name is required"}), 400
33+
34+
if not email:
35+
return jsonify({"message" : "email is required"}), 400
36+
37+
if not phone_number:
38+
return jsonify({"message" : "phone_number is required"}), 400
39+
40+
user = User(
41+
name= username,
42+
email= email,
43+
phone_number=phone_number
44+
)
45+
46+
db.session.add(user)
47+
db.session.commit()
48+
49+
return jsonify({"id": user.id}), 201
50+
51+
v1.add_url_rule("/users", view_func=Users.as_view('user'))

app.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,23 @@
44
from api.v1 import v1
55
from connection import SQLALCHEMY_DATABASE_URI
66
from extension import db , migrate
7-
from model import Plan
87

98
def create_app():
109
app = Flask(__name__)
1110

1211
app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI
1312

14-
1513
extensions(app)
1614

17-
1815
# register the api points.
1916
app.register_blueprint(v1)
2017

21-
# checking is the application is running, remove me later.
22-
@app.route("/")
23-
def index():
24-
return "hello how are you!"
25-
2618
return app
2719

2820

2921
def extensions(app):
3022
db.init_app(app)
3123
migrate.init_app(app, db)
3224

33-
with app.app_context():
34-
db.create_all()
35-
print("Result fetched successfully")
3625

3726
create_app()

model/subscription.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class Subscription(db.Model):
2121
plan_id = Column(Integer, ForeignKey(Plan.id), nullable=False)
2222
razorpay_user_id = Column(String)
2323
subscription_id = Column(String)
24+
user_id = Column(Integer, ForeignKey("user.id"), nullable=True)
2425
subscription_status = Column(
2526
Enum(*STATUS_CHOICES, name="status", native_enum=False),
2627
nullable=False,

0 commit comments

Comments
 (0)