123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- from flask import request
- from flask_login import login_required
- from flask_restful import Resource, marshal, marshal_with, reqparse
- from werkzeug.exceptions import NotFound
- from controllers.console import api
- from controllers.console.wraps import account_initialization_required, setup_required
- from fields.external_application_fields import external_application_fields
- from models.external_application import ExternalApplication
- from services.external_application_service import ExternalApplicationService
- class ExternalApplicationListApi(Resource):
- @setup_required
- @login_required
- @account_initialization_required
- def get(self):
- page = request.args.get("page", default=1, type=int)
- limit = request.args.get("limit", default=20, type=int)
- search = request.args.get("search", default=None, type=str)
- type = request.args.get("type", default=None, type=str)
- url = request.args.get("url", default=None, type=str)
- method = request.args.get("method", default=None, type=str)
- external_applications, total = ExternalApplicationService.get_external_applications(
- page, limit, search, type, url, method
- )
- data = marshal(external_applications, external_application_fields)
- response = {
- "data": data,
- "has_more": len(external_applications) == limit,
- "limit": limit,
- "total": total,
- "page": page,
- }
- return response, 200
- @setup_required
- @login_required
- @account_initialization_required
- @marshal_with(external_application_fields)
- def post(self):
- parser = reqparse.RequestParser()
- parser.add_argument(
- "name", location="json", nullable=False, required=True, help="Name must be between 1 to 50 characters."
- )
- parser.add_argument(
- "type",
- type=str,
- location="json",
- choices=ExternalApplication.EXTERNAL_APPLICATION_TYPE_LIST,
- nullable=False,
- help="Invalid external_application type.",
- )
- parser.add_argument("url", type=str, location="json", nullable=False, help="Invalid external_application url.")
- parser.add_argument(
- "method", type=str, location="json", nullable=False, help="Invalid external_application method."
- )
- parser.add_argument(
- "status", type=bool, location="json", nullable=False, help="Invalid external_application status."
- )
- args = parser.parse_args()
- external_application = ExternalApplicationService.save_external_application(args)
- return external_application, 200
- class ExternalApplicationApi(Resource):
- @setup_required
- @login_required
- @account_initialization_required
- @marshal_with(external_application_fields)
- def get(self, external_application_id):
- external_application = ExternalApplicationService.get_external_application(external_application_id)
- if not external_application:
- raise NotFound(f"ExternalApplication with id {id} not found.")
- return external_application, 200
- @setup_required
- @login_required
- @account_initialization_required
- @marshal_with(external_application_fields)
- def patch(self, external_application_id):
- external_application_id = str(external_application_id)
- parser = reqparse.RequestParser()
- parser.add_argument(
- "name", location="json", nullable=False, required=True, help="Name must be between 1 to 50 characters."
- )
- parser.add_argument(
- "type", type=str, location="json", nullable=False, help="Invalid external_application type."
- )
- parser.add_argument("url", type=str, location="json", nullable=False, help="Invalid external_application url.")
- parser.add_argument(
- "method", type=str, location="json", nullable=False, help="Invalid external_application method."
- )
- parser.add_argument(
- "status", type=bool, location="json", nullable=False, help="Invalid external_application status."
- )
- args = parser.parse_args()
- external_application = ExternalApplicationService.update_external_application(args, external_application_id)
- return external_application, 200
- @setup_required
- @login_required
- @account_initialization_required
- def delete(self, external_application_id):
- external_application_id = str(external_application_id)
- ExternalApplicationService.delete_external_application(external_application_id)
- return 200
- api.add_resource(ExternalApplicationListApi, "/external_applications")
- api.add_resource(ExternalApplicationApi, "/external_applications/<external_application_id>")
|