import os from apiflask import APIBlueprint, abort from flask import jsonify from db import db from helper_functions import get_user_id_from_username, get_username_or_abort_401 from auth import auth from scheme 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): username = get_username_or_abort_401() check_if_keyword_data_exists(data) key = data['keyword'] check_keyword = db.session.query(Keyword).filter_by(keyword=key, user_id=get_user_id_from_username(username)).first() if check_keyword is None: # Keyword doesn't exist yet for this user new_keyword = Keyword( user_id=get_user_id_from_username(username), keyword=key ) db.session.add(new_keyword) db.session.commit() return jsonify({"status": 200, "text": "Successfully added keyword", "data": new_keyword.as_dict()}) 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): username = get_username_or_abort_401() check_if_keyword_data_exists(data) key = data['keyword'] db.session.query(Keyword).filter_by(keyword=key, user_id=get_user_id_from_username(username)).delete() db.session.commit() return jsonify({"status": 200, "text": "Successfully removed keyword", "data": {}}) @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(): username = get_username_or_abort_401() return_keywords = [] keywords = db.session.query(Keyword).filter_by(user_id=get_user_id_from_username(username)).all() if keywords is not None: for row in keywords: return_keywords.append(row.as_dict()) return jsonify({"status": 200, "text": "Successfully loaded keywords", "data": return_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")