diff --git a/app/service/callback_rest.py b/app/service/callback_rest.py index 4c177bab4..7a71c34ae 100644 --- a/app/service/callback_rest.py +++ b/app/service/callback_rest.py @@ -10,6 +10,7 @@ from app.errors import ( ) from app.models import ( ServiceInboundApi, + ServiceCallbackApi ) from app.schema_validation import validate from app.service.service_callback_api_schema import ( @@ -21,6 +22,11 @@ from app.dao.service_inbound_api_dao import ( get_service_inbound_api, reset_service_inbound_api ) +from app.dao.service_callback_api_dao import ( + save_service_callback_api, + get_service_callback_api, + reset_service_callback_api +) service_callback_blueprint = Blueprint('service_callback', __name__, url_prefix='/service/') @@ -62,17 +68,52 @@ def fetch_service_inbound_api(service_id, inbound_api_id): return jsonify(data=inbound_api.serialize()), 200 +@service_callback_blueprint.route('/service-callback-api', methods=['POST']) +def create_service_callback_api(service_id): + data = request.get_json() + validate(data, create_service_callback_api_schema) + data["service_id"] = service_id + callback_api = ServiceCallbackApi(**data) + try: + save_service_callback_api(callback_api) + except SQLAlchemyError as e: + return handle_sql_error(e) + + return jsonify(data=callback_api.serialize()), 201 + + +@service_callback_blueprint.route('/service-callback-api/', methods=['POST']) +def update_service_callback_api(service_id, callback_api_id): + data = request.get_json() + validate(data, update_service_callback_api_schema) + + to_update = get_service_callback_api(callback_api_id, service_id) + + reset_service_callback_api(service_callback_api=to_update, + updated_by_id=data["updated_by_id"], + url=data.get("url", None), + bearer_token=data.get("bearer_token", None)) + return jsonify(data=to_update.serialize()), 200 + + +@service_callback_blueprint.route('/service-callback-api/', methods=["GET"]) +def fetch_service_callback_api(service_id, callback_api_id): + callback_api = get_service_callback_api(callback_api_id, service_id) + + return jsonify(data=callback_api.serialize()), 200 + + def handle_sql_error(e): if hasattr(e, 'orig') and hasattr(e.orig, 'pgerror') and e.orig.pgerror \ - and ('duplicate key value violates unique constraint "ix_service_inbound_api_service_id"' + and ('duplicate key value violates unique constraint "ix_service_callback_api_service_id"' in e.orig.pgerror): return jsonify( result='error', message={'name': ["You can only have one URL and bearer token for your service."]} ), 400 elif hasattr(e, 'orig') and hasattr(e.orig, 'pgerror') and e.orig.pgerror \ - and ('insert or update on table "service_inbound_api" violates ' - 'foreign key constraint "service_inbound_api_service_id_fkey"' + and ('insert or update on table "service_callback_api" violates ' + 'foreign key constraint "service_callback_api_service_id_fkey"' in e.orig.pgerror): return jsonify(result='error', message="No result found"), 404 else: