import os from apiflask import APIBlueprint, abort from db import db from helper_functions import make_response, get_email_or_abort_401 from auth import auth from schema import KeywordResponseSchema, KeywordSchema, DeleteSuccessfulSchema from models import Keyword keyword_blueprint = APIBlueprint('keyword', __name__, url_prefix='/api') __location__ = os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__))) @keyword_blueprint.route('/keyword', methods=['POST']) @keyword_blueprint.output(KeywordResponseSchema(many=True), 200) @keyword_blueprint.input(schema=KeywordSchema) @keyword_blueprint.auth_required(auth) @keyword_blueprint.doc(summary="Add new keyword", description="Adds new keyword for current user") def add_keyword(data): email = get_email_or_abort_401() check_if_keyword_data_exists(data) key = data['keyword'] check_keyword = db.session.query(Keyword).filter_by(keyword=key, email=email).first() if check_keyword is None: # Keyword doesn't exist yet for this user new_keyword = Keyword( email=email, keyword=key ) db.session.add(new_keyword) db.session.commit() return make_response(new_keyword.as_dict(), 200, "Successfully added keyword") else: abort(500, message="Keyword already exist for this user") @keyword_blueprint.route('/keyword', methods=['DELETE']) @keyword_blueprint.output(DeleteSuccessfulSchema, 200) @keyword_blueprint.input(schema=KeywordSchema) @keyword_blueprint.auth_required(auth) @keyword_blueprint.doc(summary="Removes existing keyword", description="Removes existing keyword for current user") def remove_keyword(data): email = get_email_or_abort_401() check_if_keyword_data_exists(data) key = data['keyword'] check_keyword = db.session.query(Keyword).filter_by(keyword=key, email=email).first() if check_keyword is None: return make_response({}, 500, "Keyword doesn't exist for this user") else: db.session.query(Keyword).filter_by(keyword=key, email=email).delete() db.session.commit() return make_response({}, 200, "Successfully removed keyword") @keyword_blueprint.route('/keywords', methods=['GET']) @keyword_blueprint.output(KeywordResponseSchema(many=True), 200) @keyword_blueprint.auth_required(auth) @keyword_blueprint.doc(summary="Returns all keywords", description="Returns all keywords for current user") def get_keywords(): email = get_email_or_abort_401() return_keywords = [] keywords = db.session.query(Keyword).filter_by(email=email).all() if keywords is not None: for row in keywords: return_keywords.append(row.as_dict()) return make_response(return_keywords, 200, "Successfully loaded keywords") def check_if_keyword_data_exists(data): if "keyword" not in data: abort(400, message="Keyword missing") if data['keyword'] == "" or data['keyword'] is None: abort(400, message="Keyword missing")