Files
railway_cloud/app/api/account.py
2026-02-03 15:10:30 +08:00

127 lines
4.3 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import List
from ..core.database import get_db
from ..core.response_code import ResponseCode, ResponseMessage
from ..schemas.account import (
AccountCreate, AccountUpdate, AccountResponse,
AccountListRequest, AccountGetRequest, AccountUpdateRequest, AccountDeleteRequest,
AccountApiResponse, AccountListResponse,AccountGetRequestYH
)
from ..services.account import AccountService
router = APIRouter(prefix="/accounts", tags=["账号管理"])
@router.post("/create", response_model=AccountApiResponse, status_code=status.HTTP_201_CREATED)
def create_account(account: AccountCreate, db: Session = Depends(get_db)):
"""创建账号"""
# 检查账号是否已存在
existing_account = AccountService.get_account_by_username(db, account.username)
if existing_account:
return AccountApiResponse(
code=ResponseCode.ACCOUNT_EXISTS,
message=ResponseMessage.ACCOUNT_EXISTS,
data=None
)
account_response = AccountService.create_account(db, account)
return AccountApiResponse(
code=ResponseCode.SUCCESS,
message="账号创建成功",
data=account_response.dict()
)
@router.post("/list", response_model=AccountListResponse)
def get_accounts(request: AccountListRequest, db: Session = Depends(get_db)):
"""获取账号列表"""
accounts = AccountService.get_accounts(db, skip=request.skip, limit=request.limit)
return AccountListResponse(
code=ResponseCode.SUCCESS,
message="查询成功",
total=len(accounts),
data=accounts
)
@router.post("/get", response_model=AccountListResponse)
def get_account(request: AccountGetRequest, db: Session = Depends(get_db)):
"""根据多种条件查询账号"""
accounts = AccountService.search_accounts(
db,
account_id=request.account_id,
username=request.username,
project_name=request.project_name,
status=request.status,
today_updated=request.today_updated,
yh_id=request.yh_id,
cl_name=request.cl_name
)
if not accounts:
return AccountListResponse(
code=ResponseCode.ACCOUNT_NOT_FOUND,
message=ResponseMessage.ACCOUNT_NOT_FOUND,
total=0,
data=[]
)
return AccountListResponse(
code=ResponseCode.SUCCESS,
message="查询成功",
total=len(accounts),
data=accounts
)
# 宇恒一号特定查询接口
@router.post("/get/yh", response_model=AccountListResponse)
def get_account(request: AccountGetRequestYH, db: Session = Depends(get_db)):
"""根据多种条件查询账号"""
accounts = AccountService.search_accounts(
db,
project_name=request.project_name,
yh_id=request.yh_id
)
if not accounts:
return AccountListResponse(
code=ResponseCode.ACCOUNT_NOT_FOUND,
message=ResponseMessage.ACCOUNT_NOT_FOUND,
total=0,
data=[]
)
return AccountListResponse(
code=ResponseCode.SUCCESS,
message="查询成功",
total=len(accounts),
data=accounts
)
@router.post("/update", response_model=AccountApiResponse)
def update_account(request: AccountUpdateRequest, db: Session = Depends(get_db)):
"""更新账号"""
account = AccountService.update_account(db, request.account_id, request.account_data)
if not account:
return AccountApiResponse(
code=ResponseCode.ACCOUNT_NOT_FOUND,
message=ResponseMessage.ACCOUNT_NOT_FOUND,
data=None
)
return AccountApiResponse(
code=ResponseCode.SUCCESS,
message="账号更新成功",
data=account.dict()
)
@router.post("/delete", response_model=AccountApiResponse)
def delete_account(request: AccountDeleteRequest, db: Session = Depends(get_db)):
"""删除账号"""
if not AccountService.delete_account(db, request.account_id):
return AccountApiResponse(
code=ResponseCode.ACCOUNT_NOT_FOUND,
message=ResponseMessage.ACCOUNT_NOT_FOUND,
data=None
)
return AccountApiResponse(
code=ResponseCode.SUCCESS,
message="账号删除成功",
data=None
)