from datetime import datetime from typing import List, Optional from fastapi import APIRouter, Depends from loguru import logger from app.common.models import CodeDepotDoc from app.common.models.deployment.deployment import Deployment, InitDeploymentRequest, CheckDeploymentStatusRequest, \ CheckApplicationLogsRequest, CheckApplicationLogsResponse from app.routes.deployment.service import DeploymentService, get_deployment_service router = APIRouter(prefix="/deployment") @router.post("/initDeployment") ## insert a new Deployment object to db async def init_deployment( request: InitDeploymentRequest, service: DeploymentService = Depends(get_deployment_service) ) -> Deployment: return await service.init_deployment(request) @router.get('/getLatestDeployment') async def get_latest_deployment( product_id: str, target_env: str = "alpha", service: DeploymentService = Depends(get_deployment_service) ) -> Optional[Deployment]: """ Get the latest deployment for a given product ID. """ return await service.get_latest_deployment(product_id, target_env) @router.post("/updateDeploymentStatus") async def update_deployment( request: Deployment, service: DeploymentService = Depends(get_deployment_service) ) -> Deployment: return await service.update_deployment_status(request) @router.get("/checkDeploymentStatus") async def check_deployment_status( deployment_id: str, service: DeploymentService = Depends(get_deployment_service) ) -> List[Deployment]: return await service.check_deployment_status(deployment_id) @router.post("/createDummyCodeDepot") async def create_dummy_code_depot( service: DeploymentService = Depends(get_deployment_service) ) -> CodeDepotDoc: """ Create a dummy code depot for testing purposes. """ try: depot_name = await service.create_dummy_code_depot() return depot_name except Exception as e: logger.error(f"Failed to create dummy code depot: {e}") raise e @router.post("/checkApplicationLogs") async def check_application_logs( request: CheckApplicationLogsRequest, service: DeploymentService = Depends(get_deployment_service) ) -> CheckApplicationLogsResponse: """ Check application logs for a given deployment. """ try: res = await service.check_application_logs(request) return res except Exception as e: logger.error(f"Failed to check application logs: {e}") raise e