from datetime import datetime from typing import Annotated from fastapi import Path, Query, Request, Response from sqlalchemy.ext.asyncio import AsyncSession from common.annotation.log_annotation import Log from common.aspect.db_seesion import DBSessionDependency from common.aspect.interface_auth import UserInterfaceAuthDependency from common.aspect.pre_auth import CurrentUserDependency, PreAuthDependency from common.enums import BusinessType from common.router import APIRouterPro from common.vo import DataResponseModel, PageResponseModel, ResponseBaseModel from module_admin.entity.vo.user_vo import CurrentUserModel from module_business.dependency.test_batch_dependency import TestBatchScopeDependency from module_business.domain.test_batch_scope import TestBatchScope from module_business.entity.vo.master_vo import DeleteTunnelModel, TunnelModel, TunnelPageQueryModel from module_business.service.master_service import MasterService from utils.response_util import ResponseUtil tunnel_controller = APIRouterPro( prefix='/master/tunnel', tags=['基础资料-隧道管理'], dependencies=[PreAuthDependency()], ) @tunnel_controller.get( '/list', summary='获取隧道分页列表接口', description='用于获取客户现场隧道分页列表', response_model=PageResponseModel[TunnelModel], dependencies=[UserInterfaceAuthDependency('master:tunnel:list')], ) async def get_master_tunnel_list( request: Request, tunnel_page_query: Annotated[TunnelPageQueryModel, Query()], query_db: Annotated[AsyncSession, DBSessionDependency()], scope: Annotated[TestBatchScope, TestBatchScopeDependency()], ) -> Response: result = await MasterService.list_tunnel(query_db, tunnel_page_query, scope, is_page=True) return ResponseUtil.success(model_content=result) @tunnel_controller.get( '/{tunnel_id}', summary='获取隧道详情接口', description='用于获取指定隧道的详细信息', response_model=DataResponseModel[TunnelModel], dependencies=[UserInterfaceAuthDependency('master:tunnel:query')], ) async def query_detail_master_tunnel( request: Request, tunnel_id: Annotated[int, Path(gt=0, description='隧道ID')], query_db: Annotated[AsyncSession, DBSessionDependency()], scope: Annotated[TestBatchScope, TestBatchScopeDependency()], ) -> Response: result = await MasterService.detail_tunnel(query_db, tunnel_id, scope) return ResponseUtil.success(data=result) @tunnel_controller.post( '', summary='新增隧道接口', description='用于新增客户现场隧道', response_model=ResponseBaseModel, dependencies=[UserInterfaceAuthDependency('master:tunnel:add')], ) @Log(title='隧道管理', business_type=BusinessType.INSERT) async def add_master_tunnel( request: Request, add_tunnel: TunnelModel, query_db: Annotated[AsyncSession, DBSessionDependency()], current_user: Annotated[CurrentUserModel, CurrentUserDependency()], scope: Annotated[TestBatchScope, TestBatchScopeDependency(write=True)], ) -> Response: current_time = datetime.now() add_tunnel.create_by = current_user.user.user_name add_tunnel.create_time = current_time add_tunnel.update_by = current_user.user.user_name add_tunnel.update_time = current_time result = await MasterService.add_tunnel(query_db, add_tunnel, current_user, scope) return ResponseUtil.success(msg=result.message) @tunnel_controller.put( '', summary='编辑隧道接口', description='用于编辑客户现场隧道', response_model=ResponseBaseModel, dependencies=[UserInterfaceAuthDependency('master:tunnel:edit')], ) @Log(title='隧道管理', business_type=BusinessType.UPDATE) async def edit_master_tunnel( request: Request, edit_tunnel: TunnelModel, query_db: Annotated[AsyncSession, DBSessionDependency()], current_user: Annotated[CurrentUserModel, CurrentUserDependency()], scope: Annotated[TestBatchScope, TestBatchScopeDependency(write=True)], ) -> Response: edit_tunnel.update_by = current_user.user.user_name edit_tunnel.update_time = datetime.now() result = await MasterService.edit_tunnel(query_db, edit_tunnel, current_user, scope) return ResponseUtil.success(msg=result.message) @tunnel_controller.delete( '/{tunnel_ids}', summary='兼容旧接口,固定拒绝,请使用测试数据批次清理', description='兼容旧接口,固定拒绝单条物理删除,请使用测试数据批次清理', response_model=ResponseBaseModel, dependencies=[UserInterfaceAuthDependency('master:tunnel:remove')], ) @Log(title='隧道管理', business_type=BusinessType.DELETE) async def delete_master_tunnel( request: Request, tunnel_ids: Annotated[ str, Path(pattern=r'^[1-9]\d*(,[1-9]\d*)*$', description='需要删除的隧道ID'), ], query_db: Annotated[AsyncSession, DBSessionDependency()], current_user: Annotated[CurrentUserModel, CurrentUserDependency()], ) -> Response: delete_tunnel = DeleteTunnelModel(tunnelIds=[int(tunnel_id) for tunnel_id in tunnel_ids.split(',')]) result = await MasterService.remove_tunnel(query_db, delete_tunnel) return ResponseUtil.success(msg=result.message)