From 12498c2ee8793d13f27caae9cb97744c7a835ae2 Mon Sep 17 00:00:00 2001 From: Jagraj Aulakh Date: Thu, 6 Apr 2023 15:23:10 -0400 Subject: [PATCH] #5 Create course endpoint. Added messages to all db migrations --- backend/app/models.py | 15 +++++++- backend/app/routes.py | 40 +++++++++++++++++--- backend/migrations/versions/471b4225837e_.py | 2 +- backend/migrations/versions/7736bc740f9b_.py | 2 +- backend/migrations/versions/8e48199f1417_.py | 2 +- 5 files changed, 52 insertions(+), 9 deletions(-) diff --git a/backend/app/models.py b/backend/app/models.py index 315a830..8b96c88 100644 --- a/backend/app/models.py +++ b/backend/app/models.py @@ -37,11 +37,24 @@ class User(UserMixin, db.Model): if new_user and "password" in data: self.set_password(data["password"]) + class Course(db.Model): id = sa.Column(sa.Integer, primary_key=True) name = sa.Column(sa.String(128), index=True) description = sa.Column(sa.Text, index=True) instructor = sa.Column(sa.ForeignKey(User.id), index=True) - created_at = sa.Column(sa.DateTime, default=datetime.now()) + created_at = sa.Column(sa.DateTime) + def from_dict(self, data): + for field in ["name", "description", "instructor"]: + if field in data: + setattr(self, field, data[field]) + if not self.created_at: + self.created_at = datetime.now() + + def to_dict(self): + d = {} + for f in ["id", "name", "description", "instructor", "created_at"]: + d[f] = getattr(self, f) + return d diff --git a/backend/app/routes.py b/backend/app/routes.py index 649411a..5ee41b6 100644 --- a/backend/app/routes.py +++ b/backend/app/routes.py @@ -5,7 +5,7 @@ from app.errors import error_response from flask_login import current_user from app import login, db -from app.models import User +from app.models import Course, User @login.user_loader @@ -13,6 +13,13 @@ def load_user(user_id): return User.query.get(user_id) +def check_data(data, required_fields): + for f in required_fields: + if f not in data: + return f + return None + + @bp.route("/login", methods=["POST"]) def login_route(): data = request.get_json() @@ -46,11 +53,9 @@ def logout_route(): @bp.route("/register", methods=["POST"]) def register(): data = request.get_json() - required_fields = ["role", "username", "email", "password", "password2"] - for f in required_fields: - if f not in data: - return error_response(400, f"Must supply {f}") + if f := check_data(data, required_fields): + return error_response(400, f"Must supply {f}") if User.query.filter_by(username=data["username"]).first(): return error_response(409, "User with that username already exists") @@ -65,3 +70,28 @@ def register(): resp = jsonify(u.to_dict()) return resp + + +@bp.route("/course", methods=["POST"]) +def create_course(): + data = request.get_json() + + required_fields = ["name", "description", "instructor"] + + if f := check_data(data, required_fields): + return error_response(400, f"Must supply {f}") + + u = User.query.get(data["instructor"]) + if not u: + return error_response(400, f"User with id {data['instructor']} does not exist") + + if u.role != "instructor": + return error_response(400, "User is not instructor") + + c = Course() + c.from_dict(data) + db.session.add(c) + db.session.commit() + + return jsonify(c.to_dict()) + diff --git a/backend/migrations/versions/471b4225837e_.py b/backend/migrations/versions/471b4225837e_.py index bff6605..0fcb7df 100644 --- a/backend/migrations/versions/471b4225837e_.py +++ b/backend/migrations/versions/471b4225837e_.py @@ -1,4 +1,4 @@ -"""empty message +"""Create course model Revision ID: 471b4225837e Revises: 8e48199f1417 diff --git a/backend/migrations/versions/7736bc740f9b_.py b/backend/migrations/versions/7736bc740f9b_.py index 9a00ee3..b06d60f 100644 --- a/backend/migrations/versions/7736bc740f9b_.py +++ b/backend/migrations/versions/7736bc740f9b_.py @@ -1,4 +1,4 @@ -"""empty message +"""Create user model Revision ID: 7736bc740f9b Revises: diff --git a/backend/migrations/versions/8e48199f1417_.py b/backend/migrations/versions/8e48199f1417_.py index 96f5d0a..b57cb22 100644 --- a/backend/migrations/versions/8e48199f1417_.py +++ b/backend/migrations/versions/8e48199f1417_.py @@ -1,4 +1,4 @@ -"""empty message +"""Add user role, remove about_me Revision ID: 8e48199f1417 Revises: 7736bc740f9b