Commit ec76f023 authored by Guillermo Sanz López's avatar Guillermo Sanz López
Browse files

backend pagination

parent a04e3edc
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -41,6 +41,15 @@ def get_num_ixnvokers():
def get_providers():
    return operations.get_providers()

# GET /resources/providers?page=1&page_size=10
@cross_origin()
@backoffice_routes.route("/resources/providersPages", methods=["GET"])
@jwt_required()
def get_providersPages():
    page = request.args.get('page', default=1, type=int)
    page_size = request.args.get('pageSize', default=10, type=int)
    return operations.get_providers_pages(page, page_size)

@cross_origin()
@backoffice_routes.route("/resources/numProviders", methods=["GET"])
@jwt_required()
@@ -91,6 +100,15 @@ def get_capif_users():
        return jsonify(message="Invalid id", object=None), 400
    return operations.get_users()

# GET /resources/users?page=1&page_size=10
@cross_origin()
@backoffice_routes.route("/resources/usersPagesRetrieve", methods=["GET"])
@jwt_required()
def get_users_pages():
    page = request.args.get('page', default=1, type=int)
    page_size = request.args.get('pageSize', default=10, type=int)
    return operations.retrieve_users_pages(page, page_size)

@cross_origin()
@backoffice_routes.route("/resources/numUsers", methods=["GET"])
@jwt_required()
@@ -153,6 +171,14 @@ def delete_user(username, password):
def get_apis():
    return operations.get_apis()

@cross_origin()
@backoffice_routes.route("/apisPages", methods=["GET"])
@jwt_required()
def get_apis_pages():
    page = request.args.get('page', default=1, type=int)
    page_size = request.args.get('pageSize', default=10, type=int)
    return operations.get_apis_pages(page, page_size)

@cross_origin()
@backoffice_routes.route("/apis/num", methods=["GET"])
@jwt_required()
+144 −0
Original line number Diff line number Diff line
@@ -152,6 +152,51 @@ class Operations:

        return json_providers
    
    def get_providers_pages(self, page, page_size):
        try:
            # Obtener el total de providers
            total_providers = self.db.get_col_by_name(self.db.providers).count_documents({})

            # Calcular el índice de inicio y fin para la paginación
            start_index = (page - 1) * page_size
            end_index = start_index + page_size

            # Validar los parámetros
            if page <= 0 or page_size <= 0:
                return jsonify({"error": "Los parámetros 'page' y 'page_size' deben ser valores positivos."}), 400

            # Obtener los providers para la página actual
            providers_cursor = self.db.get_col_by_name(self.db.providers).find({}, {"_id": 0, "fail_reason": 0, "reg_sec": 0, "supp_feat": 0, "api_prov_funcs[0].reg_info": 0, "api_prov_funcs[1].reg_info": 0, "api_prov_funcs[2].reg_info": 0 }).skip(start_index).limit(page_size)
            providers = list(providers_cursor)

            users = self.retrieve_users()
            json_providers = []
            for provider in providers:
                provider_aux = copy.deepcopy(provider)
                for user in users:
                    if provider["api_prov_dom_id"] in user["list_providers"]:
                        provider_aux["username"] = user["username"]
                json_providers.append(provider_aux)

            json_providers = self.rearrange_api_prov_funcs(json_providers)

            # Calcular el número total de páginas
            total_pages = (total_providers + page_size - 1) // page_size

            long_data = len(json_providers)

            # Construir el objeto de respuesta
            response = {
                "data": json_providers,
                "long": long_data,
                "total": total_providers,
                "totalPages": total_pages
            }

            return jsonify(response), 200
        except Exception as e:
            return "Error when retrieving provider list: ", e
    
    def rearrange_api_prov_funcs(self, providers):
        for provider in providers:
            # Inicializamos una lista para almacenar los elementos reordenados
@@ -243,6 +288,75 @@ class Operations:

        return json_users
    
    def retrieve_users_pages(self, page, page_size):
        try:
            # Obtener el total de users
            total_users = self.db.get_col_by_name_register(self.db.user).count_documents({})

            # Calcular el índice de inicio para la paginación
            start_index = (page - 1) * page_size

            # Validar los parámetros
            if page <= 0 or page_size <= 0:
                return jsonify({"error": "Los parámetros 'page' y 'page_size' deben ser valores positivos."}), 400

            # Obtener los users para la página actual
            users = self.db.get_col_by_name_register(self.db.user).find({}, {"_id": 0}).skip(start_index).limit(page_size)

            json_users = []
            for user in users:
                json_users.append(user)

            # Calcular el número total de páginas
            total_pages =(total_users + page_size - 1) // page_size

            # Construir el objeto de respuesta
            response = {
                "data": json_users,
                "total": total_users,
                "totalPages": total_pages
            }

            return jsonify(response), 200
    
        except Exception as e:
            return "Error when retrieving user list: ", e
    
    def get_users_pages(self, page, page_size):
        try:
            # Obtener el total de users
            total_users = self.db.get_col_by_name_register(self.db.user).count_documents({})

            # Calcular el índice de inicio para la paginación
            start_index = (page - 1) * page_size

            # Validar los parámetros
            if page <= 0 or page_size <= 0:
                return jsonify({"error": "Los parámetros 'page' y 'page_size' deben ser valores positivos."}), 400

            # Obtener los users para la página actual
            users_cursor = self.db.get_col_by_name_register(self.db.user).find({}, {"_id": 0}).skip(start_index).limit(page_size)
            users = list(users_cursor)

            json_users = []
            for user in users_cursor:
                json_users.append(user)

            
            # Calcular el número total de páginas
            total_pages = (total_pages + page_size - 1) // page_size

            # Construir el objeto de respuesta
            response = {
                "data": json_users,
                "total": total_users,
                "totalPages": total_pages
            }

            return jsonify(response), 200
        except Exception as e:
            return "Error when retrieving user list: ", e
        
    
    def delete_invoker(self, invoker_id):
        try:
@@ -354,6 +468,36 @@ class Operations:
        except Exception as e:
            return "Error when retrieving apis list: ", e
        
    def get_apis_pages(self, page, page_size):
        try:   
            mycol = self.db.get_col_by_name(self.db.services)
            total_apis = mycol.count_documents({})

            start_index = (page - 1) * page_size

            # Validar los parámetros
            if page <= 0 or page_size <= 0:
                return jsonify({"error": "Los parámetros 'page' y 'page_size' deben ser valores positivos."}), 400
            
            apis = mycol.find({}, {"_id": 0, "data_format": 0, "api_supp_feats": 0, "ccf_id": 0, "pub_api_path": 0, "service_api_category": 0, "shareable_info": 0, "supported_features": 0}).skip(start_index).limit(page_size)

            json_apis = []
            for api in apis:
                json_apis.append(api)

            total_pages = (total_apis + page_size - 1) // page_size

            response = {
                "data": json_apis,
                "total": total_apis,
                "totalPages": total_pages
            }

            return jsonify(response), 200
        
        except Exception as e:
            return "Error when retrieving apis list: ", e
    
    def get_apis_cont(self):
        mycol = self.db.get_col_by_name(self.db.services)
        apis = mycol.find({}, {"_id": 0})