From a1a1777236a352c43768342b95feadb8acb72405 Mon Sep 17 00:00:00 2001
From: Mohammad Torkashvand <mohammad.torkashvand@geant.org>
Date: Thu, 24 Aug 2023 09:56:11 +0200
Subject: [PATCH] refactor api app to make it compatible with v1 version

---
 gso/api/__init__.py                         |  7 +++++++
 gso/api/api_v1/__init__.py                  |  0
 gso/api/api_v1/api.py                       | 10 ----------
 gso/api/api_v1/endpoints/__init__.py        |  0
 gso/api/v1/__init__.py                      |  7 +++++++
 gso/api/{api_v1/endpoints => v1}/imports.py |  9 +++++----
 gso/main.py                                 |  2 +-
 test/test_imports.py                        |  4 ++--
 8 files changed, 22 insertions(+), 17 deletions(-)
 delete mode 100644 gso/api/api_v1/__init__.py
 delete mode 100644 gso/api/api_v1/api.py
 delete mode 100644 gso/api/api_v1/endpoints/__init__.py
 create mode 100644 gso/api/v1/__init__.py
 rename gso/api/{api_v1/endpoints => v1}/imports.py (91%)

diff --git a/gso/api/__init__.py b/gso/api/__init__.py
index e69de29bb..f30090d3e 100644
--- a/gso/api/__init__.py
+++ b/gso/api/__init__.py
@@ -0,0 +1,7 @@
+from fastapi import APIRouter
+
+from gso.api.v1 import router as router_v1
+
+router = APIRouter()
+
+router.include_router(router_v1, prefix="/v1")
diff --git a/gso/api/api_v1/__init__.py b/gso/api/api_v1/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/gso/api/api_v1/api.py b/gso/api/api_v1/api.py
deleted file mode 100644
index b7ba2d520..000000000
--- a/gso/api/api_v1/api.py
+++ /dev/null
@@ -1,10 +0,0 @@
-"""Module that implements process related API endpoints."""
-
-from fastapi.param_functions import Depends
-from fastapi.routing import APIRouter
-from orchestrator.security import opa_security_default
-
-from gso.api.api_v1.endpoints import imports
-
-api_router = APIRouter()
-api_router.include_router(imports.router, prefix="/imports", dependencies=[Depends(opa_security_default)])
diff --git a/gso/api/api_v1/endpoints/__init__.py b/gso/api/api_v1/endpoints/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/gso/api/v1/__init__.py b/gso/api/v1/__init__.py
new file mode 100644
index 000000000..89fd2c8eb
--- /dev/null
+++ b/gso/api/v1/__init__.py
@@ -0,0 +1,7 @@
+from fastapi import APIRouter
+
+from gso.api.v1.imports import router as imports_router
+
+router = APIRouter()
+
+router.include_router(imports_router)
diff --git a/gso/api/api_v1/endpoints/imports.py b/gso/api/v1/imports.py
similarity index 91%
rename from gso/api/api_v1/endpoints/imports.py
rename to gso/api/v1/imports.py
index c83b0919d..383901a6c 100644
--- a/gso/api/api_v1/endpoints/imports.py
+++ b/gso/api/v1/imports.py
@@ -2,8 +2,9 @@ import ipaddress
 from typing import Any, Dict, Optional
 from uuid import UUID
 
-from fastapi import HTTPException, status
+from fastapi import Depends, HTTPException, status
 from fastapi.routing import APIRouter
+from orchestrator.security import opa_security_default
 from orchestrator.services import processes, subscriptions
 from pydantic import BaseModel
 from sqlalchemy.exc import MultipleResultsFound
@@ -11,7 +12,7 @@ from sqlalchemy.exc import MultipleResultsFound
 from gso.products.product_blocks.router import RouterRole, RouterVendor
 from gso.products.product_blocks.site import SiteTier
 
-router = APIRouter()
+router = APIRouter(prefix="/imports", tags=["Import"], dependencies=[Depends(opa_security_default)])
 
 
 def start_process(process_name: str, data: dict) -> UUID:
@@ -45,7 +46,7 @@ class SiteImport(BaseModel):
     customer: str
 
 
-@router.post("/sites", status_code=status.HTTP_201_CREATED, tags=["Import"])
+@router.post("/sites", status_code=status.HTTP_201_CREATED)
 def import_site(site: SiteImport) -> Dict[str, Any]:
     """Import site by running the import_site workflow.
 
@@ -90,7 +91,7 @@ class RouterImportModel(BaseModel):
     router_ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None
 
 
-@router.post("/routers", status_code=status.HTTP_201_CREATED, tags=["Import"])
+@router.post("/routers", status_code=status.HTTP_201_CREATED)
 def import_router(router_data: RouterImportModel) -> Dict[str, Any]:
     """Import a router by running the import_router workflow.
 
diff --git a/gso/main.py b/gso/main.py
index 9c8223bb7..e05aac889 100644
--- a/gso/main.py
+++ b/gso/main.py
@@ -7,7 +7,7 @@ from orchestrator.settings import AppSettings
 import gso.products  # noqa: F401
 import gso.workflows  # noqa: F401
 from gso import load_gso_cli
-from gso.api.api_v1.api import api_router
+from gso.api import router as api_router
 
 
 def init_gso_app(settings: AppSettings) -> OrchestratorCore:
diff --git a/test/test_imports.py b/test/test_imports.py
index e89341aa9..768673baf 100644
--- a/test/test_imports.py
+++ b/test/test_imports.py
@@ -12,8 +12,8 @@ class TestImportEndpoints:
     def setup(self, test_client):
         self.faker = Faker()
         self.client = test_client
-        self.site_import_endpoint = "/api/imports/sites"
-        self.router_import_endpoint = "/api/imports/routers"
+        self.site_import_endpoint = "/api/v1/imports/sites"
+        self.router_import_endpoint = "/api/v1/imports/routers"
         self.site_data = {
             "site_name": self.faker.name(),
             "site_city": self.faker.city(),
-- 
GitLab