From ab063716fadb545bf1a91ee62e2ed914d9b759b3 Mon Sep 17 00:00:00 2001 From: LanternNassi Date: Mon, 22 Jul 2024 11:05:28 +0300 Subject: [PATCH] Add projects generic schema --- api_docs.yml | 27 +++++++++++++++++++++++++++ app/controllers/__init__.py | 1 + app/controllers/generic_search.py | 23 +++++++++++++++++++++++ app/routes/__init__.py | 5 ++++- 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 app/controllers/generic_search.py diff --git a/api_docs.yml b/api_docs.yml index 7882e584..8146be50 100644 --- a/api_docs.yml +++ b/api_docs.yml @@ -3853,6 +3853,33 @@ paths: 500: description: "Internal Server Error" + "/search": + get: + tags: + - generic + consumes: + - application/json + parameters: + - in: header + name: Authorization + required: true + type: string + - in: query + name: keywords + type: string + description: Kyewords to search + + produces: + - application/json + responses: + 200: + description: "Success" + 400: + description: "Bad request" + 500: + description: "Internal Server Error" + + components: securitySchemes: bearerAuth: diff --git a/app/controllers/__init__.py b/app/controllers/__init__.py index 0041a900..62e45e34 100644 --- a/app/controllers/__init__.py +++ b/app/controllers/__init__.py @@ -31,3 +31,4 @@ from .project_users import ProjectUsersView, ProjectUsersTransferView, ProjectUsersHandleInviteView, ProjectFollowingView from .activity_feed import ActivityFeedView from .tags import TagsView, TagsDetailView, TagFollowingView +from .generic_search import GenericSearchView diff --git a/app/controllers/generic_search.py b/app/controllers/generic_search.py new file mode 100644 index 00000000..f45a7d28 --- /dev/null +++ b/app/controllers/generic_search.py @@ -0,0 +1,23 @@ +from app.models.project import Project +from app.schemas.project import ProjectListSchema +from flask import current_app +from flask_restful import Resource, request +from app.models.project import Project +from flask_jwt_extended import jwt_required +import json + + +class GenericSearchView(Resource): + @jwt_required + def get(self): + keywords = request.args.get('keywords', '') + + #Schemas + projectSchema = ProjectListSchema(many=True) + + # projects + projects = Project.query.filter(Project.name.ilike('%'+keywords+'%')).order_by(Project.date_created.desc()) + + project_data , errors = projectSchema.dumps(projects) + + return dict(projects=json.loads(project_data)) , 200 \ No newline at end of file diff --git a/app/routes/__init__.py b/app/routes/__init__.py index 167cc88e..5f82fe1e 100644 --- a/app/routes/__init__.py +++ b/app/routes/__init__.py @@ -14,7 +14,7 @@ UserAdminUpdateView, AppRevertView, ProjectGetCostsView, TransactionRecordView, CreditTransactionRecordView, CreditPurchaseTransactionRecordView, BillingInvoiceView, BillingInvoiceNotificationView, SystemSummaryView, CreditDetailView, ProjectUsersView, ProjectUsersTransferView, AppReviseView, ProjectUsersHandleInviteView, ClusterProjectsView, ProjectDisableView, ProjectEnableView, AppRedeployView, AppDisableView, AppEnableView, - TagsView, TagsDetailView, TagFollowingView, + TagsView, TagsDetailView, TagFollowingView,GenericSearchView, UserDisableView, UserEnableView, AppDockerWebhookListenerView, UserFollowersView, UserFollowView, ProjectFollowingView, ActivityFeedView) from app.controllers.app import AppRevisionsView from app.controllers.billing_invoice import BillingInvoiceDetailView @@ -52,6 +52,9 @@ # Deployments api.add_resource(DeploymentsView, '/deployments', endpoint='deployments') +#Generic search +api.add_resource(GenericSearchView, '/search') + # Clusters api.add_resource(ClustersView, '/clusters', endpoint='clusters') api.add_resource(ClusterDetailView, '/clusters/')