Loading app/controller/language.py 0 → 100644 +115 −0 Original line number Diff line number Diff line from flask import Blueprint, request, jsonify, current_app from helpers.security import require_auth from helpers.limiter import limiter from model.language.language import ( insertLanguage, getLanguages, getLanguagesFull, getLanguage, deleteLanguage, ) language_bp = Blueprint("language", __name__) @language_bp.route("/languages", methods=["GET"]) @require_auth @limiter.limit("1/second", override_defaults=False) def get_languages(): language_ids = getLanguages() if language_ids is False: return jsonify({"error": "Database error"}), 500 return jsonify({"languages": language_ids}) @language_bp.route("/languages/full", methods=["GET"]) @require_auth @limiter.limit("1/second", override_defaults=False) def get_languages_full(): languages = getLanguagesFull() if languages is False: return jsonify({"error": "Database error"}), 500 return jsonify({"languages": languages}) @language_bp.route("/languages/<int:id>", methods=["GET"]) @require_auth @limiter.limit("1/second", override_defaults=False) def get_language(id): try: if not id: return jsonify({"error": "Missing Language id"}), 400 else: result = getLanguage(id) if result == -1: return jsonify({"message": "language not found", "id": id}), 404 elif result: return jsonify(result) else: return jsonify({"error": "Failed to get language"}), 500 except Exception as e: return jsonify({"error": str(e)}), 500 return jsonify({"message": "update", "id": id}) @language_bp.route("/languages", methods=["PUT"]) @require_auth @limiter.limit("1/second", override_defaults=False) def create_language(): try: data = request.get_json() language_code = data.get("language_code") if not language_code: return jsonify({"error": "Missing language_code"}), 400 language_id = insertLanguage(language_code) if language_id > 0: return ( jsonify({"message": "Language inserted", "language_id": language_id}), 201, ) elif language_id == -1: return jsonify({"error": "language already exist"}), 409 else: return jsonify({"error": "Failed to insert language"}), 500 except Exception as e: return jsonify({"error": str(e)}), 500 @language_bp.route("/languages/<int:id>", methods=["POST"]) @require_auth @limiter.limit("1/second", override_defaults=False) def update_language(id): return jsonify({"message": "update", "id": id}) @language_bp.route("/languages/<int:id>", methods=["DELETE"]) @require_auth @limiter.limit("1/second", override_defaults=False) def delete_language(id): try: if not id: return jsonify({"error": "Missing Language id"}), 400 else: language = getLanguage(id) if language == -1: return jsonify({"message": "language not found", "id": id}), 404 elif language: if deleteLanguage(id): return jsonify({"message": "language deleted", "id": id}) else: return jsonify({"error": "Failed to delete language"}), 500 else: return jsonify({"error": "Failed to retrieve language"}), 500 except Exception as e: return jsonify({"error": str(e)}), 500 app/model/language/language.py 0 → 100644 +106 −0 Original line number Diff line number Diff line from flask import current_app from typing import Any, Literal from psycopg.rows import dict_row def getLanguages(): getLanguagesQuery = """SELECT id from language""" try: with current_app.db_pool.connection() as conn: with conn.cursor(row_factory=dict_row) as cur: cur.execute(getLanguagesQuery) rows = cur.fetchall() print(rows) if not rows: return [] return [row["id"] for row in rows] except Exception as e: current_app.logger.error(f"Database error while retrieving languages: {e}") return False def getLanguagesFull(): getLanguagesQuery = """SELECT id, language_code from language""" try: with current_app.db_pool.connection() as conn: with conn.cursor(row_factory=dict_row) as cur: cur.execute(getLanguagesQuery) rows = cur.fetchall() print(rows) if not rows: return [] return rows except Exception as e: current_app.logger.error(f"Database error while retrieving languages: {e}") return False def getLanguage(languageId: int) -> Any | Literal[-1] | Literal[False]: getLanguageQuery = """SELECT id, language_code from language WHERE id = %s""" try: with current_app.db_pool.connection() as conn: with conn.cursor(row_factory=dict_row) as cur: cur.execute(getLanguageQuery, (languageId,)) row = cur.fetchone() print(row) if not row: return -1 else: return row except Exception as e: current_app.logger.error(f"Database error while retrieving languages: {e}") return False def insertLanguage(languageCode: str) -> bool | int: getLanguageQuery = ( """SELECT id from language WHERE UPPER(language_code) = UPPER(%s)""" ) InsertLanguageQuery = """INSERT INTO language (language_code) VALUES (%s) RETURNING id;""" try: with current_app.db_pool.connection() as conn: with conn.cursor() as cur: cur.execute(getLanguageQuery, (languageCode,)) row = cur.fetchone() if row: return -1 else: cur.execute(InsertLanguageQuery, (languageCode,)) language_id = cur.fetchone()[0] conn.commit() return language_id except Exception as e: current_app.logger.error(f"Database error while inserting language: {e}") return False def deleteLanguage(languageId: int) -> bool: deleteLanguagesQuery = """DELETE FROM language WHERE id = %s""" try: with current_app.db_pool.connection() as conn: with conn.cursor() as cur: cur.execute(deleteLanguagesQuery, (languageId,)) conn.commit() return True except Exception as e: current_app.logger.error(f"Database error while retrieving languages: {e}") return False Loading
app/controller/language.py 0 → 100644 +115 −0 Original line number Diff line number Diff line from flask import Blueprint, request, jsonify, current_app from helpers.security import require_auth from helpers.limiter import limiter from model.language.language import ( insertLanguage, getLanguages, getLanguagesFull, getLanguage, deleteLanguage, ) language_bp = Blueprint("language", __name__) @language_bp.route("/languages", methods=["GET"]) @require_auth @limiter.limit("1/second", override_defaults=False) def get_languages(): language_ids = getLanguages() if language_ids is False: return jsonify({"error": "Database error"}), 500 return jsonify({"languages": language_ids}) @language_bp.route("/languages/full", methods=["GET"]) @require_auth @limiter.limit("1/second", override_defaults=False) def get_languages_full(): languages = getLanguagesFull() if languages is False: return jsonify({"error": "Database error"}), 500 return jsonify({"languages": languages}) @language_bp.route("/languages/<int:id>", methods=["GET"]) @require_auth @limiter.limit("1/second", override_defaults=False) def get_language(id): try: if not id: return jsonify({"error": "Missing Language id"}), 400 else: result = getLanguage(id) if result == -1: return jsonify({"message": "language not found", "id": id}), 404 elif result: return jsonify(result) else: return jsonify({"error": "Failed to get language"}), 500 except Exception as e: return jsonify({"error": str(e)}), 500 return jsonify({"message": "update", "id": id}) @language_bp.route("/languages", methods=["PUT"]) @require_auth @limiter.limit("1/second", override_defaults=False) def create_language(): try: data = request.get_json() language_code = data.get("language_code") if not language_code: return jsonify({"error": "Missing language_code"}), 400 language_id = insertLanguage(language_code) if language_id > 0: return ( jsonify({"message": "Language inserted", "language_id": language_id}), 201, ) elif language_id == -1: return jsonify({"error": "language already exist"}), 409 else: return jsonify({"error": "Failed to insert language"}), 500 except Exception as e: return jsonify({"error": str(e)}), 500 @language_bp.route("/languages/<int:id>", methods=["POST"]) @require_auth @limiter.limit("1/second", override_defaults=False) def update_language(id): return jsonify({"message": "update", "id": id}) @language_bp.route("/languages/<int:id>", methods=["DELETE"]) @require_auth @limiter.limit("1/second", override_defaults=False) def delete_language(id): try: if not id: return jsonify({"error": "Missing Language id"}), 400 else: language = getLanguage(id) if language == -1: return jsonify({"message": "language not found", "id": id}), 404 elif language: if deleteLanguage(id): return jsonify({"message": "language deleted", "id": id}) else: return jsonify({"error": "Failed to delete language"}), 500 else: return jsonify({"error": "Failed to retrieve language"}), 500 except Exception as e: return jsonify({"error": str(e)}), 500
app/model/language/language.py 0 → 100644 +106 −0 Original line number Diff line number Diff line from flask import current_app from typing import Any, Literal from psycopg.rows import dict_row def getLanguages(): getLanguagesQuery = """SELECT id from language""" try: with current_app.db_pool.connection() as conn: with conn.cursor(row_factory=dict_row) as cur: cur.execute(getLanguagesQuery) rows = cur.fetchall() print(rows) if not rows: return [] return [row["id"] for row in rows] except Exception as e: current_app.logger.error(f"Database error while retrieving languages: {e}") return False def getLanguagesFull(): getLanguagesQuery = """SELECT id, language_code from language""" try: with current_app.db_pool.connection() as conn: with conn.cursor(row_factory=dict_row) as cur: cur.execute(getLanguagesQuery) rows = cur.fetchall() print(rows) if not rows: return [] return rows except Exception as e: current_app.logger.error(f"Database error while retrieving languages: {e}") return False def getLanguage(languageId: int) -> Any | Literal[-1] | Literal[False]: getLanguageQuery = """SELECT id, language_code from language WHERE id = %s""" try: with current_app.db_pool.connection() as conn: with conn.cursor(row_factory=dict_row) as cur: cur.execute(getLanguageQuery, (languageId,)) row = cur.fetchone() print(row) if not row: return -1 else: return row except Exception as e: current_app.logger.error(f"Database error while retrieving languages: {e}") return False def insertLanguage(languageCode: str) -> bool | int: getLanguageQuery = ( """SELECT id from language WHERE UPPER(language_code) = UPPER(%s)""" ) InsertLanguageQuery = """INSERT INTO language (language_code) VALUES (%s) RETURNING id;""" try: with current_app.db_pool.connection() as conn: with conn.cursor() as cur: cur.execute(getLanguageQuery, (languageCode,)) row = cur.fetchone() if row: return -1 else: cur.execute(InsertLanguageQuery, (languageCode,)) language_id = cur.fetchone()[0] conn.commit() return language_id except Exception as e: current_app.logger.error(f"Database error while inserting language: {e}") return False def deleteLanguage(languageId: int) -> bool: deleteLanguagesQuery = """DELETE FROM language WHERE id = %s""" try: with current_app.db_pool.connection() as conn: with conn.cursor() as cur: cur.execute(deleteLanguagesQuery, (languageId,)) conn.commit() return True except Exception as e: current_app.logger.error(f"Database error while retrieving languages: {e}") return False