From a3f935df2a8078e4d45039b96d5582c99ca18278 Mon Sep 17 00:00:00 2001 From: lhx Date: Sat, 27 Sep 2025 14:20:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=AD=97=E6=AE=B5=E5=90=8D?= =?UTF-8?q?=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/schemas/account.py | 24 +++++++++++++++++++----- app/services/account.py | 29 +++++++++++++++++------------ 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/app/schemas/account.py b/app/schemas/account.py index 4a31322..14e1081 100644 --- a/app/schemas/account.py +++ b/app/schemas/account.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, ConfigDict, field_serializer from typing import Optional from datetime import datetime @@ -20,13 +20,27 @@ class AccountUpdate(BaseModel): project_name: Optional[str] = None class AccountResponse(AccountBase): - account_id: int = Field(alias="id") + account_id: int created_at: datetime updated_at: datetime - class Config: - from_attributes = True - populate_by_name = True + model_config = ConfigDict( + from_attributes=True + ) + + @classmethod + def from_orm_account(cls, account): + """从ORM对象创建响应对象""" + return cls( + account_id=account.id, + username=account.username, + password=account.password, + status=account.status, + today_updated=account.today_updated, + project_name=account.project_name, + created_at=account.created_at, + updated_at=account.updated_at + ) class AccountListRequest(BaseModel): skip: Optional[int] = 0 diff --git a/app/services/account.py b/app/services/account.py index 6a69001..02c228a 100644 --- a/app/services/account.py +++ b/app/services/account.py @@ -1,22 +1,22 @@ from sqlalchemy.orm import Session from ..models.account import Account -from ..schemas.account import AccountCreate, AccountUpdate +from ..schemas.account import AccountCreate, AccountUpdate, AccountResponse from typing import List, Optional class AccountService: @staticmethod - def create_account(db: Session, account_data: AccountCreate) -> Account: + def create_account(db: Session, account_data: AccountCreate) -> AccountResponse: """创建账号""" db_account = Account(**account_data.dict()) db.add(db_account) db.commit() db.refresh(db_account) - return db_account + return AccountResponse.from_orm_account(db_account) @staticmethod def search_accounts(db: Session, account_id: Optional[int] = None, username: Optional[str] = None, project_name: Optional[str] = None, - status: Optional[int] = None, today_updated: Optional[int] = None) -> List[Account]: + status: Optional[int] = None, today_updated: Optional[int] = None) -> List[AccountResponse]: """根据多种条件搜索账号""" query = db.query(Account) @@ -31,12 +31,16 @@ class AccountService: if today_updated is not None: query = query.filter(Account.today_updated == today_updated) - return query.all() + accounts = query.all() + return [AccountResponse.from_orm_account(account) for account in accounts] @staticmethod - def get_account(db: Session, account_id: int) -> Optional[Account]: + def get_account(db: Session, account_id: int) -> Optional[AccountResponse]: """根据ID获取账号""" - return db.query(Account).filter(Account.id == account_id).first() + account = db.query(Account).filter(Account.id == account_id).first() + if account: + return AccountResponse.from_orm_account(account) + return None @staticmethod def get_account_by_username(db: Session, username: str) -> Optional[Account]: @@ -44,12 +48,13 @@ class AccountService: return db.query(Account).filter(Account.username == username).first() @staticmethod - def get_accounts(db: Session, skip: int = 0, limit: int = 100) -> List[Account]: + def get_accounts(db: Session, skip: int = 0, limit: int = 100) -> List[AccountResponse]: """获取账号列表""" - return db.query(Account).offset(skip).limit(limit).all() + accounts = db.query(Account).offset(skip).limit(limit).all() + return [AccountResponse.from_orm_account(account) for account in accounts] @staticmethod - def update_account(db: Session, account_id: int, account_data: AccountUpdate) -> Optional[Account]: + def update_account(db: Session, account_id: int, account_data: AccountUpdate) -> Optional[AccountResponse]: """更新账号""" db_account = db.query(Account).filter(Account.id == account_id).first() if db_account: @@ -58,8 +63,8 @@ class AccountService: setattr(db_account, field, value) db.commit() db.refresh(db_account) - - return db_account + return AccountResponse.from_orm_account(db_account) + return None @staticmethod def delete_account(db: Session, account_id: int) -> bool: